[PATCH] D68017: [LLD] [COFF] Always demangle the __imp_ prefix to __declspec(dllimport)

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 25 03:56:36 PDT 2019


mstorsjo created this revision.
mstorsjo added reviewers: ruiu, rnk.
Herald added a subscriber: erik.pilkington.
Herald added a project: LLVM.

Also remove the leading underscore on i386 as part of demangling, even if the symbol name wasn't a C++ symbol.

This was requested by @ruiu in the review of D67301 <https://reviews.llvm.org/D67301>.


Repository:
  rLLD LLVM Linker

https://reviews.llvm.org/D68017

Files:
  lld/COFF/Symbols.cpp
  lld/test/COFF/delayimports-error.test
  lld/test/COFF/duplicate.test
  lld/test/COFF/libcall-archive.ll
  lld/test/COFF/undefined-symbol-itanium-i386.s
  lld/test/COFF/undefined-symbol.s


Index: lld/test/COFF/undefined-symbol.s
===================================================================
--- lld/test/COFF/undefined-symbol.s
+++ lld/test/COFF/undefined-symbol.s
@@ -20,7 +20,7 @@
 # CHECK-NEXT: error: undefined symbol: __declspec(dllimport) int __cdecl baz(void)
 # CHECK-NEXT: >>> referenced by {{.*}}.obj:(f2)
 # CHECK-EMPTY:
-# CHECK-NEXT: error: undefined symbol: __imp_undecorated
+# CHECK-NEXT: error: undefined symbol: __declspec(dllimport) undecorated
 # CHECK-NEXT: >>> referenced by {{.*}}.obj:(f2)
 
         .section        .text,"xr",one_only,main
Index: lld/test/COFF/undefined-symbol-itanium-i386.s
===================================================================
--- lld/test/COFF/undefined-symbol-itanium-i386.s
+++ lld/test/COFF/undefined-symbol-itanium-i386.s
@@ -10,18 +10,18 @@
 # NODEMANGLE: error: undefined symbol: _Z3fooi
 
 # CHECK: error: undefined symbol: foo(int)
-# CHECK-NEXT: >>> referenced by {{.*}}.o:(_main)
-# CHECK-NEXT: >>> referenced by {{.*}}.o:(_main)
+# CHECK-NEXT: >>> referenced by {{.*}}.o:(main)
+# CHECK-NEXT: >>> referenced by {{.*}}.o:(main)
 # CHECK-EMPTY:
 # CHECK-NEXT: error: undefined symbol: bar(char const*)
-# CHECK-NEXT: >>> referenced by {{.*}}.o:(_main)
-# CHECK-NEXT: >>> referenced by {{.*}}.o:(_f1)
+# CHECK-NEXT: >>> referenced by {{.*}}.o:(main)
+# CHECK-NEXT: >>> referenced by {{.*}}.o:(f1)
 # CHECK-EMPTY:
 # CHECK-NEXT: error: undefined symbol: __declspec(dllimport) baz()
-# CHECK-NEXT: >>> referenced by {{.*}}.o:(_f2)
+# CHECK-NEXT: >>> referenced by {{.*}}.o:(f2)
 # CHECK-EMPTY:
-# CHECK-NEXT: error: undefined symbol: _Z3fooi
-# CHECK-NEXT: >>> referenced by {{.*}}.o:(_f2)
+# CHECK-NEXT: error: undefined symbol: Z3fooi
+# CHECK-NEXT: >>> referenced by {{.*}}.o:(f2)
 
         .section        .text,"xr",one_only,_main
 .globl _main
Index: lld/test/COFF/libcall-archive.ll
===================================================================
--- lld/test/COFF/libcall-archive.ll
+++ lld/test/COFF/libcall-archive.ll
@@ -6,9 +6,9 @@
 ; RUN: llvm-ar rcs %t.a %t2.obj %t3.obj
 ; RUN: lld-link -out:%t.exe -subsystem:console -entry:start -safeseh:no -lldmap:- %t.obj %t.a | FileCheck %s
 
-; CHECK-NOT: ___sync_val_compare_and_swap_8
-; CHECK: _start
-; CHECK: _memcpy
+; CHECK-NOT: __sync_val_compare_and_swap_8
+; CHECK: start
+; CHECK: memcpy
 
 target datalayout = "e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:32-n8:16:32-a:0:32-S32"
 target triple = "i686-unknown-windows"
Index: lld/test/COFF/duplicate.test
===================================================================
--- lld/test/COFF/duplicate.test
+++ lld/test/COFF/duplicate.test
@@ -9,5 +9,5 @@
 RUN: llc -mtriple x86_64-windows-msvc -filetype obj -o gamma.obj %S/Inputs/gamma.ll
 RUN: not lld-link /out:gamma.exe /subsystem:console /entry:mainCRTStartup gamma.obj alpha.lib 2>&1 | FileCheck %s -check-prefix CHECK-GAMMA
 
-CHECK-GAMMA: error: duplicate symbol: __imp_f in {{.*}}gamma.obj and in alpha.dll
+CHECK-GAMMA: error: duplicate symbol: __declspec(dllimport) f in {{.*}}gamma.obj and in alpha.dll
 
Index: lld/test/COFF/delayimports-error.test
===================================================================
--- lld/test/COFF/delayimports-error.test
+++ lld/test/COFF/delayimports-error.test
@@ -7,7 +7,7 @@
 # RUN:   /alternatename:__delayLoadHelper2=main /opt:noref >& %t.log
 # RUN: FileCheck %s < %t.log
 
-# CHECK: cannot delay-load foo.dll due to import of data: __imp_datasym
+# CHECK: cannot delay-load foo.dll due to import of data: __declspec(dllimport) datasym
 
 --- !COFF
 header:
Index: lld/COFF/Symbols.cpp
===================================================================
--- lld/COFF/Symbols.cpp
+++ lld/COFF/Symbols.cpp
@@ -35,9 +35,7 @@
       prefix = "__declspec(dllimport) ";
     if (config->machine == I386)
       demangleInput.consume_front("_");
-    std::string demangled = demangle(demangleInput);
-    if (demangled != demangleInput)
-      return prefix + demangled;
+    return prefix + demangle(demangleInput);
   }
   return symName;
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D68017.221713.patch
Type: text/x-patch
Size: 4064 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190925/8c473da9/attachment.bin>


More information about the llvm-commits mailing list