mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-13 06:39:12 +00:00
Handle null and file symbol on doInitialization
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77354 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b180d992d8
commit
50bc204291
@ -36,7 +36,7 @@ namespace llvm {
|
||||
/// startFunction - This callback is invoked when a new machine function is
|
||||
/// about to be emitted.
|
||||
void ELFCodeEmitter::startFunction(MachineFunction &MF) {
|
||||
DEBUG(errs() << "processing function: "
|
||||
DEBUG(errs() << "processing function: "
|
||||
<< MF.getFunction()->getName() << "\n");
|
||||
|
||||
// Get the ELF Section that this function belongs in.
|
||||
|
@ -143,6 +143,11 @@ bool ELFWriter::doInitialization(Module &M) {
|
||||
// Add the null section, which is required to be first in the file.
|
||||
getNullSection();
|
||||
|
||||
// The first entry in the symtab is the null symbol and the second
|
||||
// is a local symbol containing the module/file name
|
||||
SymbolList.push_back(new ELFSym());
|
||||
SymbolList.push_back(ELFSym::getFileSym());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -189,7 +194,7 @@ ELFSection &ELFWriter::getConstantPoolSection(MachineConstantPoolEntry &CPE) {
|
||||
|
||||
const TargetLoweringObjectFile &TLOF =
|
||||
TM.getTargetLowering()->getObjFileLowering();
|
||||
|
||||
|
||||
return getSection(TLOF.getSectionForMergeableConstant(Kind)->getName(),
|
||||
ELFSection::SHT_PROGBITS,
|
||||
ELFSection::SHF_MERGE | ELFSection::SHF_ALLOC,
|
||||
@ -320,7 +325,7 @@ void ELFWriter::EmitGlobal(const GlobalValue *GV) {
|
||||
const TargetLoweringObjectFile &TLOF =
|
||||
TM.getTargetLowering()->getObjFileLowering();
|
||||
|
||||
// Get ELF section from TAI
|
||||
// Get the ELF section where this global belongs from TLOF
|
||||
const Section *S = TLOF.SectionForGlobal(GV, TM);
|
||||
unsigned SectionFlags = getElfSectionFlags(S->getKind());
|
||||
|
||||
@ -522,9 +527,6 @@ bool ELFWriter::doFinalization(Module &M) {
|
||||
if (TAI->getNonexecutableStackDirective())
|
||||
getNonExecStackSection();
|
||||
|
||||
// Emit module name
|
||||
SymbolList.push_back(ELFSym::getFileSym());
|
||||
|
||||
// Emit a symbol for each section created until now, skip null section
|
||||
for (unsigned i = 1, e = SectionList.size(); i < e; ++i) {
|
||||
ELFSection &ES = *SectionList[i];
|
||||
@ -798,9 +800,6 @@ void ELFWriter::EmitSymbolTable() {
|
||||
// Size of each symtab entry.
|
||||
SymTab.EntSize = TEW->getSymTabEntrySize();
|
||||
|
||||
// The first entry in the symtab is the null symbol
|
||||
SymbolList.insert(SymbolList.begin(), new ELFSym());
|
||||
|
||||
// Reorder the symbol table with local symbols first!
|
||||
unsigned FirstNonLocalSymbol = SortSymbols();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user