[llvm-commits] [llvm] r140627 - in /llvm/trunk: test/Object/TestObjectFiles/archive-test.a-bitcode test/Object/TestObjectFiles/archive-test.a-coff-i386 test/Object/nm-archive.test tools/llvm-nm/llvm-nm.cpp

Michael Spencer bigcheesegs at gmail.com
Tue Oct 25 10:35:27 PDT 2011


On Mon, Oct 24, 2011 at 6:41 PM, Chad Rosier <mcrosier at apple.com> wrote:
> Hi Michael,
> Would it be possible for you to rework this test case so that it can generate the archive on the fly, rather than reading in the archive-test.a-* files?  I'm going to begin work on the bitcode reader/writer very soon that will break backward compatibility and in turn break this test case.  See r142896 for examples of what was necessary for a few other test cases.
>
>  Regards,
>  Chad

In attempting to do this I ran into a bug with either llvm-ar or
llvm-nm in dealing with directory paths in archives. Once that is
fixed I will be able to fix the test case.

- Michael Spencer

> On Sep 27, 2011, at 12:37 PM, Michael J. Spencer wrote:
>
>> Author: mspencer
>> Date: Tue Sep 27 14:37:18 2011
>> New Revision: 140627
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=140627&view=rev
>> Log:
>> Add binary archive support to llvm-nm.
>>
>> Added:
>>    llvm/trunk/test/Object/TestObjectFiles/archive-test.a-bitcode
>>    llvm/trunk/test/Object/TestObjectFiles/archive-test.a-coff-i386
>>    llvm/trunk/test/Object/nm-archive.test
>> Modified:
>>    llvm/trunk/tools/llvm-nm/llvm-nm.cpp
>>
>> Added: llvm/trunk/test/Object/TestObjectFiles/archive-test.a-bitcode
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/TestObjectFiles/archive-test.a-bitcode?rev=140627&view=auto
>> ==============================================================================
>> Binary files llvm/trunk/test/Object/TestObjectFiles/archive-test.a-bitcode (added) and llvm/trunk/test/Object/TestObjectFiles/archive-test.a-bitcode Tue Sep 27 14:37:18 2011 differ
>>
>> Added: llvm/trunk/test/Object/TestObjectFiles/archive-test.a-coff-i386
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/TestObjectFiles/archive-test.a-coff-i386?rev=140627&view=auto
>> ==============================================================================
>> Binary files llvm/trunk/test/Object/TestObjectFiles/archive-test.a-coff-i386 (added) and llvm/trunk/test/Object/TestObjectFiles/archive-test.a-coff-i386 Tue Sep 27 14:37:18 2011 differ
>>
>> Added: llvm/trunk/test/Object/nm-archive.test
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/nm-archive.test?rev=140627&view=auto
>> ==============================================================================
>> --- llvm/trunk/test/Object/nm-archive.test (added)
>> +++ llvm/trunk/test/Object/nm-archive.test Tue Sep 27 14:37:18 2011
>> @@ -0,0 +1,17 @@
>> +RUN: llvm-nm %p/TestObjectFiles/archive-test.a-coff-i386 \
>> +RUN:         | FileCheck %s -check-prefix COFF
>> +RUN: llvm-nm %p/TestObjectFiles/archive-test.a-bitcode \
>> +RUN:         | FileCheck %s -check-prefix BITCODE
>> +
>> +
>> +COFF: trivial-object-test.coff-i386:
>> +COFF-NEXT: 00000000 d .data
>> +COFF-NEXT: 00000000 t .text
>> +COFF-NEXT: 00000000 d L_.str
>> +COFF-NEXT:          U _SomeOtherFunction
>> +COFF-NEXT: 00000000 T _main
>> +COFF-NEXT:          U _puts
>> +
>> +BITCODE:          U SomeOtherFunction
>> +BITCODE-NEXT:          T main
>> +BITCODE-NEXT:          U puts
>>
>> Modified: llvm/trunk/tools/llvm-nm/llvm-nm.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-nm/llvm-nm.cpp?rev=140627&r1=140626&r2=140627&view=diff
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-nm/llvm-nm.cpp (original)
>> +++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp Tue Sep 27 14:37:18 2011
>> @@ -20,6 +20,7 @@
>> #include "llvm/Module.h"
>> #include "llvm/Bitcode/ReaderWriter.h"
>> #include "llvm/Bitcode/Archive.h"
>> +#include "llvm/Object/Archive.h"
>> #include "llvm/Object/ObjectFile.h"
>> #include "llvm/Support/CommandLine.h"
>> #include "llvm/Support/FileSystem.h"
>> @@ -318,18 +319,34 @@
>>       errs() << ToolName << ": " << Filename << ": " << ErrorMessage << "\n";
>>
>>   } else if (aPath.isArchive()) {
>> -    std::string ErrMsg;
>> -    Archive* archive = Archive::OpenAndLoad(sys::Path(Filename), Context,
>> -                                            &ErrorMessage);
>> -    if (!archive)
>> -      errs() << ToolName << ": " << Filename << ": " << ErrorMessage << "\n";
>> -    std::vector<Module *> Modules;
>> -    if (archive->getAllModules(Modules, &ErrorMessage)) {
>> -      errs() << ToolName << ": " << Filename << ": " << ErrorMessage << "\n";
>> +    OwningPtr<Binary> arch;
>> +    if (error_code ec = object::createBinary(aPath.str(), arch)) {
>> +      errs() << ToolName << ": " << Filename << ": " << ec.message() << ".\n";
>>       return;
>>     }
>> -    MultipleFiles = true;
>> -    std::for_each (Modules.begin(), Modules.end(), DumpSymbolNamesFromModule);
>> +    if (object::Archive *a = dyn_cast<object::Archive>(arch.get())) {
>> +      for (object::Archive::child_iterator i = a->begin_children(),
>> +                                           e = a->end_children(); i != e; ++i) {
>> +        OwningPtr<Binary> child;
>> +        if (error_code ec = i->getAsBinary(child)) {
>> +          // Try opening it as a bitcode file.
>> +          MemoryBuffer *buff = i->getBuffer();
>> +          Module *Result = 0;
>> +          if (buff)
>> +            Result = ParseBitcodeFile(buff, Context, &ErrorMessage);
>> +
>> +          if (Result) {
>> +            DumpSymbolNamesFromModule(Result);
>> +            delete Result;
>> +          }
>> +          continue;
>> +        }
>> +        if (object::ObjectFile *o = dyn_cast<ObjectFile>(child.get())) {
>> +          outs() << o->getFileName() << ":\n";
>> +          DumpSymbolNamesFromObject(o);
>> +        }
>> +      }
>> +    }
>>   } else if (aPath.isObjectFile()) {
>>     OwningPtr<Binary> obj;
>>     if (error_code ec = object::createBinary(aPath.str(), obj)) {
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>




More information about the llvm-commits mailing list