<div dir="ltr">All these member functions don't seem to actually belong to ELFFile. They just call member functions of their arguments. Does it make more sense if we add them to Elf_Sym?</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 4, 2015 at 5:32 PM, Davide Italiano <span dir="ltr"><<a href="mailto:dccitaliano@gmail.com" target="_blank">dccitaliano@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi ruiu, rafael, shankar.easwaran,<br>
<br>
These were in lld. They can be reused for other tools, e.g. llvm-readobj.<br>
If needed, we can introduce another class as COFF does (i.e. COFFSymboRef).<br>
Note: Hexagon has a different notion of common symbol I'm not entirely sure I understand.<br>
I wasn't able to find documentation either, so any help on this side is greatly appreciated.<br>
<br>
REPOSITORY<br>
  rL LLVM<br>
<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D10264&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=St3JOl_Wdr7-8FyZbbBo8D_pwQpj1VEfvDeEpxAnVYw&s=rqwS8W1HOCHcvYkHTEfm_23UAp9jTOEHE8FHguHvuSs&e=" target="_blank">http://reviews.llvm.org/D10264</a><br>
<br>
Files:<br>
  include/llvm/Object/ELF.h<br>
<br>
Index: include/llvm/Object/ELF.h<br>
===================================================================<br>
--- include/llvm/Object/ELF.h<br>
+++ include/llvm/Object/ELF.h<br>
@@ -421,6 +421,11 @@<br>
   uint64_t getSymbolIndex(const Elf_Sym *sym) const;<br>
   ErrorOr<ArrayRef<uint8_t> > getSectionContents(const Elf_Shdr *Sec) const;<br>
   StringRef getLoadName() const;<br>
+<br>
+  bool isUndefinedSymbol(const Elf_Sym *Sym) const;<br>
+  bool isAbsoluteSymbol(const Elf_Sym *Sym) const;<br>
+  bool isCommonSymbol(const Elf_Sym *Sym) const;<br>
+  bool isDefinedSymbol(const Elf_Sym *Sym) const;<br>
 };<br>
<br>
 typedef ELFFile<ELFType<support::little, false>> ELF32LEFile;<br>
@@ -1010,6 +1015,39 @@<br>
   return StringRef(getDynamicString(name_offset));<br>
 }<br>
<br>
+template <class ELFT><br>
+bool ELFFile<ELFT>::isUndefinedSymbol(const Elf_Sym *Sym) const {<br>
+  return Sym->st_shndx == llvm::ELF::SHN_UNDEF;<br>
+}<br>
+<br>
+template <class ELFT><br>
+bool ELFFile<ELFT>::isAbsoluteSymbol(const Elf_Sym *Sym) const {<br>
+  return Sym->st_shndx == llvm::ELF::SHN_ABS;<br>
+}<br>
+<br>
+template <class ELFT><br>
+bool ELFFile<ELFT>::isCommonSymbol(const Elf_Sym *Sym) const {<br>
+  return Sym->getType() == llvm::ELF::STT_COMMON ||<br>
+         Sym->st_shndx == llvm::ELF::SHN_COMMON ||<br>
+         /* Hexagon-specific */<br>
+         Sym->st_shndx == llvm::ELF::SHN_HEXAGON_SCOMMON ||<br>
+         Sym->st_shndx == llvm::ELF::SHN_HEXAGON_SCOMMON_1 ||<br>
+         Sym->st_shndx == llvm::ELF::SHN_HEXAGON_SCOMMON_2 ||<br>
+         Sym->st_shndx == llvm::ELF::SHN_HEXAGON_SCOMMON_4 ||<br>
+         Sym->st_shndx == llvm::ELF::SHN_HEXAGON_SCOMMON_8;<br>
+}<br>
+<br>
+template <class ELFT><br>
+bool ELFFile<ELFT>::isDefinedSymbol(const Elf_Sym *Sym) const {<br>
+  return Sym->getType() == llvm::ELF::STT_NOTYPE ||<br>
+         Sym->getType() == llvm::ELF::STT_OBJECT ||<br>
+         Sym->getType() == llvm::ELF::STT_FUNC ||<br>
+         Sym->getType() == llvm::ELF::STT_GNU_IFUNC ||<br>
+         Sym->getType() == llvm::ELF::STT_SECTION ||<br>
+         Sym->getType() == llvm::ELF::STT_FILE ||<br>
+         Sym->getType() == llvm::ELF::STT_TLS;<br>
+}<br>
+<br>
 /// This function returns the hash value for a symbol in the .dynsym section<br>
 /// Name of the API remains consistent as specified in the libelf<br>
 /// REF : <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__www.sco.com_developers_gabi_latest_ch5.dynamic.html-23hash&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=St3JOl_Wdr7-8FyZbbBo8D_pwQpj1VEfvDeEpxAnVYw&s=nrFdoLd06rmuE7f97LQROAZvEPJZtLs9YtBNtNsOcQA&e=" target="_blank">http://www.sco.com/developers/gabi/latest/ch5.dynamic.html#hash</a><br>
<br>
EMAIL PREFERENCES<br>
  <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_settings_panel_emailpreferences_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=St3JOl_Wdr7-8FyZbbBo8D_pwQpj1VEfvDeEpxAnVYw&s=6iGrq7gKG5C4cglFWq16h0Fbz1sgNMbUdSmg3hhkd6M&e=" target="_blank">http://reviews.llvm.org/settings/panel/emailpreferences/</a><br>
</blockquote></div><br></div>