mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
Provide a dummy section to fix a crash with inline assembly in LTO.
Fixes pr18508. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199843 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
efa1355495
commit
a73e920f09
@ -24,6 +24,7 @@
|
|||||||
#include "llvm/MC/MCInst.h"
|
#include "llvm/MC/MCInst.h"
|
||||||
#include "llvm/MC/MCInstrInfo.h"
|
#include "llvm/MC/MCInstrInfo.h"
|
||||||
#include "llvm/MC/MCParser/MCAsmParser.h"
|
#include "llvm/MC/MCParser/MCAsmParser.h"
|
||||||
|
#include "llvm/MC/MCSection.h"
|
||||||
#include "llvm/MC/MCStreamer.h"
|
#include "llvm/MC/MCStreamer.h"
|
||||||
#include "llvm/MC/MCSubtargetInfo.h"
|
#include "llvm/MC/MCSubtargetInfo.h"
|
||||||
#include "llvm/MC/MCSymbol.h"
|
#include "llvm/MC/MCSymbol.h"
|
||||||
@ -532,10 +533,32 @@ LTOModule::addPotentialUndefinedSymbol(const GlobalValue *decl, bool isFunc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
// Common infrastructure is allowed to assume the existence of a current
|
||||||
|
// section. Since this streamer doesn't need one itself, we just provide
|
||||||
|
// a dummy one.
|
||||||
|
class DummySection : public MCSection {
|
||||||
|
public:
|
||||||
|
DummySection() : MCSection(SV_ELF, SectionKind::getText()) {}
|
||||||
|
|
||||||
|
virtual void PrintSwitchToSection(const MCAsmInfo &MAI, raw_ostream &OS,
|
||||||
|
const MCExpr *Subsection) const {}
|
||||||
|
|
||||||
|
virtual std::string getLabelBeginName() const { return ""; }
|
||||||
|
|
||||||
|
virtual std::string getLabelEndName() const { return ""; }
|
||||||
|
|
||||||
|
virtual bool UseCodeAlign() const { return false; }
|
||||||
|
|
||||||
|
virtual bool isVirtualSection() const { return false; }
|
||||||
|
};
|
||||||
|
|
||||||
class RecordStreamer : public MCStreamer {
|
class RecordStreamer : public MCStreamer {
|
||||||
public:
|
public:
|
||||||
enum State { NeverSeen, Global, Defined, DefinedGlobal, Used };
|
enum State { NeverSeen, Global, Defined, DefinedGlobal, Used };
|
||||||
|
|
||||||
|
DummySection TheSection;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
StringMap<State> Symbols;
|
StringMap<State> Symbols;
|
||||||
|
|
||||||
@ -621,7 +644,9 @@ namespace {
|
|||||||
return Symbols.end();
|
return Symbols.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
RecordStreamer(MCContext &Context) : MCStreamer(Context, 0) {}
|
RecordStreamer(MCContext &Context) : MCStreamer(Context, 0) {
|
||||||
|
SwitchSection(&TheSection);
|
||||||
|
}
|
||||||
|
|
||||||
virtual void EmitInstruction(const MCInst &Inst) {
|
virtual void EmitInstruction(const MCInst &Inst) {
|
||||||
// Scan for values.
|
// Scan for values.
|
||||||
|
4
test/LTO/current-section.ll
Normal file
4
test/LTO/current-section.ll
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
; RUN: llvm-as < %s >%t1
|
||||||
|
; RUN: llvm-lto -o %t2 %t1
|
||||||
|
|
||||||
|
module asm ".align 4"
|
Loading…
Reference in New Issue
Block a user