[lld] r182427 - [lld][ELF] Inline header files into the one file using it

Rafael EspĂ­ndola rafael.espindola at gmail.com
Tue May 21 19:19:42 PDT 2013


awesome. Thanks!

On 21 May 2013 17:47, Shankar Easwaran <shankare at codeaurora.org> wrote:
> Author: shankare
> Date: Tue May 21 16:47:33 2013
> New Revision: 182427
>
> URL: http://llvm.org/viewvc/llvm-project?rev=182427&view=rev
> Log:
> [lld][ELF] Inline header files into the one file using it
>
> Removed:
>     lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicAtoms.h
>     lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64DynamicAtoms.h
> Modified:
>     lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
>     lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp
>
> Removed: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicAtoms.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicAtoms.h?rev=182426&view=auto
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicAtoms.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicAtoms.h (removed)
> @@ -1,107 +0,0 @@
> -//===- lib/ReaderWriter/ELF/Hexagon/HexagonDynamicAtoms.h -----------------===//
> -//
> -//                             The LLVM Linker
> -//
> -// This file is distributed under the University of Illinois Open Source
> -// License. See LICENSE.TXT for details.
> -//
> -//===----------------------------------------------------------------------===//
> -
> -#ifndef LLD_READER_WRITER_ELF_HEXAGON_DYNAMIC_ATOMS_H
> -#define LLD_READER_WRITER_ELF_HEXAGON_DYNAMIC_ATOMS_H
> -
> -#include "Atoms.h"
> -#include "HexagonTargetInfo.h"
> -
> -/// \brief Specify various atom contents that are used by Hexagon dynamic
> -/// linking
> -namespace {
> -// .got atom
> -const uint8_t hexagonGotAtomContent[4] = { 0 };
> -// .got.plt atom (entry 0)
> -const uint8_t hexagonGotPlt0AtomContent[16] = { 0 };
> -// .got.plt atom (all other entries)
> -const uint8_t hexagonGotPltAtomContent[4] = { 0 };
> -// .plt (entry 0)
> -const uint8_t hexagonPlt0AtomContent[28] = {
> -  0x00, 0x40, 0x00, 0x00, // { immext (#0)
> -  0x1c, 0xc0, 0x49, 0x6a, //   r28 = add (pc, ##GOT0 at PCREL) } # address of GOT0
> -  0x0e, 0x42, 0x9c, 0xe2, // { r14 -= add (r28, #16)  # offset of GOTn from GOTa
> -  0x4f, 0x40, 0x9c, 0x91, //   r15 = memw (r28 + #8)  # object ID at GOT2
> -  0x3c, 0xc0, 0x9c, 0x91, //   r28 = memw (r28 + #4) }# dynamic link at GOT1
> -  0x0e, 0x42, 0x0e, 0x8c, // { r14 = asr (r14, #2)    # index of PLTn
> -  0x00, 0xc0, 0x9c, 0x52, //   jumpr r28 }            # call dynamic linker
> -};
> -
> -// .plt (other entries)
> -const uint8_t hexagonPltAtomContent[16] = {
> -  0x00, 0x40, 0x00, 0x00, // { immext (#0)
> -  0x0e, 0xc0, 0x49, 0x6a, //   r14 = add (pc, ##GOTn at PCREL) } # address of GOTn
> -  0x1c, 0xc0, 0x8e, 0x91, // r28 = memw (r14)                 # contents of GOTn
> -  0x00, 0xc0, 0x9c, 0x52, // jumpr r28                        # call it
> -};
> -}
> -
> -namespace lld {
> -namespace elf {
> -
> -class HexagonGOTAtom : public GOTAtom {
> -public:
> -  HexagonGOTAtom(const File &f) : GOTAtom(f, ".got") {}
> -
> -  virtual ArrayRef<uint8_t> rawContent() const {
> -    return ArrayRef<uint8_t>(hexagonGotAtomContent, 4);
> -  }
> -
> -  virtual Alignment alignment() const { return Alignment(2); }
> -};
> -
> -class HexagonGOTPLTAtom : public GOTAtom {
> -public:
> -  HexagonGOTPLTAtom(const File &f) : GOTAtom(f, ".got.plt") {}
> -
> -  virtual ArrayRef<uint8_t> rawContent() const {
> -    return ArrayRef<uint8_t>(hexagonGotPltAtomContent, 4);
> -  }
> -
> -  virtual Alignment alignment() const { return Alignment(2); }
> -};
> -
> -class HexagonGOTPLT0Atom : public GOTAtom {
> -public:
> -  HexagonGOTPLT0Atom(const File &f) : GOTAtom(f, ".got.plt") {}
> -
> -  virtual ArrayRef<uint8_t> rawContent() const {
> -    return ArrayRef<uint8_t>(hexagonGotPlt0AtomContent, 16);
> -  }
> -
> -  virtual Alignment alignment() const { return Alignment(3); }
> -};
> -
> -class HexagonPLT0Atom : public PLT0Atom {
> -public:
> -  HexagonPLT0Atom(const File &f) : PLT0Atom(f) {
> -#ifndef NDEBUG
> -    _name = ".PLT0";
> -#endif
> -  }
> -
> -  virtual ArrayRef<uint8_t> rawContent() const {
> -    return ArrayRef<uint8_t>(hexagonPlt0AtomContent, 28);
> -  }
> -};
> -
> -class HexagonPLTAtom : public PLTAtom {
> -
> -public:
> -  HexagonPLTAtom(const File &f, StringRef secName) : PLTAtom(f, secName) {}
> -
> -  virtual ArrayRef<uint8_t> rawContent() const {
> -    return ArrayRef<uint8_t>(hexagonPltAtomContent, 16);
> -  }
> -};
> -
> -} // elf
> -} // lld
> -
> -#endif // LLD_READER_WRITER_ELF_HEXAGON_DYNAMIC_ATOMS_H
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp?rev=182427&r1=182426&r2=182427&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp Tue May 21 16:47:33 2013
> @@ -7,7 +7,6 @@
>  //
>  //===----------------------------------------------------------------------===//
>
> -#include "HexagonDynamicAtoms.h"
>  #include "HexagonTargetHandler.h"
>  #include "HexagonTargetInfo.h"
>
> @@ -25,6 +24,87 @@ namespace {
>
>  using namespace llvm::ELF;
>
> +// .got atom
> +const uint8_t hexagonGotAtomContent[4] = { 0 };
> +// .got.plt atom (entry 0)
> +const uint8_t hexagonGotPlt0AtomContent[16] = { 0 };
> +// .got.plt atom (all other entries)
> +const uint8_t hexagonGotPltAtomContent[4] = { 0 };
> +// .plt (entry 0)
> +const uint8_t hexagonPlt0AtomContent[28] = {
> +  0x00, 0x40, 0x00, 0x00, // { immext (#0)
> +  0x1c, 0xc0, 0x49, 0x6a, //   r28 = add (pc, ##GOT0 at PCREL) } # address of GOT0
> +  0x0e, 0x42, 0x9c, 0xe2, // { r14 -= add (r28, #16)  # offset of GOTn from GOTa
> +  0x4f, 0x40, 0x9c, 0x91, //   r15 = memw (r28 + #8)  # object ID at GOT2
> +  0x3c, 0xc0, 0x9c, 0x91, //   r28 = memw (r28 + #4) }# dynamic link at GOT1
> +  0x0e, 0x42, 0x0e, 0x8c, // { r14 = asr (r14, #2)    # index of PLTn
> +  0x00, 0xc0, 0x9c, 0x52, //   jumpr r28 }            # call dynamic linker
> +};
> +
> +// .plt (other entries)
> +const uint8_t hexagonPltAtomContent[16] = {
> +  0x00, 0x40, 0x00, 0x00, // { immext (#0)
> +  0x0e, 0xc0, 0x49, 0x6a, //   r14 = add (pc, ##GOTn at PCREL) } # address of GOTn
> +  0x1c, 0xc0, 0x8e, 0x91, // r28 = memw (r14)                 # contents of GOTn
> +  0x00, 0xc0, 0x9c, 0x52, // jumpr r28                        # call it
> +};
> +
> +class HexagonGOTAtom : public GOTAtom {
> +public:
> +  HexagonGOTAtom(const File &f) : GOTAtom(f, ".got") {}
> +
> +  virtual ArrayRef<uint8_t> rawContent() const {
> +    return ArrayRef<uint8_t>(hexagonGotAtomContent, 4);
> +  }
> +
> +  virtual Alignment alignment() const { return Alignment(2); }
> +};
> +
> +class HexagonGOTPLTAtom : public GOTAtom {
> +public:
> +  HexagonGOTPLTAtom(const File &f) : GOTAtom(f, ".got.plt") {}
> +
> +  virtual ArrayRef<uint8_t> rawContent() const {
> +    return ArrayRef<uint8_t>(hexagonGotPltAtomContent, 4);
> +  }
> +
> +  virtual Alignment alignment() const { return Alignment(2); }
> +};
> +
> +class HexagonGOTPLT0Atom : public GOTAtom {
> +public:
> +  HexagonGOTPLT0Atom(const File &f) : GOTAtom(f, ".got.plt") {}
> +
> +  virtual ArrayRef<uint8_t> rawContent() const {
> +    return ArrayRef<uint8_t>(hexagonGotPlt0AtomContent, 16);
> +  }
> +
> +  virtual Alignment alignment() const { return Alignment(3); }
> +};
> +
> +class HexagonPLT0Atom : public PLT0Atom {
> +public:
> +  HexagonPLT0Atom(const File &f) : PLT0Atom(f) {
> +#ifndef NDEBUG
> +    _name = ".PLT0";
> +#endif
> +  }
> +
> +  virtual ArrayRef<uint8_t> rawContent() const {
> +    return ArrayRef<uint8_t>(hexagonPlt0AtomContent, 28);
> +  }
> +};
> +
> +class HexagonPLTAtom : public PLTAtom {
> +
> +public:
> +  HexagonPLTAtom(const File &f, StringRef secName) : PLTAtom(f, secName) {}
> +
> +  virtual ArrayRef<uint8_t> rawContent() const {
> +    return ArrayRef<uint8_t>(hexagonPltAtomContent, 16);
> +  }
> +};
> +
>  class ELFPassFile : public SimpleFile {
>  public:
>    ELFPassFile(const ELFTargetInfo &eti) : SimpleFile(eti, "ELFPassFile") {}
>
> Removed: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64DynamicAtoms.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64DynamicAtoms.h?rev=182426&view=auto
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64DynamicAtoms.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64DynamicAtoms.h (removed)
> @@ -1,73 +0,0 @@
> -//===- lib/ReaderWriter/ELF/X86_64/X86_64DynamicAtoms.h -------------------===//
> -//
> -//                             The LLVM Linker
> -//
> -// This file is distributed under the University of Illinois Open Source
> -// License. See LICENSE.TXT for details.
> -//
> -//===----------------------------------------------------------------------===//
> -
> -#ifndef X86_64_DYNAMIC_ATOMS_H
> -#define X86_64_DYNAMIC_ATOMS_H
> -
> -#include "Atoms.h"
> -#include "X86_64TargetInfo.h"
> -
> -/// \brief Specify various atom contents that are used by X86_64 dynamic
> -/// linking
> -namespace {
> -// .got values
> -const uint8_t x86_64GotAtomContent[8] = { 0 };
> -
> -// .plt value (entry 0)
> -const uint8_t x86_64Plt0AtomContent[16] = {
> -  0xff, 0x35, 0x00, 0x00, 0x00, 0x00, // pushq GOT+8(%rip)
> -  0xff, 0x25, 0x00, 0x00, 0x00, 0x00, // jmp *GOT+16(%rip)
> -  0x90, 0x90, 0x90, 0x90              // nopnopnop
> -};
> -
> -// .plt values (other entries)
> -const uint8_t x86_64PltAtomContent[16] = {
> -  0xff, 0x25, 0x00, 0x00, 0x00, 0x00, // jmpq *gotatom(%rip)
> -  0x68, 0x00, 0x00, 0x00, 0x00,       // pushq reloc-index
> -  0xe9, 0x00, 0x00, 0x00, 0x00        // jmpq plt[-1]
> -};
> -}
> -
> -namespace lld {
> -namespace elf {
> -
> -class X86_64GOTAtom : public GOTAtom {
> -public:
> -  X86_64GOTAtom(const File &f, StringRef secName) : GOTAtom(f, secName) {}
> -
> -  virtual ArrayRef<uint8_t> rawContent() const {
> -    return ArrayRef<uint8_t>(x86_64GotAtomContent, 8);
> -  }
> -};
> -
> -class X86_64PLT0Atom : public PLT0Atom {
> -public:
> -  X86_64PLT0Atom(const File &f) : PLT0Atom(f) {
> -#ifndef NDEBUG
> -    _name = ".PLT0";
> -#endif
> -  }
> -  virtual ArrayRef<uint8_t> rawContent() const {
> -    return ArrayRef<uint8_t>(x86_64Plt0AtomContent, 16);
> -  }
> -};
> -
> -class X86_64PLTAtom : public PLTAtom {
> -public:
> -  X86_64PLTAtom(const File &f, StringRef secName) : PLTAtom(f, secName) {}
> -
> -  virtual ArrayRef<uint8_t> rawContent() const {
> -    return ArrayRef<uint8_t>(x86_64PltAtomContent, 16);
> -  }
> -};
> -
> -} // elf
> -} // lld
> -
> -#endif
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp?rev=182427&r1=182426&r2=182427&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64TargetInfo.cpp Tue May 21 16:47:33 2013
> @@ -7,7 +7,7 @@
>  //
>  //===----------------------------------------------------------------------===//
>
> -#include "X86_64DynamicAtoms.h"
> +#include "Atoms.h"
>  #include "X86_64TargetInfo.h"
>
>  #include "lld/Core/File.h"
> @@ -25,6 +25,54 @@ using namespace lld::elf;
>  namespace {
>  using namespace llvm::ELF;
>
> +// .got values
> +const uint8_t x86_64GotAtomContent[8] = { 0 };
> +
> +// .plt value (entry 0)
> +const uint8_t x86_64Plt0AtomContent[16] = {
> +  0xff, 0x35, 0x00, 0x00, 0x00, 0x00, // pushq GOT+8(%rip)
> +  0xff, 0x25, 0x00, 0x00, 0x00, 0x00, // jmp *GOT+16(%rip)
> +  0x90, 0x90, 0x90, 0x90              // nopnopnop
> +};
> +
> +// .plt values (other entries)
> +const uint8_t x86_64PltAtomContent[16] = {
> +  0xff, 0x25, 0x00, 0x00, 0x00, 0x00, // jmpq *gotatom(%rip)
> +  0x68, 0x00, 0x00, 0x00, 0x00,       // pushq reloc-index
> +  0xe9, 0x00, 0x00, 0x00, 0x00        // jmpq plt[-1]
> +};
> +
> +/// \brief Atoms that are used by X86_64 dynamic linking
> +class X86_64GOTAtom : public GOTAtom {
> +public:
> +  X86_64GOTAtom(const File &f, StringRef secName) : GOTAtom(f, secName) {}
> +
> +  virtual ArrayRef<uint8_t> rawContent() const {
> +    return ArrayRef<uint8_t>(x86_64GotAtomContent, 8);
> +  }
> +};
> +
> +class X86_64PLT0Atom : public PLT0Atom {
> +public:
> +  X86_64PLT0Atom(const File &f) : PLT0Atom(f) {
> +#ifndef NDEBUG
> +    _name = ".PLT0";
> +#endif
> +  }
> +  virtual ArrayRef<uint8_t> rawContent() const {
> +    return ArrayRef<uint8_t>(x86_64Plt0AtomContent, 16);
> +  }
> +};
> +
> +class X86_64PLTAtom : public PLTAtom {
> +public:
> +  X86_64PLTAtom(const File &f, StringRef secName) : PLTAtom(f, secName) {}
> +
> +  virtual ArrayRef<uint8_t> rawContent() const {
> +    return ArrayRef<uint8_t>(x86_64PltAtomContent, 16);
> +  }
> +};
> +
>  class ELFPassFile : public SimpleFile {
>  public:
>    ELFPassFile(const ELFTargetInfo &eti) : SimpleFile(eti, "ELFPassFile") {}
>
>
> _______________________________________________
> 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