diff options
author | Alan Modra <amodra@gmail.com> | 2021-05-07 11:24:10 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2021-05-07 16:25:40 +0930 |
commit | 70993db314dc42194478d2c47b67d89f285c054a (patch) | |
tree | 728ce7254d2d17cf617b788f1b2b5b2edc7b271e /ld | |
parent | 44056b7ce43618094e61bf856d77c798628cac83 (diff) | |
download | binutils-70993db314dc42194478d2c47b67d89f285c054a.zip binutils-70993db314dc42194478d2c47b67d89f285c054a.tar.gz binutils-70993db314dc42194478d2c47b67d89f285c054a.tar.bz2 |
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.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 7 | ||||
-rw-r--r-- | ld/ldexp.c | 1 | ||||
-rw-r--r-- | ld/ldmain.c | 10 |
3 files changed, 14 insertions, 4 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 80247c5..fa367d3 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,12 @@ 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. * testsuite/ld-elf/pr27825-2.d: Likewise. @@ -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; } diff --git a/ld/ldmain.c b/ld/ldmain.c index be33b69..42660eb 100644 --- a/ld/ldmain.c +++ b/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"); |