Move DataTypes.h to include/llvm/System, update all users. This breaks the last
[oota-llvm.git] / lib / CodeGen / ELF.h
index cd0c68a7a2e4ca5cbc6976a53e64982e9af3e7e8..e303ebb0de91ec5ddca6f390e04db6f0381a2ac9 100644 (file)
@@ -22,7 +22,7 @@
 
 #include "llvm/CodeGen/BinaryObject.h"
 #include "llvm/CodeGen/MachineRelocation.h"
-#include "llvm/Support/DataTypes.h"
+#include "llvm/System/DataTypes.h"
 
 namespace llvm {
   class GlobalValue;
@@ -59,10 +59,10 @@ namespace llvm {
 
     // ELF symbols are related to llvm ones by being one of the two llvm
     // types, for the other ones (section, file, func) a null pointer is
-    // assumed.
+    // assumed by default.
     union {
       const GlobalValue *GV;  // If this is a pointer to a GV
-      const char *Ext;  // If this is a pointer to a named symbol
+      const char *Ext;        // If this is a pointer to a named symbol
     } Source;
 
     // Describes from which source type this ELF symbol comes from,
@@ -74,19 +74,19 @@ namespace llvm {
     };
     unsigned SourceType;
 
-    bool isGlobalValue() { return SourceType == isGV; }
-    bool isExternalSym() { return SourceType == isExtSym; }
+    bool isGlobalValue() const { return SourceType == isGV; }
+    bool isExternalSym() const { return SourceType == isExtSym; }
 
     // getGlobalValue - If this is a global value which originated the
     // elf symbol, return a reference to it.
-    const GlobalValue *getGlobalValue() {
+    const GlobalValue *getGlobalValue() const {
       assert(SourceType == isGV && "This is not a global value");
       return Source.GV;
     };
 
     // getExternalSym - If this is an external symbol which originated the
     // elf symbol, return a reference to it.
-    const char *getExternalSymbol() {
+    const char *getExternalSymbol() const {
       assert(SourceType == isExtSym && "This is not an external symbol");
       return Source.Ext;
     };
@@ -118,13 +118,36 @@ namespace llvm {
     // getSectionSym - Returns a elf symbol to represent an elf section
     static ELFSym *getSectionSym() {
       ELFSym *Sym = new ELFSym();
-      Sym->setBind(ELFSym::STB_LOCAL);
-      Sym->setType(ELFSym::STT_SECTION);
-      Sym->setVisibility(ELFSym::STV_DEFAULT);
+      Sym->setBind(STB_LOCAL);
+      Sym->setType(STT_SECTION);
+      Sym->setVisibility(STV_DEFAULT);
+      Sym->SourceType = isOther;
+      return Sym;
+    }
+
+    // getFileSym - Returns a elf symbol to represent the module identifier
+    static ELFSym *getFileSym() {
+      ELFSym *Sym = new ELFSym();
+      Sym->setBind(STB_LOCAL);
+      Sym->setType(STT_FILE);
+      Sym->setVisibility(STV_DEFAULT);
+      Sym->SectionIdx = 0xfff1;  // ELFSection::SHN_ABS;
       Sym->SourceType = isOther;
       return Sym;
     }
 
+    // getUndefGV - Returns a STT_NOTYPE symbol
+    static ELFSym *getUndefGV(const GlobalValue *GV, unsigned Bind) {
+      ELFSym *Sym = new ELFSym();
+      Sym->Source.GV = GV;
+      Sym->setBind(Bind);
+      Sym->setType(STT_NOTYPE);
+      Sym->setVisibility(STV_DEFAULT);
+      Sym->SectionIdx = 0;  //ELFSection::SHN_UNDEF;
+      Sym->SourceType = isGV;
+      return Sym;
+    }
+
     // ELF specific fields
     unsigned NameIdx;         // Index in .strtab of name, once emitted.
     uint64_t Value;
@@ -164,6 +187,7 @@ namespace llvm {
     unsigned getBind() const { return (Info >> 4) & 0xf; }
     unsigned getType() const { return Info & 0xf; }
     bool isLocalBind() const { return getBind() == STB_LOCAL; }
+    bool isFileType() const { return getType() == STT_FILE; }
 
     void setBind(unsigned X) {
       assert(X == (X & 0xF) && "Bind value out of range!");