std::vector<Entry> Entries;
};
-struct File {
- StringRef Name;
- uint64_t DirIdx;
- uint64_t ModTime;
- uint64_t Length;
-};
-
-struct LineTableOpcode {
- dwarf::LineNumberOps Opcode;
- uint64_t ExtLen;
- dwarf::LineNumberExtendedOps SubOpcode;
- uint64_t Data;
- int64_t SData;
- File FileEntry;
- std::vector<llvm::yaml::Hex8> UnknownOpcodeData;
- std::vector<llvm::yaml::Hex64> StandardOpcodeData;
-};
-
-struct LineTable {
- uint32_t TotalLength;
- uint64_t TotalLength64;
- uint16_t Version;
- uint64_t PrologueLength;
- uint8_t MinInstLength;
- uint8_t MaxOpsPerInst;
- uint8_t DefaultIsStmt;
- uint8_t LineBase;
- uint8_t LineRange;
- uint8_t OpcodeBase;
- std::vector<uint8_t> StandardOpcodeLengths;
- std::vector<StringRef> IncludeDirs;
- std::vector<File> Files;
- std::vector<LineTableOpcode> Opcodes;
-};
-
struct Data {
bool IsLittleEndian;
std::vector<Abbrev> AbbrevDecls;
std::vector<Unit> CompileUnits;
- std::vector<LineTable> DebugLines;
-
bool isEmpty() const;
};
} // namespace llvm
LLVM_YAML_IS_SEQUENCE_VECTOR(uint8_t)
-LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::yaml::Hex64)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::StringRef)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::yaml::Hex8)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::AttributeAbbrev)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::Unit)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::FormValue)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::Entry)
-LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::File)
-LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::LineTable)
-LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DWARFYAML::LineTableOpcode)
namespace llvm {
namespace yaml {
static void mapping(IO &IO, DWARFYAML::FormValue &FormValue);
};
-template <> struct MappingTraits<DWARFYAML::File> {
- static void mapping(IO &IO, DWARFYAML::File &File);
-};
-
-template <> struct MappingTraits<DWARFYAML::LineTableOpcode> {
- static void mapping(IO &IO, DWARFYAML::LineTableOpcode &LineTableOpcode);
-};
-
-template <> struct MappingTraits<DWARFYAML::LineTable> {
- static void mapping(IO &IO, DWARFYAML::LineTable &LineTable);
-};
-
#define HANDLE_DW_TAG(unused, name) \
io.enumCase(value, "DW_TAG_" #name, dwarf::DW_TAG_##name);
}
};
-#define HANDLE_DW_LNS(unused, name) \
- io.enumCase(value, "DW_LNS_" #name, dwarf::DW_LNS_##name);
-
-template <> struct ScalarEnumerationTraits<dwarf::LineNumberOps> {
- static void enumeration(IO &io, dwarf::LineNumberOps &value) {
-#include "llvm/Support/Dwarf.def"
- io.enumFallback<Hex8>(value);
- }
-};
-
-#define HANDLE_DW_LNE(unused, name) \
- io.enumCase(value, "DW_LNE_" #name, dwarf::DW_LNE_##name);
-
-template <> struct ScalarEnumerationTraits<dwarf::LineNumberExtendedOps> {
- static void enumeration(IO &io, dwarf::LineNumberExtendedOps &value) {
-#include "llvm/Support/Dwarf.def"
- io.enumFallback<Hex16>(value);
- }
-};
-
#define HANDLE_DW_AT(unused, name) \
io.enumCase(value, "DW_AT_" #name, dwarf::DW_AT_##name);
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::LoadCommand)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::Section)
+LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::yaml::Hex64)
LLVM_YAML_IS_SEQUENCE_VECTOR(int64_t)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::RebaseOpcode)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::MachOYAML::BindOpcode)
};
/// Line Number Standard Opcode Encodings.
-enum LineNumberOps : uint8_t {
+enum LineNumberOps {
#define HANDLE_DW_LNS(ID, NAME) DW_LNS_##NAME = ID,
#include "llvm/Support/Dwarf.def"
};
IO.setContext(&DWARF);
IO.mapOptional("debug_str", DWARF.DebugStrings);
IO.mapOptional("debug_abbrev", DWARF.AbbrevDecls);
- if (!DWARF.ARanges.empty() || !IO.outputting())
+ if(!DWARF.ARanges.empty() || !IO.outputting())
IO.mapOptional("debug_aranges", DWARF.ARanges);
- if (!DWARF.PubNames.Entries.empty() || !IO.outputting())
+ if(!DWARF.PubNames.Entries.empty() || !IO.outputting())
IO.mapOptional("debug_pubnames", DWARF.PubNames);
- if (!DWARF.PubTypes.Entries.empty() || !IO.outputting())
+ if(!DWARF.PubTypes.Entries.empty() || !IO.outputting())
IO.mapOptional("debug_pubtypes", DWARF.PubTypes);
- if (!DWARF.GNUPubNames.Entries.empty() || !IO.outputting())
+ if(!DWARF.GNUPubNames.Entries.empty() || !IO.outputting())
IO.mapOptional("debug_gnu_pubnames", DWARF.GNUPubNames);
- if (!DWARF.GNUPubTypes.Entries.empty() || !IO.outputting())
+ if(!DWARF.GNUPubTypes.Entries.empty() || !IO.outputting())
IO.mapOptional("debug_gnu_pubtypes", DWARF.GNUPubTypes);
IO.mapOptional("debug_info", DWARF.CompileUnits);
- IO.mapOptional("debug_line", DWARF.DebugLines);
IO.setContext(&oldContext);
}
}
void MappingTraits<DWARFYAML::ARange>::mapping(IO &IO,
- DWARFYAML::ARange &Range) {
+ DWARFYAML::ARange &Range) {
IO.mapRequired("Length", Range.Length);
IO.mapRequired("Version", Range.Version);
IO.mapRequired("CuOffset", Range.CuOffset);
IO.mapRequired("Values", Entry.Values);
}
-void MappingTraits<DWARFYAML::FormValue>::mapping(
- IO &IO, DWARFYAML::FormValue &FormValue) {
+void MappingTraits<DWARFYAML::FormValue>::mapping(IO &IO,
+ DWARFYAML::FormValue &FormValue) {
IO.mapOptional("Value", FormValue.Value);
- if (!FormValue.CStr.empty() || !IO.outputting())
+ if(!FormValue.CStr.empty() || !IO.outputting())
IO.mapOptional("CStr", FormValue.CStr);
- if (!FormValue.BlockData.empty() || !IO.outputting())
+ if(!FormValue.BlockData.empty() || !IO.outputting())
IO.mapOptional("BlockData", FormValue.BlockData);
}
-void MappingTraits<DWARFYAML::File>::mapping(IO &IO, DWARFYAML::File &File) {
- IO.mapRequired("Name", File.Name);
- IO.mapRequired("DirIdx", File.DirIdx);
- IO.mapRequired("ModTime", File.ModTime);
- IO.mapRequired("Length", File.Length);
-}
-
-void MappingTraits<DWARFYAML::LineTableOpcode>::mapping(
- IO &IO, DWARFYAML::LineTableOpcode &LineTableOpcode) {
- IO.mapRequired("Opcode", LineTableOpcode.Opcode);
- if (LineTableOpcode.Opcode == dwarf::DW_LNS_extended_op) {
- IO.mapRequired("ExtLen", LineTableOpcode.ExtLen);
- IO.mapRequired("SubOpcode", LineTableOpcode.SubOpcode);
- }
-
- if (!LineTableOpcode.UnknownOpcodeData.empty() || !IO.outputting())
- IO.mapOptional("UnknownOpcodeData", LineTableOpcode.UnknownOpcodeData);
- if (!LineTableOpcode.UnknownOpcodeData.empty() || !IO.outputting())
- IO.mapOptional("StandardOpcodeData", LineTableOpcode.StandardOpcodeData);
- if (!LineTableOpcode.FileEntry.Name.empty() || !IO.outputting())
- IO.mapOptional("FileEntry", LineTableOpcode.FileEntry);
- if (LineTableOpcode.Opcode == dwarf::DW_LNS_advance_line || !IO.outputting())
- IO.mapOptional("SData", LineTableOpcode.SData);
- IO.mapOptional("Data", LineTableOpcode.Data);
-}
-
-void MappingTraits<DWARFYAML::LineTable>::mapping(
- IO &IO, DWARFYAML::LineTable &LineTable) {
- IO.mapRequired("TotalLength", LineTable.TotalLength);
- if (LineTable.TotalLength == UINT32_MAX)
- IO.mapRequired("TotalLength64", LineTable.TotalLength64);
- IO.mapRequired("Version", LineTable.Version);
- IO.mapRequired("PrologueLength", LineTable.PrologueLength);
- IO.mapRequired("MinInstLength", LineTable.MinInstLength);
- IO.mapRequired("MaxOpsPerInst", LineTable.MaxOpsPerInst);
- IO.mapRequired("DefaultIsStmt", LineTable.DefaultIsStmt);
- IO.mapRequired("LineBase", LineTable.LineBase);
- IO.mapRequired("LineRange", LineTable.LineRange);
- IO.mapRequired("OpcodeBase", LineTable.OpcodeBase);
- IO.mapRequired("StandardOpcodeLengths", LineTable.StandardOpcodeLengths);
- IO.mapRequired("IncludeDirs", LineTable.IncludeDirs);
- IO.mapRequired("Files", LineTable.Files);
- IO.mapRequired("Opcodes", LineTable.Opcodes);
-}
-
} // namespace llvm::yaml
} // namespace llvm
- Value: 0x0000000000000001
- AbbrCode: 0x00000000
Values:
- debug_line:
- - TotalLength: 65
- Version: 2
- PrologueLength: 36
- MinInstLength: 1
- MaxOpsPerInst: 0
- DefaultIsStmt: 1
- LineBase: 251
- LineRange: 14
- OpcodeBase: 13
- StandardOpcodeLengths:
- - 0
- - 1
- - 1
- - 1
- - 1
- - 0
- - 0
- - 0
- - 1
- - 0
- - 0
- - 1
- IncludeDirs:
- Files:
- - Name: hello_world.c
- DirIdx: 0
- ModTime: 0
- Length: 0
- Opcodes:
- - Opcode: DW_LNS_extended_op
- ExtLen: 9
- SubOpcode: DW_LNE_set_address
- Data: 4294971216
- - Opcode: 0x14
- Data: 4294971216
- - Opcode: DW_LNS_set_column
- Data: 3
- - Opcode: DW_LNS_set_prologue_end
- Data: 3
- - Opcode: DW_LNS_const_add_pc
- Data: 3
- - Opcode: 0xBB
- Data: 3
- - Opcode: 0xBB
- Data: 3
- - Opcode: DW_LNS_advance_pc
- Data: 11
- - Opcode: DW_LNS_extended_op
- ExtLen: 1
- SubOpcode: DW_LNE_end_sequence
- Data: 11
-...
...
+++ /dev/null
-# RUN: yaml2obj %s | obj2yaml | FileCheck %s
-
---- !mach-o
-FileHeader:
- magic: 0xFEEDFACF
- cputype: 0x01000007
- cpusubtype: 0x00000003
- filetype: 0x0000000A
- ncmds: 7
- sizeofcmds: 1848
- flags: 0x00000000
- reserved: 0x00000000
-LoadCommands:
- - cmd: LC_UUID
- cmdsize: 24
- uuid: B4D48511-37F4-3ED4-AFA7-1683DCE69AC4
- - cmd: LC_SYMTAB
- cmdsize: 24
- symoff: 4096
- nsyms: 2
- stroff: 4128
- strsize: 28
- - cmd: LC_SEGMENT_64
- cmdsize: 72
- segname: __PAGEZERO
- vmaddr: 0
- vmsize: 4294967296
- fileoff: 0
- filesize: 0
- maxprot: 0
- initprot: 0
- nsects: 0
- flags: 0
- - cmd: LC_SEGMENT_64
- cmdsize: 472
- segname: __TEXT
- vmaddr: 4294967296
- vmsize: 4096
- fileoff: 0
- filesize: 0
- maxprot: 7
- initprot: 5
- nsects: 5
- flags: 0
- Sections:
- - sectname: __text
- segname: __TEXT
- addr: 0x0000000100000F50
- size: 52
- offset: 0x00000000
- align: 4
- reloff: 0x00000000
- nreloc: 0
- flags: 0x80000400
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __stubs
- segname: __TEXT
- addr: 0x0000000100000F84
- size: 6
- offset: 0x00000000
- align: 1
- reloff: 0x00000000
- nreloc: 0
- flags: 0x80000408
- reserved1: 0x00000000
- reserved2: 0x00000006
- reserved3: 0x00000000
- - sectname: __stub_helper
- segname: __TEXT
- addr: 0x0000000100000F8C
- size: 26
- offset: 0x00000000
- align: 2
- reloff: 0x00000000
- nreloc: 0
- flags: 0x80000400
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __cstring
- segname: __TEXT
- addr: 0x0000000100000FA6
- size: 14
- offset: 0x00000000
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000002
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __unwind_info
- segname: __TEXT
- addr: 0x0000000100000FB4
- size: 72
- offset: 0x00000000
- align: 2
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - cmd: LC_SEGMENT_64
- cmdsize: 232
- segname: __DATA
- vmaddr: 4294971392
- vmsize: 4096
- fileoff: 0
- filesize: 0
- maxprot: 7
- initprot: 3
- nsects: 2
- flags: 0
- Sections:
- - sectname: __nl_symbol_ptr
- segname: __DATA
- addr: 0x0000000100001000
- size: 16
- offset: 0x00000000
- align: 3
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000006
- reserved1: 0x00000001
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __la_symbol_ptr
- segname: __DATA
- addr: 0x0000000100001010
- size: 8
- offset: 0x00000000
- align: 3
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000007
- reserved1: 0x00000003
- reserved2: 0x00000000
- reserved3: 0x00000000
- - cmd: LC_SEGMENT_64
- cmdsize: 72
- segname: __LINKEDIT
- vmaddr: 4294975488
- vmsize: 4096
- fileoff: 4096
- filesize: 60
- maxprot: 7
- initprot: 1
- nsects: 0
- flags: 0
- - cmd: LC_SEGMENT_64
- cmdsize: 952
- segname: __DWARF
- vmaddr: 4294979584
- vmsize: 4096
- fileoff: 8192
- filesize: 764
- maxprot: 7
- initprot: 3
- nsects: 11
- flags: 0
- Sections:
- - sectname: __debug_line
- segname: __DWARF
- addr: 0x0000000100003000
- size: 69
- offset: 0x00002000
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __debug_pubnames
- segname: __DWARF
- addr: 0x0000000100003045
- size: 27
- offset: 0x00002045
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __debug_pubtypes
- segname: __DWARF
- addr: 0x0000000100003060
- size: 35
- offset: 0x00002060
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __debug_aranges
- segname: __DWARF
- addr: 0x0000000100003083
- size: 48
- offset: 0x00002083
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __debug_info
- segname: __DWARF
- addr: 0x00000001000030B3
- size: 121
- offset: 0x000020B3
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __debug_abbrev
- segname: __DWARF
- addr: 0x000000010000312C
- size: 76
- offset: 0x0000212C
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __debug_str
- segname: __DWARF
- addr: 0x0000000100003178
- size: 142
- offset: 0x00002178
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __apple_names
- segname: __DWARF
- addr: 0x0000000100003206
- size: 60
- offset: 0x00002206
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __apple_namespac
- segname: __DWARF
- addr: 0x0000000100003242
- size: 36
- offset: 0x00002242
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __apple_types
- segname: __DWARF
- addr: 0x0000000100003266
- size: 114
- offset: 0x00002266
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
- - sectname: __apple_objc
- segname: __DWARF
- addr: 0x00000001000032D8
- size: 36
- offset: 0x000022D8
- align: 0
- reloff: 0x00000000
- nreloc: 0
- flags: 0x00000000
- reserved1: 0x00000000
- reserved2: 0x00000000
- reserved3: 0x00000000
-LinkEditData:
- NameList:
- - n_strx: 2
- n_type: 0x0F
- n_sect: 1
- n_desc: 16
- n_value: 4294967296
- - n_strx: 22
- n_type: 0x0F
- n_sect: 1
- n_desc: 0
- n_value: 4294971216
- StringTable:
- - ''
- - ''
- - __mh_execute_header
- - _main
-DWARF:
- debug_str:
- - ''
- - 'clang version 4.0.0 (trunk 288923) (llvm/trunk 288991)'
- - hello_world.c
- - /Users/cbieneman/dev/open-source/llvm-build-rel
- - main
- - argc
- - argv
- - int
- - char
- debug_abbrev:
- - Code: 0x00000001
- Tag: DW_TAG_compile_unit
- Children: DW_CHILDREN_yes
- Attributes:
- - Attribute: DW_AT_producer
- Form: DW_FORM_strp
- - Attribute: DW_AT_language
- Form: DW_FORM_data2
- - Attribute: DW_AT_name
- Form: DW_FORM_strp
- - Attribute: DW_AT_stmt_list
- Form: DW_FORM_sec_offset
- - Attribute: DW_AT_comp_dir
- Form: DW_FORM_strp
- - Attribute: DW_AT_low_pc
- Form: DW_FORM_addr
- - Attribute: DW_AT_high_pc
- Form: DW_FORM_data4
- - Code: 0x00000002
- Tag: DW_TAG_subprogram
- Children: DW_CHILDREN_yes
- Attributes:
- - Attribute: DW_AT_low_pc
- Form: DW_FORM_addr
- - Attribute: DW_AT_high_pc
- Form: DW_FORM_data4
- - Attribute: DW_AT_frame_base
- Form: DW_FORM_exprloc
- - Attribute: DW_AT_name
- Form: DW_FORM_strp
- - Attribute: DW_AT_decl_file
- Form: DW_FORM_data1
- - Attribute: DW_AT_decl_line
- Form: DW_FORM_data1
- - Attribute: DW_AT_prototyped
- Form: DW_FORM_flag_present
- - Attribute: DW_AT_type
- Form: DW_FORM_ref4
- - Attribute: DW_AT_external
- Form: DW_FORM_flag_present
- - Code: 0x00000003
- Tag: DW_TAG_formal_parameter
- Children: DW_CHILDREN_no
- Attributes:
- - Attribute: DW_AT_location
- Form: DW_FORM_exprloc
- - Attribute: DW_AT_name
- Form: DW_FORM_strp
- - Attribute: DW_AT_decl_file
- Form: DW_FORM_data1
- - Attribute: DW_AT_decl_line
- Form: DW_FORM_data1
- - Attribute: DW_AT_type
- Form: DW_FORM_ref4
- - Code: 0x00000004
- Tag: DW_TAG_base_type
- Children: DW_CHILDREN_no
- Attributes:
- - Attribute: DW_AT_name
- Form: DW_FORM_strp
- - Attribute: DW_AT_encoding
- Form: DW_FORM_data1
- - Attribute: DW_AT_byte_size
- Form: DW_FORM_data1
- - Code: 0x00000005
- Tag: DW_TAG_pointer_type
- Children: DW_CHILDREN_no
- Attributes:
- - Attribute: DW_AT_type
- Form: DW_FORM_ref4
- debug_aranges:
- - Length: 44
- Version: 2
- CuOffset: 0
- AddrSize: 8
- SegSize: 0
- Descriptors:
- - Address: 0x0000000100000F50
- Length: 52
- debug_pubnames:
- Length: 23
- Version: 2
- UnitOffset: 0
- UnitSize: 121
- Entries:
- - DieOffset: 0x0000002A
- Name: main
- debug_pubtypes:
- Length: 31
- Version: 2
- UnitOffset: 0
- UnitSize: 121
- Entries:
- - DieOffset: 0x00000060
- Name: int
- - DieOffset: 0x00000071
- Name: char
- debug_info:
- - Length: 117
- Version: 4
- AbbrOffset: 0
- AddrSize: 8
- Entries:
- - AbbrCode: 0x00000001
- Values:
- - Value: 0x0000000000000001
- - Value: 0x000000000000000C
- - Value: 0x0000000000000038
- - Value: 0x0000000000000000
- - Value: 0x0000000000000046
- - Value: 0x0000000100000F50
- - Value: 0x0000000000000034
- - AbbrCode: 0x00000002
- Values:
- - Value: 0x0000000100000F50
- - Value: 0x0000000000000034
- - Value: 0x0000000000000001
- BlockData:
- - 0x56
- - Value: 0x0000000000000076
- - Value: 0x0000000000000001
- - Value: 0x0000000000000003
- - Value: 0x0000000000000001
- - Value: 0x0000000000000060
- - Value: 0x0000000000000001
- - AbbrCode: 0x00000003
- Values:
- - Value: 0x0000000000000002
- BlockData:
- - 0x91
- - 0x78
- - Value: 0x000000000000007B
- - Value: 0x0000000000000001
- - Value: 0x0000000000000003
- - Value: 0x0000000000000060
- - AbbrCode: 0x00000003
- Values:
- - Value: 0x0000000000000002
- BlockData:
- - 0x91
- - 0x70
- - Value: 0x0000000000000080
- - Value: 0x0000000000000001
- - Value: 0x0000000000000003
- - Value: 0x0000000000000067
- - AbbrCode: 0x00000000
- Values:
- - AbbrCode: 0x00000004
- Values:
- - Value: 0x0000000000000085
- - Value: 0x0000000000000005
- - Value: 0x0000000000000004
- - AbbrCode: 0x00000005
- Values:
- - Value: 0x000000000000006C
- - AbbrCode: 0x00000005
- Values:
- - Value: 0x0000000000000071
- - AbbrCode: 0x00000004
- Values:
- - Value: 0x0000000000000089
- - Value: 0x0000000000000006
- - Value: 0x0000000000000001
- - AbbrCode: 0x00000000
- Values:
- debug_line:
- - TotalLength: 65
- Version: 2
- PrologueLength: 36
- MinInstLength: 1
- MaxOpsPerInst: 0
- DefaultIsStmt: 1
- LineBase: 251
- LineRange: 14
- OpcodeBase: 13
- StandardOpcodeLengths:
- - 0
- - 1
- - 1
- - 1
- - 1
- - 0
- - 0
- - 0
- - 1
- - 0
- - 0
- - 1
- IncludeDirs:
- Files:
- - Name: hello_world.c
- DirIdx: 0
- ModTime: 0
- Length: 0
- Opcodes:
- - Opcode: DW_LNS_extended_op
- ExtLen: 9
- SubOpcode: DW_LNE_set_address
- Data: 4294971216
- - Opcode: 0x14
- Data: 4294971216
- - Opcode: DW_LNS_set_column
- Data: 3
- - Opcode: DW_LNS_set_prologue_end
- Data: 3
- - Opcode: DW_LNS_const_add_pc
- Data: 3
- - Opcode: 0xBB
- Data: 3
- - Opcode: 0xBB
- Data: 3
- - Opcode: DW_LNS_advance_pc
- Data: 11
- - Opcode: DW_LNS_extended_op
- ExtLen: 1
- SubOpcode: DW_LNE_end_sequence
- Data: 11
-...
-
-#CHECK: debug_line:
-#CHECK: - TotalLength: 65
-#CHECK: Version: 2
-#CHECK: PrologueLength: 36
-#CHECK: MinInstLength: 1
-#CHECK: MaxOpsPerInst: 0
-#CHECK: DefaultIsStmt: 1
-#CHECK: LineBase: 251
-#CHECK: LineRange: 14
-#CHECK: OpcodeBase: 13
-#CHECK: StandardOpcodeLengths:
-#CHECK: - 0
-#CHECK: - 1
-#CHECK: - 1
-#CHECK: - 1
-#CHECK: - 1
-#CHECK: - 0
-#CHECK: - 0
-#CHECK: - 0
-#CHECK: - 1
-#CHECK: - 0
-#CHECK: - 0
-#CHECK: - 1
-#CHECK: IncludeDirs:
-#CHECK: Files:
-#CHECK: - Name: hello_world.c
-#CHECK: DirIdx: 0
-#CHECK: ModTime: 0
-#CHECK: Length: 0
-#CHECK: Opcodes:
-#CHECK: - Opcode: DW_LNS_extended_op
-#CHECK: ExtLen: 9
-#CHECK: SubOpcode: DW_LNE_set_address
-#CHECK: Data: 4294971216
-#CHECK: - Opcode: 0x14
-#CHECK: Data: 4294971216
-#CHECK: - Opcode: DW_LNS_set_column
-#CHECK: Data: 3
-#CHECK: - Opcode: DW_LNS_set_prologue_end
-#CHECK: Data: 3
-#CHECK: - Opcode: DW_LNS_const_add_pc
-#CHECK: Data: 3
-#CHECK: - Opcode: 0xBB
-#CHECK: Data: 3
-#CHECK: - Opcode: 0xBB
-#CHECK: Data: 3
-#CHECK: - Opcode: DW_LNS_advance_pc
-#CHECK: Data: 11
-#CHECK: - Opcode: DW_LNS_extended_op
-#CHECK: ExtLen: 1
-#CHECK: SubOpcode: DW_LNE_end_sequence
-#CHECK: Data: 11
-#CHECK: ...
NewValue.Value = 0xDEADBEEFDEADBEEF;
DWARFDie DIEWrapper(CU.get(), &DIE);
auto FormValue = DIEWrapper.getAttributeValue(AttrSpec.Attr);
- if (!FormValue)
+ if(!FormValue)
return;
auto Form = FormValue.getValue().getForm();
bool indirect = false;
}
}
-bool dumpFileEntry(DataExtractor &Data, uint32_t &Offset,
- DWARFYAML::File &File) {
- File.Name = Data.getCStr(&Offset);
- if (File.Name.empty())
- return false;
- File.DirIdx = Data.getULEB128(&Offset);
- File.ModTime = Data.getULEB128(&Offset);
- File.Length = Data.getULEB128(&Offset);
- return true;
-}
-
-void dumpDebugLines(DWARFContextInMemory &DCtx, DWARFYAML::Data &Y) {
- for (const auto &CU : DCtx.compile_units()) {
- auto CUDIE = CU->getUnitDIE();
- if (!CUDIE)
- continue;
- if (auto StmtOffset =
- CUDIE.getAttributeValueAsSectionOffset(dwarf::DW_AT_stmt_list)) {
- DWARFYAML::LineTable DebugLines;
- DataExtractor LineData(DCtx.getLineSection().Data, DCtx.isLittleEndian(),
- CU->getAddressByteSize());
- uint32_t Offset = *StmtOffset;
- uint64_t SizeOfPrologueLength = 4;
- DebugLines.TotalLength = LineData.getU32(&Offset);
- uint64_t LineTableLength = DebugLines.TotalLength;
- if (DebugLines.TotalLength == UINT32_MAX) {
- DebugLines.TotalLength64 = LineData.getU64(&Offset);
- LineTableLength = DebugLines.TotalLength64;
- SizeOfPrologueLength = 8;
- }
- DebugLines.Version = LineData.getU16(&Offset);
- DebugLines.PrologueLength =
- LineData.getUnsigned(&Offset, SizeOfPrologueLength);
- const uint64_t EndPrologue = DebugLines.PrologueLength + Offset;
-
- DebugLines.MinInstLength = LineData.getU8(&Offset);
- if (DebugLines.Version >= 4)
- DebugLines.MaxOpsPerInst = LineData.getU8(&Offset);
- DebugLines.DefaultIsStmt = LineData.getU8(&Offset);
- DebugLines.LineBase = LineData.getU8(&Offset);
- DebugLines.LineRange = LineData.getU8(&Offset);
- DebugLines.OpcodeBase = LineData.getU8(&Offset);
-
- DebugLines.StandardOpcodeLengths.reserve(DebugLines.OpcodeBase - 1);
- for (uint8_t i = 1; i < DebugLines.OpcodeBase; ++i)
- DebugLines.StandardOpcodeLengths.push_back(LineData.getU8(&Offset));
-
- while (Offset < EndPrologue) {
- StringRef Dir = LineData.getCStr(&Offset);
- if (!Dir.empty())
- DebugLines.IncludeDirs.push_back(Dir);
- else
- break;
- }
-
- while (Offset < EndPrologue) {
- DWARFYAML::File TmpFile;
- if (dumpFileEntry(LineData, Offset, TmpFile))
- DebugLines.Files.push_back(TmpFile);
- else
- break;
- }
-
- const uint64_t LineEnd =
- LineTableLength + *StmtOffset + SizeOfPrologueLength;
- while (Offset < LineEnd) {
- DWARFYAML::LineTableOpcode NewOp;
- NewOp.Opcode = (dwarf::LineNumberOps)LineData.getU8(&Offset);
- if (NewOp.Opcode == 0) {
- auto StartExt = Offset;
- NewOp.ExtLen = LineData.getULEB128(&Offset);
- NewOp.SubOpcode =
- (dwarf::LineNumberExtendedOps)LineData.getU8(&Offset);
- switch (NewOp.SubOpcode) {
- case dwarf::DW_LNE_set_address:
- case dwarf::DW_LNE_set_discriminator:
- NewOp.Data = LineData.getAddress(&Offset);
- break;
- case dwarf::DW_LNE_define_file:
- dumpFileEntry(LineData, Offset, NewOp.FileEntry);
- break;
- case dwarf::DW_LNE_end_sequence:
- break;
- default:
- while (Offset < StartExt + NewOp.ExtLen)
- NewOp.UnknownOpcodeData.push_back(LineData.getU8(&Offset));
- }
- } else if (NewOp.Opcode < DebugLines.OpcodeBase) {
- switch (NewOp.Opcode) {
- case dwarf::DW_LNS_copy:
- case dwarf::DW_LNS_negate_stmt:
- case dwarf::DW_LNS_set_basic_block:
- case dwarf::DW_LNS_const_add_pc:
- case dwarf::DW_LNS_set_prologue_end:
- case dwarf::DW_LNS_set_epilogue_begin:
- break;
-
- case dwarf::DW_LNS_advance_pc:
- case dwarf::DW_LNS_set_file:
- case dwarf::DW_LNS_set_column:
- case dwarf::DW_LNS_set_isa:
- NewOp.Data = LineData.getULEB128(&Offset);
- break;
-
- case dwarf::DW_LNS_advance_line:
- NewOp.SData = LineData.getSLEB128(&Offset);
- break;
-
- case dwarf::DW_LNS_fixed_advance_pc:
- NewOp.Data = LineData.getU16(&Offset);
- break;
-
- default:
- for (uint8_t i = 0;
- i < DebugLines.StandardOpcodeLengths[NewOp.Opcode - 1]; ++i)
- NewOp.StandardOpcodeData.push_back(LineData.getULEB128(&Offset));
- }
- }
- DebugLines.Opcodes.push_back(NewOp);
- }
- Y.DebugLines.push_back(DebugLines);
- }
- }
-}
-
std::error_code dwarf2yaml(DWARFContextInMemory &DCtx, DWARFYAML::Data &Y) {
dumpDebugAbbrev(DCtx, Y);
dumpDebugStrings(DCtx, Y);
dumpDebugARanges(DCtx, Y);
dumpDebugPubSections(DCtx, Y);
dumpDebugInfo(DCtx, Y);
- dumpDebugLines(DCtx, Y);
return obj2yaml_error::success;
}
}
}
}
-
-void yaml2FileEntry(raw_ostream &OS, const DWARFYAML::File &File) {
- OS.write(File.Name.data(), File.Name.size());
- OS.write('\0');
- encodeULEB128(File.DirIdx, OS);
- encodeULEB128(File.ModTime, OS);
- encodeULEB128(File.Length, OS);
-}
-
-void yaml2debug_line(raw_ostream &OS, const DWARFYAML::Data &DI) {
- for (const auto LineTable : DI.DebugLines) {
- writeInteger((uint32_t)LineTable.TotalLength, OS, DI.IsLittleEndian);
- uint64_t SizeOfPrologueLength = 4;
- if (LineTable.TotalLength == UINT32_MAX) {
- writeInteger((uint64_t)LineTable.TotalLength64, OS, DI.IsLittleEndian);
- SizeOfPrologueLength = 8;
- }
- writeInteger((uint16_t)LineTable.Version, OS, DI.IsLittleEndian);
- writeVariableSizedInteger(LineTable.PrologueLength, SizeOfPrologueLength,
- OS, DI.IsLittleEndian);
- writeInteger((uint8_t)LineTable.MinInstLength, OS, DI.IsLittleEndian);
- if (LineTable.Version >= 4)
- writeInteger((uint8_t)LineTable.MaxOpsPerInst, OS, DI.IsLittleEndian);
- writeInteger((uint8_t)LineTable.DefaultIsStmt, OS, DI.IsLittleEndian);
- writeInteger((uint8_t)LineTable.LineBase, OS, DI.IsLittleEndian);
- writeInteger((uint8_t)LineTable.LineRange, OS, DI.IsLittleEndian);
- writeInteger((uint8_t)LineTable.OpcodeBase, OS, DI.IsLittleEndian);
-
- for (auto OpcodeLength : LineTable.StandardOpcodeLengths)
- writeInteger((uint8_t)OpcodeLength, OS, DI.IsLittleEndian);
-
- for (auto IncludeDir : LineTable.IncludeDirs) {
- OS.write(IncludeDir.data(), IncludeDir.size());
- OS.write('\0');
- }
- OS.write('\0');
-
- for (auto File : LineTable.Files)
- yaml2FileEntry(OS, File);
- OS.write('\0');
-
- for (auto Op : LineTable.Opcodes) {
- writeInteger((uint8_t)Op.Opcode, OS, DI.IsLittleEndian);
- if (Op.Opcode == 0) {
- encodeULEB128(Op.ExtLen, OS);
- writeInteger((uint8_t)Op.SubOpcode, OS, DI.IsLittleEndian);
- switch (Op.SubOpcode) {
- case dwarf::DW_LNE_set_address:
- case dwarf::DW_LNE_set_discriminator:
- writeVariableSizedInteger(Op.Data, DI.CompileUnits[0].AddrSize, OS,
- DI.IsLittleEndian);
- break;
- case dwarf::DW_LNE_define_file:
- yaml2FileEntry(OS, Op.FileEntry);
- break;
- case dwarf::DW_LNE_end_sequence:
- break;
- default:
- for (auto OpByte : Op.UnknownOpcodeData)
- writeInteger((uint8_t)OpByte, OS, DI.IsLittleEndian);
- }
- } else if (Op.Opcode < LineTable.OpcodeBase) {
- switch (Op.Opcode) {
- case dwarf::DW_LNS_copy:
- case dwarf::DW_LNS_negate_stmt:
- case dwarf::DW_LNS_set_basic_block:
- case dwarf::DW_LNS_const_add_pc:
- case dwarf::DW_LNS_set_prologue_end:
- case dwarf::DW_LNS_set_epilogue_begin:
- break;
-
- case dwarf::DW_LNS_advance_pc:
- case dwarf::DW_LNS_set_file:
- case dwarf::DW_LNS_set_column:
- case dwarf::DW_LNS_set_isa:
- encodeULEB128(Op.Data, OS);
- break;
-
- case dwarf::DW_LNS_advance_line:
- encodeSLEB128(Op.SData, OS);
- break;
-
- case dwarf::DW_LNS_fixed_advance_pc:
- writeInteger((uint16_t)Op.Data, OS, DI.IsLittleEndian);
- break;
-
- default:
- for (auto OpData : Op.StandardOpcodeData) {
- encodeULEB128(OpData, OS);
- }
- }
- }
- }
- }
-}
yaml2pubsection(OS, Obj.DWARF.PubTypes, Obj.IsLittleEndian);
} else if (0 == strncmp(&Sec.sectname[0], "__debug_info", 16)) {
yaml2debug_info(OS, Obj.DWARF);
- } else if (0 == strncmp(&Sec.sectname[0], "__debug_line", 16)) {
- yaml2debug_line(OS, Obj.DWARF);
}
} else {
// Fills section data with 0xDEADBEEF
const llvm::DWARFYAML::PubSection &Sect,
bool IsLittleEndian);
void yaml2debug_info(llvm::raw_ostream &OS, const llvm::DWARFYAML::Data &DI);
-void yaml2debug_line(llvm::raw_ostream &OS, const llvm::DWARFYAML::Data &DI);
#endif