mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-02 02:35:00 +08:00
multiple definition warnings from script symbols
In commit 89753bbf81 I enabled a warning for scripts redefining symbols. The idea was to not warn for symbols defined by shared libraries (the h->u.def.section->output_section != NULL test), but the test failed to take into account absolute symbols. Absolute symbols defined in shared libraries are currently indistinguishable from absolute symbols defined in relocatable objects, at least when only looking at struct bfd_link_hash_entry. So, don't warn for any absolute symbols. * ldexp.c (update_definedness): Don't return false for absolute symbols. * ldmain.c (multiple_definition): Print "warning: " in message when not a hard error.
This commit is contained in:
@ -1,3 +1,10 @@
|
||||
2021-05-07 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* ldexp.c (update_definedness): Don't return false for absolute
|
||||
symbols.
|
||||
* ldmain.c (multiple_definition): Print "warning: " in message
|
||||
when not a hard error.
|
||||
|
||||
2021-05-07 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* testsuite/ld-elf/pr27825-1.d: Correct xfail.
|
||||
|
@ -325,6 +325,7 @@ update_definedness (const char *name, struct bfd_link_hash_entry *h)
|
||||
defentry->by_object = 1;
|
||||
if (h->type == bfd_link_hash_defined
|
||||
&& h->u.def.section->output_section != NULL
|
||||
&& !bfd_is_abs_section (h->u.def.section)
|
||||
&& !h->linker_def)
|
||||
ret = false;
|
||||
}
|
||||
|
10
ld/ldmain.c
10
ld/ldmain.c
@ -1073,10 +1073,12 @@ multiple_definition (struct bfd_link_info *info,
|
||||
nval = oval;
|
||||
obfd = NULL;
|
||||
}
|
||||
if (!info->warn_multiple_definition)
|
||||
einfo ("%X");
|
||||
einfo (_("%P: %C: multiple definition of `%pT'"),
|
||||
nbfd, nsec, nval, name);
|
||||
if (info->warn_multiple_definition)
|
||||
einfo (_("%P: %C: warning: multiple definition of `%pT'"),
|
||||
nbfd, nsec, nval, name);
|
||||
else
|
||||
einfo (_("%X%P: %C: multiple definition of `%pT'"),
|
||||
nbfd, nsec, nval, name);
|
||||
if (obfd != NULL)
|
||||
einfo (_("; %D: first defined here"), obfd, osec, oval);
|
||||
einfo ("\n");
|
||||
|
Reference in New Issue
Block a user