[binutils-gdb] Fix PR ld/24574

Eric Botcazou ebotcazou@sourceware.org
Thu Sep 5 16:32:00 GMT 2019


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=de07a745805b28ed2c973635752719c4a6a32b1d

commit de07a745805b28ed2c973635752719c4a6a32b1d
Author: Eric Botcazou <ebotcazou@gcc.gnu.org>
Date:   Thu Sep 5 18:23:37 2019 +0200

    Fix PR ld/24574
    
    This restores a line that has been dropped when the auto-import feature
    of the PE-COFF linker was overhauled about one year.  It is necessary
    for GDB to properly resolve extern symbol in DLLs.
    
    ld/ChangeLog
    	* pe-dll.c (pe_find_data_imports): Replace again the original name
    	of the undefined symbol with the __imp_ prefixed one after it is
    	resolved.

Diff:
---
 ld/ChangeLog | 6 ++++++
 ld/pe-dll.c  | 5 +++++
 2 files changed, 11 insertions(+)

diff --git a/ld/ChangeLog b/ld/ChangeLog
index 0da9e25..37836aa 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2019-09-05  Eric Botcazou  <ebotcazou@adacore.com>
+
+	PR ld/24574
+	* pe-dll.c (pe_find_data_imports): Replace again the original name of
+	the undefined symbol with the __imp_ prefixed one after it is resolved.
+
 2019-09-05  Alan Modra  <amodra@gmail.com>
 
 	* testsuite/ld-powerpc/pcrelopt.s,
diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index 81ab116..577b911 100644
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -1445,6 +1445,11 @@ pe_find_data_imports (const char *symhead,
 	    undef->u.def.value = sym->u.def.value;
 	    undef->u.def.section = sym->u.def.section;
 
+	    /* We replace the original name with the __imp_ prefixed one, this
+	       1) may trash memory 2) leads to duplicate symbols.  But this is
+	       better than having a misleading name that can confuse GDB.  */
+	    undef->root.string = sym->root.string;
+
 	    if (link_info.pei386_auto_import == -1)
 	      {
 		static bfd_boolean warned = FALSE;



More information about the Binutils-cvs mailing list