Skip to content

Commit 6c8fcd6

Browse files
Revert "[SFrames] Emit and relax FREs (llvm#158154)" (llvm#159436)
Breaks some buildbots This reverts commit c928516.
1 parent 7fb3a91 commit 6c8fcd6

File tree

13 files changed

+40
-472
lines changed

13 files changed

+40
-472
lines changed

llvm/include/llvm/BinaryFormat/SFrame.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ template <endianness E> struct FDEInfo {
117117
Info = ((PAuthKey & 1) << 5) | ((static_cast<uint8_t>(FDE) & 1) << 4) |
118118
(static_cast<uint8_t>(FRE) & 0xf);
119119
}
120-
uint8_t getFuncInfo() const { return Info; }
121120
};
122121

123122
template <endianness E> struct FuncDescEntry {
@@ -156,7 +155,6 @@ template <endianness E> struct FREInfo {
156155
Info = ((RA & 1) << 7) | ((static_cast<uint8_t>(Sz) & 3) << 5) |
157156
((N & 0xf) << 1) | (static_cast<uint8_t>(Reg) & 1);
158157
}
159-
uint8_t getFREInfo() const { return Info; }
160158
};
161159

162160
template <typename T, endianness E> struct FrameRowEntry {

llvm/include/llvm/MC/MCAsmBackend.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,6 @@ class LLVM_ABI MCAsmBackend {
168168
virtual bool relaxAlign(MCFragment &F, unsigned &Size) { return false; }
169169
virtual bool relaxDwarfLineAddr(MCFragment &) const { return false; }
170170
virtual bool relaxDwarfCFA(MCFragment &) const { return false; }
171-
virtual bool relaxSFrameCFA(MCFragment &) const { return false; }
172171

173172
// Defined by linker relaxation targets to possibly emit LEB128 relocations
174173
// and set Value at the relocated location.

llvm/include/llvm/MC/MCAssembler.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ class MCAssembler {
117117
void relaxBoundaryAlign(MCBoundaryAlignFragment &BF);
118118
void relaxDwarfLineAddr(MCFragment &F);
119119
void relaxDwarfCallFrameFragment(MCFragment &F);
120-
void relaxSFrameFragment(MCFragment &DF);
121120

122121
public:
123122
/// Construct a new assembler instance.

llvm/include/llvm/MC/MCObjectStreamer.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,6 @@ class MCObjectStreamer : public MCStreamer {
150150
MCSymbol *EndLabel = nullptr) override;
151151
void emitDwarfAdvanceFrameAddr(const MCSymbol *LastLabel,
152152
const MCSymbol *Label, SMLoc Loc);
153-
void emitSFrameCalculateFuncOffset(const MCSymbol *FunCabsel,
154-
const MCSymbol *FREBegin,
155-
MCFragment *FDEFrag, SMLoc Loc);
156153
void emitCVLocDirective(unsigned FunctionId, unsigned FileNo, unsigned Line,
157154
unsigned Column, bool PrologueEnd, bool IsStmt,
158155
StringRef FileName, SMLoc Loc) override;

llvm/include/llvm/MC/MCSFrame.h

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,16 @@
1616
#ifndef LLVM_MC_MCSFRAME_H
1717
#define LLVM_MC_MCSFRAME_H
1818

19-
#include "llvm/ADT/SmallVector.h"
20-
#include <cstdint>
21-
2219
namespace llvm {
2320

24-
class MCContext;
2521
class MCObjectStreamer;
26-
class MCFragment;
2722

2823
class MCSFrameEmitter {
2924
public:
3025
// Emit the sframe section.
3126
//
3227
// \param Streamer - Emit into this stream.
3328
static void emit(MCObjectStreamer &Streamer);
34-
35-
// Encode the FRE's function offset.
36-
//
37-
// \param C - Context.
38-
// \param Offset - Offset to encode.
39-
// \param Out - Destination of the encoding.
40-
// \param FDEFrag - Frag that specifies the encoding format.
41-
static void encodeFuncOffset(MCContext &C, uint64_t Offset,
42-
SmallVectorImpl<char> &Out, MCFragment *FDEFrag);
4329
};
4430

4531
} // end namespace llvm

llvm/include/llvm/MC/MCSection.h

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ class MCFragment {
5959
FT_Org,
6060
FT_Dwarf,
6161
FT_DwarfFrame,
62-
FT_SFrame,
6362
FT_BoundaryAlign,
6463
FT_SymbolId,
6564
FT_CVInlineLines,
@@ -144,12 +143,6 @@ class MCFragment {
144143
// .loc dwarf directives.
145144
int64_t LineDelta;
146145
} dwarf;
147-
struct {
148-
// This FRE describes unwind info at AddrDelta from function start.
149-
const MCExpr *AddrDelta;
150-
// Fragment that records how many bytes of AddrDelta to emit.
151-
MCFragment *FDEFragment;
152-
} sframe;
153146
} u{};
154147

155148
public:
@@ -303,24 +296,6 @@ class MCFragment {
303296
assert(Kind == FT_Dwarf);
304297
u.dwarf.LineDelta = LineDelta;
305298
}
306-
307-
//== FT_SFrame functions
308-
const MCExpr &getSFrameAddrDelta() const {
309-
assert(Kind == FT_SFrame);
310-
return *u.sframe.AddrDelta;
311-
}
312-
void setSFrameAddrDelta(const MCExpr *E) {
313-
assert(Kind == FT_SFrame);
314-
u.sframe.AddrDelta = E;
315-
}
316-
MCFragment *getSFrameFDE() const {
317-
assert(Kind == FT_SFrame);
318-
return u.sframe.FDEFragment;
319-
}
320-
void setSFrameFDE(MCFragment *F) {
321-
assert(Kind == FT_SFrame);
322-
u.sframe.FDEFragment = F;
323-
}
324299
};
325300

326301
// MCFragment subclasses do not use the fixed-size part or variable-size tail of

llvm/lib/MC/MCAssembler.cpp

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
#include "llvm/MC/MCFixup.h"
2323
#include "llvm/MC/MCInst.h"
2424
#include "llvm/MC/MCObjectWriter.h"
25-
#include "llvm/MC/MCSFrame.h"
2625
#include "llvm/MC/MCSection.h"
2726
#include "llvm/MC/MCSymbol.h"
2827
#include "llvm/MC/MCValue.h"
@@ -200,7 +199,6 @@ uint64_t MCAssembler::computeFragmentSize(const MCFragment &F) const {
200199
case MCFragment::FT_LEB:
201200
case MCFragment::FT_Dwarf:
202201
case MCFragment::FT_DwarfFrame:
203-
case MCFragment::FT_SFrame:
204202
case MCFragment::FT_CVInlineLines:
205203
case MCFragment::FT_CVDefRange:
206204
return F.getSize();
@@ -401,7 +399,6 @@ static void writeFragment(raw_ostream &OS, const MCAssembler &Asm,
401399
case MCFragment::FT_LEB:
402400
case MCFragment::FT_Dwarf:
403401
case MCFragment::FT_DwarfFrame:
404-
case MCFragment::FT_SFrame:
405402
case MCFragment::FT_CVInlineLines:
406403
case MCFragment::FT_CVDefRange: {
407404
if (F.getKind() == MCFragment::FT_Data)
@@ -917,24 +914,6 @@ void MCAssembler::relaxDwarfCallFrameFragment(MCFragment &F) {
917914
F.clearVarFixups();
918915
}
919916

920-
void MCAssembler::relaxSFrameFragment(MCFragment &F) {
921-
assert(F.getKind() == MCFragment::FT_SFrame);
922-
MCContext &C = getContext();
923-
int64_t Value;
924-
bool Abs = F.getSFrameAddrDelta().evaluateAsAbsolute(Value, *this);
925-
if (!Abs) {
926-
C.reportError(F.getSFrameAddrDelta().getLoc(),
927-
"invalid CFI advance_loc expression in sframe");
928-
F.setSFrameAddrDelta(MCConstantExpr::create(0, C));
929-
return;
930-
}
931-
932-
SmallVector<char, 4> Data;
933-
MCSFrameEmitter::encodeFuncOffset(Context, Value, Data, F.getSFrameFDE());
934-
F.setVarContents(Data);
935-
F.clearVarFixups();
936-
}
937-
938917
bool MCAssembler::relaxFragment(MCFragment &F) {
939918
auto Size = computeFragmentSize(F);
940919
switch (F.getKind()) {
@@ -953,9 +932,6 @@ bool MCAssembler::relaxFragment(MCFragment &F) {
953932
case MCFragment::FT_DwarfFrame:
954933
relaxDwarfCallFrameFragment(F);
955934
break;
956-
case MCFragment::FT_SFrame:
957-
relaxSFrameFragment(F);
958-
break;
959935
case MCFragment::FT_BoundaryAlign:
960936
relaxBoundaryAlign(static_cast<MCBoundaryAlignFragment &>(F));
961937
break;

llvm/lib/MC/MCFragment.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
5353
case MCFragment::FT_Org: OS << "Org"; break;
5454
case MCFragment::FT_Dwarf: OS << "Dwarf"; break;
5555
case MCFragment::FT_DwarfFrame: OS << "DwarfCallFrame"; break;
56-
case MCFragment::FT_SFrame: OS << "SFrame"; break;
5756
case MCFragment::FT_LEB: OS << "LEB"; break;
5857
case MCFragment::FT_BoundaryAlign: OS<<"BoundaryAlign"; break;
5958
case MCFragment::FT_SymbolId: OS << "SymbolId"; break;
@@ -80,8 +79,7 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
8079
case MCFragment::FT_Align:
8180
case MCFragment::FT_LEB:
8281
case MCFragment::FT_Dwarf:
83-
case MCFragment::FT_DwarfFrame:
84-
case MCFragment::FT_SFrame: {
82+
case MCFragment::FT_DwarfFrame: {
8583
if (isLinkerRelaxable())
8684
OS << " LinkerRelaxable";
8785
auto Fixed = getContents();
@@ -131,7 +129,6 @@ LLVM_DUMP_METHOD void MCFragment::dump() const {
131129
OS << " LineDelta:" << getDwarfLineDelta();
132130
break;
133131
case MCFragment::FT_DwarfFrame:
134-
case MCFragment::FT_SFrame:
135132
OS << " AddrDelta:";
136133
getDwarfAddrDelta().print(OS, nullptr);
137134
break;

llvm/lib/MC/MCObjectStreamer.cpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -583,19 +583,6 @@ void MCObjectStreamer::emitDwarfAdvanceFrameAddr(const MCSymbol *LastLabel,
583583
newFragment();
584584
}
585585

586-
void MCObjectStreamer::emitSFrameCalculateFuncOffset(const MCSymbol *FuncBase,
587-
const MCSymbol *FREBegin,
588-
MCFragment *FDEFrag,
589-
SMLoc Loc) {
590-
assert(FuncBase && "No function base address");
591-
assert(FREBegin && "FRE doesn't describe a location");
592-
auto *F = getCurrentFragment();
593-
F->Kind = MCFragment::FT_SFrame;
594-
F->setSFrameAddrDelta(buildSymbolDiff(*this, FREBegin, FuncBase, Loc));
595-
F->setSFrameFDE(FDEFrag);
596-
newFragment();
597-
}
598-
599586
void MCObjectStreamer::emitCVLocDirective(unsigned FunctionId, unsigned FileNo,
600587
unsigned Line, unsigned Column,
601588
bool PrologueEnd, bool IsStmt,

0 commit comments

Comments
 (0)