Skip to content

Commit

Permalink
No relocation produces a SLEB or ULEB, make sure they are handled in MC.
Browse files Browse the repository at this point in the history
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130181 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
espindola committed Apr 26, 2011
1 parent 1f82151 commit d88cac0
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 11 deletions.
4 changes: 3 additions & 1 deletion lib/MC/MCAssembler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
22 changes: 12 additions & 10 deletions lib/MC/MCObjectStreamer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

Expand All @@ -139,6 +150,7 @@ void MCObjectStreamer::EmitSLEB128Value(const MCExpr *Value) {
EmitSLEB128IntValue(IntValue);
return;
}
Value = ForceExpAbs(this, getContext(), Value);
new MCLEBFragment(*Value, true, getCurrentSectionData());
}

Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit d88cac0

Please sign in to comment.