123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- /* SPDX-License-Identifier: GPL-2.0+ */
- /*
- * (C) Copyright 2011
- * Graeme Russ, <graeme.russ@gmail.com>
- */
- #ifndef _RELOCATE_H_
- #define _RELOCATE_H_
- #ifndef USE_HOSTCC
- #include <asm/global_data.h>
- 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_ */
|