forked from OSchip/llvm-project
Revert "[MC] Factor MCObjectStreamer::addFragmentAtoms out of MachO streamer."
This reverts rL331412. We didn't up using fragment atoms in the wasm object writer after all. Differential Revision: https://reviews.llvm.org/D48173 llvm-svn: 334734
This commit is contained in:
parent
e2f3e10913
commit
c0dba0af01
|
@ -87,8 +87,6 @@ protected:
|
||||||
/// will be used as a symbol offset within the fragment.
|
/// will be used as a symbol offset within the fragment.
|
||||||
void flushPendingLabels(MCFragment *F, uint64_t FOffset = 0);
|
void flushPendingLabels(MCFragment *F, uint64_t FOffset = 0);
|
||||||
|
|
||||||
void addFragmentAtoms();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void visitUsedSymbol(const MCSymbol &Sym) override;
|
void visitUsedSymbol(const MCSymbol &Sym) override;
|
||||||
|
|
||||||
|
|
|
@ -459,7 +459,30 @@ void MCMachOStreamer::FinishImpl() {
|
||||||
|
|
||||||
// We have to set the fragment atom associations so we can relax properly for
|
// We have to set the fragment atom associations so we can relax properly for
|
||||||
// Mach-O.
|
// Mach-O.
|
||||||
addFragmentAtoms();
|
|
||||||
|
// First, scan the symbol table to build a lookup table from fragments to
|
||||||
|
// defining symbols.
|
||||||
|
DenseMap<const MCFragment *, const MCSymbol *> DefiningSymbolMap;
|
||||||
|
for (const MCSymbol &Symbol : getAssembler().symbols()) {
|
||||||
|
if (getAssembler().isSymbolLinkerVisible(Symbol) && Symbol.isInSection() &&
|
||||||
|
!Symbol.isVariable()) {
|
||||||
|
// An atom defining symbol should never be internal to a fragment.
|
||||||
|
assert(Symbol.getOffset() == 0 &&
|
||||||
|
"Invalid offset in atom defining symbol!");
|
||||||
|
DefiningSymbolMap[Symbol.getFragment()] = &Symbol;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the fragment atom associations by tracking the last seen atom defining
|
||||||
|
// symbol.
|
||||||
|
for (MCSection &Sec : getAssembler()) {
|
||||||
|
const MCSymbol *CurrentAtom = nullptr;
|
||||||
|
for (MCFragment &Frag : Sec) {
|
||||||
|
if (const MCSymbol *Symbol = DefiningSymbolMap.lookup(&Frag))
|
||||||
|
CurrentAtom = Symbol;
|
||||||
|
Frag.setAtom(CurrentAtom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this->MCObjectStreamer::FinishImpl();
|
this->MCObjectStreamer::FinishImpl();
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,32 +59,6 @@ void MCObjectStreamer::flushPendingLabels(MCFragment *F, uint64_t FOffset) {
|
||||||
PendingLabels.clear();
|
PendingLabels.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCObjectStreamer::addFragmentAtoms() {
|
|
||||||
// First, scan the symbol table to build a lookup table from fragments to
|
|
||||||
// defining symbols.
|
|
||||||
DenseMap<const MCFragment *, const MCSymbol *> DefiningSymbolMap;
|
|
||||||
for (const MCSymbol &Symbol : getAssembler().symbols()) {
|
|
||||||
if (getAssembler().isSymbolLinkerVisible(Symbol) && Symbol.isInSection() &&
|
|
||||||
!Symbol.isVariable()) {
|
|
||||||
// An atom defining symbol should never be internal to a fragment.
|
|
||||||
assert(Symbol.getOffset() == 0 &&
|
|
||||||
"Invalid offset in atom defining symbol!");
|
|
||||||
DefiningSymbolMap[Symbol.getFragment()] = &Symbol;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the fragment atom associations by tracking the last seen atom defining
|
|
||||||
// symbol.
|
|
||||||
for (MCSection &Sec : getAssembler()) {
|
|
||||||
const MCSymbol *CurrentAtom = nullptr;
|
|
||||||
for (MCFragment &Frag : Sec) {
|
|
||||||
if (const MCSymbol *Symbol = DefiningSymbolMap.lookup(&Frag))
|
|
||||||
CurrentAtom = Symbol;
|
|
||||||
Frag.setAtom(CurrentAtom);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// As a compile-time optimization, avoid allocating and evaluating an MCExpr
|
// As a compile-time optimization, avoid allocating and evaluating an MCExpr
|
||||||
// tree for (Hi - Lo) when Hi and Lo are offsets into the same fragment.
|
// tree for (Hi - Lo) when Hi and Lo are offsets into the same fragment.
|
||||||
static Optional<uint64_t> absoluteSymbolDiff(const MCSymbol *Hi,
|
static Optional<uint64_t> absoluteSymbolDiff(const MCSymbol *Hi,
|
||||||
|
|
|
@ -191,9 +191,6 @@ void MCWasmStreamer::EmitInstToData(const MCInst &Inst,
|
||||||
void MCWasmStreamer::FinishImpl() {
|
void MCWasmStreamer::FinishImpl() {
|
||||||
EmitFrames(nullptr);
|
EmitFrames(nullptr);
|
||||||
|
|
||||||
// Set fragment atoms so we can map from code fragment to defining symbol
|
|
||||||
addFragmentAtoms();
|
|
||||||
|
|
||||||
this->MCObjectStreamer::FinishImpl();
|
this->MCObjectStreamer::FinishImpl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue