PR27100, final link failed: bad value
The failure on this PR is due to using the same bfd section for
multiple output sections. Commit 21401fc7bf
managed to create
duplicate linker script output section statements, but not the actual
bfd sections.
PR 27100
* ldlang.h (lang_output_section_statement_type): Add dup_output.
* ldlang.c (lang_output_section_statement_lookup): Set dup_output.
(init_os): Test dup_output rather than constraint.
* testsuite/ld-scripts/pr27100.d,
* testsuite/ld-scripts/pr27100.s,
* testsuite/ld-scripts/pr27100.t: New test.
* testsuite/ld-scripts/data.exp: Run it. Don't exclude aout here.
* testsuite/ld-scripts/data.d: Do so here instead.
* testsuite/ld-scripts/fill.d: Likewise.
* testsuite/ld-scripts/fill16.d: Likewise.
This commit is contained in:
parent
62fa7b3c6a
commit
de34d42812
10 changed files with 38 additions and 9 deletions
14
ld/ChangeLog
14
ld/ChangeLog
|
@ -1,3 +1,17 @@
|
|||
2020-12-24 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 27100
|
||||
* ldlang.h (lang_output_section_statement_type): Add dup_output.
|
||||
* ldlang.c (lang_output_section_statement_lookup): Set dup_output.
|
||||
(init_os): Test dup_output rather than constraint.
|
||||
* testsuite/ld-scripts/pr27100.d,
|
||||
* testsuite/ld-scripts/pr27100.s,
|
||||
* testsuite/ld-scripts/pr27100.t: New test.
|
||||
* testsuite/ld-scripts/data.exp: Run it. Don't exclude aout here.
|
||||
* testsuite/ld-scripts/data.d: Do so here instead.
|
||||
* testsuite/ld-scripts/fill.d: Likewise.
|
||||
* testsuite/ld-scripts/fill16.d: Likewise.
|
||||
|
||||
2020-12-23 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* NEWS: Mention LAM_U48 and LAM_U57 support.
|
||||
|
|
|
@ -1526,6 +1526,8 @@ lang_output_section_statement_lookup (const char *name,
|
|||
|
||||
entry->s.output_section_statement.name = name;
|
||||
entry->s.output_section_statement.constraint = constraint;
|
||||
entry->s.output_section_statement.dup_output = (create == 2
|
||||
|| constraint == SPECIAL);
|
||||
return &entry->s.output_section_statement;
|
||||
}
|
||||
|
||||
|
@ -2387,7 +2389,7 @@ init_os (lang_output_section_statement_type *s, flagword flags)
|
|||
if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
|
||||
einfo (_("%F%P: illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
|
||||
|
||||
if (s->constraint != SPECIAL)
|
||||
if (!s->dup_output)
|
||||
s->bfd_section = bfd_get_section_by_name (link_info.output_bfd, s->name);
|
||||
if (s->bfd_section == NULL)
|
||||
s->bfd_section = bfd_make_section_anyway_with_flags (link_info.output_bfd,
|
||||
|
|
|
@ -173,6 +173,9 @@ typedef struct lang_output_section_statement_struct
|
|||
unsigned int after_end : 1;
|
||||
/* If this section uses the alignment of its input sections. */
|
||||
unsigned int align_lma_with_input : 1;
|
||||
/* If script has duplicate output section statements of the same name
|
||||
create duplicate output sections. */
|
||||
unsigned int dup_output : 1;
|
||||
} lang_output_section_statement_type;
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#source: data.s
|
||||
#ld: -T data.t
|
||||
#objdump: -s -j .text
|
||||
#notarget: [is_aout_format]
|
||||
#xfail: tic4x-*-* tic54x-*-*
|
||||
|
||||
.*: file format .*
|
||||
|
|
|
@ -19,14 +19,6 @@
|
|||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
# MA 02110-1301, USA.
|
||||
|
||||
# An a.out "objdump -s -j .text" has the file header visible inside the
|
||||
# text segment, confusing run_dump_test.
|
||||
if {[is_aout_format]} {
|
||||
unsupported data
|
||||
unsupported fill
|
||||
return
|
||||
}
|
||||
|
||||
set old_LDFLAGS $LDFLAGS
|
||||
if { [is_xcoff_format] } then {
|
||||
set LDFLAGS "$LDFLAGS -bnogc"
|
||||
|
@ -35,5 +27,6 @@ if { [is_xcoff_format] } then {
|
|||
run_dump_test data
|
||||
run_dump_test fill
|
||||
run_dump_test fill16
|
||||
run_dump_test pr27100
|
||||
|
||||
set LDFLAGS $old_LDFLAGS
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#source: fill_2.s
|
||||
#ld: -T fill.t
|
||||
#objdump: -s -j .text
|
||||
#notarget: [is_aout_format]
|
||||
#skip: ia64-*-* mips*-*-freebsd* mips*-*-gnu* mips*-*-irix* mips*-*-kfreebsd*
|
||||
#skip: mips*-*-linux* mips*-*-netbsd* mips*-*-openbsd* mips*-*-sysv4*
|
||||
#skip: tilegx*-*-* tilepro-*-* x86_64-*-cygwin x86_64-*-mingw* x86_64-*-pe*
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#source: fill16_2.s
|
||||
#ld: -T fill.t
|
||||
#objdump: -s -j .text
|
||||
#notarget: [is_aout_format]
|
||||
#skip: arm-*-coff i[3-7]86-*-coff [is_xcoff_format]
|
||||
#xfail: alpha*-*-*ecoff sh-*-pe sparc*-*-coff
|
||||
#xfail: tic30-*-coff tic4x-*-* tic54x-*-* z8k-*-*
|
||||
|
|
10
ld/testsuite/ld-scripts/pr27100.d
Normal file
10
ld/testsuite/ld-scripts/pr27100.d
Normal file
|
@ -0,0 +1,10 @@
|
|||
#ld: -r -T pr27100.t
|
||||
#objdump: -h
|
||||
#notarget: [is_aout_format]
|
||||
#xfail: alpha*-*-*vms* mmix-*-* *c54x-*-* [is_xcoff_format]
|
||||
|
||||
#...
|
||||
.* \.data +0+60 .*
|
||||
#...
|
||||
.* \.data +0+10 .*
|
||||
#pass
|
2
ld/testsuite/ld-scripts/pr27100.s
Normal file
2
ld/testsuite/ld-scripts/pr27100.s
Normal file
|
@ -0,0 +1,2 @@
|
|||
.data
|
||||
.space 80
|
2
ld/testsuite/ld-scripts/pr27100.t
Normal file
2
ld/testsuite/ld-scripts/pr27100.t
Normal file
|
@ -0,0 +1,2 @@
|
|||
SECTIONS { .data ALIGN (16) : { aa = .; LONG(0xdeadbeef); . = ALIGN (16); } }
|
||||
SECTIONS { .data ALIGN (16) : { bb = .; LONG(0x00c0ffee); . = ALIGN (16); } }
|
Loading…
Add table
Reference in a new issue