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())
# 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:
# 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:
; 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
# 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
# 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
# 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