int _dwarf_init(Dwarf_Debug dbg, Dwarf_Unsigned pro_flags, Dwarf_Handler errhand, Dwarf_Ptr errarg, Dwarf_Error *error) { int ret; ret = DW_DLE_NONE; /* * Set the error handler fields early, so that the application * is notified of initialization errors. */ dbg->dbg_errhand = errhand; dbg->dbg_errarg = errarg; STAILQ_INIT(&dbg->dbg_cu); STAILQ_INIT(&dbg->dbg_rllist); STAILQ_INIT(&dbg->dbg_aslist); STAILQ_INIT(&dbg->dbg_mslist); TAILQ_INIT(&dbg->dbg_loclist); if (dbg->dbg_mode == DW_DLC_READ || dbg->dbg_mode == DW_DLC_RDWR) { ret = _dwarf_consumer_init(dbg, error); if (ret != DW_DLE_NONE) { _dwarf_deinit(dbg); return (ret); } } if (dbg->dbg_mode == DW_DLC_WRITE || dbg->dbg_mode == DW_DLC_RDWR) { ret = _dwarf_producer_init(dbg, pro_flags, error); if (ret != DW_DLE_NONE) { _dwarf_deinit(dbg); return (ret); } } /* * Initialise internal string table. */ if ((ret = _dwarf_strtab_init(dbg, error)) != DW_DLE_NONE) return (ret); return (DW_DLE_NONE); }
int dwarf_object_finish(Dwarf_Debug dbg, Dwarf_Error *error) { (void) error; /* unused */ if (dbg == NULL) return (DW_DLV_OK); _dwarf_deinit(dbg); free(dbg); return (DW_DLV_OK); }
Dwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug dbg, Dwarf_Error *error) { if (dbg == NULL || dbg->dbg_mode != DW_DLC_WRITE) { DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT); return (DW_DLV_NOCOUNT); } _dwarf_deinit(dbg); free(dbg); return (1); }