Add ELF ObjectWriter and Streamer support.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111172 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Matt Fleming 2010-08-16 18:35:43 +00:00
parent a8bf473fb1
commit 6b2e257e74
5 changed files with 19 additions and 4 deletions

View File

@ -44,9 +44,9 @@ class MCSectionELF : public MCSection {
private:
friend class MCContext;
MCSectionELF(StringRef Section, unsigned type, unsigned flags,
SectionKind K, bool isExplicit)
SectionKind K, bool isExplicit, unsigned entrySize)
: MCSection(SV_ELF, K), SectionName(Section), Type(type), Flags(flags),
IsExplicit(isExplicit) {}
IsExplicit(isExplicit), EntrySize(entrySize) {}
~MCSectionELF();
public:
@ -174,6 +174,7 @@ public:
StringRef getSectionName() const { return SectionName; }
unsigned getType() const { return Type; }
unsigned getFlags() const { return Flags; }
unsigned getEntrySize() const { return EntrySize; }
void PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const;

View File

@ -359,6 +359,12 @@ namespace llvm {
MCCodeEmitter &CE, raw_ostream &OS,
bool RelaxAll = false);
/// createELFStreamer - Create a machine code streamer which will generate
/// ELF format object files.
MCStreamer *createELFStreamer(MCContext &Ctx, TargetAsmBackend &TAB,
raw_ostream &OS, MCCodeEmitter *CE,
bool RelaxAll = false);
/// createLoggingStreamer - Create a machine code streamer which just logs the
/// API calls and then dispatches to another streamer.
///

View File

@ -330,6 +330,12 @@ struct Elf64_Sym {
}
};
// The size (in bytes) of symbol table entries.
enum {
SYMENTRY_SIZE32 = 16, // 32-bit symbol entry size
SYMENTRY_SIZE64 = 24 // 64-bit symbol entry size.
};
// Symbol bindings.
enum {
STB_LOCAL = 0, // Local symbol, not visible outside obj file containing def

View File

@ -1,4 +1,5 @@
add_llvm_library(LLVMMC
ELFObjectWriter.cpp
MCAsmInfo.cpp
MCAsmInfoCOFF.cpp
MCAsmInfoDarwin.cpp
@ -7,6 +8,7 @@ add_llvm_library(LLVMMC
MCCodeEmitter.cpp
MCContext.cpp
MCDisassembler.cpp
MCELFStreamer.cpp
MCExpr.cpp
MCInst.cpp
MCInstPrinter.cpp

View File

@ -148,7 +148,7 @@ getMachOSection(StringRef Segment, StringRef Section,
const MCSection *MCContext::
getELFSection(StringRef Section, unsigned Type, unsigned Flags,
SectionKind Kind, bool IsExplicit) {
SectionKind Kind, bool IsExplicit, unsigned EntrySize) {
if (ELFUniquingMap == 0)
ELFUniquingMap = new ELFUniqueMapTy();
ELFUniqueMapTy &Map = *(ELFUniqueMapTy*)ELFUniquingMap;
@ -158,7 +158,7 @@ getELFSection(StringRef Section, unsigned Type, unsigned Flags,
if (Entry.getValue()) return Entry.getValue();
MCSectionELF *Result = new (*this) MCSectionELF(Entry.getKey(), Type, Flags,
Kind, IsExplicit);
Kind, IsExplicit, EntrySize);
Entry.setValue(Result);
return Result;
}