mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 19:09:31 +08:00
* elflink.c (elf_link_output_extsym): Weaken assertion: if --gc-section is set, there may be no TLS segment.
* lib/ld-lib.exp (check_gc_sections_available): New proc, based on the version in gcc/testsuite/lib/target-supports.exp. * ld-elf/eld.exp: Use check_gc_sections_available.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2007-11-16 Tristan Gingold <gingold@adacore.com>
|
||||||
|
|
||||||
|
* elflink.c (elf_link_output_extsym): Weaken assertion: if
|
||||||
|
--gc-section is set, there may be no TLS segment.
|
||||||
|
|
||||||
2007-11-19 Alan Modra <amodra@bigpond.net.au>
|
2007-11-19 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* elf-bfd.h (bfd_elf_perform_complex_relocation): Update prototype.
|
* elf-bfd.h (bfd_elf_perform_complex_relocation): Update prototype.
|
||||||
|
@ -8536,10 +8536,15 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
|
|||||||
sym.st_value += input_sec->output_section->vma;
|
sym.st_value += input_sec->output_section->vma;
|
||||||
if (h->type == STT_TLS)
|
if (h->type == STT_TLS)
|
||||||
{
|
{
|
||||||
/* STT_TLS symbols are relative to PT_TLS segment
|
asection *tls_sec = elf_hash_table (finfo->info)->tls_sec;
|
||||||
base. */
|
if (tls_sec != NULL)
|
||||||
BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL);
|
sym.st_value -= tls_sec->vma;
|
||||||
sym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma;
|
else
|
||||||
|
{
|
||||||
|
/* The TLS section may have been garbage collected. */
|
||||||
|
BFD_ASSERT (finfo->info->gc_sections
|
||||||
|
&& !input_sec->gc_mark);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,14 @@
|
|||||||
|
2007-11-20 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
* lib/ld-lib.exp (check_gc_sections_available): New proc, based
|
||||||
|
on the version in gcc/testsuite/lib/target-supports.exp.
|
||||||
|
* ld-elf/elf.exp: Use check_gc_sections_available.
|
||||||
|
|
||||||
|
2007-11-20 Tristan Gingold <gingold@adacore.com>
|
||||||
|
|
||||||
|
* ld-elf/tls_gc.s: New test.
|
||||||
|
* ld-elf/elf.exp: Add tls_gc test.
|
||||||
|
|
||||||
2007-11-17 Thiemo Seufer <ths@mips.com>
|
2007-11-17 Thiemo Seufer <ths@mips.com>
|
||||||
|
|
||||||
* ld-mips-elf/attr-gnu-4-14.d, ld-mips-elf/attr-gnu-4-41.d:
|
* ld-mips-elf/attr-gnu-4-14.d, ld-mips-elf/attr-gnu-4-41.d:
|
||||||
|
@ -53,6 +53,13 @@ if { [istarget *-*-linux*] } {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if { [check_gc_sections_available] } {
|
||||||
|
run_ld_link_tests {
|
||||||
|
{"--gc-sections on tls variable"
|
||||||
|
"--gc-section" "" {tls_gc.s} {} "tls_gc"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# The following tests require running the executable generated by ld.
|
# The following tests require running the executable generated by ld.
|
||||||
if ![isnative] {
|
if ![isnative] {
|
||||||
return
|
return
|
||||||
|
@ -1535,3 +1535,45 @@ proc run_cc_link_tests { ldtests } {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Returns true if --gc-sections is supported on the target.
|
||||||
|
|
||||||
|
proc check_gc_sections_available { } {
|
||||||
|
global gc_sections_available_saved
|
||||||
|
global ld
|
||||||
|
|
||||||
|
if {![info exists gc_sections_available_saved]} {
|
||||||
|
# Some targets don't support gc-sections despite whatever's
|
||||||
|
# advertised by ld's options.
|
||||||
|
if { [istarget alpha*-*-*]
|
||||||
|
|| [istarget ia64-*-*] } {
|
||||||
|
set gc_sections_available_saved 0
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# elf2flt uses -q (--emit-relocs), which is incompatible with
|
||||||
|
# --gc-sections.
|
||||||
|
if { [board_info target exists ldflags]
|
||||||
|
&& [regexp " -elf2flt\[ =\]" " [board_info target ldflags] "] } {
|
||||||
|
set gc_sections_available_saved 0
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# VxWorks kernel modules are relocatable objects linked with -r,
|
||||||
|
# while RTP executables are linked with -q (--emit-relocs).
|
||||||
|
# Both of these options are incompatible with --gc-sections.
|
||||||
|
if { [istarget *-*-vxworks*] } {
|
||||||
|
set gc_sections_available_saved 0
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if the ld used by gcc supports --gc-sections.
|
||||||
|
set ld_output [remote_exec host $ld "--help"]
|
||||||
|
if { [ string first "--gc-sections" $ld_output ] >= 0 } {
|
||||||
|
set gc_sections_available_saved 1
|
||||||
|
} else {
|
||||||
|
set gc_sections_available_saved 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $gc_sections_available_saved
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user