/* SPDX-License-Identifier: GPL-2.0+ */ /* * (C) Copyright 2011 * Graeme Russ, */ #ifndef _RELOCATE_H_ #define _RELOCATE_H_ #ifndef USE_HOSTCC #include DECLARE_GLOBAL_DATA_PTR; #endif /** * copy_uboot_to_ram() - Copy U-Boot to its new relocated position * * Return: 0 if OK, -ve on error */ int copy_uboot_to_ram(void); /** * clear_bss() - Clear the BSS (Blocked Start by Symbol) segment * * This clears the memory used by global variables * * Return: 0 if OK, -ve on error */ int clear_bss(void); /** * do_elf_reloc_fixups() - Fix up ELF relocations in the relocated code * * This processes the relocation tables to ensure that the code can run in its * new location. * * Return: 0 if OK, -ve on error */ int do_elf_reloc_fixups(void); /** * manual_reloc() - Manually relocate a pointer if needed * * This is a nop in almost all cases, except for the systems with a broken gcc * which need to manually relocate some things. * * @ptr: Pointer to relocate * Return: new pointer value */ static inline void *manual_reloc(void *ptr) { #ifndef USE_HOSTCC if (IS_ENABLED(CONFIG_NEEDS_MANUAL_RELOC)) return ptr + gd->reloc_off; #endif return ptr; } #if !defined(USE_HOSTCC) && defined(CONFIG_NEEDS_MANUAL_RELOC) #define MANUAL_RELOC(ptr) (ptr) = manual_reloc(ptr) #else #define MANUAL_RELOC(ptr) (void)(ptr) #endif #endif /* _RELOCATE_H_ */