mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
Get rid of a bunch of duplicated ELF enum values.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108520 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
53621a1a73
commit
10bb4211d6
@ -22,36 +22,12 @@
|
||||
|
||||
#include "llvm/CodeGen/BinaryObject.h"
|
||||
#include "llvm/CodeGen/MachineRelocation.h"
|
||||
#include "llvm/Support/ELF.h"
|
||||
#include "llvm/System/DataTypes.h"
|
||||
|
||||
namespace llvm {
|
||||
class GlobalValue;
|
||||
|
||||
// Identification Indexes
|
||||
enum {
|
||||
EI_MAG0 = 0,
|
||||
EI_MAG1 = 1,
|
||||
EI_MAG2 = 2,
|
||||
EI_MAG3 = 3
|
||||
};
|
||||
|
||||
// File types
|
||||
enum {
|
||||
ET_NONE = 0, // No file type
|
||||
ET_REL = 1, // Relocatable file
|
||||
ET_EXEC = 2, // Executable file
|
||||
ET_DYN = 3, // Shared object file
|
||||
ET_CORE = 4, // Core file
|
||||
ET_LOPROC = 0xff00, // Beginning of processor-specific codes
|
||||
ET_HIPROC = 0xffff // Processor-specific
|
||||
};
|
||||
|
||||
// Versioning
|
||||
enum {
|
||||
EV_NONE = 0,
|
||||
EV_CURRENT = 1
|
||||
};
|
||||
|
||||
/// ELFSym - This struct contains information about each symbol that is
|
||||
/// added to logical symbol table for the module. This is eventually
|
||||
/// turned into a real symbol table in the file.
|
||||
@ -108,9 +84,9 @@ namespace llvm {
|
||||
static ELFSym *getExtSym(const char *Ext) {
|
||||
ELFSym *Sym = new ELFSym();
|
||||
Sym->Source.Ext = Ext;
|
||||
Sym->setBind(STB_GLOBAL);
|
||||
Sym->setType(STT_NOTYPE);
|
||||
Sym->setVisibility(STV_DEFAULT);
|
||||
Sym->setBind(ELF::STB_GLOBAL);
|
||||
Sym->setType(ELF::STT_NOTYPE);
|
||||
Sym->setVisibility(ELF::STV_DEFAULT);
|
||||
Sym->SourceType = isExtSym;
|
||||
return Sym;
|
||||
}
|
||||
@ -118,9 +94,9 @@ namespace llvm {
|
||||
// getSectionSym - Returns a elf symbol to represent an elf section
|
||||
static ELFSym *getSectionSym() {
|
||||
ELFSym *Sym = new ELFSym();
|
||||
Sym->setBind(STB_LOCAL);
|
||||
Sym->setType(STT_SECTION);
|
||||
Sym->setVisibility(STV_DEFAULT);
|
||||
Sym->setBind(ELF::STB_LOCAL);
|
||||
Sym->setType(ELF::STT_SECTION);
|
||||
Sym->setVisibility(ELF::STV_DEFAULT);
|
||||
Sym->SourceType = isOther;
|
||||
return Sym;
|
||||
}
|
||||
@ -128,9 +104,9 @@ namespace llvm {
|
||||
// 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->setBind(ELF::STB_LOCAL);
|
||||
Sym->setType(ELF::STT_FILE);
|
||||
Sym->setVisibility(ELF::STV_DEFAULT);
|
||||
Sym->SectionIdx = 0xfff1; // ELFSection::SHN_ABS;
|
||||
Sym->SourceType = isOther;
|
||||
return Sym;
|
||||
@ -141,8 +117,8 @@ namespace llvm {
|
||||
ELFSym *Sym = new ELFSym();
|
||||
Sym->Source.GV = GV;
|
||||
Sym->setBind(Bind);
|
||||
Sym->setType(STT_NOTYPE);
|
||||
Sym->setVisibility(STV_DEFAULT);
|
||||
Sym->setType(ELF::STT_NOTYPE);
|
||||
Sym->setVisibility(ELF::STV_DEFAULT);
|
||||
Sym->SectionIdx = 0; //ELFSection::SHN_UNDEF;
|
||||
Sym->SourceType = isGV;
|
||||
return Sym;
|
||||
@ -159,35 +135,14 @@ namespace llvm {
|
||||
// Symbol index into the Symbol table
|
||||
unsigned SymTabIdx;
|
||||
|
||||
enum {
|
||||
STB_LOCAL = 0, // Local sym, not visible outside obj file containing def
|
||||
STB_GLOBAL = 1, // Global sym, visible to all object files being combined
|
||||
STB_WEAK = 2 // Weak symbol, like global but lower-precedence
|
||||
};
|
||||
|
||||
enum {
|
||||
STT_NOTYPE = 0, // Symbol's type is not specified
|
||||
STT_OBJECT = 1, // Symbol is a data object (variable, array, etc.)
|
||||
STT_FUNC = 2, // Symbol is executable code (function, etc.)
|
||||
STT_SECTION = 3, // Symbol refers to a section
|
||||
STT_FILE = 4 // Local, absolute symbol that refers to a file
|
||||
};
|
||||
|
||||
enum {
|
||||
STV_DEFAULT = 0, // Visibility is specified by binding type
|
||||
STV_INTERNAL = 1, // Defined by processor supplements
|
||||
STV_HIDDEN = 2, // Not visible to other components
|
||||
STV_PROTECTED = 3 // Visible in other components but not preemptable
|
||||
};
|
||||
|
||||
ELFSym() : SourceType(isOther), NameIdx(0), Value(0),
|
||||
Size(0), Info(0), Other(STV_DEFAULT), SectionIdx(0),
|
||||
Size(0), Info(0), Other(ELF::STV_DEFAULT), SectionIdx(0),
|
||||
SymTabIdx(0) {}
|
||||
|
||||
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; }
|
||||
bool isLocalBind() const { return getBind() == ELF::STB_LOCAL; }
|
||||
bool isFileType() const { return getType() == ELF::STT_FILE; }
|
||||
|
||||
void setBind(unsigned X) {
|
||||
assert(X == (X & 0xF) && "Bind value out of range!");
|
||||
@ -222,51 +177,6 @@ namespace llvm {
|
||||
unsigned Align; // sh_addralign - Alignment of section.
|
||||
unsigned EntSize; // sh_entsize - Size of entries in the section e
|
||||
|
||||
// Section Header Flags
|
||||
enum {
|
||||
SHF_WRITE = 1 << 0, // Writable
|
||||
SHF_ALLOC = 1 << 1, // Mapped into the process addr space
|
||||
SHF_EXECINSTR = 1 << 2, // Executable
|
||||
SHF_MERGE = 1 << 4, // Might be merged if equal
|
||||
SHF_STRINGS = 1 << 5, // Contains null-terminated strings
|
||||
SHF_INFO_LINK = 1 << 6, // 'sh_info' contains SHT index
|
||||
SHF_LINK_ORDER = 1 << 7, // Preserve order after combining
|
||||
SHF_OS_NONCONFORMING = 1 << 8, // nonstandard OS support required
|
||||
SHF_GROUP = 1 << 9, // Section is a member of a group
|
||||
SHF_TLS = 1 << 10 // Section holds thread-local data
|
||||
};
|
||||
|
||||
// Section Types
|
||||
enum {
|
||||
SHT_NULL = 0, // No associated section (inactive entry).
|
||||
SHT_PROGBITS = 1, // Program-defined contents.
|
||||
SHT_SYMTAB = 2, // Symbol table.
|
||||
SHT_STRTAB = 3, // String table.
|
||||
SHT_RELA = 4, // Relocation entries; explicit addends.
|
||||
SHT_HASH = 5, // Symbol hash table.
|
||||
SHT_DYNAMIC = 6, // Information for dynamic linking.
|
||||
SHT_NOTE = 7, // Information about the file.
|
||||
SHT_NOBITS = 8, // Data occupies no space in the file.
|
||||
SHT_REL = 9, // Relocation entries; no explicit addends.
|
||||
SHT_SHLIB = 10, // Reserved.
|
||||
SHT_DYNSYM = 11, // Symbol table.
|
||||
SHT_LOPROC = 0x70000000, // Lowest processor arch-specific type.
|
||||
SHT_HIPROC = 0x7fffffff, // Highest processor arch-specific type.
|
||||
SHT_LOUSER = 0x80000000, // Lowest type reserved for applications.
|
||||
SHT_HIUSER = 0xffffffff // Highest type reserved for applications.
|
||||
};
|
||||
|
||||
// Special section indices.
|
||||
enum {
|
||||
SHN_UNDEF = 0, // Undefined, missing, irrelevant
|
||||
SHN_LORESERVE = 0xff00, // Lowest reserved index
|
||||
SHN_LOPROC = 0xff00, // Lowest processor-specific index
|
||||
SHN_HIPROC = 0xff1f, // Highest processor-specific index
|
||||
SHN_ABS = 0xfff1, // Symbol has absolute value; no relocation
|
||||
SHN_COMMON = 0xfff2, // FORTRAN COMMON or C external global variables
|
||||
SHN_HIRESERVE = 0xffff // Highest reserved index
|
||||
};
|
||||
|
||||
/// SectionIdx - The number of the section in the Section Table.
|
||||
unsigned short SectionIdx;
|
||||
|
||||
|
@ -71,7 +71,7 @@ void ELFCodeEmitter::startFunction(MachineFunction &MF) {
|
||||
bool ELFCodeEmitter::finishFunction(MachineFunction &MF) {
|
||||
// Add a symbol to represent the function.
|
||||
const Function *F = MF.getFunction();
|
||||
ELFSym *FnSym = ELFSym::getGV(F, EW.getGlobalELFBinding(F), ELFSym::STT_FUNC,
|
||||
ELFSym *FnSym = ELFSym::getGV(F, EW.getGlobalELFBinding(F), ELF::STT_FUNC,
|
||||
EW.getGlobalELFVisibility(F));
|
||||
FnSym->SectionIdx = ES->SectionIdx;
|
||||
FnSym->Size = ES->getCurrentPCOffset()-FnStartOff;
|
||||
|
@ -129,12 +129,12 @@ bool ELFWriter::doInitialization(Module &M) {
|
||||
|
||||
ElfHdr.emitByte(TEW->getEIClass()); // e_ident[EI_CLASS]
|
||||
ElfHdr.emitByte(TEW->getEIData()); // e_ident[EI_DATA]
|
||||
ElfHdr.emitByte(EV_CURRENT); // e_ident[EI_VERSION]
|
||||
ElfHdr.emitByte(ELF::EV_CURRENT); // e_ident[EI_VERSION]
|
||||
ElfHdr.emitAlignment(16); // e_ident[EI_NIDENT-EI_PAD]
|
||||
|
||||
ElfHdr.emitWord16(ET_REL); // e_type
|
||||
ElfHdr.emitWord16(ELF::ET_REL); // e_type
|
||||
ElfHdr.emitWord16(TEW->getEMachine()); // e_machine = target
|
||||
ElfHdr.emitWord32(EV_CURRENT); // e_version
|
||||
ElfHdr.emitWord32(ELF::EV_CURRENT); // e_version
|
||||
ElfHdr.emitWord(0); // e_entry, no entry point in .o file
|
||||
ElfHdr.emitWord(0); // e_phoff, no program header for .o
|
||||
ELFHdr_e_shoff_Offset = ElfHdr.size();
|
||||
@ -252,7 +252,7 @@ ELFSection &ELFWriter::getConstantPoolSection(MachineConstantPoolEntry &CPE) {
|
||||
// is true if the relocation section contains entries with addends.
|
||||
ELFSection &ELFWriter::getRelocSection(ELFSection &S) {
|
||||
unsigned SectionType = TEW->hasRelocationAddend() ?
|
||||
ELFSection::SHT_RELA : ELFSection::SHT_REL;
|
||||
ELF::SHT_RELA : ELF::SHT_REL;
|
||||
|
||||
std::string SectionName(".rel");
|
||||
if (TEW->hasRelocationAddend())
|
||||
@ -268,11 +268,11 @@ unsigned ELFWriter::getGlobalELFVisibility(const GlobalValue *GV) {
|
||||
default:
|
||||
llvm_unreachable("unknown visibility type");
|
||||
case GlobalValue::DefaultVisibility:
|
||||
return ELFSym::STV_DEFAULT;
|
||||
return ELF::STV_DEFAULT;
|
||||
case GlobalValue::HiddenVisibility:
|
||||
return ELFSym::STV_HIDDEN;
|
||||
return ELF::STV_HIDDEN;
|
||||
case GlobalValue::ProtectedVisibility:
|
||||
return ELFSym::STV_PROTECTED;
|
||||
return ELF::STV_PROTECTED;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -280,23 +280,23 @@ unsigned ELFWriter::getGlobalELFVisibility(const GlobalValue *GV) {
|
||||
// getGlobalELFBinding - Returns the ELF specific binding type
|
||||
unsigned ELFWriter::getGlobalELFBinding(const GlobalValue *GV) {
|
||||
if (GV->hasInternalLinkage())
|
||||
return ELFSym::STB_LOCAL;
|
||||
return ELF::STB_LOCAL;
|
||||
|
||||
if (GV->isWeakForLinker() && !GV->hasCommonLinkage())
|
||||
return ELFSym::STB_WEAK;
|
||||
return ELF::STB_WEAK;
|
||||
|
||||
return ELFSym::STB_GLOBAL;
|
||||
return ELF::STB_GLOBAL;
|
||||
}
|
||||
|
||||
// getGlobalELFType - Returns the ELF specific type for a global
|
||||
unsigned ELFWriter::getGlobalELFType(const GlobalValue *GV) {
|
||||
if (GV->isDeclaration())
|
||||
return ELFSym::STT_NOTYPE;
|
||||
return ELF::STT_NOTYPE;
|
||||
|
||||
if (isa<Function>(GV))
|
||||
return ELFSym::STT_FUNC;
|
||||
return ELF::STT_FUNC;
|
||||
|
||||
return ELFSym::STT_OBJECT;
|
||||
return ELF::STT_OBJECT;
|
||||
}
|
||||
|
||||
// IsELFUndefSym - True if the global value must be marked as a symbol
|
||||
@ -364,7 +364,7 @@ void ELFWriter::EmitGlobal(const GlobalValue *GV) {
|
||||
GblSym->Size = Size;
|
||||
|
||||
if (S->HasCommonSymbols()) { // Symbol must go to a common section
|
||||
GblSym->SectionIdx = ELFSection::SHN_COMMON;
|
||||
GblSym->SectionIdx = ELF::SHN_COMMON;
|
||||
|
||||
// A new linkonce section is created for each global in the
|
||||
// common section, the default alignment is 1 and the symbol
|
||||
|
@ -160,29 +160,29 @@ namespace llvm {
|
||||
SN->SectionIdx = NumSections++;
|
||||
SN->Type = Type;
|
||||
SN->Flags = Flags;
|
||||
SN->Link = ELFSection::SHN_UNDEF;
|
||||
SN->Link = ELF::SHN_UNDEF;
|
||||
SN->Align = Align;
|
||||
return *SN;
|
||||
}
|
||||
|
||||
ELFSection &getNonExecStackSection() {
|
||||
return getSection(".note.GNU-stack", ELFSection::SHT_PROGBITS, 0, 1);
|
||||
return getSection(".note.GNU-stack", ELF::SHT_PROGBITS, 0, 1);
|
||||
}
|
||||
|
||||
ELFSection &getSymbolTableSection() {
|
||||
return getSection(".symtab", ELFSection::SHT_SYMTAB, 0);
|
||||
return getSection(".symtab", ELF::SHT_SYMTAB, 0);
|
||||
}
|
||||
|
||||
ELFSection &getStringTableSection() {
|
||||
return getSection(".strtab", ELFSection::SHT_STRTAB, 0, 1);
|
||||
return getSection(".strtab", ELF::SHT_STRTAB, 0, 1);
|
||||
}
|
||||
|
||||
ELFSection &getSectionHeaderStringTableSection() {
|
||||
return getSection(".shstrtab", ELFSection::SHT_STRTAB, 0, 1);
|
||||
return getSection(".shstrtab", ELF::SHT_STRTAB, 0, 1);
|
||||
}
|
||||
|
||||
ELFSection &getNullSection() {
|
||||
return getSection("", ELFSection::SHT_NULL, 0);
|
||||
return getSection("", ELF::SHT_NULL, 0);
|
||||
}
|
||||
|
||||
ELFSection &getDataSection();
|
||||
|
@ -90,8 +90,8 @@ std::string JITDebugRegisterer::MakeELF(const Function *F, DebugInfo &I) {
|
||||
// section. This allows GDB to get a good stack trace, particularly on
|
||||
// linux x86_64. Mark this as a PROGBITS section that needs to be loaded
|
||||
// into memory at runtime.
|
||||
ELFSection &EH = EW.getSection(".eh_frame", ELFSection::SHT_PROGBITS,
|
||||
ELFSection::SHF_ALLOC);
|
||||
ELFSection &EH = EW.getSection(".eh_frame", ELF::SHT_PROGBITS,
|
||||
ELF::SHF_ALLOC);
|
||||
// Pointers in the DWARF EH info are all relative to the EH frame start,
|
||||
// which is stored here.
|
||||
EH.Addr = (uint64_t)I.EhStart;
|
||||
@ -102,9 +102,9 @@ std::string JITDebugRegisterer::MakeELF(const Function *F, DebugInfo &I) {
|
||||
// Add this single function to the symbol table, so the debugger prints the
|
||||
// name instead of '???'. We give the symbol default global visibility.
|
||||
ELFSym *FnSym = ELFSym::getGV(F,
|
||||
ELFSym::STB_GLOBAL,
|
||||
ELFSym::STT_FUNC,
|
||||
ELFSym::STV_DEFAULT);
|
||||
ELF::STB_GLOBAL,
|
||||
ELF::STT_FUNC,
|
||||
ELF::STV_DEFAULT);
|
||||
FnSym->SectionIdx = Text.SectionIdx;
|
||||
FnSym->Size = I.FnEnd - I.FnStart;
|
||||
FnSym->Value = 0; // Offset from start of section.
|
||||
|
Loading…
Reference in New Issue
Block a user