mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-24 12:44:59 -07:00
103 lines
5.7 KiB
C
103 lines
5.7 KiB
C
// Copyright (c) 2024 Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
////////////////////////////////
|
|
//~ DWARF Stringize Functions
|
|
|
|
static char dwarf_spaces[] = " ";
|
|
|
|
static void
|
|
dwarf_stringize_info(Arena *arena, String8List *out, DWARF_InfoUnit *unit, U32 indent){
|
|
String8 unit_type_string = dwarf_string_from_unit_type((DWARF_UnitType)unit->unit_type);
|
|
|
|
str8_list_pushf(arena, out, "%.*shdr_off=0x%llx\n", indent, dwarf_spaces, unit->hdr_off);
|
|
str8_list_pushf(arena, out, "%.*sbase_off=0x%llx\n", indent, dwarf_spaces, unit->base_off);
|
|
str8_list_pushf(arena, out, "%.*sopl_off=0x%llx\n", indent, dwarf_spaces, unit->opl_off);
|
|
str8_list_pushf(arena, out, "%.*soffset_size=%u\n", indent, dwarf_spaces,
|
|
unit->offset_size);
|
|
str8_list_pushf(arena, out, "%.*sversion=%u\n", indent, dwarf_spaces, unit->version);
|
|
str8_list_pushf(arena, out, "%.*sunit_type=%.*s\n", indent, dwarf_spaces,
|
|
str8_varg(unit_type_string));
|
|
str8_list_pushf(arena, out, "%.*saddress_size=%u\n", indent, dwarf_spaces,
|
|
unit->address_size);
|
|
str8_list_pushf(arena, out, "%.*sabbrev_off=0x%llx\n", indent, dwarf_spaces,
|
|
unit->abbrev_off);
|
|
|
|
switch (unit->unit_type){
|
|
case DWARF_UnitType_skeleton: case DWARF_UnitType_split_compile:
|
|
{
|
|
str8_list_pushf(arena, out, "%.*sdwo_id=%llu\n", indent, dwarf_spaces, unit->dwo_id);
|
|
}break;
|
|
|
|
case DWARF_UnitType_type: case DWARF_UnitType_split_type:
|
|
{
|
|
str8_list_pushf(arena, out, "%.*stype_signature=%llu\n", indent, dwarf_spaces,
|
|
unit->type_signature);
|
|
str8_list_pushf(arena, out, "%.*stype_offset=%llu\n", indent, dwarf_spaces,
|
|
unit->type_offset);
|
|
}break;
|
|
}
|
|
}
|
|
|
|
static void
|
|
dwarf_stringize_pubnames(Arena *arena, String8List *out, DWARF_PubNamesUnit *unit,
|
|
U32 indent){
|
|
str8_list_pushf(arena, out, "%.*shdr_off=0x%llx\n", indent, dwarf_spaces, unit->hdr_off);
|
|
str8_list_pushf(arena, out, "%.*sbase_off=0x%llx\n", indent, dwarf_spaces, unit->base_off);
|
|
str8_list_pushf(arena, out, "%.*sopl_off=0x%llx\n", indent, dwarf_spaces, unit->opl_off);
|
|
str8_list_pushf(arena, out, "%.*soffset_size=%u\n", indent, dwarf_spaces, unit->offset_size);
|
|
str8_list_pushf(arena, out, "%.*sversion=%u\n", indent, dwarf_spaces, unit->version);
|
|
str8_list_pushf(arena, out, "%.*sinfo_off=0x%llx\n", indent, dwarf_spaces, unit->info_off);
|
|
str8_list_pushf(arena, out, "%.*sinfo_length=0x%llx\n", indent, dwarf_spaces,
|
|
unit->info_length);
|
|
}
|
|
|
|
static void
|
|
dwarf_stringize_names(Arena *arena, String8List *out, DWARF_NamesUnit *unit, U32 indent){
|
|
str8_list_pushf(arena, out, "%.*shdr_off=0x%llx\n", indent, dwarf_spaces, unit->hdr_off);
|
|
str8_list_pushf(arena, out, "%.*sbase_off=0x%llx\n", indent, dwarf_spaces, unit->base_off);
|
|
str8_list_pushf(arena, out, "%.*sopl_off=0x%llx\n", indent, dwarf_spaces, unit->opl_off);
|
|
str8_list_pushf(arena, out, "%.*sversion=%u\n", indent, dwarf_spaces, unit->version);
|
|
str8_list_pushf(arena, out, "%.*scomp_unit_count=%u\n", indent, dwarf_spaces,
|
|
unit->comp_unit_count);
|
|
str8_list_pushf(arena, out, "%.*slocal_type_unit_count=%u\n", indent, dwarf_spaces,
|
|
unit->local_type_unit_count);
|
|
str8_list_pushf(arena, out, "%.*sforeign_type_unit_count=%u\n", indent, dwarf_spaces,
|
|
unit->foreign_type_unit_count);
|
|
str8_list_pushf(arena, out, "%.*sbucket_count=%u\n", indent, dwarf_spaces,
|
|
unit->bucket_count);
|
|
str8_list_pushf(arena, out, "%.*sname_count=%u\n", indent, dwarf_spaces, unit->name_count);
|
|
str8_list_pushf(arena, out, "%.*sabbrev_table_size=%u\n", indent, dwarf_spaces,
|
|
unit->abbrev_table_size);
|
|
str8_list_pushf(arena, out, "%.*saugmentation_string=%.*s\n", indent, dwarf_spaces,
|
|
str8_varg(unit->augmentation_string));
|
|
}
|
|
|
|
static void
|
|
dwarf_stringize_aranges(Arena *arena, String8List *out, DWARF_ArangesUnit *unit, U32 indent){
|
|
str8_list_pushf(arena, out, "%.*shdr_off=0x%llx\n", indent, dwarf_spaces, unit->hdr_off);
|
|
str8_list_pushf(arena, out, "%.*sbase_off=0x%llx\n", indent, dwarf_spaces, unit->base_off);
|
|
str8_list_pushf(arena, out, "%.*sopl_off=0x%llx\n", indent, dwarf_spaces, unit->opl_off);
|
|
str8_list_pushf(arena, out, "%.*sversion=%u\n", indent, dwarf_spaces, unit->version);
|
|
str8_list_pushf(arena, out, "%.*saddress_size=%u\n", indent, dwarf_spaces,
|
|
unit->address_size);
|
|
str8_list_pushf(arena, out, "%.*ssegment_selector_size=%u\n", indent, dwarf_spaces,
|
|
unit->segment_selector_size);
|
|
str8_list_pushf(arena, out, "%.*soffset_size=%u\n", indent, dwarf_spaces, unit->offset_size);
|
|
str8_list_pushf(arena, out, "%.*sinfo_off=0x%llx\n", indent, dwarf_spaces, unit->info_off);
|
|
}
|
|
|
|
static void
|
|
dwarf_stringize_addr(Arena *arena, String8List *out, DWARF_AddrUnit *unit, U32 indent){
|
|
str8_list_pushf(arena, out, "%.*shdr_off=0x%llx\n", indent, dwarf_spaces, unit->hdr_off);
|
|
str8_list_pushf(arena, out, "%.*sbase_off=0x%llx\n", indent, dwarf_spaces, unit->base_off);
|
|
str8_list_pushf(arena, out, "%.*sopl_off=0x%llx\n", indent, dwarf_spaces, unit->opl_off);
|
|
str8_list_pushf(arena, out, "%.*soffset_size=%u\n", indent, dwarf_spaces,
|
|
unit->offset_size);
|
|
str8_list_pushf(arena, out, "%.*sversion=%u\n", indent, dwarf_spaces, unit->dwarf_version);
|
|
str8_list_pushf(arena, out, "%.*saddress_size=%u\n", indent, dwarf_spaces,
|
|
unit->address_size);
|
|
str8_list_pushf(arena, out, "%.*ssegment_selector_size=%u\n", indent, dwarf_spaces,
|
|
unit->segment_selector_size);
|
|
}
|