Stop the MIPS assembler from accepting ifunc symbols.

PR 25803
gas	* config/obj-elf.c (obj_elf_type): Reject ifunc symbols on MIPS
	targets.
	* testsuite/gas/elf/elf.exp: Add MIPS targets to the list to skip
	for the type-2 test.
	* testsuite/gas/elf/type-noifunc.e: Update to allow for MIPS
	targets running this test.

bfd	* elfxx-mips.c (_bfd_mips_elf_adjust_dynamic_symbol): Replace an
	abort with a more helpful error message.
This commit is contained in:
Nick Clifton 2020-04-16 18:02:10 +01:00
parent 7a1a12f4d1
commit 8e4979ac1e
6 changed files with 40 additions and 9 deletions

View File

@ -1,3 +1,9 @@
2020-04-16 Nick Clifton <nickc@redhat.com>
PR 25803
* elfxx-mips.c (_bfd_mips_elf_adjust_dynamic_symbol): Replace an
abort with a more helpful error message.
2020-04-16 Alan Modra <amodra@gmail.com>
PR 25827

View File

@ -9311,12 +9311,21 @@ _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
hmips = (struct mips_elf_link_hash_entry *) h;
/* Make sure we know what is going on here. */
BFD_ASSERT (dynobj != NULL
&& (h->needs_plt
|| h->is_weakalias
|| (h->def_dynamic
&& h->ref_regular
&& !h->def_regular)));
if (dynobj == NULL
|| (! h->needs_plt
&& ! h->is_weakalias
&& (! h->def_dynamic
|| ! h->ref_regular
|| h->def_regular)))
{
if (h->type == STT_GNU_IFUNC)
_bfd_error_handler (_("IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"),
h->root.root.string);
else
_bfd_error_handler (_("non-dynamic symbol %s in dynamic symbol table"),
h->root.root.string);
return TRUE;
}
hmips = (struct mips_elf_link_hash_entry *) h;

View File

@ -1,3 +1,14 @@
2020-04-16 Gagan Singh Sidhu <broly@mac.com>
Nick Clifton <nickc@redhat.com>
PR 25803
* config/obj-elf.c (obj_elf_type): Reject ifunc symbols on MIPS
targets.
* testsuite/gas/elf/elf.exp: Add MIPS targets to the list to skip
for the type-2 test.
* testsuite/gas/elf/type-noifunc.e: Update to allow for MIPS
targets running this test.
2020-02-16 David Faust <david.faust@oracle.com>
* testsuite/gas/bpf/bpf.exp: Run jump32 tests.

View File

@ -2177,6 +2177,10 @@ obj_elf_type (int ignore ATTRIBUTE_UNUSED)
&& bed->elf_osabi != ELFOSABI_FREEBSD)
as_bad (_("symbol type \"%s\" is supported only by GNU "
"and FreeBSD targets"), type_name);
/* MIPS targets do not support IFUNCS. */
else if (bed->target_id == MIPS_ELF_DATA)
as_bad (_("symbol type \"%s\" is not supported by "
"MIPS targets"), type_name);
elf_tdata (stdoutput)->has_gnu_osabi |= elf_gnu_osabi_ifunc;
type = BSF_FUNCTION | BSF_GNU_INDIRECT_FUNCTION;
}

View File

@ -221,6 +221,7 @@ if { [is_elf_format] } then {
# We also need to exclude targets that do not support unique objects.
if { [istarget "*-*-hpux*"]
|| [istarget "arm*-*-*"]
|| [istarget "mips*-*-*"]
|| [istarget "msp*-*-*"]
|| [istarget "visium-*-*"]
|| ![supports_gnu_unique]

View File

@ -1,5 +1,5 @@
+.: 0+0 +1 +FUNC +LOCAL +DEFAULT +. function
+.: 0+0 +1 +OBJECT +LOCAL +DEFAULT +. object
+.: 0+1 +1 +TLS +LOCAL +DEFAULT +. tls_object
+[0-9]+: 0+1 +1 +TLS +LOCAL +DEFAULT +. tls_object
+..: 0+2 +1 +NOTYPE +LOCAL +DEFAULT +. notype
+..: 0+1 +1 +(COMMON|OBJECT) +GLOBAL +DEFAULT +(ANSI_|)COM common