arch/arm/lib/sections.c:
/*
這兩個符号在一個C檔案中聲明,是以連結器使用R_ARM_RELATIVE重定位,而不是在連結器檔案中定義符号時
使用的R_ARM_ABS32。僅使用R_ARM_RELATIVE重新定位可確定對符号的引用在重新定位之後和之前都是正确
的。
對于這些符号,我們需要一個0位元組大小的類型,而編譯器不允許定義C類型的對象“void”。編譯器允許使用空
結構,但這會導緻gcc 4.4及以下版本出現别名問題。是以,我們使用下一個最好的東西:零大小的數組,它既
是0位元組大小的,又不受别名警告的影響。
*/
char __bss_start[0] __attribute__((section(".__bss_start")));
char __bss_end[0] __attribute__((section(".__bss_end")));
char __image_copy_start[0] __attribute__((section(".__image_copy_start")));
char __image_copy_end[0] __attribute__((section(".__image_copy_end")));
char __rel_dyn_start[0] __attribute__((section(".__rel_dyn_start")));
char __rel_dyn_end[0] __attribute__((section(".__rel_dyn_end")));
char __secure_start[0] __attribute__((section(".__secure_start")));
char __secure_end[0] __attribute__((section(".__secure_end")));
char __secure_stack_start[0] __attribute__((section(".__secure_stack_start")));
char __secure_stack_end[0] __attribute__((section(".__secure_stack_end")));
char __efi_runtime_start[0] __attribute__((section(".__efi_runtime_start")));
char __efi_runtime_stop[0] __attribute__((section(".__efi_runtime_stop")));
char __efi_runtime_rel_start[0] __attribute__((section(".__efi_runtime_rel_start")));
char __efi_runtime_rel_stop[0] __attribute__((section(".__efi_runtime_rel_stop")));
char _end[0] __attribute__((section(".__end")));