int i_cnt;
char *pstr_name = NULL;
- if( DEBUG_DWARF_STR_AT_MAX >= dw_attr ) {
+ if( LIBGOBLIN_DWARF_ATTR_DEF_MAX >= dw_attr ) {
pstr_name = gpstr_dwarf_attribute_name[ dw_attr ];
goto goto_Debug_DWARF_GetAttributeName_post;
}
- for( i_cnt = 0; i_cnt < DEBUG_DWARF_STR_AT_EXT_MAX; i_cnt++ ) {
+ for( i_cnt = 0; i_cnt < LIBGOBLIN_DWARF_ATTR_EXT_MAX; i_cnt++ ) {
if( dw_attr == gt_dwarf_str_at_ext[ i_cnt ].dw_at ) {
pstr_name = gt_dwarf_str_at_ext[ i_cnt ].pstr_atname;
break;
DWord dw_at;
} LibGoblin_Debug_DWARF_Str_ATExtension;
-#define DEBUG_DWARF_STR_AT_MAX 0x6f
-#define DEBUG_DWARF_STR_AT_EXT_MAX 53
+//#define DEBUG_DWARF_STR_AT_MAX 0x6f
+//#define DEBUG_DWARF_STR_AT_EXT_MAX 53
#ifndef DRD64_SRC_LIBGOBLIN_DEBUG_DWARF_STR
extern char gstr_dwarf_attribute[ 64 ];
extern LibGoblin_Debug_DWARF_Str_ATExtension
- gt_dwarf_str_at_ext[ DEBUG_DWARF_STR_AT_EXT_MAX + 1 ];
- extern char *gpstr_dwarf_attribute_name[ DEBUG_DWARF_STR_AT_MAX + 1 ];
+ gt_dwarf_str_at_ext[ LIBGOBLIN_DWARF_ATTR_EXT_MAX + 1 ];
+ extern char *gpstr_dwarf_attribute_name[ LIBGOBLIN_DWARF_ATTR_DEF_MAX + 1 ];
#else
char gstr_dwarf_attribute[ 64 ];
- char *gpstr_dwarf_attribute_name[ DEBUG_DWARF_STR_AT_MAX + 1 ] = {
+ char *gpstr_dwarf_attribute_name[ LIBGOBLIN_DWARF_ATTR_DEF_MAX + 1 ] = {
"none_AT(ENDorERROR)", /* 0x00 */
"DW_AT_sibling", /* 0x01 */
"DW_AT_location", /* 0x02 */
// #define DW_AT_lo_user 0x2000
// #define DW_AT_hi_user 0x3fff
LibGoblin_Debug_DWARF_Str_ATExtension
- gt_dwarf_str_at_ext[ DEBUG_DWARF_STR_AT_EXT_MAX + 1 ] = {
+ gt_dwarf_str_at_ext[ LIBGOBLIN_DWARF_ATTR_EXT_MAX + 1 ] = {
{ "DW_AT_sf_names", 0x2101 }, // GNU extensions.
{ "DW_AT_src_info", 0x2102 }, // GNU extensions.
{ "DW_AT_mac_info", 0x2103 }, // GNU extensions.
LibGoblin_DWARF_DIEValue *p_val,
Byte *pb_info,
QWord *pqw_remains,
+ //DWARF_AbbrevEntry *p_abbrev,
DWord dw_format,
LibGoblin_BinaryInfo *p_binfo,
LibGoblin_DWARF_Info_CUHeader *p_cuheader )
{
+/*
+ LibGoblin_DWARF_DIEValue *p_val,
+
+ // Read Debug Information Entry (DIE) ---
+ memset( p_infoval, 0x00, sizeof( LibGoblin_DWARF_DIEValue ) * p_abbrev->i_items );
+ p_val = p_infoval;
+ memset( p_binfo->dwarf.t_attr, 0x00, sizeof( p_binfo->dwarf.t_attr) );
+ for( i_cnt = 0; i_cnt < p_abbrev->i_items; i_cnt++, p_val++ ) {
+ dw_attribute = p_abbrev->dw_attribute[ i_cnt ];
+ dw_format = p_abbrev->dw_format[ i_cnt ];
+*/
switch( dw_format ) {
case DW_FORM_addr: // 0x01: address
pb_info = DWARF_AttrForm_ReadFormat_Address(
default:
break;
}
+// }
return pb_info;
}
t_cuheader.qw_abbrev_offset,
t_cuheader.b_pointersize);
-
// Read & Process DWARF info TAG ---
i_childlv = 0;
do {
memset( p_infoval, 0x00, sizeof( LibGoblin_DWARF_DIEValue ) * p_arvnow->i_items );
p_val = p_infoval;
+ memset( p_binfo->dwarf.t_attr, 0x00, sizeof( p_binfo->dwarf.t_attr) );
+
for( i_cnt = 0; i_cnt < p_arvnow->i_items; i_cnt++, p_val++ ) {
dw_attribute = p_arvnow->dw_attribute[ i_cnt ];
dw_format = p_arvnow->dw_format[ i_cnt ];
- //pb_info = DWARF_Info_ReadFormat_Data(
- // p_val, pb_info, &qw_size_cu, dw_format, p_binfo, &t_cuheader );
pb_info = DWARF_AttrForm_ReadFormat_Data(
p_val, pb_info, &qw_size_cu, dw_format, p_binfo, &t_cuheader );
+
+
}
if( 0x00 != p_arvnow->b_children ) { i_childlv++; }
#define LIBGOBLIN_BINFO_FILE_DEBUG 2
#define LIBGOBLIN_BINFO_FILE_LIBRARY -1
+#define LIBGOBLIN_DWARF_ATTR_DEF_MAX 0x6f
+#define LIBGOBLIN_DWARF_ATTR_EXT_MAX 53
+#define LIBGOBLIN_DWARF_ATTR_MAX (LIBGOBLIN_DWARF_ATTR_DEF_MAX + LIBGOBLIN_DWARF_ATTR_EXT_MAX)
+
+
typedef struct {
/* BinaryInfo Struct ID */
int i_id;
struct {
int i_maxvals;
LibGoblin_DWARF_DIEValue *p_infoval;
+
+ LibGoblin_DWARF_Attribute t_attr[LIBGOBLIN_DWARF_ATTR_MAX+1];
} dwarf;