mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-10-13 22:26:11 +00:00
--- Reverse-merging r82282 into '.':
U lib/CodeGen/AsmPrinter/DwarfException.cpp U lib/CodeGen/AsmPrinter/DwarfException.h --- Reverse-merging r82274 into '.': U lib/Target/TargetLoweringObjectFile.cpp G lib/CodeGen/AsmPrinter/DwarfException.cpp These revisions were breaking everything. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82396 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
705764110c
commit
711bb91574
@ -74,25 +74,6 @@ unsigned DwarfException::SizeOfEncodedValue(unsigned Encoding) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// CreateLabelDiff - Emit a label and subtract it from the expression we
|
|
||||||
/// already have. This is equivalent to emitting "foo - .", but we have to emit
|
|
||||||
/// the label for "." directly.
|
|
||||||
const MCExpr *DwarfException::CreateLabelDiff(const MCExpr *ExprRef,
|
|
||||||
const char *LabelName,
|
|
||||||
unsigned Index) {
|
|
||||||
SmallString<64> Name;
|
|
||||||
raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix()
|
|
||||||
<< LabelName << Asm->getFunctionNumber()
|
|
||||||
<< "_" << Index;
|
|
||||||
MCSymbol *DotSym = Asm->OutContext.GetOrCreateSymbol(Name.str());
|
|
||||||
Asm->OutStreamer.EmitLabel(DotSym);
|
|
||||||
|
|
||||||
return MCBinaryExpr::CreateSub(ExprRef,
|
|
||||||
MCSymbolRefExpr::Create(DotSym,
|
|
||||||
Asm->OutContext),
|
|
||||||
Asm->OutContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// EmitCIE - Emit a Common Information Entry (CIE). This holds information that
|
/// EmitCIE - Emit a Common Information Entry (CIE). This holds information that
|
||||||
/// is shared among many Frame Description Entries. There is at least one CIE
|
/// is shared among many Frame Description Entries. There is at least one CIE
|
||||||
/// in every non-empty .debug_frame section.
|
/// in every non-empty .debug_frame section.
|
||||||
@ -195,9 +176,23 @@ void DwarfException::EmitCIE(const Function *PersonalityFn, unsigned Index) {
|
|||||||
|
|
||||||
// If there is a personality, we need to indicate the function's location.
|
// If there is a personality, we need to indicate the function's location.
|
||||||
if (PersonalityRef) {
|
if (PersonalityRef) {
|
||||||
if (!IsPersonalityPCRel)
|
// If the reference to the personality function symbol is not already
|
||||||
PersonalityRef = CreateLabelDiff(PersonalityRef, "personalityref_addr",
|
// pc-relative, then we need to subtract our current address from it. Do
|
||||||
Index);
|
// this by emitting a label and subtracting it from the expression we
|
||||||
|
// already have. This is equivalent to emitting "foo - .", but we have to
|
||||||
|
// emit the label for "." directly.
|
||||||
|
if (!IsPersonalityPCRel) {
|
||||||
|
SmallString<64> Name;
|
||||||
|
raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix()
|
||||||
|
<< "personalityref_addr" << Asm->getFunctionNumber() << "_" << Index;
|
||||||
|
MCSymbol *DotSym = Asm->OutContext.GetOrCreateSymbol(Name.str());
|
||||||
|
Asm->OutStreamer.EmitLabel(DotSym);
|
||||||
|
|
||||||
|
PersonalityRef =
|
||||||
|
MCBinaryExpr::CreateSub(PersonalityRef,
|
||||||
|
MCSymbolRefExpr::Create(DotSym,Asm->OutContext),
|
||||||
|
Asm->OutContext);
|
||||||
|
}
|
||||||
|
|
||||||
O << MAI->getData32bitsDirective();
|
O << MAI->getData32bitsDirective();
|
||||||
PersonalityRef->print(O, MAI);
|
PersonalityRef->print(O, MAI);
|
||||||
@ -898,34 +893,14 @@ void DwarfException::EmitExceptionTable() {
|
|||||||
// of the catch clauses as they appear in the source code, and must be kept in
|
// of the catch clauses as they appear in the source code, and must be kept in
|
||||||
// the same order. As a result, changing the order of the catch clause would
|
// the same order. As a result, changing the order of the catch clause would
|
||||||
// change the semantics of the program.
|
// change the semantics of the program.
|
||||||
const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
|
|
||||||
unsigned Index = 1;
|
|
||||||
|
|
||||||
for (std::vector<GlobalVariable *>::const_reverse_iterator
|
for (std::vector<GlobalVariable *>::const_reverse_iterator
|
||||||
I = TypeInfos.rbegin(), E = TypeInfos.rend(); I != E; ++I, ++Index) {
|
I = TypeInfos.rbegin(), E = TypeInfos.rend(); I != E; ++I) {
|
||||||
const GlobalVariable *TI = *I;
|
const GlobalVariable *GV = *I;
|
||||||
|
|
||||||
if (TI) {
|
|
||||||
if (TTypeFormat == dwarf::DW_EH_PE_absptr ||
|
|
||||||
TI->getLinkage() == GlobalValue::InternalLinkage) {
|
|
||||||
// Print out the unadorned name of the type info.
|
|
||||||
PrintRelDirective();
|
PrintRelDirective();
|
||||||
O << Asm->Mang->getMangledName(TI);
|
|
||||||
} else {
|
|
||||||
bool IsTypeInfoIndirect = false, IsTypeInfoPCRel = false;
|
|
||||||
const MCExpr *TypeInfoRef =
|
|
||||||
TLOF.getSymbolForDwarfGlobalReference(TI, Asm->Mang, Asm->MMI,
|
|
||||||
IsTypeInfoIndirect,
|
|
||||||
IsTypeInfoPCRel);
|
|
||||||
|
|
||||||
if (!IsTypeInfoPCRel)
|
if (GV) {
|
||||||
TypeInfoRef = CreateLabelDiff(TypeInfoRef, "typeinforef_addr", Index);
|
O << Asm->Mang->getMangledName(GV);
|
||||||
|
|
||||||
O << MAI->getData32bitsDirective();
|
|
||||||
TypeInfoRef->print(O, MAI);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
PrintRelDirective();
|
|
||||||
O << "0x0";
|
O << "0x0";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@ namespace llvm {
|
|||||||
struct LandingPadInfo;
|
struct LandingPadInfo;
|
||||||
class MachineModuleInfo;
|
class MachineModuleInfo;
|
||||||
class MCAsmInfo;
|
class MCAsmInfo;
|
||||||
class MCExpr;
|
|
||||||
class Timer;
|
class Timer;
|
||||||
class raw_ostream;
|
class raw_ostream;
|
||||||
|
|
||||||
@ -169,11 +168,6 @@ class VISIBILITY_HIDDEN DwarfException : public Dwarf {
|
|||||||
const SmallVectorImpl<unsigned> &FirstActions);
|
const SmallVectorImpl<unsigned> &FirstActions);
|
||||||
void EmitExceptionTable();
|
void EmitExceptionTable();
|
||||||
|
|
||||||
/// CreateLabelDiff - Emit a label and subtract it from the expression we
|
|
||||||
/// already have. This is equivalent to emitting "foo - .", but we have to
|
|
||||||
/// emit the label for "." directly.
|
|
||||||
const MCExpr *CreateLabelDiff(const MCExpr *ExprRef, const char *LabelName,
|
|
||||||
unsigned Index);
|
|
||||||
public:
|
public:
|
||||||
//===--------------------------------------------------------------------===//
|
//===--------------------------------------------------------------------===//
|
||||||
// Main entry points.
|
// Main entry points.
|
||||||
|
@ -782,13 +782,8 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Exception Handling.
|
// Exception Handling.
|
||||||
#if 0
|
|
||||||
LSDASection = getMachOSection("__TEXT", "__gcc_except_tab", 0,
|
|
||||||
SectionKind::getReadOnly());
|
|
||||||
#else
|
|
||||||
LSDASection = getMachOSection("__DATA", "__gcc_except_tab", 0,
|
LSDASection = getMachOSection("__DATA", "__gcc_except_tab", 0,
|
||||||
SectionKind::getDataRel());
|
SectionKind::getDataRel());
|
||||||
#endif
|
|
||||||
EHFrameSection =
|
EHFrameSection =
|
||||||
getMachOSection("__TEXT", "__eh_frame",
|
getMachOSection("__TEXT", "__eh_frame",
|
||||||
MCSectionMachO::S_COALESCED |
|
MCSectionMachO::S_COALESCED |
|
||||||
|
Loading…
Reference in New Issue
Block a user