mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212361 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//===-- RecordStreamer.cpp - Record asm definde and used symbols ----------===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#include "RecordStreamer.h"
 | 
						|
#include "llvm/MC/MCSymbol.h"
 | 
						|
using namespace llvm;
 | 
						|
 | 
						|
void RecordStreamer::markDefined(const MCSymbol &Symbol) {
 | 
						|
  State &S = Symbols[Symbol.getName()];
 | 
						|
  switch (S) {
 | 
						|
  case DefinedGlobal:
 | 
						|
  case Global:
 | 
						|
    S = DefinedGlobal;
 | 
						|
    break;
 | 
						|
  case NeverSeen:
 | 
						|
  case Defined:
 | 
						|
  case Used:
 | 
						|
    S = Defined;
 | 
						|
    break;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void RecordStreamer::markGlobal(const MCSymbol &Symbol) {
 | 
						|
  State &S = Symbols[Symbol.getName()];
 | 
						|
  switch (S) {
 | 
						|
  case DefinedGlobal:
 | 
						|
  case Defined:
 | 
						|
    S = DefinedGlobal;
 | 
						|
    break;
 | 
						|
 | 
						|
  case NeverSeen:
 | 
						|
  case Global:
 | 
						|
  case Used:
 | 
						|
    S = Global;
 | 
						|
    break;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void RecordStreamer::markUsed(const MCSymbol &Symbol) {
 | 
						|
  State &S = Symbols[Symbol.getName()];
 | 
						|
  switch (S) {
 | 
						|
  case DefinedGlobal:
 | 
						|
  case Defined:
 | 
						|
  case Global:
 | 
						|
    break;
 | 
						|
 | 
						|
  case NeverSeen:
 | 
						|
  case Used:
 | 
						|
    S = Used;
 | 
						|
    break;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void RecordStreamer::visitUsedSymbol(const MCSymbol &Sym) { markUsed(Sym); }
 | 
						|
 | 
						|
RecordStreamer::const_iterator RecordStreamer::begin() {
 | 
						|
  return Symbols.begin();
 | 
						|
}
 | 
						|
 | 
						|
RecordStreamer::const_iterator RecordStreamer::end() { return Symbols.end(); }
 | 
						|
 | 
						|
RecordStreamer::RecordStreamer(MCContext &Context) : MCStreamer(Context) {}
 | 
						|
 | 
						|
void RecordStreamer::EmitInstruction(const MCInst &Inst,
 | 
						|
                                     const MCSubtargetInfo &STI) {
 | 
						|
  MCStreamer::EmitInstruction(Inst, STI);
 | 
						|
}
 | 
						|
 | 
						|
void RecordStreamer::EmitLabel(MCSymbol *Symbol) {
 | 
						|
  MCStreamer::EmitLabel(Symbol);
 | 
						|
  markDefined(*Symbol);
 | 
						|
}
 | 
						|
 | 
						|
void RecordStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
 | 
						|
  markDefined(*Symbol);
 | 
						|
  MCStreamer::EmitAssignment(Symbol, Value);
 | 
						|
}
 | 
						|
 | 
						|
bool RecordStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
 | 
						|
                                         MCSymbolAttr Attribute) {
 | 
						|
  if (Attribute == MCSA_Global)
 | 
						|
    markGlobal(*Symbol);
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
void RecordStreamer::EmitZerofill(const MCSection *Section, MCSymbol *Symbol,
 | 
						|
                                  uint64_t Size, unsigned ByteAlignment) {
 | 
						|
  markDefined(*Symbol);
 | 
						|
}
 | 
						|
 | 
						|
void RecordStreamer::EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
 | 
						|
                                      unsigned ByteAlignment) {
 | 
						|
  markDefined(*Symbol);
 | 
						|
}
 |