mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
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
6756b777d0
commit
524ffdba2b
@ -87,8 +87,6 @@ protected:
|
||||
/// will be used as a symbol offset within the fragment.
|
||||
void flushPendingLabels(MCFragment *F, uint64_t FOffset = 0);
|
||||
|
||||
void addFragmentAtoms();
|
||||
|
||||
public:
|
||||
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
|
||||
// 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();
|
||||
}
|
||||
|
@ -59,32 +59,6 @@ void MCObjectStreamer::flushPendingLabels(MCFragment *F, uint64_t FOffset) {
|
||||
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
|
||||
// tree for (Hi - Lo) when Hi and Lo are offsets into the same fragment.
|
||||
static Optional<uint64_t> absoluteSymbolDiff(const MCSymbol *Hi,
|
||||
|
@ -191,9 +191,6 @@ void MCWasmStreamer::EmitInstToData(const MCInst &Inst,
|
||||
void MCWasmStreamer::FinishImpl() {
|
||||
EmitFrames(nullptr);
|
||||
|
||||
// Set fragment atoms so we can map from code fragment to defining symbol
|
||||
addFragmentAtoms();
|
||||
|
||||
this->MCObjectStreamer::FinishImpl();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user