]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
e47b2d67 SG |
2 | /* |
3 | * (C) Copyright 2011 | |
4 | * Graeme Russ, <[email protected]> | |
e47b2d67 SG |
5 | */ |
6 | ||
7 | #ifndef _RELOCATE_H_ | |
8 | #define _RELOCATE_H_ | |
9 | ||
2ac00c05 SG |
10 | #ifndef USE_HOSTCC |
11 | #include <asm/global_data.h> | |
12 | ||
13 | DECLARE_GLOBAL_DATA_PTR; | |
14 | #endif | |
e47b2d67 SG |
15 | |
16 | /** | |
17 | * copy_uboot_to_ram() - Copy U-Boot to its new relocated position | |
18 | * | |
185f812c | 19 | * Return: 0 if OK, -ve on error |
e47b2d67 SG |
20 | */ |
21 | int copy_uboot_to_ram(void); | |
22 | ||
23 | /** | |
24 | * clear_bss() - Clear the BSS (Blocked Start by Symbol) segment | |
25 | * | |
26 | * This clears the memory used by global variables | |
27 | * | |
185f812c | 28 | * Return: 0 if OK, -ve on error |
e47b2d67 SG |
29 | */ |
30 | int clear_bss(void); | |
31 | ||
32 | /** | |
33 | * do_elf_reloc_fixups() - Fix up ELF relocations in the relocated code | |
34 | * | |
35 | * This processes the relocation tables to ensure that the code can run in its | |
36 | * new location. | |
37 | * | |
185f812c | 38 | * Return: 0 if OK, -ve on error |
e47b2d67 SG |
39 | */ |
40 | int do_elf_reloc_fixups(void); | |
41 | ||
2ac00c05 SG |
42 | /** |
43 | * manual_reloc() - Manually relocate a pointer if needed | |
44 | * | |
45 | * This is a nop in almost all cases, except for the systems with a broken gcc | |
46 | * which need to manually relocate some things. | |
47 | * | |
48 | * @ptr: Pointer to relocate | |
185f812c | 49 | * Return: new pointer value |
2ac00c05 SG |
50 | */ |
51 | static inline void *manual_reloc(void *ptr) | |
52 | { | |
53 | #ifndef USE_HOSTCC | |
54 | if (IS_ENABLED(CONFIG_NEEDS_MANUAL_RELOC)) | |
55 | return ptr + gd->reloc_off; | |
56 | #endif | |
57 | return ptr; | |
58 | } | |
59 | ||
c5a68d29 SG |
60 | #if !defined(USE_HOSTCC) && defined(CONFIG_NEEDS_MANUAL_RELOC) |
61 | #define MANUAL_RELOC(ptr) (ptr) = manual_reloc(ptr) | |
62 | #else | |
63 | #define MANUAL_RELOC(ptr) (void)(ptr) | |
64 | #endif | |
65 | ||
e47b2d67 | 66 | #endif /* _RELOCATE_H_ */ |