From 052d32d534e7d9891c0549191ff058ff810fc650 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Thu, 19 Jun 2025 11:12:10 -0700 Subject: [PATCH] sketch out dwarf in radbin --- src/radbin/radbin.c | 90 +++++++++++++++++++++++++++++----------- src/raddbg/raddbg_main.c | 10 +---- 2 files changed, 67 insertions(+), 33 deletions(-) diff --git a/src/radbin/radbin.c b/src/radbin/radbin.c index 80752243..fed78b97 100644 --- a/src/radbin/radbin.c +++ b/src/radbin/radbin.c @@ -845,21 +845,33 @@ rb_entry_point(CmdLine *cmdline) #define X(name, name_lower, title) fprintf(stderr, " - " #name_lower "\n"); RDI_DumpSubset_XList #undef X + + fprintf(stderr, "-------------------------------------------------------------------------------\n\n"); + + fprintf(stderr, "DWARF INFO SUBSET NAMES\n\n"); +#define X(name, name_lower, title) fprintf(stderr, " - " #name_lower "\n"); + DW_DumpSubset_XList +#undef X } //- rjf: unpack dump subset flags RDI_DumpSubsetFlags rdi_dump_subset_flags = RDI_DumpSubsetFlag_All; + DW_DumpSubsetFlags dw_dump_subset_flags = DW_DumpSubsetFlag_All; { String8List only_names = cmd_line_strings(cmdline, str8_lit("only")); if(only_names.node_count != 0) { rdi_dump_subset_flags = 0; + dw_dump_subset_flags = 0; } for(String8Node *n = only_names.first; n != 0; n = n->next) { if(0){} #define X(name, name_lower, title) else if(str8_match(n->string, str8_lit(#name_lower), 0)) { rdi_dump_subset_flags |= RDI_DumpSubsetFlag_##name; } RDI_DumpSubset_XList +#undef X +#define X(name, name_lower, title) else if(str8_match(n->string, str8_lit(#name_lower), 0)) { dw_dump_subset_flags |= DW_DumpSubsetFlag_##name; } + DW_DumpSubset_XList #undef X } String8List omit_names = cmd_line_strings(cmdline, str8_lit("omit")); @@ -868,6 +880,9 @@ rb_entry_point(CmdLine *cmdline) if(0){} #define X(name, name_lower, title) else if(str8_match(n->string, str8_lit(#name_lower), 0)) { rdi_dump_subset_flags &= ~RDI_DumpSubsetFlag_##name; } RDI_DumpSubset_XList +#undef X +#define X(name, name_lower, title) else if(str8_match(n->string, str8_lit(#name_lower), 0)) { dw_dump_subset_flags &= ~DW_DumpSubsetFlag_##name; } + DW_DumpSubset_XList #undef X } } @@ -877,11 +892,51 @@ rb_entry_point(CmdLine *cmdline) for(RB_FileNode *n = input_files.first; n != 0; n = n->next) { RB_File *f = n->v; - str8_list_pushf(arena, &output_blobs, "# %S (%S)\n\n", deterministic ? str8_skip_last_slash(f->path) : f->path, f->format ? rb_file_format_display_name_table[f->format] : str8_lit("Unsupported format")); + str8_list_pushf(arena, &output_blobs, "// %S (%S)\n\n", deterministic ? str8_skip_last_slash(f->path) : f->path, f->format ? rb_file_format_display_name_table[f->format] : str8_lit("Unsupported format")); + + //- rjf: dump file info based on format switch(f->format) { default:{}break; + //- rjf: PDB + case RB_FileFormat_PDB: + { + // TODO(rjf) + }break; + + //- rjf: PE + case RB_FileFormat_PE: + { + // TODO(rjf) + }break; + + //- rjf: COFF OBJ + case RB_FileFormat_COFF_OBJ: + { + // TODO(rjf) + }break; + + //- rjf: COFF big OBJ + case RB_FileFormat_COFF_BigOBJ: + { + // TODO(rjf) + }break; + + //- rjf: COFF archive + case RB_FileFormat_COFF_Archive: + case RB_FileFormat_COFF_ThinArchive: + { + // TODO(rjf) + }break; + + //- rjf: ELF + case RB_FileFormat_ELF32: + case RB_FileFormat_ELF64: + { + // TODO(rjf) + }break; + //- rjf: RDI file case RB_FileFormat_RDI: { @@ -902,31 +957,16 @@ rb_entry_point(CmdLine *cmdline) }break; } }break; - - //- rjf: COFF archive - case RB_FileFormat_COFF_Archive: - case RB_FileFormat_COFF_ThinArchive: + } + + //- rjf: dump file extension info + if(f->format_flags & RB_FileFormatFlag_HasDWARF) + { + str8_list_pushf(arena, &output_blobs, "// %S (%S) (DWARF)\n\n", deterministic ? str8_skip_last_slash(f->path) : f->path, f->format ? rb_file_format_display_name_table[f->format] : str8_lit("Unsupported format")); { - // TODO(rjf) - }break; - - //- rjf: COFF big OBJ - case RB_FileFormat_COFF_BigOBJ: - { - // TODO(rjf) - }break; - - //- rjf: COFF OBJ - case RB_FileFormat_COFF_OBJ: - { - // TODO(rjf) - }break; - - //- rjf: PE - case RB_FileFormat_PE: - { - // TODO(rjf) - }break; + + String8List dump = dw_dump_list_from_sections(); + } } } diff --git a/src/raddbg/raddbg_main.c b/src/raddbg/raddbg_main.c index e81cc47f..aac84d3b 100644 --- a/src/raddbg/raddbg_main.c +++ b/src/raddbg/raddbg_main.c @@ -226,10 +226,7 @@ #include "pdb/pdb.h" #include "pdb/pdb_parse.h" #include "pdb/pdb_stringize.h" -#include "dwarf/dwarf.h" -#include "dwarf/dwarf_parse.h" -#include "dwarf/dwarf_coff.h" -#include "dwarf/dwarf_elf.h" +#include "dwarf/dwarf_inc.h" #include "rdi_from_coff/rdi_from_coff.h" #include "rdi_from_elf/rdi_from_elf.h" #include "rdi_from_pdb/rdi_from_pdb.h" @@ -279,10 +276,7 @@ #include "pdb/pdb.c" #include "pdb/pdb_parse.c" #include "pdb/pdb_stringize.c" -#include "dwarf/dwarf.c" -#include "dwarf/dwarf_parse.c" -#include "dwarf/dwarf_coff.c" -#include "dwarf/dwarf_elf.c" +#include "dwarf/dwarf_inc.c" #include "rdi_from_coff/rdi_from_coff.c" #include "rdi_from_elf/rdi_from_elf.c" #include "rdi_from_pdb/rdi_from_pdb.c"