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