mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	using the DW_FORM_GNU_addr_index and a separate .debug_addr section which stays in the executable and is fully linked. Sneak in two other small changes: a) Print out the debug_str_offsets.dwo section. b) Change form we're expecting the entries in the debug_str_offsets.dwo section to take from ULEB128 to U32. Add tests for all of this in the fission-cu.ll test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172578 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===-- DWARFFormValue.h ----------------------------------------*- C++ -*-===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_DEBUGINFO_DWARFFORMVALUE_H
 | |
| #define LLVM_DEBUGINFO_DWARFFORMVALUE_H
 | |
| 
 | |
| #include "llvm/Support/DataExtractor.h"
 | |
| 
 | |
| namespace llvm {
 | |
| 
 | |
| class DWARFCompileUnit;
 | |
| class raw_ostream;
 | |
| 
 | |
| class DWARFFormValue {
 | |
| public:
 | |
|   struct ValueType {
 | |
|     ValueType() : data(NULL) {
 | |
|       uval = 0;
 | |
|     }
 | |
| 
 | |
|     union {
 | |
|       uint64_t uval;
 | |
|       int64_t sval;
 | |
|       const char* cstr;
 | |
|     };
 | |
|     const uint8_t* data;
 | |
|   };
 | |
| 
 | |
|   enum {
 | |
|     eValueTypeInvalid = 0,
 | |
|     eValueTypeUnsigned,
 | |
|     eValueTypeSigned,
 | |
|     eValueTypeCStr,
 | |
|     eValueTypeBlock
 | |
|   };
 | |
| 
 | |
| private:
 | |
|   uint16_t Form;   // Form for this value.
 | |
|   ValueType Value; // Contains all data for the form.
 | |
| 
 | |
| public:
 | |
|   DWARFFormValue(uint16_t form = 0) : Form(form) {}
 | |
|   uint16_t getForm() const { return Form; }
 | |
|   const ValueType& value() const { return Value; }
 | |
|   void dump(raw_ostream &OS, const DWARFCompileUnit* cu) const;
 | |
|   bool extractValue(DataExtractor data, uint32_t *offset_ptr,
 | |
|                     const DWARFCompileUnit *cu);
 | |
|   bool isInlinedCStr() const {
 | |
|     return Value.data != NULL && Value.data == (const uint8_t*)Value.cstr;
 | |
|   }
 | |
|   const uint8_t *BlockData() const;
 | |
|   uint64_t getReference(const DWARFCompileUnit* cu) const;
 | |
| 
 | |
|   /// Resolve any compile unit specific references so that we don't need
 | |
|   /// the compile unit at a later time in order to work with the form
 | |
|   /// value.
 | |
|   bool resolveCompileUnitReferences(const DWARFCompileUnit* cu);
 | |
|   uint64_t getUnsigned() const { return Value.uval; }
 | |
|   int64_t getSigned() const { return Value.sval; }
 | |
|   const char *getAsCString(const DataExtractor *debug_str_data_ptr) const;
 | |
|   const char *getIndirectCString(const DataExtractor *,
 | |
|                                  const DataExtractor *) const;
 | |
|   uint64_t getIndirectAddress(const DataExtractor *,
 | |
|                               const DWARFCompileUnit *) const;
 | |
|   bool skipValue(DataExtractor debug_info_data, uint32_t *offset_ptr,
 | |
|                  const DWARFCompileUnit *cu) const;
 | |
|   static bool skipValue(uint16_t form, DataExtractor debug_info_data,
 | |
|                         uint32_t *offset_ptr, const DWARFCompileUnit *cu);
 | |
|   static bool isBlockForm(uint16_t form);
 | |
|   static bool isDataForm(uint16_t form);
 | |
|   static const uint8_t *getFixedFormSizesForAddressSize(uint8_t addr_size);
 | |
| };
 | |
| 
 | |
| }
 | |
| 
 | |
| #endif
 |