Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lld
diff options
context:
space:
mode:
authorVy Nguyen <vyng@google.com>2022-05-17 02:19:32 +0300
committerVy Nguyen <vyng@google.com>2022-05-17 02:48:03 +0300
commit4c5b187f2c065648799e109a6754917e642dc659 (patch)
treeea07f110a445ed95d62b20448afbbdf1e16893cd /lld
parent6593886a35025af7b32e5d317dd91779bf60014f (diff)
[lld-macho] Demangle symbol names in export-symbol error messages when -demangle is specified.
PR/55512 Reviewed By: keith Differential Revision: https://reviews.llvm.org/D125732
Diffstat (limited to 'lld')
-rw-r--r--lld/MachO/Driver.cpp2
-rw-r--r--lld/test/MachO/demangle.s43
2 files changed, 38 insertions, 7 deletions
diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp
index 28a31d6dc53f..bfbfb26bb6b5 100644
--- a/lld/MachO/Driver.cpp
+++ b/lld/MachO/Driver.cpp
@@ -1519,7 +1519,7 @@ bool macho::link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
// The former can be exported but the latter cannot.
defined->privateExtern = false;
} else {
- warn("cannot export hidden symbol " + symbolName +
+ warn("cannot export hidden symbol " + toString(*defined) +
"\n>>> defined in " + toString(defined->getFile()));
}
}
diff --git a/lld/test/MachO/demangle.s b/lld/test/MachO/demangle.s
index 0352f16210ba..14ebfa12b0f2 100644
--- a/lld/test/MachO/demangle.s
+++ b/lld/test/MachO/demangle.s
@@ -1,15 +1,46 @@
# REQUIRES: x86
-# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o
+# RUN: rm -rf %t; split-file %s %t
-# RUN: not %lld %t.o -o /dev/null 2>&1 | FileCheck %s
-# RUN: not %lld -demangle %t.o -o /dev/null 2>&1 | \
-# RUN: FileCheck --check-prefix=DEMANGLE %s
+# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/undefined-symbol.s -o %t/undefined-symbol.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/export-symbols.s -o %t/export-symbols.o
-# CHECK: undefined symbol: __Z1fv
-# DEMANGLE: undefined symbol: f()
+# RUN: not %lld %t/undefined-symbol.o -o /dev/null 2>&1 | FileCheck --check-prefix=UNDEF %s
+# RUN: not %lld -demangle %t/undefined-symbol.o -o /dev/null 2>&1 | \
+# RUN: FileCheck --check-prefix=DEMANGLE-UNDEF %s
+# RUN: not %lld -exported_symbol __ZTIN3foo3bar4MethE -exported_symbol __ZTSN3foo3bar4MethE %t/export-symbols.o -o /dev/null 2>&1 | FileCheck --check-prefix=EXPORT %s
+# RUN: not %lld -demangle -exported_symbol __ZTIN3foo3bar4MethE -exported_symbol __ZTSN3foo3bar4MethE %t/export-symbols.o -o /dev/null 2>&1 | FileCheck --check-prefix=DEMANGLE-EXPORT %s
+
+# UNDEF: undefined symbol: __Z1fv
+# DEMANGLE-UNDEF: undefined symbol: f()
+
+# EXPORT: cannot export hidden symbol __ZTSN3foo3bar4MethE
+# EXPORT: cannot export hidden symbol __ZTIN3foo3bar4MethE
+
+# DEMANGLE-EXPORT: cannot export hidden symbol typeinfo name for foo::bar::Meth
+# DEMANGLE-EXPORT: cannot export hidden symbol typeinfo for foo::bar::Meth
+
+#--- undefined-symbol.s
.globl _main
_main:
callq __Z1fv
ret
+
+
+#--- export-symbols.s
+.globl _main
+_main:
+ ret
+
+.globl __ZTIN3foo3bar4MethE
+.weak_def_can_be_hidden __ZTIN3foo3bar4MethE
+.private_extern __ZTIN3foo3bar4MethE
+__ZTIN3foo3bar4MethE:
+ retq
+
+.globl __ZTSN3foo3bar4MethE
+.weak_def_can_be_hidden __ZTSN3foo3bar4MethE
+.private_extern __ZTSN3foo3bar4MethE
+__ZTSN3foo3bar4MethE:
+ retq