PR ld/15365
        * layout.cc (Layout::finalize): Make __ehdr_start STV_HIDDEN.

        ld/
        PR ld/15365
        * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
        Restrict __ehdr_start's export class to no less than STV_HIDDEN.

        ld/testsuite/
        PR ld/15365
        * ld-elf/ehdr_start.d: Expect __ehdr_start to be STB_LOCAL.
        * ld-mips-elf/ehdr_start-1.nd: New test.
        * ld-mips-elf/ehdr_start-2.nd: New test.
        * ld-mips-elf/ehdr_start-1.ld: New test linker script.
        * ld-mips-elf/ehdr_start-2.ld: New test linker script.
        * ld-mips-elf/ehdr_start-new.s: New test source.
        * ld-mips-elf/ehdr_start-o32.s: New test source.
        * ld-mips-elf/mips-elf.exp: Run the new tests.
This commit is contained in:
Maciej W. Rozycki
2013-05-03 15:19:27 +00:00
parent a5382c42bb
commit cde7cb0129
13 changed files with 111 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2013-05-03 Maciej W. Rozycki <macro@codesourcery.com>
PR ld/15365
* layout.cc (Layout::finalize): Make __ehdr_start STV_HIDDEN.
2013-05-03 Alan Modra <amodra@gmail.com> 2013-05-03 Alan Modra <amodra@gmail.com>
* merge.cc (Output_merge_string::do_add_input_section): Correct * merge.cc (Output_merge_string::do_add_input_section): Correct

View File

@ -2713,7 +2713,7 @@ Layout::finalize(const Input_objects* input_objects, Symbol_table* symtab,
symtab->define_in_output_segment("__ehdr_start", NULL, symtab->define_in_output_segment("__ehdr_start", NULL,
Symbol_table::PREDEFINED, load_seg, 0, 0, Symbol_table::PREDEFINED, load_seg, 0, 0,
elfcpp::STT_NOTYPE, elfcpp::STB_GLOBAL, elfcpp::STT_NOTYPE, elfcpp::STB_GLOBAL,
elfcpp::STV_DEFAULT, 0, elfcpp::STV_HIDDEN, 0,
Symbol::SEGMENT_START, true); Symbol::SEGMENT_START, true);
// Set the file offsets of all the non-data sections we've seen so // Set the file offsets of all the non-data sections we've seen so

View File

@ -1,3 +1,9 @@
2013-05-03 Alan Modra <amodra@gmail.com>
PR ld/15365
* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
Restrict __ehdr_start's export class to no less than STV_HIDDEN.
2013-05-03 Alan Modra <amodra@gmail.com> 2013-05-03 Alan Modra <amodra@gmail.com>
* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):

View File

@ -1487,6 +1487,13 @@ gld${EMULATION_NAME}_before_allocation (void)
{ {
_bfd_elf_tls_setup (link_info.output_bfd, &link_info); _bfd_elf_tls_setup (link_info.output_bfd, &link_info);
/* Make __ehdr_start hidden if it has been referenced, to
prevent the symbol from being dynamic. */
if (!bfd_elf_record_link_assignment (link_info.output_bfd, &link_info,
"__ehdr_start", TRUE, TRUE))
einfo ("%P%F: failed to record assignment to %s: %E\n",
"__ehdr_start");
/* If we are going to make any variable assignments, we need to /* If we are going to make any variable assignments, we need to
let the ELF backend know about them in case the variables are let the ELF backend know about them in case the variables are
referred to by dynamic objects. */ referred to by dynamic objects. */

View File

@ -1,3 +1,15 @@
2013-05-03 Maciej W. Rozycki <macro@codesourcery.com>
PR ld/15365
* ld-elf/ehdr_start.d: Expect __ehdr_start to be STB_LOCAL.
* ld-mips-elf/ehdr_start-1.nd: New test.
* ld-mips-elf/ehdr_start-2.nd: New test.
* ld-mips-elf/ehdr_start-1.ld: New test linker script.
* ld-mips-elf/ehdr_start-2.ld: New test linker script.
* ld-mips-elf/ehdr_start-new.s: New test source.
* ld-mips-elf/ehdr_start-o32.s: New test source.
* ld-mips-elf/mips-elf.exp: Run the new tests.
2013-05-03 Maciej W. Rozycki <macro@codesourcery.com> 2013-05-03 Maciej W. Rozycki <macro@codesourcery.com>
* ld-elf/provide-hidden-s.nd: New test. * ld-elf/provide-hidden-s.nd: New test.

View File

@ -4,5 +4,5 @@
#target: *-*-linux* *-*-gnu* *-*-nacl* #target: *-*-linux* *-*-gnu* *-*-nacl*
#... #...
[0-9a-f]*000 [ADRT] __ehdr_start [0-9a-f]*000 [Adrt] __ehdr_start
#pass #pass

View File

@ -0,0 +1,9 @@
ENTRY (__start)
SECTIONS
{
. = 0x12300000 + SIZEOF_HEADERS;
.text : { *(.text) }
. = 0x23400000;
HIDDEN (_gp = ALIGN (16) + 0x7ff0);
.got : { *(.got) }
}

View File

@ -0,0 +1,4 @@
Symbol table '\.symtab' contains [0-9]+ entries:
#...
*[0-9]+: 0*12300000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +[0-9]+ __ehdr_start
#pass

View File

@ -0,0 +1,10 @@
ENTRY (__start)
SECTIONS
{
. = 0x12300000 + SIZEOF_HEADERS;
.text : { *(.text) }
. = 0x23400000;
__ehdr_start = .;
HIDDEN (_gp = ALIGN (16) + 0x7ff0);
.got : { *(.got) }
}

View File

@ -0,0 +1,4 @@
Symbol table '\.symtab' contains [0-9]+ entries:
#...
*[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +[0-9]+ __ehdr_start
#pass

View File

@ -0,0 +1,13 @@
.abicalls
.text
.weak __ehdr_start
.globl __start
.ent __start
.frame $29, 0, $31
.mask 0x00000000, 0
__start:
.cplocal $2
.cpsetup $t9, $zero, __start
lw $2, __ehdr_start
jr $31
.end __start

View File

@ -0,0 +1,14 @@
.abicalls
.text
.weak __ehdr_start
.globl __start
.ent __start
.frame $29, 0, $31
.mask 0x00000000, 0
__start:
.set noreorder
.cpload $25
.set reorder
lw $2, __ehdr_start
jr $31
.end __start

View File

@ -709,3 +709,28 @@ foreach { abi } $abis {
"readelf -A export-class-call16-${abi}.gd"] \ "readelf -A export-class-call16-${abi}.gd"] \
"export-class-call16-${abi}.so"]] "export-class-call16-${abi}.so"]]
} }
# Magic __ehdr_start symbol tests.
set abis [concat o32 [expr {$has_newabi ? "n32 n64" : ""}]]
foreach { abi } $abis {
set suff [string map {o32 o32 n32 new n64 new} $abi]
run_ld_link_tests [list \
[list \
"MIPS magic __ehdr_start symbol test 1 ($abi)" \
"$abi_ldflags($abi) -T ehdr_start-1.ld" "" \
"$abi_asflags($abi)" \
[list ehdr_start-${suff}.s] \
[list "readelf -s ehdr_start-1.nd"] \
"ehdr_start-1-${abi}"]]
if [regexp "(?:n32|n64)" "$abi"] {
setup_kfail "mips*-*-*" "ld/15428"
}
run_ld_link_tests [list \
[list \
"MIPS magic __ehdr_start symbol test 2 ($abi)" \
"$abi_ldflags($abi) -T ehdr_start-2.ld" "" \
"$abi_asflags($abi)" \
[list ehdr_start-${suff}.s] \
[list "readelf -s ehdr_start-2.nd"] \
"ehdr_start-2-${abi}"]]
}