From d26e1d9d95353faadf3ed31ee7964107c9f52d17 Mon Sep 17 00:00:00 2001 From: Dave Lee Date: Sat, 16 Feb 2019 06:59:49 +0000 Subject: [PATCH] llvm-nm: Observe -no-llvm-bc for archive members Summary: This change fixes the `-no-llvm-bc` flag to work with object files within archives. Currently the `-no-llvm-bc` flag works for regular object files, but not static libraries, where it continues to show bitcode symbol info. Original support was added in D4371. Reviewers: compnerd, smeenai, pcc Reviewed By: compnerd Subscribers: rupprecht, keith, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D48798 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354196 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/tools/llvm-nm/X86/archive-no-llvm-bc.test | 15 +++++++++++++++ tools/llvm-nm/llvm-nm.cpp | 14 ++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 test/tools/llvm-nm/X86/archive-no-llvm-bc.test diff --git a/test/tools/llvm-nm/X86/archive-no-llvm-bc.test b/test/tools/llvm-nm/X86/archive-no-llvm-bc.test new file mode 100644 index 00000000000..d2c0d3676d8 --- /dev/null +++ b/test/tools/llvm-nm/X86/archive-no-llvm-bc.test @@ -0,0 +1,15 @@ +; RUN: rm -rf %t && mkdir -p %t +; RUN: grep -v "module asm" %s | llvm-as -o %t/embedded.bc +; RUN: llc -I=%t -filetype=obj -o %t/obj.o %s +; RUN: llvm-ar crs %t/lib.a %t/obj.o +; RUN: llvm-nm -m -no-llvm-bc %t/lib.a | FileCheck %s + +target triple = "x86_64-apple-macosx10.11" + +@q = global i32 1, align 4 +; CHECK-NOT: {{-+}} (LTO,DATA) external _q +; CHECK: {{[[:xdigit:]]+}} (__DATA,__data) external _q + +module asm ".section __LLVM,__bitcode" +module asm ".incbin \22embedded.bc\22" + diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index 7c009297139..a7346d56f32 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -1737,8 +1737,9 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { return; LLVMContext Context; - Expected> BinaryOrErr = createBinary( - BufferOrErr.get()->getMemBufferRef(), NoLLVMBitcode ? nullptr : &Context); + LLVMContext *ContextPtr = NoLLVMBitcode ? nullptr : &Context; + Expected> BinaryOrErr = + createBinary(BufferOrErr.get()->getMemBufferRef(), ContextPtr); if (!BinaryOrErr) { error(BinaryOrErr.takeError(), Filename); return; @@ -1772,7 +1773,8 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { { Error Err = Error::success(); for (auto &C : A->children(Err)) { - Expected> ChildOrErr = C.getAsBinary(&Context); + Expected> ChildOrErr = + C.getAsBinary(ContextPtr); if (!ChildOrErr) { if (auto E = isNotObjectErrorInvalidFileType(ChildOrErr.takeError())) error(std::move(E), Filename, C); @@ -1843,7 +1845,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { Error Err = Error::success(); for (auto &C : A->children(Err)) { Expected> ChildOrErr = - C.getAsBinary(&Context); + C.getAsBinary(ContextPtr); if (!ChildOrErr) { if (auto E = isNotObjectErrorInvalidFileType( ChildOrErr.takeError())) { @@ -1914,7 +1916,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { Error Err = Error::success(); for (auto &C : A->children(Err)) { Expected> ChildOrErr = - C.getAsBinary(&Context); + C.getAsBinary(ContextPtr); if (!ChildOrErr) { if (auto E = isNotObjectErrorInvalidFileType( ChildOrErr.takeError())) @@ -1981,7 +1983,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) { Error Err = Error::success(); for (auto &C : A->children(Err)) { Expected> ChildOrErr = - C.getAsBinary(&Context); + C.getAsBinary(ContextPtr); if (!ChildOrErr) { if (auto E = isNotObjectErrorInvalidFileType( ChildOrErr.takeError())) -- 2.40.0