]>
Commit | Line | Data |
---|---|---|
3ebd1cbc AA |
1 | /* |
2 | * Copyright 2013 Albert ARIBAUD <albert.u.boot@aribaud.net> | |
3 | * | |
1a459660 | 4 | * SPDX-License-Identifier: GPL-2.0+ |
3ebd1cbc AA |
5 | */ |
6 | ||
7 | /** | |
8 | * These two symbols are declared in a C file so that the linker | |
9 | * uses R_ARM_RELATIVE relocation, rather than the R_ARM_ABS32 one | |
10 | * it would use if the symbols were defined in the linker file. | |
11 | * Using only R_ARM_RELATIVE relocation ensures that references to | |
12 | * the symbols are correct after as well as before relocation. | |
13 | * | |
14 | * We need a 0-byte-size type for these symbols, and the compiler | |
15 | * does not allow defining objects of C type 'void'. Using an empty | |
16 | * struct is allowed by the compiler, but causes gcc versions 4.4 and | |
17 | * below to complain about aliasing. Therefore we use the next best | |
18 | * thing: zero-sized arrays, which are both 0-byte-size and exempt from | |
19 | * aliasing warnings. | |
20 | */ | |
21 | ||
df84502e AA |
22 | char __bss_start[0] __attribute__((section(".__bss_start"))); |
23 | char __bss_end[0] __attribute__((section(".__bss_end"))); | |
d026dec8 AA |
24 | char __image_copy_start[0] __attribute__((section(".__image_copy_start"))); |
25 | char __image_copy_end[0] __attribute__((section(".__image_copy_end"))); | |
47bd65ef AA |
26 | char __rel_dyn_start[0] __attribute__((section(".__rel_dyn_start"))); |
27 | char __rel_dyn_end[0] __attribute__((section(".__rel_dyn_end"))); | |
d0b5d9da | 28 | char _end[0] __attribute__((section(".__end"))); |