forked from Imagelibrary/binutils-gdb
Link with mixed IR/non-IR objects
* 2 kinds of object files
o non-IR object file has
* non-IR sections
o IR object file has
* IR sections
* non-IR sections
* The output of "ld -r" with mixed IR/non-IR objects should work with:
o Compilers/linkers with IR support.
o Compilers/linkers without IR support.
* Add the mixed object file which has
o IR sections
o non-IR sections:
* Object codes from IR sections.
* Object codes from non-IR object files.
o Object-only section:
* With section name ".gnu_object_only" and SHT_GNU_OBJECT_ONLY type
on ELF:
https://gitlab.com/x86-psABIs/Linux-ABI
#define SHT_GNU_OBJECT_ONLY 0x6ffffff8 /* Object only */
* Contain non-IR object file.
* Input is discarded after link.
* Linker action:
o Classify each input object file:
* If there is a ".gnu_object_only" section, it is a mixed object file.
* If there is a IR section, it is an IR object file.
* Otherwise, it is a non-IR object file.
o Relocatable non-IR link:
* Prepare for an object-only output.
* Prepare for a regular output.
* For each mixed object file:
* Add IR and non-IR sections to the regular output.
* For object-only section:
* Extract object only file.
* Add it to the object-only output.
* Discard object-only section.
* For each IR object file:
* Add IR and non-IR sections to the regular output.
* For each non-IR object file:
* Add non-IR sections to the regular output.
* Add non-IR sections to the object-only output.
* Final output:
* If there are IR objects, non-IR objects and the object-only
output isn't empty:
* Put the object-only output into the object-only section.
* Add the object-only section to the regular output.
* Remove the object-only output.
o Normal link and relocatable IR link:
* Prepare for output.
* IR link:
* For each mixed object file:
* Compile and add IR sections to the output.
* Discard non-IR sections.
* Object-only section:
* Extract object only file.
* Add it to the output.
* Discard object-only section.
* For each IR object file:
* Compile and add IR sections to the output.
* Discard non-IR sections.
* For each non-IR object file:
* Add non-IR sections to the output.
* Non-IR link:
* For each mixed object file:
* Add non-IR sections to the output.
* Discard IR sections and object-only section.
* For each IR object file:
* Add non-IR sections to the output.
* Discard IR sections.
* For each non-IR object file:
* Add non-IR sections to the output.
This is useful for Linux kernel build with LTO.
bfd/
PR ld/12291
PR ld/12430
PR ld/13298
* bfd.c (bfd_lto_object_type): Add lto_mixed_object.
(bfd): Add object_only_section.
(bfd_group_signature): New.
* elf.c (special_sections_g): Add .gnu_object_only.
* format.c: Include "plugin-api.h" and "plugin.h" if
BFD_SUPPORTS_PLUGINS is defined.
(bfd_set_lto_type): Set type to lto_mixed_object for
GNU_OBJECT_ONLY_SECTION_NAME section.
(bfd_check_format_matches): Don't check the plugin target twice
if the plugin target is explicitly specified.
* opncls.c (bfd_extract_object_only_section): New.
* plugin.c (bfd_plugin_fake_text_section): New.
(bfd_plugin_fake_data_section): Likewise.
(bfd_plugin_fake_bss_section): Likewise.
(bfd_plugin_fake_common_section): Likewise.
(bfd_plugin_get_symbols_in_object_only): Likewise.
* plugin.c (add_symbols): Call
bfd_plugin_get_symbols_in_object_only and count
plugin_data->object_only_nsyms.
(bfd_plugin_get_symtab_upper_bound): Count
plugin_data->object_only_nsyms.
bfd_plugin_get_symbols_in_object_only and add symbols from
object only section.
(bfd_plugin_canonicalize_symtab): Remove fake_section,
fake_data_section, fake_bss_section and fake_common_section.
Set udata.p to NULL. Use bfd_plugin_fake_text_section,
bfd_plugin_fake_data_section, bfd_plugin_fake_bss_section and
bfd_plugin_fake_common_section.
Set udata.p to NULL.
* plugin.h (plugin_data_struct): Add object_only_nsyms and
object_only_syms.
* section.c (GNU_OBJECT_ONLY_SECTION_NAME): New.
* bfd-in2.h: Regenerated.
binutils/
PR ld/12291
PR ld/12430
PR ld/13298
* objcopy.c (group_signature): Removed.
(is_strip_section): Replace group_signature with
bfd_group_signature.
(setup_section): Likewise.
* readelf.c (get_os_specific_section_type_name): Handle
SHT_GNU_OBJECT_ONLY.
gas/
PR ld/12291
PR ld/12430
PR ld/13298
* testsuite/gas/elf/section9.s: Add the .gnu_object_only test.
* testsuite/gas/elf/section9.d: Updated.
include/
PR ld/12291
PR ld/12430
PR ld/13298
* elf/common.h (SHT_GNU_OBJECT_ONLY): New.
ld/
PR ld/12291
PR ld/12430
PR ld/13298
* ld.h (ld_config_type): Add emit_gnu_object_only and
emitting_gnu_object_only.
* ldelf.c (orphan_init_done): Make it file scope.
(ldelf_place_orphan): Rename hold to orig_hold. Initialize hold
from orig_hold at run-time.
(ldelf_finish): New.
* ldelf.h (ldelf_finish): New.
* ldexp.c (ldexp_init): Take a bfd_boolean argument to supprt
object-only output.
(ldexp_finish): Likewise.
* ldexp.h (ldexp_init): Take a bfd_boolean argument.
(ldexp_finish): Likewise.
* ldfile.c (ldfile_try_open_bfd): Call
cmdline_check_object_only_section.
* ldlang.c: Include "ldwrite.h" and elf-bfd.h.
* ldlang.c (cmdline_object_only_file_list): New.
(cmdline_object_only_archive_list): Likewise.
(cmdline_temp_object_only_list): Likewise.
(cmdline_lists_init): Likewise.
(cmdline_list_new): Likewise.
(cmdline_list_append): Likewise.
(print_cmdline_list): Likewise.
(cmdline_on_object_only_archive_list_p): Likewise.
(cmdline_object_only_list_append): Likewise.
(cmdline_get_object_only_input_files): Likewise.
(cmdline_arg): Likewise.
(setup_section): Likewise.
(copy_section): Likewise.
(cmdline_fopen_temp): Likewise.
(cmdline_add_object_only_section): Likewise.
(cmdline_emit_object_only_section): Likewise.
(cmdline_extract_object_only_section): Likewise.
(cmdline_check_object_only_section): Likewise.
(cmdline_remove_object_only_files): Likewise.
(lang_init): Take a bfd_boolean argument to supprt object-only
output. Call cmdline_lists_init.
(load_symbols): Call cmdline_on_object_only_archive_list_p
to check if an archive member should be loaded.
(lang_process): Handle object-only link.
* ldlang.h (lang_init): Take a bfd_boolean argument.
(cmdline_enum_type): New.
(cmdline_header_type): Likewise.
(cmdline_file_type): Likewise.
(cmdline_bfd_type): Likewise.
(cmdline_union_type): Likewise.
(cmdline_list_type): Likewise.
(cmdline_emit_object_only_section): Likewise.
(cmdline_check_object_only_section): Likewise.
(cmdline_remove_object_only_files): Likewise.
* ldmain.c (main): Call xatexit with
cmdline_remove_object_only_files. Pass FALSE to lang_init,
ldexp_init and ldexp_finish. Use ld_parse_linker_script.
Set link_info.output_bfd to NULL after close. Call
cmdline_emit_object_only_section if needed.
(add_archive_element): Call cmdline_check_object_only_section.
(ld_parse_linker_script): New.
* ldmain.h (ld_parse_linker_script): New.
* plugin.c (plugin_maybe_claim): Call
cmdline_check_object_only_section on claimed IR files.
* scripttempl/elf.sc: Also discard .gnu_object_only sections.
* scripttempl/elf64hppa.sc: Likewise.
* scripttempl/elfxtensa.sc: Likewise.
* scripttempl/mep.sc: Likewise.
* scripttempl/pe.sc: Likewise.
* scripttempl/pep.sc: Likewise.
* emultempl/aarch64elf.em (gld${EMULATION_NAME}_finish): Replace
finish_default with ldelf_finish.
* emultempl/alphaelf.em (alpha_finish): Likewise.
* emultempl/avrelf.em (avr_finish): Likewise.
* emultempl/elf.em (ld_${EMULATION_NAME}_emulation): Likewise.
* emultempl/ppc32elf.em (ppc_finish): Likewise.
* emultempl/ppc64elf.em (gld${EMULATION_NAME}_finish): Likewise.
* emultempl/spuelf.em (gld${EMULATION_NAME}_finish): Likewise.
* testsuite/ld-plugin/lto-10.out: New file.
* testsuite/ld-plugin/lto-10a.c: Likewise.
* testsuite/ld-plugin/lto-10b.c: Likewise.
* testsuite/ld-plugin/lto-10r.d: Likewise.
* testsuite/ld-plugin/lto-4.out: Likewise.
* testsuite/ld-plugin/lto-4a.c: Likewise.
* testsuite/ld-plugin/lto-4b.c: Likewise.
* testsuite/ld-plugin/lto-4c.c: Likewise.
* testsuite/ld-plugin/lto-4r-a.d: Likewise.
* testsuite/ld-plugin/lto-4r-b.d: Likewise.
* testsuite/ld-plugin/lto-4r-c.d: Likewise.
* testsuite/ld-plugin/lto-4r-d.d: Likewise.
* testsuite/ld-plugin/lto.exp (lto_link_tests): Prepare for
"LTO 4[acd]", "lto-4r-[abcd]" and "LTO 10" tests.
(lto_run_tests): Add "LTO 4[acd]" and "LTO 10" tests.
Build liblto-4.a. Run "lto-4r-[abcd]" tests.
Run lto-10r and create tmpdir/lto-10.o.
Add test for nm on mixed LTO/non-LTO object.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
520 lines
15 KiB
Scala
520 lines
15 KiB
Scala
# Linker script for PE.
|
|
#
|
|
# Copyright (C) 2014-2025 Free Software Foundation, Inc.
|
|
#
|
|
# Copying and distribution of this file, with or without modification,
|
|
# are permitted in any medium without royalty provided the copyright
|
|
# notice and this notice are preserved.
|
|
|
|
if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then
|
|
RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
|
|
fi
|
|
|
|
# We can't easily and portably get an unquoted $ in a shell
|
|
# substitution, so we do this instead.
|
|
# Sorting of the .foo$* sections is required by the definition of
|
|
# grouped sections in PE.
|
|
# Sorting of the file names in R_IDATA is required by the
|
|
# current implementation of dlltool (this could probably be changed to
|
|
# use grouped sections instead).
|
|
if test "${RELOCATING}"; then
|
|
R_TEXT='*(SORT(.text$*))'
|
|
if test "x$LD_FLAG" = "xauto_import" ; then
|
|
R_DATA='*(SORT(.data$*))
|
|
*(.rdata)
|
|
*(SORT(.rdata$*))'
|
|
R_RDATA=''
|
|
else
|
|
R_DATA='*(SORT(.data$*))'
|
|
R_RDATA='*(.rdata)
|
|
*(SORT(.rdata$*))'
|
|
fi
|
|
R_IDATA234='
|
|
KEEP (SORT(*)(.idata$2))
|
|
KEEP (SORT(*)(.idata$3))
|
|
/* These zeroes mark the end of the import list. */
|
|
LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
|
|
. = ALIGN(8);
|
|
KEEP (SORT(*)(.idata$4))'
|
|
R_IDATA5='SORT(*)(.idata$5)'
|
|
R_IDATA67='
|
|
KEEP (SORT(*)(.idata$6))
|
|
KEEP (SORT(*)(.idata$7))'
|
|
R_CRT_XC='KEEP (*(SORT(.CRT$XC*))) /* C initialization */'
|
|
R_CRT_XI='KEEP (*(SORT(.CRT$XI*))) /* C++ initialization */'
|
|
R_CRT_XL='KEEP (*(SORT(.CRT$XL*))) /* TLS callbacks */'
|
|
R_CRT_XP='KEEP (*(SORT(.CRT$XP*))) /* Pre-termination */'
|
|
R_CRT_XT='KEEP (*(SORT(.CRT$XT*))) /* Termination */'
|
|
R_CRT_XD='KEEP (*(SORT(.CRT$XD*))) /* Dynamic TLS Initializer */'
|
|
R_TLS='
|
|
KEEP (*(.tls$AAA))
|
|
KEEP (*(.tls))
|
|
KEEP (*(.tls$))
|
|
KEEP (*(SORT(.tls$*)))
|
|
KEEP (*(.tls$ZZZ))'
|
|
R_RSRC='
|
|
KEEP (*(.rsrc))
|
|
KEEP (*(.rsrc$*))'
|
|
else
|
|
R_TEXT=
|
|
R_DATA=
|
|
R_RDATA='*(.rdata)'
|
|
R_IDATA234=
|
|
R_IDATA5=
|
|
R_IDATA67=
|
|
R_CRT_XC=
|
|
R_CRT_XI=
|
|
R_CRT_XL=
|
|
R_CRT_XP=
|
|
R_CRT_XT=
|
|
R_CRT_XD=
|
|
R_TLS='*(.tls)'
|
|
R_RSRC='*(.rsrc)'
|
|
fi
|
|
|
|
cat <<EOF
|
|
/* Copyright (C) 2014-2025 Free Software Foundation, Inc.
|
|
|
|
Copying and distribution of this script, with or without modification,
|
|
are permitted in any medium without royalty provided the copyright
|
|
notice and this notice are preserved. */
|
|
|
|
${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})}
|
|
${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})}
|
|
${OUTPUT_ARCH+OUTPUT_ARCH(${OUTPUT_ARCH})}
|
|
|
|
${LIB_SEARCH_DIRS}
|
|
|
|
SECTIONS
|
|
{
|
|
${RELOCATING+/* Make the virtual address and file offset synced if the alignment is}
|
|
${RELOCATING+ lower than the target page size. */}
|
|
${RELOCATING+. = SIZEOF_HEADERS;}
|
|
${RELOCATING+. = ALIGN(__section_alignment__);}
|
|
.text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} :
|
|
{
|
|
${RELOCATING+KEEP (*(SORT_NONE(.init)))}
|
|
*(.text)
|
|
${R_TEXT}
|
|
${RELOCATING+ *(.text.*)}
|
|
${RELOCATING+ *(.gnu.linkonce.t.*)}
|
|
${RELOCATING+*(.glue_7t)}
|
|
${RELOCATING+*(.glue_7)}
|
|
${CONSTRUCTING+. = ALIGN(8);}
|
|
${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
|
|
${RELOCATING+/* ??? Why is .gcc_exc here? */}
|
|
${RELOCATING+ *(.gcc_exc)}
|
|
${RELOCATING+PROVIDE (etext = .);}
|
|
${RELOCATING+ KEEP (*(.gcc_except_table))}
|
|
}
|
|
|
|
/* The Cygwin32 library uses a section to avoid copying certain data
|
|
on fork. This used to be named ".data$nocopy". The linker used
|
|
to include this between __data_start__ and __data_end__, but that
|
|
breaks building the cygwin32 dll. Instead, we name the section
|
|
".data_cygwin_nocopy" and explicitly include it after __data_end__. */
|
|
|
|
.data ${RELOCATING+BLOCK(__section_alignment__)} :
|
|
{
|
|
${RELOCATING+__data_start__ = . ;}
|
|
*(.data)
|
|
${RELOCATING+*(.data2)}
|
|
${R_DATA}
|
|
KEEP(*(.jcr))
|
|
${RELOCATING+__data_end__ = . ;}
|
|
${RELOCATING+*(.data_cygwin_nocopy)}
|
|
}
|
|
|
|
.rdata ${RELOCATING+BLOCK(__section_alignment__)} :
|
|
{
|
|
${R_RDATA}
|
|
. = ALIGN(4);
|
|
${RELOCATING+__rt_psrelocs_start = .;}
|
|
${RELOCATING+KEEP(*(.rdata_runtime_pseudo_reloc))}
|
|
${RELOCATING+__rt_psrelocs_end = .;}
|
|
|
|
/* .ctors & .dtors */
|
|
${CONSTRUCTING+. = ALIGN(8);}
|
|
${CONSTRUCTING+
|
|
/* Note: we always define __CTOR_LIST__ and ___CTOR_LIST__ here,
|
|
we do not PROVIDE them. This is because the ctors.o startup
|
|
code in libgcc defines them as common symbols, with the
|
|
expectation that they will be overridden by the definitions
|
|
here. If we PROVIDE the symbols then they will not be
|
|
overridden and global constructors will not be run.
|
|
See PR 22762 for more details.
|
|
|
|
This does mean that it is not possible for a user to define
|
|
their own __CTOR_LIST__ and __DTOR_LIST__ symbols; if they do,
|
|
the content from those variables are included but the symbols
|
|
defined here silently take precedence. If they truly need to
|
|
be redefined, a custom linker script will have to be used.
|
|
(The custom script can just be a copy of this script with the
|
|
PROVIDE() qualifiers added).
|
|
|
|
In particular this means that ld -Ur does not work, because
|
|
the proper __CTOR_LIST__ set by ld -Ur is overridden by a
|
|
bogus __CTOR_LIST__ set by the final link. See PR 46. */
|
|
___CTOR_LIST__ = .;
|
|
__CTOR_LIST__ = .;
|
|
LONG (-1); LONG (-1);
|
|
KEEP (*(.ctors));
|
|
KEEP (*(.ctor));
|
|
KEEP (*(SORT_BY_NAME(.ctors.*)));
|
|
LONG (0); LONG (0);
|
|
}
|
|
${CONSTRUCTING+
|
|
/* See comment about __CTOR_LIST__ above. The same reasoning
|
|
applies here too. */
|
|
___DTOR_LIST__ = .;
|
|
__DTOR_LIST__ = .;
|
|
LONG (-1); LONG (-1);
|
|
KEEP (*(.dtors));
|
|
KEEP (*(.dtor));
|
|
KEEP (*(SORT_BY_NAME(.dtors.*)));
|
|
LONG (0); LONG (0);
|
|
}
|
|
|
|
/* .CRT */
|
|
${RELOCATING+___crt_xc_start__ = . ;}
|
|
${R_CRT_XC}
|
|
${RELOCATING+___crt_xc_end__ = . ;}
|
|
${RELOCATING+___crt_xi_start__ = . ;}
|
|
${R_CRT_XI}
|
|
${RELOCATING+___crt_xi_end__ = . ;}
|
|
${RELOCATING+___crt_xl_start__ = . ;}
|
|
${R_CRT_XL}
|
|
/* ___crt_xl_end__ is defined in the TLS Directory support code */
|
|
${RELOCATING+___crt_xp_start__ = . ;}
|
|
${R_CRT_XP}
|
|
${RELOCATING+___crt_xp_end__ = . ;}
|
|
${RELOCATING+___crt_xt_start__ = . ;}
|
|
${R_CRT_XT}
|
|
${RELOCATING+___crt_xt_end__ = . ;}
|
|
${RELOCATING+___crt_xd_start__ = . ;}
|
|
${R_CRT_XD}
|
|
${RELOCATING+___crt_xd_end__ = . ;}
|
|
}
|
|
|
|
${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST_END__ = __rt_psrelocs_end;}
|
|
${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST_END__ = __rt_psrelocs_end;}
|
|
${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST__ = __rt_psrelocs_start;}
|
|
${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST__ = __rt_psrelocs_start;}
|
|
|
|
.eh_frame ${RELOCATING+BLOCK(__section_alignment__)} :
|
|
{
|
|
KEEP (*(.eh_frame${RELOCATING+*}))
|
|
}
|
|
|
|
.pdata ${RELOCATING+BLOCK(__section_alignment__)} :
|
|
{
|
|
KEEP(*(.pdata${RELOCATING+*}))
|
|
}
|
|
|
|
.xdata ${RELOCATING+BLOCK(__section_alignment__)} :
|
|
{
|
|
KEEP(*(.xdata${RELOCATING+*}))
|
|
}
|
|
|
|
.bss ${RELOCATING+BLOCK(__section_alignment__)} :
|
|
{
|
|
${RELOCATING+__bss_start__ = . ;}
|
|
*(.bss)
|
|
*(COMMON)
|
|
${RELOCATING+__bss_end__ = . ;}
|
|
}
|
|
|
|
.edata ${RELOCATING+BLOCK(__section_alignment__)} :
|
|
{
|
|
*(.edata)
|
|
}
|
|
|
|
/DISCARD/ :
|
|
{
|
|
*(.debug\$S)
|
|
*(.debug\$T)
|
|
*(.debug\$F)
|
|
${RELOCATING+ *(.drectve)}
|
|
${RELOCATING+ *(.note.GNU-stack)}
|
|
${RELOCATING+ *(.gnu.lto_*)}
|
|
${RELOCATING+ *(.gnu_object_only)}
|
|
}
|
|
|
|
.idata ${RELOCATING+BLOCK(__section_alignment__)} :
|
|
{
|
|
/* This cannot currently be handled with grouped sections.
|
|
See pep.em:sort_sections. */
|
|
${R_IDATA234}
|
|
${RELOCATING+__IAT_start__ = .;}
|
|
${R_IDATA5}
|
|
${RELOCATING+__IAT_end__ = .;}
|
|
${R_IDATA67}
|
|
}
|
|
|
|
/* Windows TLS expects .tls\$AAA to be at the start and .tls\$ZZZ to be
|
|
at the end of the .tls section. This is important because _tls_start MUST
|
|
be at the beginning of the section to enable SECREL32 relocations with TLS
|
|
data. */
|
|
.tls ${RELOCATING+BLOCK(__section_alignment__)} :
|
|
{
|
|
${RELOCATING+___tls_start__ = . ;}
|
|
${R_TLS}
|
|
${RELOCATING+___tls_end__ = . ;}
|
|
}
|
|
|
|
.endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
|
|
{
|
|
/* end is deprecated, don't use it */
|
|
${RELOCATING+PROVIDE (end = .);}
|
|
${RELOCATING+PROVIDE ( _end = .);}
|
|
${RELOCATING+ __end__ = .;}
|
|
}
|
|
|
|
.rsrc ${RELOCATING+BLOCK(__section_alignment__)} : SUBALIGN(4)
|
|
{
|
|
${R_RSRC}
|
|
}
|
|
|
|
.reloc ${RELOCATING+BLOCK(__section_alignment__)} :
|
|
{
|
|
*(.reloc)
|
|
}
|
|
|
|
.stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.stab)
|
|
}
|
|
|
|
.stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.stabstr)
|
|
}
|
|
|
|
/* DWARF debug sections.
|
|
Symbols in the DWARF debugging sections are relative to the beginning
|
|
of the section. Unlike other targets that fake this by putting the
|
|
section VMA at 0, the PE format will not allow it. */
|
|
|
|
/* DWARF 1.1 and DWARF 2. */
|
|
.debug_aranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_aranges)
|
|
}
|
|
.zdebug_aranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_aranges)
|
|
}
|
|
|
|
.debug_pubnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_pubnames)
|
|
}
|
|
.zdebug_pubnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_pubnames)
|
|
}
|
|
|
|
/* DWARF 2. */
|
|
.debug_info ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_info${RELOCATING+ .gnu.linkonce.wi.*})
|
|
}
|
|
.zdebug_info ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_info${RELOCATING+ .zdebug.gnu.linkonce.wi.*})
|
|
}
|
|
|
|
.debug_abbrev ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_abbrev)
|
|
}
|
|
.zdebug_abbrev ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_abbrev)
|
|
}
|
|
|
|
.debug_line ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_line)
|
|
}
|
|
.zdebug_line ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_line)
|
|
}
|
|
|
|
.debug_frame ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_frame*)
|
|
}
|
|
.zdebug_frame ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_frame*)
|
|
}
|
|
|
|
.debug_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_str)
|
|
}
|
|
.zdebug_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_str)
|
|
}
|
|
|
|
.debug_loc ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_loc)
|
|
}
|
|
.zdebug_loc ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_loc)
|
|
}
|
|
|
|
.debug_macinfo ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_macinfo)
|
|
}
|
|
.zdebug_macinfo ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_macinfo)
|
|
}
|
|
|
|
/* SGI/MIPS DWARF 2 extensions. */
|
|
.debug_weaknames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_weaknames)
|
|
}
|
|
.zdebug_weaknames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_weaknames)
|
|
}
|
|
|
|
.debug_funcnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_funcnames)
|
|
}
|
|
.zdebug_funcnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_funcnames)
|
|
}
|
|
|
|
.debug_typenames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_typenames)
|
|
}
|
|
.zdebug_typenames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_typenames)
|
|
}
|
|
|
|
.debug_varnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_varnames)
|
|
}
|
|
.zdebug_varnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_varnames)
|
|
}
|
|
|
|
/* DWARF 3. */
|
|
.debug_pubtypes ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_pubtypes)
|
|
}
|
|
.zdebug_pubtypes ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_pubtypes)
|
|
}
|
|
|
|
.debug_ranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_ranges)
|
|
}
|
|
.zdebug_ranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_ranges)
|
|
}
|
|
|
|
/* DWARF 4. */
|
|
.debug_types ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_types${RELOCATING+ .gnu.linkonce.wt.*})
|
|
}
|
|
.zdebug_types ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_types${RELOCATING+ .gnu.linkonce.wt.*})
|
|
}
|
|
|
|
/* DWARF 5. */
|
|
.debug_addr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_addr)
|
|
}
|
|
.zdebug_addr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_addr)
|
|
}
|
|
.debug_line_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_line_str)
|
|
}
|
|
.zdebug_line_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_line_str)
|
|
}
|
|
.debug_loclists ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_loclists)
|
|
}
|
|
.zdebug_loclists ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_loclists)
|
|
}
|
|
.debug_macro ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_macro)
|
|
}
|
|
.zdebug_macro ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_macro)
|
|
}
|
|
.debug_names ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_names)
|
|
}
|
|
.zdebug_names ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_names)
|
|
}
|
|
.debug_rnglists ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_rnglists)
|
|
}
|
|
.zdebug_rnglists ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_rnglists)
|
|
}
|
|
.debug_str_offsets ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_str_offsets)
|
|
}
|
|
.zdebug_str_offsets ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_str_offsets)
|
|
}
|
|
.debug_sup ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_sup)
|
|
}
|
|
|
|
/* For Go and Rust. */
|
|
.debug_gdb_scripts ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.debug_gdb_scripts)
|
|
}
|
|
.zdebug_gdb_scripts ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
|
|
{
|
|
*(.zdebug_gdb_scripts)
|
|
}
|
|
}
|
|
EOF
|