mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Reapply my previous asmprinter changes now with more testing and two
additional bug fixes: 1. The bug that everyone hit was a problem in the asmprinter where it would remove $stub but keep the L prefix on a name when emitting the indirect symbol. This is easy to fix by keeping the name of the stub and the name of the symbol in a StringMap instead of just keeping a StringSet and trying to reconstruct it late. 2. There was a problem printing the personality function. The current logic to print out the personality function from the DWARF information is a bit of a cesspool right now that duplicates a bunch of other logic in the asm printer. The short version of it is that it depends on emitting both the L and _ prefix for symbols (at least on darwin) and until I can untangle it, it is best to switch the mangler back to emitting both prefixes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75646 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -221,7 +221,7 @@ void MachOWriter::AddSymbolToSection(MachOSection *Sec, GlobalVariable *GV) {
|
||||
}
|
||||
// Globals without external linkage apparently do not go in the symbol table.
|
||||
if (!GV->hasLocalLinkage()) {
|
||||
MachOSym Sym(GV, Mang->getValueName(GV), Sec->Index, TAI);
|
||||
MachOSym Sym(GV, Mang->getMangledName(GV), Sec->Index, TAI);
|
||||
Sym.n_value = Sec->size();
|
||||
SymbolTable.push_back(Sym);
|
||||
}
|
||||
@@ -255,7 +255,7 @@ void MachOWriter::EmitGlobal(GlobalVariable *GV) {
|
||||
// merged with other symbols.
|
||||
if (NoInit || GV->hasLinkOnceLinkage() || GV->hasWeakLinkage() ||
|
||||
GV->hasCommonLinkage()) {
|
||||
MachOSym ExtOrCommonSym(GV, Mang->getValueName(GV),
|
||||
MachOSym ExtOrCommonSym(GV, Mang->getMangledName(GV),
|
||||
MachOSym::NO_SECT, TAI);
|
||||
// For undefined (N_UNDF) external (N_EXT) types, n_value is the size in
|
||||
// bytes of the symbol.
|
||||
@@ -454,7 +454,7 @@ void MachOWriter::BufferSymbolAndStringTable() {
|
||||
for (std::vector<GlobalValue*>::iterator I = PendingGlobals.begin(),
|
||||
E = PendingGlobals.end(); I != E; ++I) {
|
||||
if (GVOffset[*I] == 0 && GVSection[*I] == 0) {
|
||||
MachOSym UndfSym(*I, Mang->getValueName(*I), MachOSym::NO_SECT, TAI);
|
||||
MachOSym UndfSym(*I, Mang->getMangledName(*I), MachOSym::NO_SECT, TAI);
|
||||
SymbolTable.push_back(UndfSym);
|
||||
GVOffset[*I] = -1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user