bfd: strip symbols not representable in COFF/PE symbol table
The offset-within-section field in the symbol table entry is only 32 bits wide, so rather than emitting bogus entries omit them, and issue a diagnostic identifying the issue. This requires adjusting the PR/22267 test to no longer produce symbols with out of range values on 64-bit BFD. This also depends on adjustments to testsuite/ld-scripts/map-address.* made by an earlier patch. The purpose of the test can very well be achieved nevertheless.
This commit is contained in:
parent
3044062c34
commit
67b0f68480
@ -1,3 +1,8 @@
|
|||||||
|
2021-03-10 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
|
* cofflink.c (_bfd_coff_write_global_sym): Range-check symbol
|
||||||
|
offset.
|
||||||
|
|
||||||
2021-03-10 Alan Modra <amodra@gmail.com>
|
2021-03-10 Alan Modra <amodra@gmail.com>
|
||||||
Jan Beulich <jbeulich@suse.com>
|
Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
|
@ -2602,6 +2602,17 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data)
|
|||||||
+ h->root.u.def.section->output_offset);
|
+ h->root.u.def.section->output_offset);
|
||||||
if (! obj_pe (flaginfo->output_bfd))
|
if (! obj_pe (flaginfo->output_bfd))
|
||||||
isym.n_value += sec->vma;
|
isym.n_value += sec->vma;
|
||||||
|
#ifdef BFD64
|
||||||
|
if (isym.n_value > (bfd_vma) 0xffffffff)
|
||||||
|
{
|
||||||
|
if (! h->root.linker_def)
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("%pB: stripping non-representable symbol '%s' (value "
|
||||||
|
"%" BFD_VMA_FMT "x)"),
|
||||||
|
output_bfd, h->root.root.string, isym.n_value);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
2021-03-10 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
|
* testsuite/ld-scripts/pr22267.t: Avoid symbol value with more
|
||||||
|
than 32 set bits.
|
||||||
|
* testsuite/ld-scripts/pr22267.d: Adjust expectation and drop
|
||||||
|
comment.
|
||||||
|
* scripttempl/mcorepe.sc: Use PROVIDE() for _stack.
|
||||||
|
|
||||||
2021-03-09 Jan Beulich <jbeulich@suse.com>
|
2021-03-09 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
* testsuite/ld-pe/reloc.s: Add entry point symbols. Increase
|
* testsuite/ld-pe/reloc.s: Add entry point symbols. Increase
|
||||||
|
@ -168,7 +168,7 @@ SECTIONS
|
|||||||
|
|
||||||
.stack 0x80000 :
|
.stack 0x80000 :
|
||||||
{
|
{
|
||||||
_stack = .;
|
PROVIDE(_stack = .);
|
||||||
*(.stack)
|
*(.stack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
#nm: -n
|
#nm: -n
|
||||||
#xfail: bfin-*-linux* frv-*-linux*
|
#xfail: bfin-*-linux* frv-*-linux*
|
||||||
|
|
||||||
# Some targets may zero-extend 32-bit address to 64 bits.
|
|
||||||
#...
|
#...
|
||||||
0*f+00 A foo
|
0*ff A foo
|
||||||
#pass
|
#pass
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
foo = ~0xFF;
|
foo = ~~0xFF;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user