mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	Since there's no way to ensure the type unit in the .dwo and the type unit skeleton in the .o are correlated, this cannot work. This implementation is a bit inefficient for a few reasons, called out in comments. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207323 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- llvm/CodeGen/AddressPool.cpp - Dwarf Debug Framework ---*- C++ -*--===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "AddressPool.h"
 | |
| #include "llvm/CodeGen/AsmPrinter.h"
 | |
| #include "llvm/MC/MCStreamer.h"
 | |
| #include "llvm/Target/TargetLoweringObjectFile.h"
 | |
| 
 | |
| using namespace llvm;
 | |
| 
 | |
| class MCExpr;
 | |
| 
 | |
| unsigned AddressPool::getIndex(const MCSymbol *Sym, bool TLS) {
 | |
|   HasBeenUsed = true;
 | |
|   auto IterBool =
 | |
|       Pool.insert(std::make_pair(Sym, AddressPoolEntry(Pool.size(), TLS)));
 | |
|   return IterBool.first->second.Number;
 | |
| }
 | |
| 
 | |
| // Emit addresses into the section given.
 | |
| void AddressPool::emit(AsmPrinter &Asm, const MCSection *AddrSection) {
 | |
|   if (Pool.empty())
 | |
|     return;
 | |
| 
 | |
|   // Start the dwarf addr section.
 | |
|   Asm.OutStreamer.SwitchSection(AddrSection);
 | |
| 
 | |
|   // Order the address pool entries by ID
 | |
|   SmallVector<const MCExpr *, 64> Entries(Pool.size());
 | |
| 
 | |
|   for (const auto &I : Pool)
 | |
|     Entries[I.second.Number] =
 | |
|         I.second.TLS
 | |
|             ? Asm.getObjFileLowering().getDebugThreadLocalSymbol(I.first)
 | |
|             : MCSymbolRefExpr::Create(I.first, Asm.OutContext);
 | |
| 
 | |
|   for (const MCExpr *Entry : Entries)
 | |
|     Asm.OutStreamer.EmitValue(Entry, Asm.getDataLayout().getPointerSize());
 | |
| }
 |