mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-11 21:57:55 +00:00
940b0c036d
This makes sure we get the same redefinition rules regardless of who is printing (asm parser, codegen) and to what (asm, obj). This fixes an unintentional regression in r293936. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294752 91177308-0d34-0410-b5e6-96231b3b80d8
44 lines
1.5 KiB
C++
44 lines
1.5 KiB
C++
//===-- RecordStreamer.h - Record asm defined and used symbols ---*- C++ -*===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_OBJECT_RECORDSTREAMER_H
|
|
#define LLVM_LIB_OBJECT_RECORDSTREAMER_H
|
|
|
|
#include "llvm/MC/MCStreamer.h"
|
|
|
|
namespace llvm {
|
|
class RecordStreamer : public MCStreamer {
|
|
public:
|
|
enum State { NeverSeen, Global, Defined, DefinedGlobal, DefinedWeak, Used,
|
|
UndefinedWeak};
|
|
|
|
private:
|
|
StringMap<State> Symbols;
|
|
void markDefined(const MCSymbol &Symbol);
|
|
void markGlobal(const MCSymbol &Symbol, MCSymbolAttr Attribute);
|
|
void markUsed(const MCSymbol &Symbol);
|
|
void visitUsedSymbol(const MCSymbol &Sym) override;
|
|
|
|
public:
|
|
typedef StringMap<State>::const_iterator const_iterator;
|
|
const_iterator begin();
|
|
const_iterator end();
|
|
RecordStreamer(MCContext &Context);
|
|
void EmitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override;
|
|
void EmitLabel(MCSymbol *Symbol, SMLoc Loc = SMLoc()) override;
|
|
void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override;
|
|
bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
|
|
void EmitZerofill(MCSection *Section, MCSymbol *Symbol, uint64_t Size,
|
|
unsigned ByteAlignment) override;
|
|
void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
|
unsigned ByteAlignment) override;
|
|
};
|
|
}
|
|
#endif
|