mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 08:17:40 +00:00
This patch reworks how llvm targets set
and update ELF header e_flags. Currently gathering information such as symbol, section and data is done by collecting it in an MCAssembler object. From MCAssembler and MCAsmLayout objects ELFObjectWriter::WriteObject() forms and streams out the ELF object file. This patch just adds a few members to the MCAssember class to store and access the e_flag settings. It allows for runtime additions to the e_flag by assembler directives. The standalone assembler can get to MCAssembler from getParser().getStreamer().getAssembler(). This patch is the generic infrastructure and will be followed by patches for ARM and Mips for their target specific use. Contributer: Jack Carter git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173882 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -142,9 +142,6 @@ class ELFObjectWriter : public MCObjectWriter {
|
||||
bool hasRelocationAddend() const {
|
||||
return TargetObjectWriter->hasRelocationAddend();
|
||||
}
|
||||
unsigned getEFlags() const {
|
||||
return TargetObjectWriter->getEFlags();
|
||||
}
|
||||
unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
||||
bool IsPCRel, bool IsRelocWithSymbol,
|
||||
int64_t Addend) const {
|
||||
@@ -152,7 +149,6 @@ class ELFObjectWriter : public MCObjectWriter {
|
||||
IsRelocWithSymbol, Addend);
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
ELFObjectWriter(MCELFObjectTargetWriter *MOTW,
|
||||
raw_ostream &_OS, bool IsLittleEndian)
|
||||
@@ -233,7 +229,8 @@ class ELFObjectWriter : public MCObjectWriter {
|
||||
F.getContents().append(&buf[0], &buf[8]);
|
||||
}
|
||||
|
||||
void WriteHeader(uint64_t SectionDataSize,
|
||||
void WriteHeader(const MCAssembler &Asm,
|
||||
uint64_t SectionDataSize,
|
||||
unsigned NumberOfSections);
|
||||
|
||||
void WriteSymbolEntry(MCDataFragment *SymtabF,
|
||||
@@ -373,7 +370,8 @@ ELFObjectWriter::~ELFObjectWriter()
|
||||
{}
|
||||
|
||||
// Emit the ELF header.
|
||||
void ELFObjectWriter::WriteHeader(uint64_t SectionDataSize,
|
||||
void ELFObjectWriter::WriteHeader(const MCAssembler &Asm,
|
||||
uint64_t SectionDataSize,
|
||||
unsigned NumberOfSections) {
|
||||
// ELF Header
|
||||
// ----------
|
||||
@@ -411,7 +409,7 @@ void ELFObjectWriter::WriteHeader(uint64_t SectionDataSize,
|
||||
sizeof(ELF::Elf32_Ehdr))); // e_shoff = sec hdr table off in bytes
|
||||
|
||||
// e_flags = whatever the target wants
|
||||
Write32(getEFlags());
|
||||
Write32(Asm.getELFHeaderEFlags());
|
||||
|
||||
// e_ehsize = ELF header size
|
||||
Write16(is64Bit() ? sizeof(ELF::Elf64_Ehdr) : sizeof(ELF::Elf32_Ehdr));
|
||||
@@ -1534,7 +1532,7 @@ void ELFObjectWriter::WriteObject(MCAssembler &Asm,
|
||||
}
|
||||
|
||||
// Write out the ELF header ...
|
||||
WriteHeader(SectionHeaderOffset, NumSections + 1);
|
||||
WriteHeader(Asm, SectionHeaderOffset, NumSections + 1);
|
||||
|
||||
// ... then the regular sections ...
|
||||
// + because of .shstrtab
|
||||
|
||||
Reference in New Issue
Block a user