[llvm-commits] [llvm] r166918 - in /llvm/trunk: include/llvm/Object/COFF.h include/llvm/Object/ELF.h include/llvm/Object/MachO.h include/llvm/Object/ObjectFile.h lib/Object/COFFObjectFile.cpp lib/Object/MachOObjectFile.cpp

Chandler Carruth chandlerc at google.com
Mon Oct 29 07:41:30 PDT 2012


Are there no unit tests to test new interface points of libObject?
On Oct 29, 2012 3:48 AM, "Tim Northover" <Tim.Northover at arm.com> wrote:

> Author: tnorthover
> Date: Mon Oct 29 05:47:00 2012
> New Revision: 166918
>
> URL: http://llvm.org/viewvc/llvm-project?rev=166918&view=rev
> Log:
> Add interface for querying object files for symbol values.
>
> Currently only implemented for ELF.
>
> Patch by Amara Emerson.
>
> Modified:
>     llvm/trunk/include/llvm/Object/COFF.h
>     llvm/trunk/include/llvm/Object/ELF.h
>     llvm/trunk/include/llvm/Object/MachO.h
>     llvm/trunk/include/llvm/Object/ObjectFile.h
>     llvm/trunk/lib/Object/COFFObjectFile.cpp
>     llvm/trunk/lib/Object/MachOObjectFile.cpp
>
> Modified: llvm/trunk/include/llvm/Object/COFF.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/COFF.h?rev=166918&r1=166917&r2=166918&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Object/COFF.h (original)
> +++ llvm/trunk/include/llvm/Object/COFF.h Mon Oct 29 05:47:00 2012
> @@ -116,6 +116,7 @@
>    virtual error_code getSymbolType(DataRefImpl Symb, SymbolRef::Type
> &Res) const;
>    virtual error_code getSymbolSection(DataRefImpl Symb,
>                                        section_iterator &Res) const;
> +  virtual error_code getSymbolValue(DataRefImpl Symb, uint64_t &Val)
> const;
>
>    virtual error_code getSectionNext(DataRefImpl Sec, SectionRef &Res)
> const;
>    virtual error_code getSectionName(DataRefImpl Sec, StringRef &Res)
> const;
>
> Modified: llvm/trunk/include/llvm/Object/ELF.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELF.h?rev=166918&r1=166917&r2=166918&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Object/ELF.h (original)
> +++ llvm/trunk/include/llvm/Object/ELF.h Mon Oct 29 05:47:00 2012
> @@ -620,6 +620,7 @@
>    virtual error_code getSymbolType(DataRefImpl Symb, SymbolRef::Type
> &Res) const;
>    virtual error_code getSymbolSection(DataRefImpl Symb,
>                                        section_iterator &Res) const;
> +  virtual error_code getSymbolValue(DataRefImpl Symb, uint64_t &Val)
> const;
>
>    friend class DynRefImpl<target_endianness, is64Bits>;
>    virtual error_code getDynNext(DataRefImpl DynData, DynRef &Result)
> const;
> @@ -1162,6 +1163,16 @@
>
>  template<support::endianness target_endianness, bool is64Bits>
>  error_code ELFObjectFile<target_endianness, is64Bits>
> +                        ::getSymbolValue(DataRefImpl Symb,
> +                                         uint64_t &Val) const {
> +  validateSymbol(Symb);
> +  const Elf_Sym *symb = getSymbol(Symb);
> +  Val = symb->st_value;
> +  return object_error::success;
> +}
> +
> +template<support::endianness target_endianness, bool is64Bits>
> +error_code ELFObjectFile<target_endianness, is64Bits>
>                          ::getSectionNext(DataRefImpl Sec, SectionRef
> &Result) const {
>    const uint8_t *sec = reinterpret_cast<const uint8_t *>(Sec.p);
>    sec += Header->e_shentsize;
>
> Modified: llvm/trunk/include/llvm/Object/MachO.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/MachO.h?rev=166918&r1=166917&r2=166918&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Object/MachO.h (original)
> +++ llvm/trunk/include/llvm/Object/MachO.h Mon Oct 29 05:47:00 2012
> @@ -61,6 +61,7 @@
>    virtual error_code getSymbolType(DataRefImpl Symb, SymbolRef::Type
> &Res) const;
>    virtual error_code getSymbolSection(DataRefImpl Symb,
>                                        section_iterator &Res) const;
> +  virtual error_code getSymbolValue(DataRefImpl Symb, uint64_t &Val)
> const;
>
>    virtual error_code getSectionNext(DataRefImpl Sec, SectionRef &Res)
> const;
>    virtual error_code getSectionName(DataRefImpl Sec, StringRef &Res)
> const;
>
> Modified: llvm/trunk/include/llvm/Object/ObjectFile.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ObjectFile.h?rev=166918&r1=166917&r2=166918&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Object/ObjectFile.h (original)
> +++ llvm/trunk/include/llvm/Object/ObjectFile.h Mon Oct 29 05:47:00 2012
> @@ -234,6 +234,9 @@
>    /// end_sections() if it is undefined or is an absolute symbol.
>    error_code getSection(section_iterator &Result) const;
>
> +  /// @brief Get value of the symbol in the symbol table.
> +  error_code getValue(uint64_t &Val) const;
> +
>    DataRefImpl getRawDataRefImpl() const;
>  };
>  typedef content_iterator<SymbolRef> symbol_iterator;
> @@ -300,6 +303,7 @@
>                                      uint32_t &Res) const = 0;
>    virtual error_code getSymbolSection(DataRefImpl Symb,
>                                        section_iterator &Res) const = 0;
> +  virtual error_code getSymbolValue(DataRefImpl Symb, uint64_t &Val)
> const = 0;
>
>    // Same as above for SectionRef.
>    friend class SectionRef;
> @@ -444,6 +448,10 @@
>    return OwningObject->getSymbolType(SymbolPimpl, Result);
>  }
>
> +inline error_code SymbolRef::getValue(uint64_t &Val) const {
> +  return OwningObject->getSymbolValue(SymbolPimpl, Val);
> +}
> +
>  inline DataRefImpl SymbolRef::getRawDataRefImpl() const {
>    return SymbolPimpl;
>  }
>
> Modified: llvm/trunk/lib/Object/COFFObjectFile.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFObjectFile.cpp?rev=166918&r1=166917&r2=166918&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Object/COFFObjectFile.cpp (original)
> +++ llvm/trunk/lib/Object/COFFObjectFile.cpp Mon Oct 29 05:47:00 2012
> @@ -288,6 +288,11 @@
>    return object_error::success;
>  }
>
> +error_code COFFObjectFile::getSymbolValue(DataRefImpl Symb,
> +                                          uint64_t &Val) const {
> +  report_fatal_error("getSymbolValue unimplemented in COFFObjectFile");
> +}
> +
>  error_code COFFObjectFile::getSectionNext(DataRefImpl Sec,
>                                            SectionRef &Result) const {
>    const coff_section *sec = toSec(Sec);
>
> Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=166918&r1=166917&r2=166918&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
> +++ llvm/trunk/lib/Object/MachOObjectFile.cpp Mon Oct 29 05:47:00 2012
> @@ -363,6 +363,10 @@
>    return object_error::success;
>  }
>
> +error_code MachOObjectFile::getSymbolValue(DataRefImpl Symb,
> +                                           uint64_t &Val) const {
> +  report_fatal_error("getSymbolValue unimplemented in MachOObjectFile");
> +}
>
>  symbol_iterator MachOObjectFile::begin_symbols() const {
>    // DRI.d.a = segment number; DRI.d.b = symbol index.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121029/bbd0f66c/attachment.html>


More information about the llvm-commits mailing list