mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	Moves one DWARF-specific header to include/llvm/DebugInfo from lib/. Add a short unittest for r179095. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179678 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 *getFixedFormSizes(uint8_t AddrSize, uint16_t Version);
 | 
						|
};
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |