[LLD][ELF] - Show symbols visibility in "undefined symbol..." error messages.
authorGeorge Rimar <grimar@accesssoftek.com>
Tue, 12 Mar 2019 11:10:29 +0000 (11:10 +0000)
committerGeorge Rimar <grimar@accesssoftek.com>
Tue, 12 Mar 2019 11:10:29 +0000 (11:10 +0000)
This teaches LLD to report visibility when showing undefined symbol errors
and fixes https://bugs.llvm.org/show_bug.cgi?id=40770.

Differential revision: https://reviews.llvm.org/D58577

llvm-svn: 355909

lld/ELF/Relocations.cpp
lld/test/ELF/executable-undefined-protected-ignoreall.s
lld/test/ELF/hidden-shared-err.s
lld/test/ELF/lto/setting-dso-local.ll
lld/test/ELF/undef-shared.s
lld/test/ELF/undef-shared2.s
lld/test/ELF/warn-unresolved-symbols-hidden.s

index 5d0d84d..569b985 100644 (file)
@@ -676,8 +676,14 @@ static bool maybeReportUndefined(Symbol &Sym, InputSectionBase &Sec,
   if (Config->UnresolvedSymbols == UnresolvedPolicy::Ignore && CanBeExternal)
     return false;
 
-  std::string Msg =
-      "undefined symbol: " + toString(Sym) + "\n>>> referenced by ";
+  std::string Msg = "undefined ";
+  if (Sym.Visibility == STV_INTERNAL)
+    Msg += "internal ";
+  else if (Sym.Visibility == STV_HIDDEN)
+    Msg += "hidden ";
+  else if (Sym.Visibility == STV_PROTECTED)
+    Msg += "protected ";
+  Msg += "symbol: " + toString(Sym) + "\n>>> referenced by ";
 
   std::string Src = Sec.getSrcMsg(Sym, Offset);
   if (!Src.empty())
index 967a693..ebc52db 100644 (file)
@@ -1,7 +1,7 @@
 # REQUIRES: x86
 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
 # RUN: not ld.lld %t -o /dev/null --unresolved-symbols=ignore-all -pie 2>&1 | FileCheck %s
-# CHECK: error: undefined symbol: foo
+# CHECK: error: undefined protected symbol: foo
 
 .protected foo
 _start:
index e6d424c..cbdec47 100644 (file)
@@ -11,7 +11,7 @@
 # RUN: not ld.lld %t.o %t3.o %t2.so -o %t 2>&1 | FileCheck %s
 # RUN: not ld.lld %t3.o %t.o %t2.so -o %t 2>&1 | FileCheck %s
 
-# CHECK: undefined symbol: foo
+# CHECK: undefined hidden symbol: foo
 
 .global _start
 _start:
index 74ce4e7..d2d9c29 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: llvm-as %s -o %t1.o
 ; RUN: not ld.lld -o %t %t1.o 2>&1 | FileCheck %s
 
-; CHECK: undefined symbol: foobar
+; CHECK: undefined hidden symbol: foobar
 
 ; We used to crash setting foobar to non-dso_local
 
index 701f70e..26e72f3 100644 (file)
@@ -2,17 +2,17 @@
 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
 # RUN: not ld.lld %t.o -o /dev/null -shared 2>&1 | FileCheck %s
 
-# CHECK: error: undefined symbol: hidden
+# CHECK: error: undefined hidden symbol: hidden
 # CHECK: >>> referenced by {{.*}}:(.data+0x0)
 .global hidden
 .hidden hidden
 
-# CHECK: error: undefined symbol: internal
+# CHECK: error: undefined internal symbol: internal
 # CHECK: >>> referenced by {{.*}}:(.data+0x8)
 .global internal
 .internal internal
 
-# CHECK: error: undefined symbol: protected
+# CHECK: error: undefined protected symbol: protected
 # CHECK: >>> referenced by {{.*}}:(.data+0x10)
 .global protected
 .protected protected
index cae5ea4..9508f9d 100644 (file)
@@ -4,7 +4,7 @@
 # RUN: not ld.lld %t.o %t2.o -o %t.so -shared 2>&1 | FileCheck %s
 # RUN: not ld.lld %t2.o %t.o -o %t.so -shared 2>&1 | FileCheck %s
 
-# CHECK: error: undefined symbol: foo
+# CHECK: error: undefined protected symbol: foo
 
 .data
 .quad foo
index 9e3d9e1..bef8b67 100644 (file)
@@ -3,8 +3,8 @@
 # RUN: not ld.lld -shared %t.o -o /dev/null -z defs --warn-unresolved-symbols 2>&1| FileCheck %s
 
 # CHECK: warning: undefined symbol: foo
-# CHECK: error: undefined symbol: bar
-# CHECK: error: undefined symbol: zed
+# CHECK: error: undefined hidden symbol: bar
+# CHECK: error: undefined protected symbol: zed
 
 .data
 .quad foo