mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-09-11 14:57:05 +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;
|
||||
}
|
||||
|
||||
/// 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
|
||||
/// is shared among many Frame Description Entries. There is at least one CIE
|
||||
/// 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 (PersonalityRef) {
|
||||
if (!IsPersonalityPCRel)
|
||||
PersonalityRef = CreateLabelDiff(PersonalityRef, "personalityref_addr",
|
||||
Index);
|
||||
// If the reference to the personality function symbol is not already
|
||||
// pc-relative, then we need to subtract our current address from it. Do
|
||||
// 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();
|
||||
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
|
||||
// the same order. As a result, changing the order of the catch clause would
|
||||
// change the semantics of the program.
|
||||
const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
|
||||
unsigned Index = 1;
|
||||
|
||||
for (std::vector<GlobalVariable *>::const_reverse_iterator
|
||||
I = TypeInfos.rbegin(), E = TypeInfos.rend(); I != E; ++I, ++Index) {
|
||||
const GlobalVariable *TI = *I;
|
||||
|
||||
if (TI) {
|
||||
if (TTypeFormat == dwarf::DW_EH_PE_absptr ||
|
||||
TI->getLinkage() == GlobalValue::InternalLinkage) {
|
||||
// Print out the unadorned name of the type info.
|
||||
I = TypeInfos.rbegin(), E = TypeInfos.rend(); I != E; ++I) {
|
||||
const GlobalVariable *GV = *I;
|
||||
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)
|
||||
TypeInfoRef = CreateLabelDiff(TypeInfoRef, "typeinforef_addr", Index);
|
||||
|
||||
O << MAI->getData32bitsDirective();
|
||||
TypeInfoRef->print(O, MAI);
|
||||
}
|
||||
if (GV) {
|
||||
O << Asm->Mang->getMangledName(GV);
|
||||
} else {
|
||||
PrintRelDirective();
|
||||
O << "0x0";
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,6 @@ namespace llvm {
|
||||
struct LandingPadInfo;
|
||||
class MachineModuleInfo;
|
||||
class MCAsmInfo;
|
||||
class MCExpr;
|
||||
class Timer;
|
||||
class raw_ostream;
|
||||
|
||||
@ -169,11 +168,6 @@ class VISIBILITY_HIDDEN DwarfException : public Dwarf {
|
||||
const SmallVectorImpl<unsigned> &FirstActions);
|
||||
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:
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Main entry points.
|
||||
|
@ -782,13 +782,8 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
|
||||
}
|
||||
|
||||
// Exception Handling.
|
||||
#if 0
|
||||
LSDASection = getMachOSection("__TEXT", "__gcc_except_tab", 0,
|
||||
SectionKind::getReadOnly());
|
||||
#else
|
||||
LSDASection = getMachOSection("__DATA", "__gcc_except_tab", 0,
|
||||
SectionKind::getDataRel());
|
||||
#endif
|
||||
EHFrameSection =
|
||||
getMachOSection("__TEXT", "__eh_frame",
|
||||
MCSectionMachO::S_COALESCED |
|
||||
|
Loading…
Reference in New Issue
Block a user