<div dir="ltr">Should have been fixed by r316546.</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 24, 2017 at 9:42 PM, Maxim Kuvyrkov <span dir="ltr"><<a href="mailto:maxim.kuvyrkov@linaro.org" target="_blank">maxim.kuvyrkov@linaro.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Peter,<br>
<br>
This seems to have broken several aarch64 and armv7 buildbots.  E.g., <a href="http://lab.llvm.org:8011/builders/clang-cmake-aarch64-quick/builds/9472" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/<wbr>builders/clang-cmake-aarch64-<wbr>quick/builds/9472</a> .  All bots fail on the same tests.<br>
<br>
Would you please investigate?<br>
<br>
Thanks!<br>
<br>
--<br>
Maxim Kuvyrkov<br>
<a href="http://www.linaro.org" rel="noreferrer" target="_blank">www.linaro.org</a><br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
> On Oct 25, 2017, at 6:37 AM, Peter Collingbourne via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
><br>
> Author: pcc<br>
> Date: Tue Oct 24 20:37:12 2017<br>
> New Revision: 316543<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=316543&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=316543&view=rev</a><br>
> Log:<br>
> llvm-readobj: Add support for reading relocations in the Android packed format.<br>
><br>
> This is in preparation for testing lld's upcoming relocation packing<br>
> feature (D39152). I have verified that this implementation correctly<br>
> unpacks the relocations from a Chromium DSO built with gold and the<br>
> Android relocation packer for ARM32 and ARM64.<br>
><br>
> Differential Revision: <a href="https://reviews.llvm.org/D39272" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D39272</a><br>
><br>
> Added:<br>
>    llvm/trunk/test/tools/llvm-<wbr>readobj/Inputs/elf-packed-<wbr>relocs1.s<br>
>    llvm/trunk/test/tools/llvm-<wbr>readobj/Inputs/elf-packed-<wbr>relocs2.s<br>
>    llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>empty.s<br>
>    llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error1.s<br>
>    llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error2.s<br>
>    llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error3.s<br>
>    llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error4.s<br>
>    llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error5.s<br>
>    llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs.test<br>
> Modified:<br>
>    llvm/trunk/include/llvm/<wbr>BinaryFormat/ELF.h<br>
>    llvm/trunk/include/llvm/<wbr>Object/ELF.h<br>
>    llvm/trunk/lib/Object/ELF.cpp<br>
>    llvm/trunk/lib/ObjectYAML/<wbr>ELFYAML.cpp<br>
>    llvm/trunk/tools/llvm-readobj/<wbr>ELFDumper.cpp<br>
><br>
> Modified: llvm/trunk/include/llvm/<wbr>BinaryFormat/ELF.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BinaryFormat/ELF.h?rev=316543&r1=316542&r2=316543&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/BinaryFormat/ELF.h?rev=<wbr>316543&r1=316542&r2=316543&<wbr>view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/include/llvm/<wbr>BinaryFormat/ELF.h (original)<br>
> +++ llvm/trunk/include/llvm/<wbr>BinaryFormat/ELF.h Tue Oct 24 20:37:12 2017<br>
> @@ -730,6 +730,10 @@ enum : unsigned {<br>
>   SHT_GROUP = 17,                  // Section group.<br>
>   SHT_SYMTAB_SHNDX = 18,           // Indices for SHN_XINDEX entries.<br>
>   SHT_LOOS = 0x60000000,           // Lowest operating system-specific type.<br>
> +  // Android packed relocation section types.<br>
> +  // <a href="https://android.googlesource.com/platform/bionic/+/6f12bfece5dcc01325e0abba56a46b1bcf991c69/tools/relocation_packer/src/elf_file.cc#37" rel="noreferrer" target="_blank">https://android.googlesource.<wbr>com/platform/bionic/+/<wbr>6f12bfece5dcc01325e0abba56a46b<wbr>1bcf991c69/tools/relocation_<wbr>packer/src/elf_file.cc#37</a><br>
> +  SHT_ANDROID_REL = 0x60000001,<br>
> +  SHT_ANDROID_RELA = 0x60000002,<br>
>   SHT_LLVM_ODRTAB = 0x6fff4c00,    // LLVM ODR table.<br>
>   SHT_GNU_ATTRIBUTES = 0x6ffffff5, // Object attributes.<br>
>   SHT_GNU_HASH = 0x6ffffff6,       // GNU-style hash table.<br>
> @@ -1166,6 +1170,13 @@ enum {<br>
>   DT_LOPROC = 0x70000000, // Start of processor specific tags.<br>
>   DT_HIPROC = 0x7FFFFFFF, // End of processor specific tags.<br>
><br>
> +  // Android packed relocation section tags.<br>
> +  // <a href="https://android.googlesource.com/platform/bionic/+/6f12bfece5dcc01325e0abba56a46b1bcf991c69/tools/relocation_packer/src/elf_file.cc#31" rel="noreferrer" target="_blank">https://android.googlesource.<wbr>com/platform/bionic/+/<wbr>6f12bfece5dcc01325e0abba56a46b<wbr>1bcf991c69/tools/relocation_<wbr>packer/src/elf_file.cc#31</a><br>
> +  DT_ANDROID_REL = 0x6000000F,<br>
> +  DT_ANDROID_RELSZ = 0x60000010,<br>
> +  DT_ANDROID_RELA = 0x60000011,<br>
> +  DT_ANDROID_RELASZ = 0x60000012,<br>
> +<br>
>   DT_GNU_HASH = 0x6FFFFEF5, // Reference to the GNU hash table.<br>
>   DT_TLSDESC_PLT =<br>
>       0x6FFFFEF6, // Location of PLT entry for TLS descriptor resolver calls.<br>
> @@ -1387,6 +1398,14 @@ enum {<br>
>   GNU_ABI_TAG_NACL = 6,<br>
> };<br>
><br>
> +// Android packed relocation group flags.<br>
> +enum {<br>
> +  RELOCATION_GROUPED_BY_INFO_<wbr>FLAG = 1,<br>
> +  RELOCATION_GROUPED_BY_OFFSET_<wbr>DELTA_FLAG = 2,<br>
> +  RELOCATION_GROUPED_BY_ADDEND_<wbr>FLAG = 4,<br>
> +  RELOCATION_GROUP_HAS_ADDEND_<wbr>FLAG = 8,<br>
> +};<br>
> +<br>
> // Compressed section header for ELF32.<br>
> struct Elf32_Chdr {<br>
>   Elf32_Word ch_type;<br>
><br>
> Modified: llvm/trunk/include/llvm/<wbr>Object/ELF.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELF.h?rev=316543&r1=316542&r2=316543&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/Object/ELF.h?rev=316543&<wbr>r1=316542&r2=316543&view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/include/llvm/<wbr>Object/ELF.h (original)<br>
> +++ llvm/trunk/include/llvm/<wbr>Object/ELF.h Tue Oct 24 20:37:12 2017<br>
> @@ -142,6 +142,8 @@ public:<br>
>     return getSectionContentsAsArray<Elf_<wbr>Rel>(Sec);<br>
>   }<br>
><br>
> +  Expected<std::vector<Elf_Rela><wbr>> android_relas(const Elf_Shdr *Sec) const;<br>
> +<br>
>   /// \brief Iterate over program header table.<br>
>   Expected<Elf_Phdr_Range> program_headers() const {<br>
>     if (getHeader()->e_phnum && getHeader()->e_phentsize != sizeof(Elf_Phdr))<br>
><br>
> Modified: llvm/trunk/lib/Object/ELF.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ELF.cpp?rev=316543&r1=316542&r2=316543&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Object/<wbr>ELF.cpp?rev=316543&r1=316542&<wbr>r2=316543&view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/lib/Object/ELF.cpp (original)<br>
> +++ llvm/trunk/lib/Object/ELF.cpp Tue Oct 24 20:37:12 2017<br>
> @@ -9,6 +9,7 @@<br>
><br>
> #include "llvm/Object/ELF.h"<br>
> #include "llvm/BinaryFormat/ELF.h"<br>
> +#include "llvm/Support/LEB128.h"<br>
><br>
> using namespace llvm;<br>
> using namespace object;<br>
> @@ -210,3 +211,92 @@ StringRef llvm::object::getELFSectionTyp<br>
>     return "Unknown";<br>
>   }<br>
> }<br>
> +<br>
> +template <class ELFT><br>
> +Expected<std::vector<typename ELFT::Rela>><br>
> +ELFFile<ELFT>::android_relas(<wbr>const Elf_Shdr *Sec) const {<br>
> +  // This function reads relocations in Android's packed relocation format,<br>
> +  // which is based on SLEB128 and delta encoding.<br>
> +  Expected<ArrayRef<uint8_t>> ContentsOrErr = getSectionContents(Sec);<br>
> +  if (!ContentsOrErr)<br>
> +    return ContentsOrErr.takeError();<br>
> +  const uint8_t *Cur = ContentsOrErr->begin();<br>
> +  const uint8_t *End = ContentsOrErr->end();<br>
> +  if (ContentsOrErr->size() < 4 || Cur[0] != 'A' || Cur[1] != 'P' ||<br>
> +      Cur[2] != 'S' || Cur[3] != '2')<br>
> +    return createError("invalid packed relocation header");<br>
> +  Cur += 4;<br>
> +<br>
> +  const char *ErrStr = nullptr;<br>
> +  auto ReadSLEB = [&]() -> int64_t {<br>
> +    if (ErrStr)<br>
> +      return 0;<br>
> +    unsigned Len;<br>
> +    int64_t Result = decodeSLEB128(Cur, &Len, End, &ErrStr);<br>
> +    Cur += Len;<br>
> +    return Result;<br>
> +  };<br>
> +<br>
> +  uint64_t NumRelocs = ReadSLEB();<br>
> +  uint64_t Offset = ReadSLEB();<br>
> +  uint64_t Addend = 0;<br>
> +<br>
> +  if (ErrStr)<br>
> +    return createError(ErrStr);<br>
> +<br>
> +  std::vector<Elf_Rela> Relocs;<br>
> +  Relocs.reserve(NumRelocs);<br>
> +  while (NumRelocs) {<br>
> +    uint64_t NumRelocsInGroup = ReadSLEB();<br>
> +    if (NumRelocsInGroup > NumRelocs)<br>
> +      return createError("relocation group unexpectedly large");<br>
> +    NumRelocs -= NumRelocsInGroup;<br>
> +<br>
> +    uint64_t GroupFlags = ReadSLEB();<br>
> +    bool GroupedByInfo = GroupFlags & ELF::RELOCATION_GROUPED_BY_<wbr>INFO_FLAG;<br>
> +    bool GroupedByOffsetDelta = GroupFlags & ELF::RELOCATION_GROUPED_BY_<wbr>OFFSET_DELTA_FLAG;<br>
> +    bool GroupedByAddend = GroupFlags & ELF::RELOCATION_GROUPED_BY_<wbr>ADDEND_FLAG;<br>
> +    bool GroupHasAddend = GroupFlags & ELF::RELOCATION_GROUP_HAS_<wbr>ADDEND_FLAG;<br>
> +<br>
> +    uint64_t GroupOffsetDelta;<br>
> +    if (GroupedByOffsetDelta)<br>
> +      GroupOffsetDelta = ReadSLEB();<br>
> +<br>
> +    uint64_t GroupRInfo;<br>
> +    if (GroupedByInfo)<br>
> +      GroupRInfo = ReadSLEB();<br>
> +<br>
> +    if (GroupedByAddend && GroupHasAddend)<br>
> +      Addend += ReadSLEB();<br>
> +<br>
> +    for (uint64_t I = 0; I != NumRelocsInGroup; ++I) {<br>
> +      Elf_Rela R;<br>
> +      Offset += GroupedByOffsetDelta ? GroupOffsetDelta : ReadSLEB();<br>
> +      R.r_offset = Offset;<br>
> +      R.r_info = GroupedByInfo ? GroupRInfo : ReadSLEB();<br>
> +<br>
> +      if (GroupHasAddend) {<br>
> +        if (!GroupedByAddend)<br>
> +          Addend += ReadSLEB();<br>
> +        R.r_addend = Addend;<br>
> +      } else {<br>
> +        R.r_addend = 0;<br>
> +      }<br>
> +<br>
> +      Relocs.push_back(R);<br>
> +<br>
> +      if (ErrStr)<br>
> +        return createError(ErrStr);<br>
> +    }<br>
> +<br>
> +    if (ErrStr)<br>
> +      return createError(ErrStr);<br>
> +  }<br>
> +<br>
> +  return Relocs;<br>
> +}<br>
> +<br>
> +template class llvm::object::ELFFile<ELF32LE><wbr>;<br>
> +template class llvm::object::ELFFile<ELF32BE><wbr>;<br>
> +template class llvm::object::ELFFile<ELF64LE><wbr>;<br>
> +template class llvm::object::ELFFile<ELF64BE><wbr>;<br>
><br>
> Modified: llvm/trunk/lib/ObjectYAML/<wbr>ELFYAML.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/ELFYAML.cpp?rev=316543&r1=316542&r2=316543&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>ObjectYAML/ELFYAML.cpp?rev=<wbr>316543&r1=316542&r2=316543&<wbr>view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/lib/ObjectYAML/<wbr>ELFYAML.cpp (original)<br>
> +++ llvm/trunk/lib/ObjectYAML/<wbr>ELFYAML.cpp Tue Oct 24 20:37:12 2017<br>
> @@ -405,6 +405,8 @@ void ScalarEnumerationTraits<<wbr>ELFYAML::EL<br>
>   ECase(SHT_GROUP);<br>
>   ECase(SHT_SYMTAB_SHNDX);<br>
>   ECase(SHT_LOOS);<br>
> +  ECase(SHT_ANDROID_REL);<br>
> +  ECase(SHT_ANDROID_RELA);<br>
>   ECase(SHT_LLVM_ODRTAB);<br>
>   ECase(SHT_GNU_ATTRIBUTES);<br>
>   ECase(SHT_GNU_HASH);<br>
><br>
> Added: llvm/trunk/test/tools/llvm-<wbr>readobj/Inputs/elf-packed-<wbr>relocs1.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/elf-packed-relocs1.s?rev=316543&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-readobj/Inputs/elf-<wbr>packed-relocs1.s?rev=316543&<wbr>view=auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/test/tools/llvm-<wbr>readobj/Inputs/elf-packed-<wbr>relocs1.s (added)<br>
> +++ llvm/trunk/test/tools/llvm-<wbr>readobj/Inputs/elf-packed-<wbr>relocs1.s Tue Oct 24 20:37:12 2017<br>
> @@ -0,0 +1,37 @@<br>
> +.ascii "APS2"<br>
> +.sleb128 8    // Number of relocations<br>
> +.sleb128 4096 // Initial offset<br>
> +<br>
> +.sleb128 2 // Number of relocations in group<br>
> +.sleb128 1 // RELOCATION_GROUPED_BY_INFO_<wbr>FLAG<br>
> +.sleb128 8 // R_X86_RELATIVE<br>
> +<br>
> +.sleb128 256 // Reloc 1: r_offset delta<br>
> +.sleb128 128 // Reloc 2: r_offset delta<br>
> +<br>
> +.sleb128 2 // Number of relocations in group<br>
> +.sleb128 2 // RELOCATION_GROUPED_BY_OFFSET_<wbr>DELTA_FLAG<br>
> +.sleb128 8 // offset delta<br>
> +<br>
> +.sleb128 (1 << 32) | 1 // R_X86_64_64 (sym index 1)<br>
> +.sleb128 (2 << 32) | 1 // R_X86_64_64 (sym index 2)<br>
> +<br>
> +.sleb128 2 // Number of relocations in group<br>
> +.sleb128 8 // RELOCATION_GROUP_HAS_ADDEND_<wbr>FLAG<br>
> +<br>
> +.sleb128 1             // offset delta<br>
> +.sleb128 (1 << 32) | 1 // R_X86_64_64 (sym index 1)<br>
> +.sleb128 8             // addend delta<br>
> +<br>
> +.sleb128 2             // offset delta<br>
> +.sleb128 (2 << 32) | 1 // R_X86_64_64 (sym index 2)<br>
> +.sleb128 4             // addend delta<br>
> +<br>
> +.sleb128 2  // Number of relocations in group<br>
> +.sleb128 12 // RELOCATION_GROUP_HAS_ADDEND_<wbr>FLAG | RELOCATION_GROUPED_BY_ADDEND_<wbr>FLAG<br>
> +.sleb128 -2 // addend delta<br>
> +<br>
> +.sleb128 4             // offset delta<br>
> +.sleb128 (1 << 32) | 1 // R_X86_64_64 (sym index 1)<br>
> +.sleb128 8             // offset delta<br>
> +.sleb128 (2 << 32) | 1 // R_X86_64_64 (sym index 2)<br>
><br>
> Added: llvm/trunk/test/tools/llvm-<wbr>readobj/Inputs/elf-packed-<wbr>relocs2.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/elf-packed-relocs2.s?rev=316543&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-readobj/Inputs/elf-<wbr>packed-relocs2.s?rev=316543&<wbr>view=auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/test/tools/llvm-<wbr>readobj/Inputs/elf-packed-<wbr>relocs2.s (added)<br>
> +++ llvm/trunk/test/tools/llvm-<wbr>readobj/Inputs/elf-packed-<wbr>relocs2.s Tue Oct 24 20:37:12 2017<br>
> @@ -0,0 +1,15 @@<br>
> +.ascii "APS2"<br>
> +.sleb128 10   // Number of relocations<br>
> +.sleb128 4096 // Initial offset<br>
> +<br>
> +.sleb128 2 // Number of relocations in group<br>
> +.sleb128 2 // RELOCATION_GROUPED_BY_OFFSET_<wbr>DELTA_FLAG<br>
> +.sleb128 8 // offset delta<br>
> +<br>
> +.sleb128 (1 << 8) | 1 // R_386_32    (sym index 1)<br>
> +.sleb128 (2 << 8) | 3 // R_386_GOT32 (sym index 2)<br>
> +<br>
> +.sleb128 8  // Number of relocations in group<br>
> +.sleb128 3  // RELOCATION_GROUPED_BY_OFFSET_<wbr>DELTA_FLAG | RELOCATION_GROUPED_BY_INFO_<wbr>FLAG<br>
> +.sleb128 -4 // offset delta<br>
> +.sleb128 8  // R_386_RELATIVE<br>
><br>
> Added: llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>empty.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/elf-packed-relocs-empty.s?rev=316543&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-readobj/elf-packed-<wbr>relocs-empty.s?rev=316543&<wbr>view=auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>empty.s (added)<br>
> +++ llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>empty.s Tue Oct 24 20:37:12 2017<br>
> @@ -0,0 +1,11 @@<br>
> +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -relocations - | FileCheck %s<br>
> +<br>
> +// CHECK:      Relocations [<br>
> +// CHECK-NEXT:   Section (3) .rela.dyn {<br>
> +// CHECK-NEXT:   }<br>
> +// CHECK-NEXT: ]<br>
> +<br>
> +.section .rela.dyn, "a", @0x60000001<br>
> +.ascii "APS2"<br>
> +.sleb128 0<br>
> +.sleb128 0<br>
><br>
> Added: llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error1.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/elf-packed-relocs-error1.s?rev=316543&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-readobj/elf-packed-<wbr>relocs-error1.s?rev=316543&<wbr>view=auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error1.s (added)<br>
> +++ llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error1.s Tue Oct 24 20:37:12 2017<br>
> @@ -0,0 +1,6 @@<br>
> +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | not llvm-readobj -relocations - 2>&1 | FileCheck %s<br>
> +<br>
> +// CHECK: Error reading file: invalid packed relocation header<br>
> +<br>
> +.section .rela.dyn, "a", @0x60000001<br>
> +.ascii "APS9"<br>
><br>
> Added: llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error2.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/elf-packed-relocs-error2.s?rev=316543&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-readobj/elf-packed-<wbr>relocs-error2.s?rev=316543&<wbr>view=auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error2.s (added)<br>
> +++ llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error2.s Tue Oct 24 20:37:12 2017<br>
> @@ -0,0 +1,6 @@<br>
> +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | not llvm-readobj -relocations - 2>&1 | FileCheck %s<br>
> +<br>
> +// CHECK: Error reading file: malformed sleb128, extends past end<br>
> +<br>
> +.section .rela.dyn, "a", @0x60000001<br>
> +.ascii "APS2"<br>
><br>
> Added: llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error3.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/elf-packed-relocs-error3.s?rev=316543&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-readobj/elf-packed-<wbr>relocs-error3.s?rev=316543&<wbr>view=auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error3.s (added)<br>
> +++ llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error3.s Tue Oct 24 20:37:12 2017<br>
> @@ -0,0 +1,8 @@<br>
> +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | not llvm-readobj -relocations - 2>&1 | FileCheck %s<br>
> +<br>
> +// CHECK: Error reading file: malformed sleb128, extends past end<br>
> +<br>
> +.section .rela.dyn, "a", @0x60000001<br>
> +.ascii "APS2"<br>
> +.sleb128 4 // Number of relocations<br>
> +.sleb128 0 // Initial offset<br>
><br>
> Added: llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error4.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/elf-packed-relocs-error4.s?rev=316543&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-readobj/elf-packed-<wbr>relocs-error4.s?rev=316543&<wbr>view=auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error4.s (added)<br>
> +++ llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error4.s Tue Oct 24 20:37:12 2017<br>
> @@ -0,0 +1,12 @@<br>
> +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | not llvm-readobj -relocations - 2>&1 | FileCheck %s<br>
> +<br>
> +// CHECK: Error reading file: malformed sleb128, extends past end<br>
> +<br>
> +.section .rela.dyn, "a", @0x60000001<br>
> +.ascii "APS2"<br>
> +.sleb128 4 // Number of relocations<br>
> +.sleb128 0 // Initial offset<br>
> +<br>
> +.sleb128 2 // Number of relocations in group<br>
> +.sleb128 2 // RELOCATION_GROUPED_BY_OFFSET_<wbr>DELTA_FLAG<br>
> +.sleb128 8 // offset delta<br>
><br>
> Added: llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error5.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/elf-packed-relocs-error5.s?rev=316543&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-readobj/elf-packed-<wbr>relocs-error5.s?rev=316543&<wbr>view=auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error5.s (added)<br>
> +++ llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs-<wbr>error5.s Tue Oct 24 20:37:12 2017<br>
> @@ -0,0 +1,12 @@<br>
> +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | not llvm-readobj -relocations - 2>&1 | FileCheck %s<br>
> +<br>
> +// CHECK: Error reading file: relocation group unexpectedly large<br>
> +<br>
> +.section .rela.dyn, "a", @0x60000001<br>
> +.ascii "APS2"<br>
> +.sleb128 4 // Number of relocations<br>
> +.sleb128 0 // Initial offset<br>
> +<br>
> +.sleb128 5 // Number of relocations in group<br>
> +.sleb128 2 // RELOCATION_GROUPED_BY_OFFSET_<wbr>DELTA_FLAG<br>
> +.sleb128 8 // offset delta<br>
><br>
> Added: llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs.test<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/elf-packed-relocs.test?rev=316543&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-readobj/elf-packed-<wbr>relocs.test?rev=316543&view=<wbr>auto</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs.test (added)<br>
> +++ llvm/trunk/test/tools/llvm-<wbr>readobj/elf-packed-relocs.test Tue Oct 24 20:37:12 2017<br>
> @@ -0,0 +1,94 @@<br>
> +# The binary blobs in this file were created like this:<br>
> +# llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu Inputs/elf-packed-relocs1.s -o - | obj2yaml | grep Content:<br>
> +<br>
> +# RUN: yaml2obj -docnum 1 %s | llvm-readobj -elf-output-style=LLVM -relocations - | FileCheck --check-prefix=LLVM1 %s<br>
> +# LLVM1:      Section (1) .rela.dyn {<br>
> +# LLVM1-NEXT:   0x1100 R_X86_64_RELATIVE - 0x0<br>
> +# LLVM1-NEXT:   0x1180 R_X86_64_RELATIVE - 0x0<br>
> +# LLVM1-NEXT:   0x1188 R_X86_64_64 sym1 0x0<br>
> +# LLVM1-NEXT:   0x1190 R_X86_64_64 sym2 0x0<br>
> +# LLVM1-NEXT:   0x1191 R_X86_64_64 sym1 0x8<br>
> +# LLVM1-NEXT:   0x1193 R_X86_64_64 sym2 0xC<br>
> +# LLVM1-NEXT:   0x1197 R_X86_64_64 sym1 0xA<br>
> +# LLVM1-NEXT:   0x119F R_X86_64_64 sym2 0xA<br>
> +# LLVM1-NEXT: }<br>
> +<br>
> +# RUN: yaml2obj -docnum 1 %s | llvm-readobj -elf-output-style=GNU -relocations - | FileCheck --check-prefix=GNU1 %s<br>
> +# GNU1:      0000000000001100  0000000000000008 R_X86_64_RELATIVE                 0<br>
> +# GNU1-NEXT: 0000000000001180  0000000000000008 R_X86_64_RELATIVE                 0<br>
> +# GNU1-NEXT: 0000000000001188  0000000100000001 R_X86_64_64            0000000000000000 sym1 + 0<br>
> +# GNU1-NEXT: 0000000000001190  0000000200000001 R_X86_64_64            0000000000000000 sym2 + 0<br>
> +# GNU1-NEXT: 0000000000001191  0000000100000001 R_X86_64_64            0000000000000000 sym1 + 8<br>
> +# GNU1-NEXT: 0000000000001193  0000000200000001 R_X86_64_64            0000000000000000 sym2 + c<br>
> +# GNU1-NEXT: 0000000000001197  0000000100000001 R_X86_64_64            0000000000000000 sym1 + a<br>
> +# GNU1-NEXT: 000000000000119f  0000000200000001 R_X86_64_64            0000000000000000 sym2 + a<br>
> +<br>
> +# elf-packed-relocs1.s<br>
> +--- !ELF<br>
> +FileHeader:<br>
> +  Class:           ELFCLASS64<br>
> +  Data:            ELFDATA2LSB<br>
> +  Type:            ET_DYN<br>
> +  Machine:         EM_X86_64<br>
> +  Entry:           0x0000000000001000<br>
> +Sections:<br>
> +  - Name:            .rela.dyn<br>
> +    Type:            SHT_ANDROID_RELA<br>
> +    Flags:           [ SHF_ALLOC ]<br>
> +    Address:         0x00000000000001C8<br>
> +    Link:            .symtab<br>
> +    AddressAlign:    0x0000000000000001<br>
> +    Content:         415053320880200201088002800102<wbr>020881808080108180808020020801<wbr>81808080100802818080802004020C<wbr>7E048180808010088180808020<br>
> +Symbols:<br>
> +  Global:<br>
> +    - Name:            sym1<br>
> +    - Name:            sym2<br>
> +...<br>
> +<br>
> +# RUN: yaml2obj -docnum 2 %s | llvm-readobj -elf-output-style=LLVM -relocations - | FileCheck --check-prefix=LLVM2 %s<br>
> +# LLVM2:      Section (1) .rel.dyn {<br>
> +# LLVM2-NEXT:   0x1008 R_386_32 sym1 0x0<br>
> +# LLVM2-NEXT:   0x1010 R_386_GOT32 sym2 0x0<br>
> +# LLVM2-NEXT:   0x100C R_386_RELATIVE - 0x0<br>
> +# LLVM2-NEXT:   0x1008 R_386_RELATIVE - 0x0<br>
> +# LLVM2-NEXT:   0x1004 R_386_RELATIVE - 0x0<br>
> +# LLVM2-NEXT:   0x1000 R_386_RELATIVE - 0x0<br>
> +# LLVM2-NEXT:   0xFFC R_386_RELATIVE - 0x0<br>
> +# LLVM2-NEXT:   0xFF8 R_386_RELATIVE - 0x0<br>
> +# LLVM2-NEXT:   0xFF4 R_386_RELATIVE - 0x0<br>
> +# LLVM2-NEXT:   0xFF0 R_386_RELATIVE - 0x0<br>
> +# LLVM2-NEXT: }<br>
> +<br>
> +# RUN: yaml2obj -docnum 2 %s | llvm-readobj -elf-output-style=GNU -relocations - | FileCheck --check-prefix=GNU2 %s<br>
> +# GNU2:      00001008  00000101 R_386_32               00000000   sym1<br>
> +# GNU2-NEXT: 00001010  00000203 R_386_GOT32            00000000   sym2<br>
> +# GNU2-NEXT: 0000100c  00000008 R_386_RELATIVE<br>
> +# GNU2-NEXT: 00001008  00000008 R_386_RELATIVE<br>
> +# GNU2-NEXT: 00001004  00000008 R_386_RELATIVE<br>
> +# GNU2-NEXT: 00001000  00000008 R_386_RELATIVE<br>
> +# GNU2-NEXT: 00000ffc  00000008 R_386_RELATIVE<br>
> +# GNU2-NEXT: 00000ff8  00000008 R_386_RELATIVE<br>
> +# GNU2-NEXT: 00000ff4  00000008 R_386_RELATIVE<br>
> +# GNU2-NEXT: 00000ff0  00000008 R_386_RELATIVE<br>
> +<br>
> +# elf-packed-relocs2.s<br>
> +--- !ELF<br>
> +FileHeader:<br>
> +  Class:           ELFCLASS32<br>
> +  Data:            ELFDATA2LSB<br>
> +  Type:            ET_DYN<br>
> +  Machine:         EM_386<br>
> +  Entry:           0x0000000000001000<br>
> +Sections:<br>
> +  - Name:            .rel.dyn<br>
> +    Type:            SHT_ANDROID_REL<br>
> +    Flags:           [ SHF_ALLOC ]<br>
> +    Address:         0x00000000000001C8<br>
> +    Link:            .symtab<br>
> +    AddressAlign:    0x0000000000000001<br>
> +    Content:         415053320A80200202088102830408<wbr>037C08<br>
> +Symbols:<br>
> +  Global:<br>
> +    - Name:            sym1<br>
> +    - Name:            sym2<br>
> +...<br>
><br>
> Modified: llvm/trunk/tools/llvm-readobj/<wbr>ELFDumper.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ELFDumper.cpp?rev=316543&r1=316542&r2=316543&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/tools/llvm-<wbr>readobj/ELFDumper.cpp?rev=<wbr>316543&r1=316542&r2=316543&<wbr>view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/tools/llvm-readobj/<wbr>ELFDumper.cpp (original)<br>
> +++ llvm/trunk/tools/llvm-readobj/<wbr>ELFDumper.cpp Tue Oct 24 20:37:12 2017<br>
> @@ -2591,7 +2591,9 @@ static inline void printRelocHeader(raw_<br>
> template <class ELFT> void GNUStyle<ELFT>::<wbr>printRelocations(const ELFO *Obj) {<br>
>   bool HasRelocSections = false;<br>
>   for (const Elf_Shdr &Sec : unwrapOrError(Obj->sections())<wbr>) {<br>
> -    if (Sec.sh_type != ELF::SHT_REL && Sec.sh_type != ELF::SHT_RELA)<br>
> +    if (Sec.sh_type != ELF::SHT_REL && Sec.sh_type != ELF::SHT_RELA &&<br>
> +        Sec.sh_type != ELF::SHT_ANDROID_REL &&<br>
> +        Sec.sh_type != ELF::SHT_ANDROID_RELA)<br>
>       continue;<br>
>     HasRelocSections = true;<br>
>     StringRef Name = unwrapOrError(Obj-><wbr>getSectionName(&Sec));<br>
> @@ -2600,9 +2602,12 @@ template <class ELFT> void GNUStyle<ELFT<br>
>     OS << "\nRelocation section '" << Name << "' at offset 0x"<br>
>        << to_hexString(Offset, false) << " contains " << Entries<br>
>        << " entries:\n";<br>
> -    printRelocHeader(OS,  ELFT::Is64Bits, (Sec.sh_type == ELF::SHT_RELA));<br>
> +    printRelocHeader(OS, ELFT::Is64Bits,<br>
> +                     Sec.sh_type == ELF::SHT_RELA ||<br>
> +                         Sec.sh_type == ELF::SHT_ANDROID_RELA);<br>
>     const Elf_Shdr *SymTab = unwrapOrError(Obj->getSection(<wbr>Sec.sh_link));<br>
> -    if (Sec.sh_type == ELF::SHT_REL) {<br>
> +    switch (Sec.sh_type) {<br>
> +    case ELF::SHT_REL:<br>
>       for (const auto &R : unwrapOrError(Obj->rels(&Sec))<wbr>) {<br>
>         Elf_Rela Rela;<br>
>         Rela.r_offset = R.r_offset;<br>
> @@ -2610,9 +2615,16 @@ template <class ELFT> void GNUStyle<ELFT<br>
>         Rela.r_addend = 0;<br>
>         printRelocation(Obj, SymTab, Rela, false);<br>
>       }<br>
> -    } else {<br>
> +      break;<br>
> +    case ELF::SHT_RELA:<br>
>       for (const auto &R : unwrapOrError(Obj->relas(&Sec)<wbr>))<br>
>         printRelocation(Obj, SymTab, R, true);<br>
> +      break;<br>
> +    case ELF::SHT_ANDROID_REL:<br>
> +    case ELF::SHT_ANDROID_RELA:<br>
> +      for (const auto &R : unwrapOrError(Obj->android_<wbr>relas(&Sec)))<br>
> +        printRelocation(Obj, SymTab, R, Sec.sh_type == ELF::SHT_ANDROID_RELA);<br>
> +      break;<br>
>     }<br>
>   }<br>
>   if (!HasRelocSections)<br>
> @@ -3650,7 +3662,9 @@ template <class ELFT> void LLVMStyle<ELF<br>
>   for (const Elf_Shdr &Sec : unwrapOrError(Obj->sections())<wbr>) {<br>
>     ++SectionNumber;<br>
><br>
> -    if (Sec.sh_type != ELF::SHT_REL && Sec.sh_type != ELF::SHT_RELA)<br>
> +    if (Sec.sh_type != ELF::SHT_REL && Sec.sh_type != ELF::SHT_RELA &&<br>
> +        Sec.sh_type != ELF::SHT_ANDROID_REL &&<br>
> +        Sec.sh_type != ELF::SHT_ANDROID_RELA)<br>
>       continue;<br>
><br>
>     StringRef Name = unwrapOrError(Obj-><wbr>getSectionName(&Sec));<br>
> @@ -3683,6 +3697,11 @@ void LLVMStyle<ELFT>::<wbr>printRelocations(c<br>
>     for (const Elf_Rela &R : unwrapOrError(Obj->relas(Sec))<wbr>)<br>
>       printRelocation(Obj, R, SymTab);<br>
>     break;<br>
> +  case ELF::SHT_ANDROID_REL:<br>
> +  case ELF::SHT_ANDROID_RELA:<br>
> +    for (const Elf_Rela &R : unwrapOrError(Obj->android_<wbr>relas(Sec)))<br>
> +      printRelocation(Obj, R, SymTab);<br>
> +    break;<br>
>   }<br>
> }<br>
><br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div>