[llvm] r242926 - Fix fetching the symbol table of a thin archive.

Justin Bogner mail at justinbogner.com
Wed Jul 22 15:35:39 PDT 2015


Rafael EspĂ­ndola <rafael.espindola at gmail.com> writes:
> Should be fixed in r242949. Sorry about that.

Thanks!

> The bot is not sending emails?

The bot was pretty much hosed all day, and was already failing when it
came back to life. It's green now though!

> On 22 July 2015 at 18:00, Rafael EspĂ­ndola <rafael.espindola at gmail.com> wrote:
>> debugging.
>>
>> On 22 July 2015 at 18:00, Justin Bogner <mail at justinbogner.com> wrote:
>>> Rafael Espindola <rafael.espindola at gmail.com> writes:
>>>> Author: rafael
>>>> Date: Wed Jul 22 14:34:26 2015
>>>> New Revision: 242926
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=242926&view=rev
>>>> Log:
>>>> Fix fetching the symbol table of a thin archive.
>>>>
>>>> We were trying to read it as an external file.
>>>
>>> The new test seems to fail on Darwin with empty output from `llvm-nm -M`:
>>>
>>> http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_check/11327/
>>>
>>>>
>>>> Modified:
>>>>     llvm/trunk/include/llvm/Object/Archive.h
>>>>     llvm/trunk/lib/Object/Archive.cpp
>>>>     llvm/trunk/test/Object/archive-symtab.test
>>>>
>>>> Modified: llvm/trunk/include/llvm/Object/Archive.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/Archive.h?rev=242926&r1=242925&r2=242926&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/include/llvm/Object/Archive.h (original)
>>>> +++ llvm/trunk/include/llvm/Object/Archive.h Wed Jul 22 14:34:26 2015
>>>> @@ -62,6 +62,8 @@ public:
>>>>        return reinterpret_cast<const ArchiveMemberHeader *>(Data.data());
>>>>      }
>>>>
>>>> +    bool isThinMember() const;
>>>> +
>>>>    public:
>>>>      Child(const Archive *Parent, const char *Start);
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Object/Archive.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/Archive.cpp?rev=242926&r1=242925&r2=242926&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Object/Archive.cpp (original)
>>>> +++ llvm/trunk/lib/Object/Archive.cpp Wed Jul 22 14:34:26 2015
>>>> @@ -87,17 +87,17 @@ Archive::Child::Child(const Archive *Par
>>>>    if (!Start)
>>>>      return;
>>>>
>>>> -  const ArchiveMemberHeader *Header =
>>>> -      reinterpret_cast<const ArchiveMemberHeader *>(Start);
>>>>    uint64_t Size = sizeof(ArchiveMemberHeader);
>>>> -  if (!Parent->IsThin || Header->getName() == "/" || Header->getName() == "//")
>>>> -    Size += Header->getSize();
>>>>    Data = StringRef(Start, Size);
>>>> +  if (!isThinMember()) {
>>>> +    Size += getRawSize();
>>>> +    Data = StringRef(Start, Size);
>>>> +  }
>>>>
>>>>    // Setup StartOfFile and PaddingBytes.
>>>>    StartOfFile = sizeof(ArchiveMemberHeader);
>>>>    // Don't include attached name.
>>>> -  StringRef Name = Header->getName();
>>>> +  StringRef Name = getRawName();
>>>>    if (Name.startswith("#1/")) {
>>>>      uint64_t NameSize;
>>>>      if (Name.substr(3).rtrim(" ").getAsInteger(10, NameSize))
>>>> @@ -116,8 +116,13 @@ uint64_t Archive::Child::getRawSize() co
>>>>    return getHeader()->getSize();
>>>>  }
>>>>
>>>> +bool Archive::Child::isThinMember() const {
>>>> +  StringRef Name = getHeader()->getName();
>>>> +  return Parent->IsThin && Name != "/" && Name != "//";
>>>> +}
>>>> +
>>>>  ErrorOr<StringRef> Archive::Child::getBuffer() const {
>>>> -  if (!Parent->IsThin)
>>>> +  if (!isThinMember())
>>>>      return StringRef(Data.data() + StartOfFile, getSize());
>>>>    ErrorOr<StringRef> Name = getName();
>>>>    if (std::error_code EC = Name.getError())
>>>>
>>>> Modified: llvm/trunk/test/Object/archive-symtab.test
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-symtab.test?rev=242926&r1=242925&r2=242926&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/test/Object/archive-symtab.test (original)
>>>> +++ llvm/trunk/test/Object/archive-symtab.test Wed Jul 22 14:34:26 2015
>>>> @@ -8,6 +8,17 @@ CHECK-NEXT: foo in trivial-object-test2.
>>>>  CHECK-NEXT: main in trivial-object-test2.elf-x86-64
>>>>  CHECK-NOT: bar
>>>>
>>>> +
>>>> +RUN: rm -f %t.a
>>>> +RUN: llvm-ar rcT %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64
>>>> +RUN: llvm-nm -M %t.a | FileCheck --check-prefix=THIN %s
>>>> +
>>>> +THIN: Archive map
>>>> +THIN-NEXT: main in {{.*}}/Inputs/trivial-object-test.elf-x86-64
>>>> +THIN-NEXT: foo in {{.*}}/Inputs/trivial-object-test2.elf-x86-64
>>>> +THIN-NEXT: main in {{.*}}/Inputs/trivial-object-test2.elf-x86-64
>>>> +
>>>> +
>>>>  CHECK: trivial-object-test.elf-x86-64:
>>>>  CHECK-NEXT:                  U SomeOtherFunction
>>>>  CHECK-NEXT: 0000000000000000 T main
>>>>
>>>>
>>>> _______________________________________________
>>>> 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