diff options
author | Vy Nguyen <vyng@google.com> | 2022-05-17 02:19:32 +0300 |
---|---|---|
committer | Vy Nguyen <vyng@google.com> | 2022-05-17 02:48:03 +0300 |
commit | 4c5b187f2c065648799e109a6754917e642dc659 (patch) | |
tree | ea07f110a445ed95d62b20448afbbdf1e16893cd /lld | |
parent | 6593886a35025af7b32e5d317dd91779bf60014f (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.cpp | 2 | ||||
-rw-r--r-- | lld/test/MachO/demangle.s | 43 |
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 |