mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
Emit a symbol table entry for each function we output to the ELF file. This
allows objdump to know which function we are emitting to: 00000000 <foo>: <---- 0: b8 01 00 00 00 mov $0x1,%eax 5: 03 44 24 04 add 0x4(%esp,1),%eax 9: c3 ret ... and allows .o files to be useful for linking :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22378 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f0cf1b7e5f
commit
5fe7b6e2be
@ -67,7 +67,37 @@ namespace llvm {
|
||||
|
||||
FnStart = OutputBuffer.size();
|
||||
}
|
||||
void finishFunction(MachineFunction &F) {}
|
||||
void finishFunction(MachineFunction &F) {
|
||||
// We now know the size of the function, add a symbol to represent it.
|
||||
ELFWriter::ELFSym FnSym(F.getFunction());
|
||||
|
||||
// Figure out the binding (linkage) of the symbol.
|
||||
switch (F.getFunction()->getLinkage()) {
|
||||
default:
|
||||
// appending linkage is illegal for functions.
|
||||
assert(0 && "Unknown linkage type!");
|
||||
case GlobalValue::ExternalLinkage:
|
||||
FnSym.SetBind(ELFWriter::ELFSym::STB_GLOBAL);
|
||||
break;
|
||||
case GlobalValue::LinkOnceLinkage:
|
||||
case GlobalValue::WeakLinkage:
|
||||
FnSym.SetBind(ELFWriter::ELFSym::STB_WEAK);
|
||||
break;
|
||||
case GlobalValue::InternalLinkage:
|
||||
FnSym.SetBind(ELFWriter::ELFSym::STB_LOCAL);
|
||||
break;
|
||||
}
|
||||
|
||||
FnSym.SetType(ELFWriter::ELFSym::STT_FUNC);
|
||||
FnSym.SectionIdx = EW.SectionList.size()-1; // .text section.
|
||||
// Value = Offset from start of .text
|
||||
FnSym.Value = FnStart - EW.SectionList.back().Offset;
|
||||
FnSym.Size = OutputBuffer.size()-FnStart;
|
||||
|
||||
// Finally, add it to the symtab.
|
||||
EW.SymbolTable.push_back(FnSym);
|
||||
}
|
||||
|
||||
void emitConstantPool(MachineConstantPool *MCP) {
|
||||
if (MCP->isEmpty()) return;
|
||||
assert(0 && "unimp");
|
||||
|
Loading…
Reference in New Issue
Block a user