mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-14 07:09:08 +00:00
No relocation produces a SLEB or ULEB, make sure they are handled in MC.
llvm-svn: 130181
This commit is contained in:
parent
bad294615e
commit
c115df57cc
@ -691,7 +691,9 @@ bool MCAssembler::RelaxInstruction(MCAsmLayout &Layout,
|
||||
bool MCAssembler::RelaxLEB(MCAsmLayout &Layout, MCLEBFragment &LF) {
|
||||
int64_t Value = 0;
|
||||
uint64_t OldSize = LF.getContents().size();
|
||||
LF.getValue().EvaluateAsAbsolute(Value, Layout);
|
||||
bool IsAbs = LF.getValue().EvaluateAsAbsolute(Value, Layout);
|
||||
(void)IsAbs;
|
||||
assert(IsAbs);
|
||||
SmallString<8> &Data = LF.getContents();
|
||||
Data.clear();
|
||||
raw_svector_ostream OSE(Data);
|
||||
|
@ -124,12 +124,23 @@ void MCObjectStreamer::EmitLabel(MCSymbol *Symbol) {
|
||||
SD.setOffset(F->getContents().size());
|
||||
}
|
||||
|
||||
static const MCExpr *ForceExpAbs(MCObjectStreamer *Streamer,
|
||||
MCContext &Context, const MCExpr* Expr) {
|
||||
if (Context.getAsmInfo().hasAggressiveSymbolFolding())
|
||||
return Expr;
|
||||
|
||||
MCSymbol *ABS = Context.CreateTempSymbol();
|
||||
Streamer->EmitAssignment(ABS, Expr);
|
||||
return MCSymbolRefExpr::Create(ABS, Context);
|
||||
}
|
||||
|
||||
void MCObjectStreamer::EmitULEB128Value(const MCExpr *Value) {
|
||||
int64_t IntValue;
|
||||
if (Value->EvaluateAsAbsolute(IntValue, getAssembler())) {
|
||||
EmitULEB128IntValue(IntValue);
|
||||
return;
|
||||
}
|
||||
Value = ForceExpAbs(this, getContext(), Value);
|
||||
new MCLEBFragment(*Value, false, getCurrentSectionData());
|
||||
}
|
||||
|
||||
@ -139,6 +150,7 @@ void MCObjectStreamer::EmitSLEB128Value(const MCExpr *Value) {
|
||||
EmitSLEB128IntValue(IntValue);
|
||||
return;
|
||||
}
|
||||
Value = ForceExpAbs(this, getContext(), Value);
|
||||
new MCLEBFragment(*Value, true, getCurrentSectionData());
|
||||
}
|
||||
|
||||
@ -208,16 +220,6 @@ static const MCExpr *BuildSymbolDiff(MCContext &Context,
|
||||
return AddrDelta;
|
||||
}
|
||||
|
||||
static const MCExpr *ForceExpAbs(MCObjectStreamer *Streamer,
|
||||
MCContext &Context, const MCExpr* Expr) {
|
||||
if (Context.getAsmInfo().hasAggressiveSymbolFolding())
|
||||
return Expr;
|
||||
|
||||
MCSymbol *ABS = Context.CreateTempSymbol();
|
||||
Streamer->EmitAssignment(ABS, Expr);
|
||||
return MCSymbolRefExpr::Create(ABS, Context);
|
||||
}
|
||||
|
||||
void MCObjectStreamer::EmitDwarfAdvanceLineAddr(int64_t LineDelta,
|
||||
const MCSymbol *LastLabel,
|
||||
const MCSymbol *Label) {
|
||||
|
Loading…
Reference in New Issue
Block a user