[Ups-cvs] ups/ups ao_dwfutil.c,1.16,1.17
Brought to you by:
ianedwards
From: Tom H. <th...@us...> - 2008-07-29 15:16:13
|
Update of /cvsroot/ups/ups/ups In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv21904 Modified Files: ao_dwfutil.c Log Message: Free DWARF unwind structures properly. Index: ao_dwfutil.c =================================================================== RCS file: /cvsroot/ups/ups/ups/ao_dwfutil.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** ao_dwfutil.c 14 Feb 2007 14:59:48 -0000 1.16 --- ao_dwfutil.c 29 Jul 2008 15:16:10 -0000 1.17 *************** *** 688,708 **** panic("Unsupported address size"); } ! if ((rv = dwarf_get_fde_list(dbg, &cie_data, &cie_count, &fde_data, &fde_count, &err)) == DW_DLV_OK) { - Dwarf_Cie *ciep; - Dwarf_Fde *fdep; Dwarf_Fde fde; ! ! if ((rv = dwarf_get_fde_at_pc(fde_data, *pc, &fde, NULL, NULL, &err)) == DW_DLV_OK) { taddr_t new_fp; taddr_t new_sp; taddr_t new_pc; ! ! if (dwf_unwind_reg(fde, xp, *cfa, *fp, *sp, *pc, DW_FRAME_CFA_COL, cfa) && dwf_unwind_reg(fde, xp, *cfa, *fp, *sp, *pc, ra_col, &new_pc)) { if (!dwf_unwind_reg(fde, xp, *cfa, *fp, *sp, *pc, fp_col, &new_fp)) new_fp = 0; ! ! if (!dwf_unwind_reg(fde, xp, *cfa, *fp, *sp, *pc, sp_col, &new_sp)) new_sp = *cfa; --- 688,706 ---- panic("Unsupported address size"); } ! if ((rv = dwarf_get_fde_list(dbg, &cie_data, &cie_count, &fde_data, &fde_count, &err)) == DW_DLV_OK) { Dwarf_Fde fde; ! ! if ((rv = dwarf_get_fde_at_pc(fde_data, *pc, &fde, NULL, NULL, &err)) == DW_DLV_OK) { taddr_t new_fp; taddr_t new_sp; taddr_t new_pc; ! ! if (dwf_unwind_reg(fde, xp, *cfa, *fp, *sp, *pc, DW_FRAME_CFA_COL, cfa) && dwf_unwind_reg(fde, xp, *cfa, *fp, *sp, *pc, ra_col, &new_pc)) { if (!dwf_unwind_reg(fde, xp, *cfa, *fp, *sp, *pc, fp_col, &new_fp)) new_fp = 0; ! ! if (!dwf_unwind_reg(fde, xp, *cfa, *fp, *sp, *pc, sp_col, &new_sp)) new_sp = *cfa; *************** *** 713,724 **** } ! for (ciep = cie_data; ciep < cie_data + cie_count; ciep++) ! dwarf_dealloc(dbg, *ciep, DW_DLA_CIE); ! ! for (fdep = fde_data; fdep < fde_data + fde_count; fdep++) ! dwarf_dealloc(dbg, *fdep, DW_DLA_FDE); ! ! dwarf_dealloc(dbg, cie_data, DW_DLA_LIST); ! dwarf_dealloc(dbg, fde_data, DW_DLA_LIST); } --- 711,715 ---- } ! dwarf_fde_cie_list_dealloc(dbg, cie_data, cie_count, fde_data, fde_count); } |