static void tp_dwarf_die_offset_given_cu(void) { Dwarf_Debug dbg; Dwarf_Error de; Dwarf_Off cu_offset, cu_dieoff; Dwarf_Unsigned cu_next_offset; int fd; result = TET_UNRESOLVED; TS_DWARF_INIT(dbg, fd, de); cu_offset = 0; TS_DWARF_CU_FOREACH(dbg, cu_next_offset, de) { if (dwarf_get_cu_die_offset_given_cu_header_offset(dbg, cu_offset, &cu_dieoff, &de) != DW_DLV_OK) { tet_printf("dwarf_get_cu_die_offset_given_cu_header" "_offset failed: %s", dwarf_errmsg(de)); result = TET_FAIL; goto done; } TS_CHECK_INT(cu_dieoff); cu_offset = cu_next_offset; } if (result == TET_UNRESOLVED) result = TET_PASS; done: TS_DWARF_FINISH(dbg, de); TS_RESULT(result); }
static void do_checking(Dwarf_Debug dbg, Dwarf_Arange *arange_buf,Dwarf_Signed i, Dwarf_Off cu_die_offset,Dwarf_Bool first_cu, Dwarf_Off cu_die_offset_prev, Dwarf_Die cu_die ) { int dres = 0; Dwarf_Off cuhdroff = 0; Dwarf_Off cudieoff3 = 0; dres = dwarf_get_arange_cu_header_offset( arange_buf[i],&cuhdroff,&err); if (dres == DW_DLV_OK) { Dwarf_Off cudieoff2 = 0; /* Get the CU offset for easy error reporting */ if (first_cu || cu_die_offset != cu_die_offset_prev) { cu_die_offset_prev = cu_die_offset; dres = dwarf_die_offsets(cu_die,&DIE_overall_offset,&DIE_offset,&err); if (dres != DW_DLV_OK) { print_error(dbg, "dwarf_die_offsets", dres, err); } } dres = dwarf_get_cu_die_offset_given_cu_header_offset( dbg,cuhdroff,&cudieoff2,&err); if (dres == DW_DLV_OK) { /* Get the CU offset for easy error reporting */ dwarf_die_offsets(cu_die,&DIE_overall_offset,&DIE_offset,&err); DWARF_CHECK_COUNT(aranges_result,1); if (cudieoff2 != cu_die_offset) { printf("Error, cu_die offsets mismatch, 0x%" DW_PR_DUx " != 0x%" DW_PR_DUx " from arange data", cu_die_offset,cudieoff2); DWARF_CHECK_ERROR(aranges_result, " dwarf_get_cu_die_offset_given_cu..." " gets wrong offset"); } } else { print_error(dbg, "dwarf_get_cu_die_offset_given...", dres, err); } } else { print_error(dbg, "dwarf_get_arange_cu_header_offset", dres, err); } dres = dwarf_get_cu_die_offset(arange_buf[i],&cudieoff3, &err); if (dres == DW_DLV_OK) { DWARF_CHECK_COUNT(aranges_result,1); if (cudieoff3 != cu_die_offset) { printf( "Error, cu_die offsets (b) mismatch , 0x%" DW_PR_DUx " != 0x%" DW_PR_DUx " from arange data", cu_die_offset,cudieoff3); DWARF_CHECK_ERROR(aranges_result, " dwarf_get_cu_die_offset " " gets wrong offset"); } } else { print_error(dbg, "dwarf_get_cu_die_offset failed ", dres,err); } }