149d3bc91SRichard Lowe /*
207dc1947SRichard Lowe   Copyright (C) 2000,2004 Silicon Graphics, Inc.  All Rights Reserved.
307dc1947SRichard Lowe   Portions Copyright 2002-2010 Sun Microsystems, Inc. All rights reserved.
4*4d9fdb46SRobert Mustacchi   Portions Copyright 2011-2018 David Anderson. All rights reserved.
549d3bc91SRichard Lowe 
649d3bc91SRichard Lowe   This program is free software; you can redistribute it and/or modify it
7*4d9fdb46SRobert Mustacchi   under the terms of version 2.1 of the GNU Lesser General Public License
849d3bc91SRichard Lowe   as published by the Free Software Foundation.
949d3bc91SRichard Lowe 
1049d3bc91SRichard Lowe   This program is distributed in the hope that it would be useful, but
1149d3bc91SRichard Lowe   WITHOUT ANY WARRANTY; without even the implied warranty of
12*4d9fdb46SRobert Mustacchi   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1349d3bc91SRichard Lowe 
1449d3bc91SRichard Lowe   Further, this software is distributed without any warranty that it is
15*4d9fdb46SRobert Mustacchi   free of the rightful claim of any third person regarding infringement
16*4d9fdb46SRobert Mustacchi   or the like.  Any license provided herein, whether implied or
1749d3bc91SRichard Lowe   otherwise, applies only to this software file.  Patent licenses, if
18*4d9fdb46SRobert Mustacchi   any, provided herein do not apply to combinations of this program with
19*4d9fdb46SRobert Mustacchi   other software, or any other product whatsoever.
2049d3bc91SRichard Lowe 
21*4d9fdb46SRobert Mustacchi   You should have received a copy of the GNU Lesser General Public
22*4d9fdb46SRobert Mustacchi   License along with this program; if not, write the Free Software
2307dc1947SRichard Lowe   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301,
2449d3bc91SRichard Lowe   USA.
2549d3bc91SRichard Lowe 
2649d3bc91SRichard Lowe */
2749d3bc91SRichard Lowe 
2849d3bc91SRichard Lowe #include "config.h"
2949d3bc91SRichard Lowe #include "libdwarfdefs.h"
3049d3bc91SRichard Lowe #include "pro_incl.h"
31*4d9fdb46SRobert Mustacchi #include <stddef.h>
32*4d9fdb46SRobert Mustacchi #include "dwarf.h"
33*4d9fdb46SRobert Mustacchi #include "libdwarf.h"
34*4d9fdb46SRobert Mustacchi #include "pro_opaque.h"
35*4d9fdb46SRobert Mustacchi #include "pro_error.h"
36*4d9fdb46SRobert Mustacchi #include "pro_alloc.h"
3749d3bc91SRichard Lowe 
38*4d9fdb46SRobert Mustacchi 
39*4d9fdb46SRobert Mustacchi /*  This routine deallocates all memory, and does some
40*4d9fdb46SRobert Mustacchi     finishing up
41*4d9fdb46SRobert Mustacchi     This is the original version using a badly designed return
42*4d9fdb46SRobert Mustacchi     value approach.
43*4d9fdb46SRobert Mustacchi     Please use dwarf_producer_finish_a() instead.  */
44*4d9fdb46SRobert Mustacchi /*ARGSUSED*/ Dwarf_Unsigned
dwarf_producer_finish(Dwarf_P_Debug dbg,Dwarf_Error * error)4549d3bc91SRichard Lowe dwarf_producer_finish(Dwarf_P_Debug dbg, Dwarf_Error * error)
46*4d9fdb46SRobert Mustacchi {
47*4d9fdb46SRobert Mustacchi     int res = dwarf_producer_finish_a(dbg,error);
48*4d9fdb46SRobert Mustacchi     if (res != DW_DLV_OK) {
49*4d9fdb46SRobert Mustacchi         return DW_DLV_NOCOUNT;
50*4d9fdb46SRobert Mustacchi     }
51*4d9fdb46SRobert Mustacchi     return 0;
52*4d9fdb46SRobert Mustacchi }
53*4d9fdb46SRobert Mustacchi /*  This routine deallocates all memory, and does some
54*4d9fdb46SRobert Mustacchi     finishing up.  New September 2016. */
55*4d9fdb46SRobert Mustacchi int
dwarf_producer_finish_a(Dwarf_P_Debug dbg,Dwarf_Error * error)56*4d9fdb46SRobert Mustacchi dwarf_producer_finish_a(Dwarf_P_Debug dbg, Dwarf_Error * error)
5749d3bc91SRichard Lowe {
5849d3bc91SRichard Lowe     if (dbg->de_version_magic_number != PRO_VERSION_MAGIC) {
59*4d9fdb46SRobert Mustacchi         DWARF_P_DBG_ERROR(dbg, DW_DLE_IA, DW_DLV_ERROR);
6049d3bc91SRichard Lowe     }
6149d3bc91SRichard Lowe 
6207dc1947SRichard Lowe     /* this frees all blocks, then frees dbg. */
6307dc1947SRichard Lowe     _dwarf_p_dealloc_all(dbg);
64*4d9fdb46SRobert Mustacchi     return DW_DLV_OK ;
65*4d9fdb46SRobert Mustacchi }
66*4d9fdb46SRobert Mustacchi 
67*4d9fdb46SRobert Mustacchi /* FIXME: Add stats for debug_line_str. */
68*4d9fdb46SRobert Mustacchi int
dwarf_pro_get_string_stats(Dwarf_P_Debug dbg,Dwarf_Unsigned * str_count,Dwarf_Unsigned * str_total_length,Dwarf_Unsigned * strp_count_debug_str,Dwarf_Unsigned * strp_len_debug_str,Dwarf_Unsigned * strp_reused_count,Dwarf_Unsigned * strp_reused_len,Dwarf_Error * error)69*4d9fdb46SRobert Mustacchi dwarf_pro_get_string_stats(Dwarf_P_Debug dbg,
70*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned * str_count,
71*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned * str_total_length,
72*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned * strp_count_debug_str,
73*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned * strp_len_debug_str,
74*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned * strp_reused_count,
75*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned * strp_reused_len,
76*4d9fdb46SRobert Mustacchi     Dwarf_Error    * error)
77*4d9fdb46SRobert Mustacchi {
78*4d9fdb46SRobert Mustacchi     struct Dwarf_P_Str_stats_s* ps = 0;
79*4d9fdb46SRobert Mustacchi     if (!dbg) {
80*4d9fdb46SRobert Mustacchi         _dwarf_p_error(dbg, error, DW_DLE_IA);
81*4d9fdb46SRobert Mustacchi         return DW_DLV_ERROR;
82*4d9fdb46SRobert Mustacchi     }
83*4d9fdb46SRobert Mustacchi     if (dbg->de_version_magic_number !=PRO_VERSION_MAGIC ) {
84*4d9fdb46SRobert Mustacchi         _dwarf_p_error(dbg, error, DW_DLE_VMM);
85*4d9fdb46SRobert Mustacchi         return DW_DLV_ERROR;
86*4d9fdb46SRobert Mustacchi     }
87*4d9fdb46SRobert Mustacchi     *str_count        = dbg->de_stats.ps_str_count;
88*4d9fdb46SRobert Mustacchi     *str_total_length = dbg->de_stats.ps_str_total_length;
89*4d9fdb46SRobert Mustacchi     ps = &dbg->de_stats.ps_strp;
90*4d9fdb46SRobert Mustacchi     *strp_count_debug_str = ps->ps_strp_count_debug_str;
91*4d9fdb46SRobert Mustacchi     *strp_len_debug_str   = ps->ps_strp_len_debug_str;
92*4d9fdb46SRobert Mustacchi     *strp_reused_count    = ps->ps_strp_reused_count;
93*4d9fdb46SRobert Mustacchi     *strp_reused_len      = ps->ps_strp_reused_len;
94*4d9fdb46SRobert Mustacchi     return DW_DLV_OK;
9549d3bc91SRichard Lowe }
96