| //===-- dwarf.h -------------------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef DebugBase_dwarf_h_ |
| #define DebugBase_dwarf_h_ |
| |
| #include <stdint.h> |
| |
| // Get the DWARF constant definitions from llvm |
| #include "llvm/BinaryFormat/Dwarf.h" |
| |
| #include "lldb/Core/RangeMap.h" |
| |
| // and stuff them in our default namespace |
| using namespace llvm::dwarf; |
| |
| typedef uint32_t dw_uleb128_t; |
| typedef int32_t dw_sleb128_t; |
| typedef uint16_t dw_attr_t; |
| typedef uint16_t dw_form_t; |
| typedef uint16_t dw_tag_t; |
| typedef uint64_t dw_addr_t; // Dwarf address define that must be big enough for |
| // any addresses in the compile units that get |
| // parsed |
| |
| #ifdef DWARFUTILS_DWARF64 |
| #define DWARF_REF_ADDR_SIZE 8 |
| typedef uint64_t dw_offset_t; // Dwarf Debug Information Entry offset for any |
| // offset into the file |
| #else |
| #define DWARF_REF_ADDR_SIZE 4 |
| typedef uint32_t dw_offset_t; // Dwarf Debug Information Entry offset for any |
| // offset into the file |
| #endif |
| |
| /* Constants */ |
| #define DW_INVALID_OFFSET (~(dw_offset_t)0) |
| #define DW_INVALID_INDEX 0xFFFFFFFFul |
| |
| // #define DW_ADDR_none 0x0 |
| |
| #define DW_EH_PE_MASK_ENCODING 0x0F |
| |
| //// The following are used only internally within lldb - don't |
| //// document them in the llvm Dwarf.h header file, we won't see |
| //// them in executable files anywhere. |
| //// These constants fit between DW_OP_lo_user (0xe0) and DW_OP_hi_user (0xff). |
| // |
| //#define DW_OP_APPLE_array_ref 0xEE // first pops index, then pops array; |
| //pushes array[index] |
| //#define DW_OP_APPLE_extern 0xEF // ULEB128 index of external object |
| //(i.e., an entity from the program that was used in the expression) |
| #define DW_OP_APPLE_uninit \ |
| 0xF0 // This is actually generated by some apple compilers in locations lists |
| //#define DW_OP_APPLE_assign 0xF1 // pops value off and assigns it to |
| //second item on stack (2nd item must have assignable context) |
| //#define DW_OP_APPLE_address_of 0xF2 // gets the address of the top stack |
| //item (top item must be a variable, or have value_type that is an address |
| //already) |
| //#define DW_OP_APPLE_value_of 0xF3 // pops the value off the stack and |
| //pushes the value of that object (top item must be a variable, or expression |
| //local) |
| //#define DW_OP_APPLE_deref_type 0xF4 // gets the address of the top stack |
| //item (top item must be a variable, or a clang type) |
| //#define DW_OP_APPLE_expr_local 0xF5 // ULEB128 expression local index |
| //#define DW_OP_APPLE_constf 0xF6 // 1 byte float size, followed by |
| //constant float data |
| //#define DW_OP_APPLE_scalar_cast 0xF7 // Cast top of stack to 2nd in stack's |
| //type leaving all items in place |
| //#define DW_OP_APPLE_clang_cast 0xF8 // pointer size clang::Type * off the |
| //stack and cast top stack item to this type |
| //#define DW_OP_APPLE_clear 0xFE // clears the entire expression stack, |
| //ok if the stack is empty |
| //#define DW_OP_APPLE_error 0xFF // Stops expression evaluation and |
| //returns an error (no args) |
| |
| typedef lldb_private::RangeArray<dw_addr_t, dw_addr_t, 2> DWARFRangeList; |
| |
| #endif // DebugBase_dwarf_h_ |