Skip to content

Commit

Permalink
llvm-nm: Observe -no-llvm-bc for archive members
Browse files Browse the repository at this point in the history
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

llvm-svn: 354196
  • Loading branch information
kastiglione committed Feb 16, 2019
1 parent 358f99c commit 5fc9edf
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 6 deletions.
15 changes: 15 additions & 0 deletions llvm/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"

14 changes: 8 additions & 6 deletions llvm/tools/llvm-nm/llvm-nm.cpp
Expand Up @@ -1737,8 +1737,9 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
return;

LLVMContext Context;
Expected<std::unique_ptr<Binary>> BinaryOrErr = createBinary(
BufferOrErr.get()->getMemBufferRef(), NoLLVMBitcode ? nullptr : &Context);
LLVMContext *ContextPtr = NoLLVMBitcode ? nullptr : &Context;
Expected<std::unique_ptr<Binary>> BinaryOrErr =
createBinary(BufferOrErr.get()->getMemBufferRef(), ContextPtr);
if (!BinaryOrErr) {
error(BinaryOrErr.takeError(), Filename);
return;
Expand Down Expand Up @@ -1772,7 +1773,8 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
{
Error Err = Error::success();
for (auto &C : A->children(Err)) {
Expected<std::unique_ptr<Binary>> ChildOrErr = C.getAsBinary(&Context);
Expected<std::unique_ptr<Binary>> ChildOrErr =
C.getAsBinary(ContextPtr);
if (!ChildOrErr) {
if (auto E = isNotObjectErrorInvalidFileType(ChildOrErr.takeError()))
error(std::move(E), Filename, C);
Expand Down Expand Up @@ -1843,7 +1845,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
Error Err = Error::success();
for (auto &C : A->children(Err)) {
Expected<std::unique_ptr<Binary>> ChildOrErr =
C.getAsBinary(&Context);
C.getAsBinary(ContextPtr);
if (!ChildOrErr) {
if (auto E = isNotObjectErrorInvalidFileType(
ChildOrErr.takeError())) {
Expand Down Expand Up @@ -1914,7 +1916,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
Error Err = Error::success();
for (auto &C : A->children(Err)) {
Expected<std::unique_ptr<Binary>> ChildOrErr =
C.getAsBinary(&Context);
C.getAsBinary(ContextPtr);
if (!ChildOrErr) {
if (auto E = isNotObjectErrorInvalidFileType(
ChildOrErr.takeError()))
Expand Down Expand Up @@ -1981,7 +1983,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
Error Err = Error::success();
for (auto &C : A->children(Err)) {
Expected<std::unique_ptr<Binary>> ChildOrErr =
C.getAsBinary(&Context);
C.getAsBinary(ContextPtr);
if (!ChildOrErr) {
if (auto E = isNotObjectErrorInvalidFileType(
ChildOrErr.takeError()))
Expand Down

0 comments on commit 5fc9edf

Please sign in to comment.