#include"drd64_libgoblin.h"
static char gstr_type[256][9] = {
- "NULL",
- "MASTER",
- "PROGHDR",
- "SECTION",
- "FUNCTION",
- "OBJECT",
- "COMMON",
- "TLS",
- "REL",
- "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
-
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
-
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
-
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "", "", ""
+ "NULL", // 0x00
+ "MASTER", // 0x01
+ "PROGRAM", // 0x02
+ "PROGHDR", // 0x03
+ "SECTION", // 0x04
+ "OBJFILE", // 0x05
+ "TYPE:MUL", // 0x06
+ "TYPE:SIG", // 0x07
+
+ "TYPEDEF", // 0x08
+ "FUNCTION", // 0x09
+ "OBJECT", // 0x0a
+ "COMMON", // 0x0b
+ "TLS", // 0x0c
+ "REL", // 0x0d
+ "", // 0x0e
+ "", // 0x0f
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "NONE",
+
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
};
/*====================================================================*/
char str_visibility[32];
LibGoblin_BinaryInfo *p_binfo_origin;
- printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) File{ Offset=%8p, Size=%8ld, FID=%d }\n",
+ printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph File{ Offset=%8p, Size=%8ld, BinFileID=%d }\n",
pstr_space,
p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
- p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_fid );
+ p_obj->dwarf.pb_info,
+ p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_binfile );
// Symbol type - ELFNN_ST_TYPE - st_info
- switch( p_obj->info.symbol.b_type ) {
+ switch( p_obj->elfsym.b_type ) {
case STT_NOTYPE: // 0 - Unspecified type.
strcpy( str_type, "NoType" );
break;
strcpy( str_type, "GNU IFunc" );
break;
default:
- snprintf( str_type, 31, "(%02xh)", p_obj->info.symbol.b_type );
+ snprintf( str_type, 31, "(%02xh)", p_obj->elfsym.b_type );
break;
}
// Symbol Binding - ELFNN_ST_BIND - st_info
- switch( p_obj->info.symbol.b_binding ) {
+ switch( p_obj->elfsym.b_binding ) {
case STB_LOCAL: // 0 - Local symbol
strcpy( str_binding, "Local" );
break;
strcpy( str_binding, "GNU Unique" );
break;
default:
- snprintf( str_binding, 31, "(%02xh)", p_obj->info.symbol.b_binding );
+ snprintf( str_binding, 31, "(%02xh)", p_obj->elfsym.b_binding );
break;
}
// Symbol visibility - ELFNN_ST_VISIBILITY - st_other
- switch( p_obj->info.symbol.b_visibility ) {
+ switch( p_obj->elfsym.b_visibility ) {
case STV_DEFAULT: // 0x00 - Default visibility (see binding).
strcpy( str_visibility, "Default" );
break;
strcpy( str_visibility, "ELIMINATE" );
break;
default:
- snprintf( str_binding, 31, "(%02xh)", p_obj->info.symbol.b_binding );
+ snprintf( str_binding, 31, "(%02xh)", p_obj->elfsym.b_binding );
break;
}
char str_flag[256];
DWord qw_flag;
- printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) File{ Offset=%8p, Size=%8ld, FID=%d }\n",
+ printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph File{ Offset=%8p, Size=%8ld, BinFileID=%d }\n",
pstr_space,
p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
- p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_fid );
+ p_obj->dwarf.pb_info,
+ p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_binfile );
switch( p_obj->info.section.dw_type ) {
char str_flag[8];
DWord dw_flag;
- printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) File{ Offset=%8p, Size=%8ld, FID=%d }\n",
+ printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph File{ Offset=%8p, Size=%8ld, BinFileID=%d }\n",
pstr_space,
p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
- p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_fid );
+ p_obj->dwarf.pb_info,
+ p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_binfile );
switch( p_obj->info.proghdr.dw_type ) {
case PT_NULL:
return;
}
-
+/*--------------------------------------------------------------------*/
+void
+ Debug_ObjectInfo_Print_ProgramFile(
+ LibGoblin_ObjectInfo *p_obj,
+ char *pstr_space,
+ Byte b_level )
+{
+ printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph\n",
+ pstr_space, p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
+ p_obj->dwarf.pb_info );
+
+ printf(" %s\t\t[PROGRAM] BinaryInfo ID= %d\n",
+ pstr_space, p_obj->info.program.i_binfo_id );
+
+ return;
+}
+
+/*--------------------------------------------------------------------*/
+void
+ Debug_ObjectInfo_Print_ObjectFile(
+ LibGoblin_ObjectInfo *p_obj,
+ char *pstr_space,
+ Byte b_level )
+{
+ printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph\n",
+ pstr_space, p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
+ p_obj->dwarf.pb_info );
+ printf(" %s\t\t[OBJFILE] Abbrev Nums=%3d (%8ph) CU Header: size=%ld, ver=%d, pointer size=%d\n",
+ pstr_space, p_obj->info.objfile.i_abbrevs, p_obj->info.objfile.p_abbrev,
+ p_obj->info.objfile.t_cuheader.qw_unitsize,
+ p_obj->info.objfile.t_cuheader.w_version,
+ p_obj->info.objfile.t_cuheader.b_pointersize );
+
+ return;
+}
+
+/*--------------------------------------------------------------------*/
+void
+ Debug_ObjectInfo_Print_Type_Single(
+ LibGoblin_ObjectInfo *p_obj,
+ char *pstr_space,
+ Byte b_level )
+{
+ printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph\n",
+ pstr_space, p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
+ p_obj->dwarf.pb_info );
+ printf(" %s\t\t[TYPE(Single)] size= %u, encoding= %xh, BitOffset=%d, BitSize=%d, Endianity=%x\n",
+ pstr_space, p_obj->info.type.dw_size, p_obj->info.type.b_encoding,
+ p_obj->info.type.b_bit_offset, p_obj->info.type.b_bit_size,
+ p_obj->info.type.b_endianity );
+ printf(" %s\t\t[TYPE(Single)] Link Addr= %8ph -> ObjID= %d\n",
+ pstr_space, p_obj->info.type.p_dwtype, p_obj->info.type.i_objid_type );
+
+ return;
+}
+
+/*--------------------------------------------------------------------*/
+void
+ Debug_ObjectInfo_Print_Type_Multi(
+ LibGoblin_ObjectInfo *p_obj,
+ char *pstr_space,
+ Byte b_level )
+{
+ printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph\n",
+ pstr_space, p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
+ p_obj->dwarf.pb_info );
+
+ return;
+}
+
+/*--------------------------------------------------------------------*/
+void
+ Debug_ObjectInfo_Print_Typedef(
+ LibGoblin_ObjectInfo *p_obj,
+ char *pstr_space,
+ Byte b_level )
+{
+ printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph\n",
+ pstr_space, p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
+ p_obj->dwarf.pb_info );
+ printf(" %s\t\t[TYPEDEF] Link Addr= %8ph -> ObjID= %d\n",
+ pstr_space, p_obj->info.type.p_dwtype, p_obj->info.type.i_objid_type );
+
+ return;
+}
+
/*====================================================================*/
/*--------------------------------------------------------------------*/
void
int i_len,
Byte b_level )
{
-
// Set Space String ---
if( 0 < i_depth ) {
*(pstr_space + i_len - 2) = '+';
else { strcat( pstr_space, " " ); }
switch( p_obj->b_type ) {
+ case OBJINFO_TYPE_PROGRAM:
+ Debug_ObjectInfo_Print_ProgramFile( p_obj, pstr_space, b_level );
+ break;
+
case OBJINFO_TYPE_PROGHDR:
Debug_ObjectInfo_Print_ProgramHeader( p_obj, pstr_space, b_level );
break;
Debug_ObjectInfo_Print_Section( p_obj, pstr_space, b_level );
break;
+ case OBJINFO_TYPE_OBJFILE:
+ Debug_ObjectInfo_Print_ObjectFile( p_obj, pstr_space, b_level );
+ break;
+
+ case OBJINFO_TYPE_TYPE_SINGLE:
+ Debug_ObjectInfo_Print_Type_Single( p_obj, pstr_space, b_level );
+ break;
+
+ case OBJINFO_TYPE_TYPE_MULTI:
+ Debug_ObjectInfo_Print_Type_Multi( p_obj, pstr_space, b_level );
+ break;
+
+ case OBJINFO_TYPE_TYPEDEF:
+ Debug_ObjectInfo_Print_Typedef( p_obj, pstr_space, b_level );
+ break;
+
case OBJINFO_TYPE_FUNCTION:
Debug_ObjectInfo_Print_Function( p_obj, pstr_space, b_level );
break;
default:
break;
}
+
+ if( NO_SRC != p_obj->i_srcid ) {
+ printf(" %s\t\t[SrcFile] SrcFileID= %d, Line= %u\n",
+ pstr_space, p_obj->i_srcid, p_obj->dw_srcline );
+ }
+
printf(" %s\n", pstr_space );
*(pstr_space + i_len) = '\0';