|
View:
New views
2 Messages
—
Rating Filter:
Alert me
|
|
|
RFC: Improve error message for unresolved symbols because of --no-add-neededHi Guys,
As a follow up to my previous post about changing --add-needed to -copy-dt-needed-entries, here is a second patch that addresses another problem with the --no-add-needed option. The problem in this case is that if an unresolved symbol is defined in a dynamic library which would have been included via following a DT_NEEDED link, but which is denied because the user has specified --no-add-needed on the command line, then a rather unhelpful error message is generated: % gcc -Wl,--no-add-needed -o foo1 foo1.o foo2.so -Wl,--rpath-link=. ld: ./foo3.so: invalid DSO for symbol `foo' definition Note in this case foo3.so is the dynamic library defining 'foo' and that it would have been included via a DT_NEEDED entry in foo2.so. The attached patch changes the error message to this: ld: foo1.o: undefined reference to symbol 'foo' ld: note: 'foo' is defined in DSO ./foo3.so so try adding it to the linker command line Which identifies the object containing the unresolved reference as well as providing the user with a hint as to how they can resolve the problem. What do you think ? Any objections to this change ? Cheers Nick bfd/ChangeLog 2009-10-29 Nick Clifton <nickc@...> * elflink.c (elf_link_add_object_symbols): Improve error message generated when a symbol is left unresolved because a --no-add-needed command line option has prevented the inclusion of the DSO defining it. Index: bfd/elflink.c =================================================================== RCS file: /cvs/src/src/bfd/elflink.c,v retrieving revision 1.357 diff -c -3 -p -r1.357 elflink.c *** bfd/elflink.c 13 Oct 2009 04:06:20 -0000 1.357 --- bfd/elflink.c 29 Oct 2009 12:17:48 -0000 *************** error_free_dyn: *** 3877,3882 **** --- 3877,3883 ---- bfd_boolean common; unsigned int old_alignment; bfd *old_bfd; + bfd * undef_bfd = NULL; override = FALSE; *************** error_free_dyn: *** 4108,4113 **** --- 4109,4128 ---- name = newname; } + /* If this is a definition of a previously undefined symbol + make a note of the bfd that contained the reference in + case we need to refer to it later on in error messages. */ + if (! bfd_is_und_section (sec)) + { + h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE); + + if (h != NULL + && (h->root.type == bfd_link_hash_undefined + || h->root.type == bfd_link_hash_undefweak) + && h->root.u.undef.abfd) + undef_bfd = h->root.u.undef.abfd; + } + if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec, &value, &old_alignment, sym_hash, &skip, &override, *************** error_free_dyn: *** 4448,4456 **** if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0) { (*_bfd_error_handler) ! (_("%B: invalid DSO for symbol `%s' definition"), abfd, name); ! bfd_set_error (bfd_error_bad_value); goto error_free_vers; } --- 4463,4474 ---- if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0) { (*_bfd_error_handler) ! (_("%B: undefined reference to symbol '%s'"), ! undef_bfd == NULL ? info->output_bfd : undef_bfd, name); ! (*_bfd_error_handler) ! (_("note: '%s' is defined in DSO %B so try adding it to the linker command line"), abfd, name); ! bfd_set_error (bfd_error_invalid_operation); goto error_free_vers; } |
|
|
Re: RFC: Improve error message for unresolved symbols because of --no-add-neededHi Guys,
> bfd/ChangeLog > 2009-10-29 Nick Clifton <nickc@...> > > * elflink.c (elf_link_add_object_symbols): Improve error > message generated when a symbol is left unresolved because a > --no-add-needed command line option has prevented the > inclusion of the DSO defining it. Well I had no objections to this, so I have gone ahead and checked it in. Cheers Nick |
| Free embeddable forum powered by Nabble | Forum Help |