mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 19:09:31 +08:00
Check unsupported .symver with common symbol
The .symver directive on common symbol creates a new common symbol, which shouldn't be allowed, similar to alias on common symbol: $ cat y.S .comm bar,8,8 .set bar1,bar $ as -o y.o y.S y.S: Assembler messages: y.S:2: Error: `bar1' can't be equated to common symbol 'bar' $ PR gas/21661 * config/obj-elf.c (obj_elf_symver): Don't allow .symver with common symbol. (elf_frob_symbol): Likewise. * testsuite/gas/elf/elf.exp: Run pr21661. * testsuite/gas/elf/pr21661.d: New file. * testsuite/gas/elf/pr21661.s: Likewise.
This commit is contained in:
@ -1,3 +1,13 @@
|
|||||||
|
2017-06-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR gas/21661
|
||||||
|
* config/obj-elf.c (obj_elf_symver): Don't allow .symver with
|
||||||
|
common symbol.
|
||||||
|
(elf_frob_symbol): Likewise.
|
||||||
|
* testsuite/gas/elf/elf.exp: Run pr21661.
|
||||||
|
* testsuite/gas/elf/pr21661.d: New file.
|
||||||
|
* testsuite/gas/elf/pr21661.s: Likewise.
|
||||||
|
|
||||||
2017-06-26 Nick Clifton <nickc@redhat.com>
|
2017-06-26 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* config/tc-arm.c (fpu_any): Only define for ELF based targets.
|
* config/tc-arm.c (fpu_any): Only define for ELF based targets.
|
||||||
|
@ -1414,6 +1414,14 @@ obj_elf_symver (int ignore ATTRIBUTE_UNUSED)
|
|||||||
c = get_symbol_name (& name);
|
c = get_symbol_name (& name);
|
||||||
lex_type[(unsigned char) '@'] = old_lexat;
|
lex_type[(unsigned char) '@'] = old_lexat;
|
||||||
|
|
||||||
|
if (S_IS_COMMON (sym))
|
||||||
|
{
|
||||||
|
as_bad (_("`%s' can't be versioned to common symbol '%s'"),
|
||||||
|
name, S_GET_NAME (sym));
|
||||||
|
ignore_rest_of_line ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (symbol_get_obj (sym)->versioned_name == NULL)
|
if (symbol_get_obj (sym)->versioned_name == NULL)
|
||||||
{
|
{
|
||||||
symbol_get_obj (sym)->versioned_name = xstrdup (name);
|
symbol_get_obj (sym)->versioned_name = xstrdup (name);
|
||||||
@ -2277,6 +2285,13 @@ elf_frob_symbol (symbolS *symp, int *puntp)
|
|||||||
symp2 = symbol_find_or_make (sy_obj->versioned_name);
|
symp2 = symbol_find_or_make (sy_obj->versioned_name);
|
||||||
|
|
||||||
/* Now we act as though we saw symp2 = sym. */
|
/* Now we act as though we saw symp2 = sym. */
|
||||||
|
if (S_IS_COMMON (symp))
|
||||||
|
{
|
||||||
|
as_bad (_("`%s' can't be versioned to common symbol '%s'"),
|
||||||
|
sy_obj->versioned_name, S_GET_NAME (symp));
|
||||||
|
*puntp = TRUE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
S_SET_SEGMENT (symp2, S_GET_SEGMENT (symp));
|
S_SET_SEGMENT (symp2, S_GET_SEGMENT (symp));
|
||||||
|
|
||||||
|
@ -184,6 +184,7 @@ if { [is_elf_format] } then {
|
|||||||
run_dump_test "symtab"
|
run_dump_test "symtab"
|
||||||
}
|
}
|
||||||
run_dump_test "symver"
|
run_dump_test "symver"
|
||||||
|
run_dump_test "pr21661"
|
||||||
|
|
||||||
# No indirect functions on non-GNU targets.
|
# No indirect functions on non-GNU targets.
|
||||||
# The Visium and MSP set the ELF header's OSABI field to ELFOSABI_STANDALONE.
|
# The Visium and MSP set the ELF header's OSABI field to ELFOSABI_STANDALONE.
|
||||||
|
2
gas/testsuite/gas/elf/pr21661.d
Normal file
2
gas/testsuite/gas/elf/pr21661.d
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#name: unsupported .symver with common symbol
|
||||||
|
#error-output: pr21661.l
|
3
gas/testsuite/gas/elf/pr21661.l
Normal file
3
gas/testsuite/gas/elf/pr21661.l
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[^:]*: Assembler messages:
|
||||||
|
[^:]*:2: Error: `foo@VERS.1' can't be versioned to common symbol 'foo'
|
||||||
|
[^:]*: Error: `bar@VERS.1' can't be versioned to common symbol 'bar'
|
4
gas/testsuite/gas/elf/pr21661.s
Normal file
4
gas/testsuite/gas/elf/pr21661.s
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.comm foo,8,8
|
||||||
|
.symver foo,foo@VERS.1
|
||||||
|
.symver bar,bar@VERS.1
|
||||||
|
.comm bar,8,8
|
Reference in New Issue
Block a user