X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=include%2Frelocate.h;h=2dbfd901e4fde6ae165f47062e0c43bdfc7c46e2;hb=HEAD;hp=9ceeecdbe712aa2465590c376153e3040cf1427e;hpb=83d290c56fab2d38cd1ab4c4cc7099559c1d5046;p=platform%2Fkernel%2Fu-boot.git diff --git a/include/relocate.h b/include/relocate.h index 9ceeecd..2dbfd90 100644 --- a/include/relocate.h +++ b/include/relocate.h @@ -7,12 +7,16 @@ #ifndef _RELOCATE_H_ #define _RELOCATE_H_ -#include +#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 + * Return: 0 if OK, -ve on error */ int copy_uboot_to_ram(void); @@ -21,7 +25,7 @@ int copy_uboot_to_ram(void); * * This clears the memory used by global variables * - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int clear_bss(void); @@ -31,8 +35,32 @@ int clear_bss(void); * This processes the relocation tables to ensure that the code can run in its * new location. * - * @return 0 if OK, -ve on error + * 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_ */