linker_lists: Rename sections to remove . prefix
Rename the sections used to implement linker lists so they begin with '__u_boot_list' rather than '.u_boot_list'. The double underscore at the start is still distinct from the single underscore used by the symbol names. Having a '.' in the section names conflicts with clang's ASAN instrumentation which tries to add redzones between the linker list elements, causing expected accesses to fail. However, clang doesn't try to add redzones to user sections, which are names with all alphanumeric and underscore characters. Signed-off-by: Andrew Scull <ascull@google.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
0648b13269
commit
99e2fbcb69
@ -39,8 +39,8 @@ SECTIONS
|
|||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -141,11 +141,11 @@ endif
|
|||||||
# limit ourselves to the sections we want in the .bin.
|
# limit ourselves to the sections we want in the .bin.
|
||||||
ifdef CONFIG_ARM64
|
ifdef CONFIG_ARM64
|
||||||
OBJCOPYFLAGS += -j .text -j .secure_text -j .secure_data -j .rodata -j .data \
|
OBJCOPYFLAGS += -j .text -j .secure_text -j .secure_data -j .rodata -j .data \
|
||||||
-j .u_boot_list -j .rela.dyn -j .got -j .got.plt \
|
-j __u_boot_list -j .rela.dyn -j .got -j .got.plt \
|
||||||
-j .binman_sym_table -j .text_rest
|
-j .binman_sym_table -j .text_rest
|
||||||
else
|
else
|
||||||
OBJCOPYFLAGS += -j .text -j .secure_text -j .secure_data -j .rodata -j .hash \
|
OBJCOPYFLAGS += -j .text -j .secure_text -j .secure_data -j .rodata -j .hash \
|
||||||
-j .data -j .got -j .got.plt -j .u_boot_list -j .rel.dyn \
|
-j .data -j .got -j .got.plt -j __u_boot_list -j .rel.dyn \
|
||||||
-j .binman_sym_table -j .text_rest
|
-j .binman_sym_table -j .text_rest
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -29,8 +29,8 @@ SECTIONS
|
|||||||
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
} > .sram
|
} > .sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -38,8 +38,8 @@ SECTIONS
|
|||||||
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
} > .sram
|
} > .sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -46,9 +46,9 @@ SECTIONS
|
|||||||
} >.sram
|
} >.sram
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
} >.sram
|
} >.sram
|
||||||
|
|
||||||
.image_copy_end : {
|
.image_copy_end : {
|
||||||
|
@ -109,8 +109,8 @@ SECTIONS
|
|||||||
. = .;
|
. = .;
|
||||||
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
|
@ -32,8 +32,8 @@ SECTIONS
|
|||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -15,7 +15,7 @@ ENTRY(_start)
|
|||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_CMDLINE
|
#ifndef CONFIG_CMDLINE
|
||||||
/DISCARD/ : { *(.u_boot_list_2_cmd_*) }
|
/DISCARD/ : { *(__u_boot_list_2_cmd_*) }
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_ARMV7_SECURE_BASE) && defined(CONFIG_ARMV7_NONSEC)
|
#if defined(CONFIG_ARMV7_SECURE_BASE) && defined(CONFIG_ARMV7_NONSEC)
|
||||||
/*
|
/*
|
||||||
@ -149,8 +149,8 @@ SECTIONS
|
|||||||
. = .;
|
. = .;
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -29,7 +29,7 @@ SECTIONS
|
|||||||
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : { KEEP(*(SORT(.u_boot_list*))) } > .sram
|
__u_boot_list : { KEEP(*(SORT(__u_boot_list*))) } > .sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
__image_copy_end = .;
|
__image_copy_end = .;
|
||||||
|
@ -36,7 +36,7 @@ SECTIONS
|
|||||||
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : { KEEP(*(SORT(.u_boot_list*))) } > .sram
|
__u_boot_list : { KEEP(*(SORT(__u_boot_list*))) } > .sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
__image_copy_end = .;
|
__image_copy_end = .;
|
||||||
|
@ -33,8 +33,8 @@ SECTIONS
|
|||||||
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
} >.sram
|
} >.sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -41,8 +41,8 @@ SECTIONS
|
|||||||
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.nor
|
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.nor
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
} > .nor
|
} > .nor
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -39,9 +39,9 @@ SECTIONS
|
|||||||
*(.data*)
|
*(.data*)
|
||||||
}
|
}
|
||||||
|
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
.image_copy_end : {
|
.image_copy_end : {
|
||||||
|
@ -37,8 +37,8 @@ SECTIONS
|
|||||||
} > .sram
|
} > .sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
} > .sram
|
} > .sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -54,8 +54,8 @@ SECTIONS
|
|||||||
. = .;
|
. = .;
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -60,8 +60,8 @@ SECTIONS
|
|||||||
. = .;
|
. = .;
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = .;
|
. = .;
|
||||||
|
@ -37,8 +37,8 @@ SECTIONS
|
|||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
__init_end = . ;
|
__init_end = . ;
|
||||||
|
|
||||||
|
@ -41,8 +41,8 @@ SECTIONS
|
|||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
__init_end = . ;
|
__init_end = . ;
|
||||||
|
|
||||||
|
@ -65,6 +65,6 @@ PLATFORM_CPPFLAGS += -msoft-float
|
|||||||
KBUILD_LDFLAGS += -G 0 -static -n -nostdlib
|
KBUILD_LDFLAGS += -G 0 -static -n -nostdlib
|
||||||
PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections
|
PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections
|
||||||
LDFLAGS_FINAL += --gc-sections
|
LDFLAGS_FINAL += --gc-sections
|
||||||
OBJCOPYFLAGS += -j .text -j .rodata -j .data -j .u_boot_list
|
OBJCOPYFLAGS += -j .text -j .rodata -j .data -j __u_boot_list
|
||||||
|
|
||||||
LDFLAGS_STANDALONE += --gc-sections
|
LDFLAGS_STANDALONE += --gc-sections
|
||||||
|
@ -29,8 +29,8 @@ SECTIONS
|
|||||||
|
|
||||||
#if defined(CONFIG_SPL_DM) || defined(CONFIG_SPL_LOADER_SUPPORT)
|
#if defined(CONFIG_SPL_DM) || defined(CONFIG_SPL_LOADER_SUPPORT)
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
} > .spl_mem
|
} > .spl_mem
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -33,8 +33,8 @@ SECTIONS
|
|||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -32,8 +32,8 @@ SECTIONS
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* INIT DATA sections - "Small" data (see the gcc -G option)
|
/* INIT DATA sections - "Small" data (see the gcc -G option)
|
||||||
|
@ -42,8 +42,8 @@ SECTIONS
|
|||||||
. = .;
|
. = .;
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,8 +50,8 @@ SECTIONS
|
|||||||
_edata = .;
|
_edata = .;
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = .;
|
. = .;
|
||||||
|
@ -67,8 +67,8 @@ SECTIONS
|
|||||||
. = .;
|
. = .;
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = .;
|
. = .;
|
||||||
|
@ -40,8 +40,8 @@ SECTIONS
|
|||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
} > .spl_mem
|
} > .spl_mem
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -44,8 +44,8 @@ SECTIONS
|
|||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -44,13 +44,13 @@ EFI_TARGET := --target=efi-app-ia32
|
|||||||
else ifeq ($(HOST_ARCH),$(HOST_ARCH_AARCH64))
|
else ifeq ($(HOST_ARCH),$(HOST_ARCH_AARCH64))
|
||||||
EFI_LDS := ${SRCDIR}/../../../arch/arm/lib/elf_aarch64_efi.lds
|
EFI_LDS := ${SRCDIR}/../../../arch/arm/lib/elf_aarch64_efi.lds
|
||||||
OBJCOPYFLAGS += -j .text -j .secure_text -j .secure_data -j .rodata -j .data \
|
OBJCOPYFLAGS += -j .text -j .secure_text -j .secure_data -j .rodata -j .data \
|
||||||
-j .u_boot_list -j .rela.dyn -j .got -j .got.plt \
|
-j __u_boot_list -j .rela.dyn -j .got -j .got.plt \
|
||||||
-j .binman_sym_table -j .text_rest \
|
-j .binman_sym_table -j .text_rest \
|
||||||
-j .efi_runtime -j .efi_runtime_rel
|
-j .efi_runtime -j .efi_runtime_rel
|
||||||
else ifeq ($(HOST_ARCH),$(HOST_ARCH_ARM))
|
else ifeq ($(HOST_ARCH),$(HOST_ARCH_ARM))
|
||||||
EFI_LDS := ${SRCDIR}/../../../arch/arm/lib/elf_arm_efi.lds
|
EFI_LDS := ${SRCDIR}/../../../arch/arm/lib/elf_arm_efi.lds
|
||||||
OBJCOPYFLAGS += -j .text -j .secure_text -j .secure_data -j .rodata -j .hash \
|
OBJCOPYFLAGS += -j .text -j .secure_text -j .secure_data -j .rodata -j .hash \
|
||||||
-j .data -j .got -j .got.plt -j .u_boot_list -j .rel.dyn \
|
-j .data -j .got -j .got.plt -j __u_boot_list -j .rel.dyn \
|
||||||
-j .binman_sym_table -j .text_rest \
|
-j .binman_sym_table -j .text_rest \
|
||||||
-j .efi_runtime -j .efi_runtime_rel
|
-j .efi_runtime -j .efi_runtime_rel
|
||||||
else ifeq ($(HOST_ARCH),$(HOST_ARCH_RISCV32))
|
else ifeq ($(HOST_ARCH),$(HOST_ARCH_RISCV32))
|
||||||
|
@ -9,8 +9,8 @@ SECTIONS
|
|||||||
{
|
{
|
||||||
|
|
||||||
. = ALIGN(32);
|
. = ALIGN(32);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Private data for devices with OF_PLATDATA_RT */
|
/* Private data for devices with OF_PLATDATA_RT */
|
||||||
|
@ -9,8 +9,8 @@ SECTIONS
|
|||||||
{
|
{
|
||||||
|
|
||||||
. = ALIGN(32);
|
. = ALIGN(32);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
_u_boot_sandbox_getopt : {
|
_u_boot_sandbox_getopt : {
|
||||||
|
@ -70,8 +70,8 @@ SECTIONS
|
|||||||
} >ram
|
} >ram
|
||||||
PROVIDE (_egot = .);
|
PROVIDE (_egot = .);
|
||||||
|
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
} >ram
|
} >ram
|
||||||
|
|
||||||
PROVIDE (__init_end = .);
|
PROVIDE (__init_end = .);
|
||||||
|
@ -12,7 +12,7 @@ ENTRY(_start)
|
|||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_CMDLINE
|
#ifndef CONFIG_CMDLINE
|
||||||
/DISCARD/ : { *(.u_boot_list_2_cmd_*) }
|
/DISCARD/ : { *(__u_boot_list_2_cmd_*) }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_TEXT_BASE
|
#ifdef CONFIG_SYS_TEXT_BASE
|
||||||
@ -41,8 +41,8 @@ SECTIONS
|
|||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -12,7 +12,7 @@ ENTRY(_start)
|
|||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_CMDLINE
|
#ifndef CONFIG_CMDLINE
|
||||||
/DISCARD/ : { *(.u_boot_list_2_cmd_*) }
|
/DISCARD/ : { *(__u_boot_list_2_cmd_*) }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
. = IMAGE_TEXT_BASE; /* Location of bootcode in flash */
|
. = IMAGE_TEXT_BASE; /* Location of bootcode in flash */
|
||||||
@ -25,8 +25,8 @@ SECTIONS
|
|||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -12,7 +12,7 @@ ENTRY(_start)
|
|||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_CMDLINE
|
#ifndef CONFIG_CMDLINE
|
||||||
/DISCARD/ : { *(.u_boot_list_2_cmd_*) }
|
/DISCARD/ : { *(__u_boot_list_2_cmd_*) }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
. = CONFIG_SYS_TEXT_BASE; /* Location of bootcode in flash */
|
. = CONFIG_SYS_TEXT_BASE; /* Location of bootcode in flash */
|
||||||
@ -39,8 +39,8 @@ SECTIONS
|
|||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -51,7 +51,7 @@ SECTIONS
|
|||||||
|
|
||||||
/* U-Boot lists and device tree */
|
/* U-Boot lists and device tree */
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
*(SORT(.u_boot_list*));
|
*(SORT(__u_boot_list*));
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
*(.dtb*);
|
*(.dtb*);
|
||||||
}
|
}
|
||||||
@ -69,7 +69,7 @@ SECTIONS
|
|||||||
*(.data.rel.local)
|
*(.data.rel.local)
|
||||||
*(.data.rel.ro)
|
*(.data.rel.ro)
|
||||||
*(.data.rel*)
|
*(.data.rel*)
|
||||||
*(.rel.u_boot_list*)
|
*(.rel__u_boot_list*)
|
||||||
}
|
}
|
||||||
. = ALIGN(4096);
|
. = ALIGN(4096);
|
||||||
.reloc : /* This is the PECOFF .reloc section! */
|
.reloc : /* This is the PECOFF .reloc section! */
|
||||||
|
@ -50,7 +50,7 @@ SECTIONS
|
|||||||
|
|
||||||
/* U-Boot lists and device tree */
|
/* U-Boot lists and device tree */
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
*(SORT(.u_boot_list*));
|
*(SORT(__u_boot_list*));
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
*(.dtb*);
|
*(.dtb*);
|
||||||
}
|
}
|
||||||
@ -63,7 +63,7 @@ SECTIONS
|
|||||||
*(.rela.data*)
|
*(.rela.data*)
|
||||||
*(.rela.got)
|
*(.rela.got)
|
||||||
*(.rela.stab)
|
*(.rela.stab)
|
||||||
*(.rela.u_boot_list*)
|
*(.rela__u_boot_list*)
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4096);
|
. = ALIGN(4096);
|
||||||
|
@ -49,7 +49,7 @@ SECTIONS
|
|||||||
RELOCATE1(text);
|
RELOCATE1(text);
|
||||||
RELOCATE1(rodata);
|
RELOCATE1(rodata);
|
||||||
RELOCATE1(data);
|
RELOCATE1(data);
|
||||||
RELOCATE1(u_boot_list);
|
RELOCATE_USER1(__u_boot_list);
|
||||||
__reloc_table_end = ABSOLUTE(.);
|
__reloc_table_end = ABSOLUTE(.);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ SECTIONS
|
|||||||
SECTION_text(XTENSA_SYS_TEXT_ADDR, FOLLOWING(.DoubleExceptionVector.text))
|
SECTION_text(XTENSA_SYS_TEXT_ADDR, FOLLOWING(.DoubleExceptionVector.text))
|
||||||
SECTION_rodata(ALIGN(16), FOLLOWING(.text))
|
SECTION_rodata(ALIGN(16), FOLLOWING(.text))
|
||||||
SECTION_u_boot_list(ALIGN(16), FOLLOWING(.rodata))
|
SECTION_u_boot_list(ALIGN(16), FOLLOWING(.rodata))
|
||||||
SECTION_data(ALIGN(16), FOLLOWING(.u_boot_list))
|
SECTION_data(ALIGN(16), FOLLOWING(__u_boot_list))
|
||||||
|
|
||||||
__reloc_end = .;
|
__reloc_end = .;
|
||||||
__init_end = .;
|
__init_end = .;
|
||||||
|
@ -41,6 +41,11 @@
|
|||||||
LONG(_##_sym_##_##_sec_##_end); \
|
LONG(_##_sym_##_##_sec_##_end); \
|
||||||
LONG(LOADADDR(.##_sym_##.##_sec_));
|
LONG(LOADADDR(.##_sym_##.##_sec_));
|
||||||
|
|
||||||
|
#define RELOCATE_USER1(_sec_) \
|
||||||
|
LONG(_##_sec_##_start); \
|
||||||
|
LONG(_##_sec_##_end); \
|
||||||
|
LONG(LOADADDR(_sec_));
|
||||||
|
|
||||||
#define SECTION_VECTOR(_sym_, _sec_, _vma_, _lma_) \
|
#define SECTION_VECTOR(_sym_, _sec_, _vma_, _lma_) \
|
||||||
.##_sym_##.##_sec_ _vma_ : _lma_ \
|
.##_sym_##.##_sec_ _vma_ : _lma_ \
|
||||||
{ \
|
{ \
|
||||||
@ -100,11 +105,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define SECTION_u_boot_list(_vma_, _lma_) \
|
#define SECTION_u_boot_list(_vma_, _lma_) \
|
||||||
.u_boot_list _vma_ : _lma_ \
|
__u_boot_list _vma_ : _lma_ \
|
||||||
{ \
|
{ \
|
||||||
_u_boot_list_start = ABSOLUTE(.); \
|
___u_boot_list_start = ABSOLUTE(.); \
|
||||||
KEEP(*(SORT(.u_boot_list*))); \
|
KEEP(*(SORT(__u_boot_list*))); \
|
||||||
_u_boot_list_end = ABSOLUTE(.); \
|
___u_boot_list_end = ABSOLUTE(.); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SECTION_data(_vma_, _lma_) \
|
#define SECTION_data(_vma_, _lma_) \
|
||||||
|
@ -36,8 +36,8 @@ SECTIONS
|
|||||||
. = .;
|
. = .;
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -59,8 +59,8 @@ SECTIONS
|
|||||||
. = .;
|
. = .;
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = .;
|
. = .;
|
||||||
|
@ -36,7 +36,7 @@ SECTIONS
|
|||||||
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : { KEEP(*(SORT(.u_boot_list*))); } >.sram
|
__u_boot_list : { KEEP(*(SORT(__u_boot_list*))); } >.sram
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.rel.dyn : {
|
.rel.dyn : {
|
||||||
|
@ -49,8 +49,8 @@ SECTIONS
|
|||||||
. = .;
|
. = .;
|
||||||
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
|
@ -32,8 +32,8 @@ SECTIONS
|
|||||||
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
.data : { *(SORT_BY_ALIGNMENT(.data*)) } >.sram
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
} >.sram
|
} >.sram
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
|
||||||
|
@ -40,8 +40,8 @@ SECTIONS
|
|||||||
} > ROM
|
} > ROM
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
|
|
||||||
/* Mark RAM's LMA */
|
/* Mark RAM's LMA */
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -72,8 +72,8 @@ SECTIONS
|
|||||||
. = .;
|
. = .;
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -53,8 +53,8 @@ SECTIONS
|
|||||||
. = .;
|
. = .;
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
|
@ -13,7 +13,7 @@ then the corresponding input section name is
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
.u_boot_list_ + 2_ + @_list + _2_ + @_entry
|
__u_boot_list_ + 2_ + @_list + _2_ + @_entry
|
||||||
|
|
||||||
and the C variable name is
|
and the C variable name is
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ and the C variable name is
|
|||||||
|
|
||||||
This ensures uniqueness for both input section and C variable name.
|
This ensures uniqueness for both input section and C variable name.
|
||||||
|
|
||||||
Note that the names differ only in the first character, "." for the
|
Note that the names differ only in the characters, "__" for the
|
||||||
section and "_" for the variable, so that the linker cannot confuse
|
section and "_" for the variable, so that the linker cannot confuse
|
||||||
section and symbol names. From now on, both names will be referred
|
section and symbol names. From now on, both names will be referred
|
||||||
to as
|
to as
|
||||||
@ -63,11 +63,11 @@ iterated at least once.
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
.u_boot_list_2_array_1
|
__u_boot_list_2_array_1
|
||||||
.u_boot_list_2_array_2_first
|
__u_boot_list_2_array_2_first
|
||||||
.u_boot_list_2_array_2_second
|
__u_boot_list_2_array_2_second
|
||||||
.u_boot_list_2_array_2_third
|
__u_boot_list_2_array_2_third
|
||||||
.u_boot_list_2_array_3
|
__u_boot_list_2_array_3
|
||||||
|
|
||||||
If lists must be divided into sublists (e.g. for iterating only on
|
If lists must be divided into sublists (e.g. for iterating only on
|
||||||
part of a list), one can simply give the list a name of the form
|
part of a list), one can simply give the list a name of the form
|
||||||
@ -129,17 +129,17 @@ the compiler cannot update the alignment of the linker_list item.
|
|||||||
|
|
||||||
In the first case, an 8-byte 'fill' region is added::
|
In the first case, an 8-byte 'fill' region is added::
|
||||||
|
|
||||||
.u_boot_list_2_driver_2_testbus_drv
|
__u_boot_list_2_driver_2_testbus_drv
|
||||||
0x0000000000270018 0x80 test/built-in.o
|
0x0000000000270018 0x80 test/built-in.o
|
||||||
0x0000000000270018 _u_boot_list_2_driver_2_testbus_drv
|
0x0000000000270018 _u_boot_list_2_driver_2_testbus_drv
|
||||||
.u_boot_list_2_driver_2_testfdt1_drv
|
__u_boot_list_2_driver_2_testfdt1_drv
|
||||||
0x0000000000270098 0x80 test/built-in.o
|
0x0000000000270098 0x80 test/built-in.o
|
||||||
0x0000000000270098 _u_boot_list_2_driver_2_testfdt1_drv
|
0x0000000000270098 _u_boot_list_2_driver_2_testfdt1_drv
|
||||||
*fill* 0x0000000000270118 0x8
|
*fill* 0x0000000000270118 0x8
|
||||||
.u_boot_list_2_driver_2_testfdt_drv
|
__u_boot_list_2_driver_2_testfdt_drv
|
||||||
0x0000000000270120 0x80 test/built-in.o
|
0x0000000000270120 0x80 test/built-in.o
|
||||||
0x0000000000270120 _u_boot_list_2_driver_2_testfdt_drv
|
0x0000000000270120 _u_boot_list_2_driver_2_testfdt_drv
|
||||||
.u_boot_list_2_driver_2_testprobe_drv
|
__u_boot_list_2_driver_2_testprobe_drv
|
||||||
0x00000000002701a0 0x80 test/built-in.o
|
0x00000000002701a0 0x80 test/built-in.o
|
||||||
0x00000000002701a0 _u_boot_list_2_driver_2_testprobe_drv
|
0x00000000002701a0 _u_boot_list_2_driver_2_testprobe_drv
|
||||||
|
|
||||||
|
@ -169,8 +169,8 @@ by writing in u-boot.lds ($(srctree)/board/boardname/u-boot.lds) these
|
|||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
.u_boot_list : {
|
__u_boot_list : {
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
KEEP(*(SORT(__u_boot_list*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Writing tests
|
Writing tests
|
||||||
|
@ -707,9 +707,9 @@ Link errors / undefined reference
|
|||||||
Sometimes dtoc does not find the problem for you, but something is wrong and
|
Sometimes dtoc does not find the problem for you, but something is wrong and
|
||||||
you get a link error, e.g.::
|
you get a link error, e.g.::
|
||||||
|
|
||||||
:(.u_boot_list_2_udevice_2_spl_test5+0x0): undefined reference to
|
:(__u_boot_list_2_udevice_2_spl_test5+0x0): undefined reference to
|
||||||
`_u_boot_list_2_driver_2_sandbox_spl_test'
|
`_u_boot_list_2_driver_2_sandbox_spl_test'
|
||||||
/usr/bin/ld: dts/dt-uclass.o:(.u_boot_list_2_uclass_2_misc+0x8):
|
/usr/bin/ld: dts/dt-uclass.o:(__u_boot_list_2_uclass_2_misc+0x8):
|
||||||
undefined reference to `_u_boot_list_2_uclass_driver_2_misc'
|
undefined reference to `_u_boot_list_2_uclass_driver_2_misc'
|
||||||
|
|
||||||
The first one indicates that the device cannot find its driver. This means that
|
The first one indicates that the device cannot find its driver. This means that
|
||||||
|
@ -70,7 +70,7 @@
|
|||||||
#define ll_entry_declare(_type, _name, _list) \
|
#define ll_entry_declare(_type, _name, _list) \
|
||||||
_type _u_boot_list_2_##_list##_2_##_name __aligned(4) \
|
_type _u_boot_list_2_##_list##_2_##_name __aligned(4) \
|
||||||
__attribute__((unused)) \
|
__attribute__((unused)) \
|
||||||
__section(".u_boot_list_2_"#_list"_2_"#_name)
|
__section("__u_boot_list_2_"#_list"_2_"#_name)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ll_entry_declare_list() - Declare a list of link-generated array entries
|
* ll_entry_declare_list() - Declare a list of link-generated array entries
|
||||||
@ -93,7 +93,7 @@
|
|||||||
#define ll_entry_declare_list(_type, _name, _list) \
|
#define ll_entry_declare_list(_type, _name, _list) \
|
||||||
_type _u_boot_list_2_##_list##_2_##_name[] __aligned(4) \
|
_type _u_boot_list_2_##_list##_2_##_name[] __aligned(4) \
|
||||||
__attribute__((unused)) \
|
__attribute__((unused)) \
|
||||||
__section(".u_boot_list_2_"#_list"_2_"#_name)
|
__section("__u_boot_list_2_"#_list"_2_"#_name)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need a 0-byte-size type for iterator symbols, and the compiler
|
* We need a 0-byte-size type for iterator symbols, and the compiler
|
||||||
@ -110,7 +110,7 @@
|
|||||||
* @_list: Name of the list in which this entry is placed
|
* @_list: Name of the list in which this entry is placed
|
||||||
*
|
*
|
||||||
* This function returns ``(_type *)`` pointer to the very first entry of a
|
* This function returns ``(_type *)`` pointer to the very first entry of a
|
||||||
* linker-generated array placed into subsection of .u_boot_list section
|
* linker-generated array placed into subsection of __u_boot_list section
|
||||||
* specified by _list argument.
|
* specified by _list argument.
|
||||||
*
|
*
|
||||||
* Since this macro defines an array start symbol, its leftmost index
|
* Since this macro defines an array start symbol, its leftmost index
|
||||||
@ -126,7 +126,7 @@
|
|||||||
({ \
|
({ \
|
||||||
static char start[0] __aligned(CONFIG_LINKER_LIST_ALIGN) \
|
static char start[0] __aligned(CONFIG_LINKER_LIST_ALIGN) \
|
||||||
__attribute__((unused)) \
|
__attribute__((unused)) \
|
||||||
__section(".u_boot_list_2_"#_list"_1"); \
|
__section("__u_boot_list_2_"#_list"_1"); \
|
||||||
(_type *)&start; \
|
(_type *)&start; \
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -137,7 +137,7 @@
|
|||||||
* (with underscores instead of dots)
|
* (with underscores instead of dots)
|
||||||
*
|
*
|
||||||
* This function returns ``(_type *)`` pointer after the very last entry of
|
* This function returns ``(_type *)`` pointer after the very last entry of
|
||||||
* a linker-generated array placed into subsection of .u_boot_list
|
* a linker-generated array placed into subsection of __u_boot_list
|
||||||
* section specified by _list argument.
|
* section specified by _list argument.
|
||||||
*
|
*
|
||||||
* Since this macro defines an array end symbol, its leftmost index
|
* Since this macro defines an array end symbol, its leftmost index
|
||||||
@ -152,7 +152,7 @@
|
|||||||
#define ll_entry_end(_type, _list) \
|
#define ll_entry_end(_type, _list) \
|
||||||
({ \
|
({ \
|
||||||
static char end[0] __aligned(4) __attribute__((unused)) \
|
static char end[0] __aligned(4) __attribute__((unused)) \
|
||||||
__section(".u_boot_list_2_"#_list"_3"); \
|
__section("__u_boot_list_2_"#_list"_3"); \
|
||||||
(_type *)&end; \
|
(_type *)&end; \
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
@ -161,7 +161,7 @@
|
|||||||
* @_list: Name of the list of which the number of elements is computed
|
* @_list: Name of the list of which the number of elements is computed
|
||||||
*
|
*
|
||||||
* This function returns the number of elements of a linker-generated array
|
* This function returns the number of elements of a linker-generated array
|
||||||
* placed into subsection of .u_boot_list section specified by _list
|
* placed into subsection of __u_boot_list section specified by _list
|
||||||
* argument. The result is of an unsigned int type.
|
* argument. The result is of an unsigned int type.
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
@ -246,7 +246,7 @@
|
|||||||
#define ll_start(_type) \
|
#define ll_start(_type) \
|
||||||
({ \
|
({ \
|
||||||
static char start[0] __aligned(4) __attribute__((unused)) \
|
static char start[0] __aligned(4) __attribute__((unused)) \
|
||||||
__section(".u_boot_list_1"); \
|
__section("__u_boot_list_1"); \
|
||||||
(_type *)&start; \
|
(_type *)&start; \
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -269,7 +269,7 @@
|
|||||||
#define ll_end(_type) \
|
#define ll_end(_type) \
|
||||||
({ \
|
({ \
|
||||||
static char end[0] __aligned(4) __attribute__((unused)) \
|
static char end[0] __aligned(4) __attribute__((unused)) \
|
||||||
__section(".u_boot_list_3"); \
|
__section("__u_boot_list_3"); \
|
||||||
(_type *)&end; \
|
(_type *)&end; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -312,7 +312,7 @@ int main(int argc, char *argv[])
|
|||||||
goto out_free_relocs;
|
goto out_free_relocs;
|
||||||
}
|
}
|
||||||
|
|
||||||
rel_pfx = is_64 ? ".rela." : ".rel.";
|
rel_pfx = is_64 ? ".rela" : ".rel";
|
||||||
|
|
||||||
for (i = 0; i < ehdr_field(e_shnum); i++) {
|
for (i = 0; i < ehdr_field(e_shnum); i++) {
|
||||||
sh_type = shdr_field(i, sh_type);
|
sh_type = shdr_field(i, sh_type);
|
||||||
@ -321,10 +321,11 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
sh_name = shstr(shdr_field(i, sh_name));
|
sh_name = shstr(shdr_field(i, sh_name));
|
||||||
if (strncmp(sh_name, rel_pfx, strlen(rel_pfx))) {
|
if (strncmp(sh_name, rel_pfx, strlen(rel_pfx))) {
|
||||||
if (strcmp(sh_name, ".rel") && strcmp(sh_name, ".rel.dyn"))
|
|
||||||
fprintf(stderr, "WARNING: Unexpected reloc section name '%s'\n", sh_name);
|
fprintf(stderr, "WARNING: Unexpected reloc section name '%s'\n", sh_name);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (!strcmp(sh_name, ".rel") || !strcmp(sh_name, ".rel.dyn"))
|
||||||
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Skip reloc sections which either don't correspond to another
|
* Skip reloc sections which either don't correspond to another
|
||||||
@ -334,7 +335,7 @@ int main(int argc, char *argv[])
|
|||||||
*/
|
*/
|
||||||
skip = true;
|
skip = true;
|
||||||
for (j = 0; j < ehdr_field(e_shnum); j++) {
|
for (j = 0; j < ehdr_field(e_shnum); j++) {
|
||||||
if (strcmp(&sh_name[strlen(rel_pfx) - 1], shstr(shdr_field(j, sh_name))))
|
if (strcmp(&sh_name[strlen(rel_pfx)], shstr(shdr_field(j, sh_name))))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
skip = !(shdr_field(j, sh_flags) & SHF_ALLOC);
|
skip = !(shdr_field(j, sh_flags) & SHF_ALLOC);
|
||||||
|
Loading…
Reference in New Issue
Block a user