diff options
| author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2009-07-27 18:54:47 +0000 |
|---|---|---|
| committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2009-07-27 18:54:47 +0000 |
| commit | cb364ab3f2662d28177957a73e618f3b08ccf3d3 (patch) | |
| tree | 487b894579b79acf39718d5c7257ce24c2f71daf /llvm/lib/CodeGen/ELFCodeEmitter.cpp | |
| parent | 38b7eee1640f5e5f01ec660e553bf89c09440053 (diff) | |
| download | bcm5719-llvm-cb364ab3f2662d28177957a73e618f3b08ccf3d3.tar.gz bcm5719-llvm-cb364ab3f2662d28177957a73e618f3b08ccf3d3.zip | |
Handle external symbols for ELF and add some static methods to ELFSym
llvm-svn: 77232
Diffstat (limited to 'llvm/lib/CodeGen/ELFCodeEmitter.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/ELFCodeEmitter.cpp | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/ELFCodeEmitter.cpp b/llvm/lib/CodeGen/ELFCodeEmitter.cpp index 1c27428cc33..a62a884e04b 100644 --- a/llvm/lib/CodeGen/ELFCodeEmitter.cpp +++ b/llvm/lib/CodeGen/ELFCodeEmitter.cpp @@ -69,16 +69,11 @@ void ELFCodeEmitter::startFunction(MachineFunction &MF) { bool ELFCodeEmitter::finishFunction(MachineFunction &MF) { // Add a symbol to represent the function. const Function *F = MF.getFunction(); - ELFSym *FnSym = new ELFSym(F); - FnSym->setType(ELFSym::STT_FUNC); - FnSym->setBind(EW.getGlobalELFBinding(F)); - FnSym->setVisibility(EW.getGlobalELFVisibility(F)); + ELFSym *FnSym = ELFSym::getGV(F, EW.getGlobalELFBinding(F), ELFSym::STT_FUNC, + EW.getGlobalELFVisibility(F)); FnSym->SectionIdx = ES->SectionIdx; FnSym->Size = ES->getCurrentPCOffset()-FnStartOff; - - // keep track of the emitted function leaving its symbol index as zero - // to be patched up later when emitting the symbol table - EW.setGlobalSymLookup(F, 0); + EW.addGlobalSymbol(F); // Offset from start of Section FnSym->Value = FnStartOff; @@ -108,7 +103,9 @@ bool ELFCodeEmitter::finishFunction(MachineFunction &MF) { MachineRelocation &MR = Relocations[i]; intptr_t Addr; if (MR.isGlobalValue()) { - EW.PendingGlobals.insert(MR.getGlobalValue()); + EW.addGlobalSymbol(MR.getGlobalValue()); + } else if (MR.isExternalSymbol()) { + EW.addExternalSymbol(MR.getExternalSymbol()); } else if (MR.isBasicBlock()) { Addr = getMachineBasicBlockAddress(MR.getBasicBlock()); MR.setConstantVal(ES->SectionIdx); |

