xref: /titanic_44/usr/src/tools/ctf/dwarf/common/dwarf_vars.c (revision 07dc1947c362e187fb955d283b692f8769dd5def)
149d3bc91SRichard Lowe /*
249d3bc91SRichard Lowe 
3*07dc1947SRichard Lowe   Copyright (C) 2000,2002,2004,2005 Silicon Graphics, Inc.  All Rights Reserved.
4*07dc1947SRichard Lowe   Portions Copyright (C) 2009-2010 David Anderson. All Rights Reserved.
549d3bc91SRichard Lowe 
649d3bc91SRichard Lowe   This program is free software; you can redistribute it and/or modify it
749d3bc91SRichard Lowe   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
1249d3bc91SRichard Lowe   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1349d3bc91SRichard Lowe 
1449d3bc91SRichard Lowe   Further, this software is distributed without any warranty that it is
1549d3bc91SRichard Lowe   free of the rightful claim of any third person regarding infringement
1649d3bc91SRichard Lowe   or the like.  Any license provided herein, whether implied or
1749d3bc91SRichard Lowe   otherwise, applies only to this software file.  Patent licenses, if
1849d3bc91SRichard Lowe   any, provided herein do not apply to combinations of this program with
1949d3bc91SRichard Lowe   other software, or any other product whatsoever.
2049d3bc91SRichard Lowe 
2149d3bc91SRichard Lowe   You should have received a copy of the GNU Lesser General Public
2249d3bc91SRichard Lowe   License along with this program; if not, write the Free Software
23*07dc1947SRichard Lowe   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301,
2449d3bc91SRichard Lowe   USA.
2549d3bc91SRichard Lowe 
26*07dc1947SRichard Lowe   Contact information:  Silicon Graphics, Inc., 1500 Crittenden Lane,
2749d3bc91SRichard Lowe   Mountain View, CA 94043, or:
2849d3bc91SRichard Lowe 
2949d3bc91SRichard Lowe   http://www.sgi.com
3049d3bc91SRichard Lowe 
3149d3bc91SRichard Lowe   For further information regarding this notice, see:
3249d3bc91SRichard Lowe 
3349d3bc91SRichard Lowe   http://oss.sgi.com/projects/GenInfo/NoticeExplan
3449d3bc91SRichard Lowe 
3549d3bc91SRichard Lowe */
3649d3bc91SRichard Lowe 
3749d3bc91SRichard Lowe 
3849d3bc91SRichard Lowe 
3949d3bc91SRichard Lowe #include "config.h"
4049d3bc91SRichard Lowe #include "dwarf_incl.h"
4149d3bc91SRichard Lowe #include <stdio.h>
4249d3bc91SRichard Lowe #include "dwarf_vars.h"
4349d3bc91SRichard Lowe #include "dwarf_global.h"
4449d3bc91SRichard Lowe 
4549d3bc91SRichard Lowe int
dwarf_get_vars(Dwarf_Debug dbg,Dwarf_Var ** vars,Dwarf_Signed * ret_var_count,Dwarf_Error * error)4649d3bc91SRichard Lowe dwarf_get_vars(Dwarf_Debug dbg,
4749d3bc91SRichard Lowe     Dwarf_Var ** vars,
4849d3bc91SRichard Lowe     Dwarf_Signed * ret_var_count, Dwarf_Error * error)
4949d3bc91SRichard Lowe {
50*07dc1947SRichard Lowe     int res = _dwarf_load_section(dbg, &dbg->de_debug_varnames,error);
5149d3bc91SRichard Lowe     if (res != DW_DLV_OK) {
5249d3bc91SRichard Lowe         return res;
5349d3bc91SRichard Lowe     }
5449d3bc91SRichard Lowe 
55*07dc1947SRichard Lowe     return _dwarf_internal_get_pubnames_like_data(dbg,
56*07dc1947SRichard Lowe         dbg->de_debug_varnames.dss_data,
57*07dc1947SRichard Lowe         dbg->de_debug_varnames.dss_size,
58*07dc1947SRichard Lowe         (Dwarf_Global **) vars, /* Type punning for sections
59*07dc1947SRichard Lowe             with identical format. */
6049d3bc91SRichard Lowe         ret_var_count,
6149d3bc91SRichard Lowe         error,
6249d3bc91SRichard Lowe         DW_DLA_VAR_CONTEXT,
63*07dc1947SRichard Lowe         DW_DLA_VAR,
6449d3bc91SRichard Lowe         DW_DLE_DEBUG_VARNAMES_LENGTH_BAD,
6549d3bc91SRichard Lowe         DW_DLE_DEBUG_VARNAMES_VERSION_ERROR);
6649d3bc91SRichard Lowe }
6749d3bc91SRichard Lowe 
68*07dc1947SRichard Lowe /* Deallocating fully requires deallocating the list
69*07dc1947SRichard Lowe    and all entries.  But some internal data is
70*07dc1947SRichard Lowe    not exposed, so we need a function with internal knowledge.
71*07dc1947SRichard Lowe */
72*07dc1947SRichard Lowe 
73*07dc1947SRichard Lowe void
dwarf_vars_dealloc(Dwarf_Debug dbg,Dwarf_Var * dwgl,Dwarf_Signed count)74*07dc1947SRichard Lowe dwarf_vars_dealloc(Dwarf_Debug dbg, Dwarf_Var * dwgl,
75*07dc1947SRichard Lowe                    Dwarf_Signed count)
76*07dc1947SRichard Lowe {
77*07dc1947SRichard Lowe     _dwarf_internal_globals_dealloc(dbg, (Dwarf_Global *) dwgl,
78*07dc1947SRichard Lowe         count,
79*07dc1947SRichard Lowe         DW_DLA_VAR_CONTEXT,
80*07dc1947SRichard Lowe         DW_DLA_VAR, DW_DLA_LIST);
81*07dc1947SRichard Lowe     return;
82*07dc1947SRichard Lowe }
83*07dc1947SRichard Lowe 
8449d3bc91SRichard Lowe 
8549d3bc91SRichard Lowe int
dwarf_varname(Dwarf_Var var_in,char ** ret_varname,Dwarf_Error * error)8649d3bc91SRichard Lowe dwarf_varname(Dwarf_Var var_in, char **ret_varname, Dwarf_Error * error)
8749d3bc91SRichard Lowe {
8849d3bc91SRichard Lowe     Dwarf_Global var = (Dwarf_Global) var_in;
8949d3bc91SRichard Lowe 
9049d3bc91SRichard Lowe     if (var == NULL) {
9149d3bc91SRichard Lowe         _dwarf_error(NULL, error, DW_DLE_VAR_NULL);
9249d3bc91SRichard Lowe         return (DW_DLV_ERROR);
9349d3bc91SRichard Lowe     }
9449d3bc91SRichard Lowe 
9549d3bc91SRichard Lowe     *ret_varname = (char *) (var->gl_name);
9649d3bc91SRichard Lowe     return DW_DLV_OK;
9749d3bc91SRichard Lowe }
9849d3bc91SRichard Lowe 
9949d3bc91SRichard Lowe 
10049d3bc91SRichard Lowe int
dwarf_var_die_offset(Dwarf_Var var_in,Dwarf_Off * returned_offset,Dwarf_Error * error)10149d3bc91SRichard Lowe dwarf_var_die_offset(Dwarf_Var var_in,
10249d3bc91SRichard Lowe         Dwarf_Off * returned_offset, Dwarf_Error * error)
10349d3bc91SRichard Lowe {
10449d3bc91SRichard Lowe     Dwarf_Global var = (Dwarf_Global) var_in;
10549d3bc91SRichard Lowe 
10649d3bc91SRichard Lowe     return dwarf_global_die_offset(var, returned_offset, error);
10749d3bc91SRichard Lowe 
10849d3bc91SRichard Lowe }
10949d3bc91SRichard Lowe 
11049d3bc91SRichard Lowe 
11149d3bc91SRichard Lowe int
dwarf_var_cu_offset(Dwarf_Var var_in,Dwarf_Off * returned_offset,Dwarf_Error * error)11249d3bc91SRichard Lowe dwarf_var_cu_offset(Dwarf_Var var_in,
11349d3bc91SRichard Lowe                     Dwarf_Off * returned_offset, Dwarf_Error * error)
11449d3bc91SRichard Lowe {
11549d3bc91SRichard Lowe     Dwarf_Global var = (Dwarf_Global) var_in;
11649d3bc91SRichard Lowe 
11749d3bc91SRichard Lowe     return dwarf_global_cu_offset(var, returned_offset, error);
11849d3bc91SRichard Lowe }
11949d3bc91SRichard Lowe 
12049d3bc91SRichard Lowe 
12149d3bc91SRichard Lowe int
dwarf_var_name_offsets(Dwarf_Var var_in,char ** returned_name,Dwarf_Off * die_offset,Dwarf_Off * cu_offset,Dwarf_Error * error)12249d3bc91SRichard Lowe dwarf_var_name_offsets(Dwarf_Var var_in,
12349d3bc91SRichard Lowe         char **returned_name,
12449d3bc91SRichard Lowe         Dwarf_Off * die_offset,
12549d3bc91SRichard Lowe         Dwarf_Off * cu_offset, Dwarf_Error * error)
12649d3bc91SRichard Lowe {
12749d3bc91SRichard Lowe     Dwarf_Global var = (Dwarf_Global) var_in;
12849d3bc91SRichard Lowe 
12949d3bc91SRichard Lowe     return
13049d3bc91SRichard Lowe         dwarf_global_name_offsets(var,
13149d3bc91SRichard Lowe             returned_name, die_offset, cu_offset,
13249d3bc91SRichard Lowe             error);
13349d3bc91SRichard Lowe }
134