diff options
Diffstat (limited to 'usr/src/tools/ctf/dwarf/common/dwarf_abbrev.c')
-rw-r--r-- | usr/src/tools/ctf/dwarf/common/dwarf_abbrev.c | 259 |
1 files changed, 0 insertions, 259 deletions
diff --git a/usr/src/tools/ctf/dwarf/common/dwarf_abbrev.c b/usr/src/tools/ctf/dwarf/common/dwarf_abbrev.c deleted file mode 100644 index c2ae361f33..0000000000 --- a/usr/src/tools/ctf/dwarf/common/dwarf_abbrev.c +++ /dev/null @@ -1,259 +0,0 @@ -/* - - Copyright (C) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. - Portions Copyright (C) 2009-2010 David Anderson. All Rights Reserved. - - This program is free software; you can redistribute it and/or modify it - under the terms of version 2.1 of the GNU Lesser General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it would be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - Further, this software is distributed without any warranty that it is - free of the rightful claim of any third person regarding infringement - or the like. Any license provided herein, whether implied or - otherwise, applies only to this software file. Patent licenses, if - any, provided herein do not apply to combinations of this program with - other software, or any other product whatsoever. - - You should have received a copy of the GNU Lesser General Public - License along with this program; if not, write the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301, - USA. - - Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, - Mountain View, CA 94043, or: - - http://www.sgi.com - - For further information regarding this notice, see: - - http://oss.sgi.com/projects/GenInfo/NoticeExplan - -*/ -/* The address of the Free Software Foundation is - Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - Boston, MA 02110-1301, USA. - SGI has moved from the above address. -*/ - - - - -#include "config.h" -#include "dwarf_incl.h" -#include <stdio.h> -#include "dwarf_abbrev.h" - -int -dwarf_get_abbrev(Dwarf_Debug dbg, - Dwarf_Unsigned offset, - Dwarf_Abbrev * returned_abbrev, - Dwarf_Unsigned * length, - Dwarf_Unsigned * abbr_count, Dwarf_Error * error) -{ - Dwarf_Small *abbrev_ptr = 0; - Dwarf_Small *abbrev_section_end = 0; - Dwarf_Half attr = 0; - Dwarf_Half attr_form = 0; - Dwarf_Abbrev ret_abbrev = 0; - Dwarf_Unsigned labbr_count = 0; - Dwarf_Unsigned utmp = 0; - - - if (dbg == NULL) { - _dwarf_error(NULL, error, DW_DLE_DBG_NULL); - return (DW_DLV_ERROR); - } - if (dbg->de_debug_abbrev.dss_data == 0) { - /* Loads abbrev section (and .debug_info as we do those - together). */ - int res = _dwarf_load_debug_info(dbg, error); - - if (res != DW_DLV_OK) { - return res; - } - } - - if (offset >= dbg->de_debug_abbrev.dss_size) { - return (DW_DLV_NO_ENTRY); - } - - - ret_abbrev = (Dwarf_Abbrev) _dwarf_get_alloc(dbg, DW_DLA_ABBREV, 1); - if (ret_abbrev == NULL) { - _dwarf_error(dbg, error, DW_DLE_ALLOC_FAIL); - return (DW_DLV_ERROR); - } - ret_abbrev->ab_dbg = dbg; - if (returned_abbrev == 0 || abbr_count == 0) { - dwarf_dealloc(dbg, ret_abbrev, DW_DLA_ABBREV); - _dwarf_error(dbg, error, DW_DLE_DWARF_ABBREV_NULL); - return (DW_DLV_ERROR); - } - - - *abbr_count = 0; - if (length != NULL) - *length = 1; - - abbrev_ptr = dbg->de_debug_abbrev.dss_data + offset; - abbrev_section_end = - dbg->de_debug_abbrev.dss_data + dbg->de_debug_abbrev.dss_size; - - DECODE_LEB128_UWORD(abbrev_ptr, utmp); - ret_abbrev->ab_code = (Dwarf_Word) utmp; - if (ret_abbrev->ab_code == 0) { - *returned_abbrev = ret_abbrev; - *abbr_count = 0; - if (length) { - *length = 1; - } - return (DW_DLV_OK); - } - - DECODE_LEB128_UWORD(abbrev_ptr, utmp); - ret_abbrev->ab_tag = utmp; - ret_abbrev->ab_has_child = *(abbrev_ptr++); - ret_abbrev->ab_abbrev_ptr = abbrev_ptr; - - do { - Dwarf_Unsigned utmp2; - - DECODE_LEB128_UWORD(abbrev_ptr, utmp2); - attr = (Dwarf_Half) utmp2; - DECODE_LEB128_UWORD(abbrev_ptr, utmp2); - attr_form = (Dwarf_Half) utmp2; - - if (attr != 0) - (labbr_count)++; - - } while (abbrev_ptr < abbrev_section_end && - (attr != 0 || attr_form != 0)); - - if (abbrev_ptr > abbrev_section_end) { - dwarf_dealloc(dbg, ret_abbrev, DW_DLA_ABBREV); - _dwarf_error(dbg, error, DW_DLE_ABBREV_DECODE_ERROR); - return (DW_DLV_ERROR); - } - - if (length != NULL) - *length = abbrev_ptr - dbg->de_debug_abbrev.dss_data - offset; - - *returned_abbrev = ret_abbrev; - *abbr_count = labbr_count; - return (DW_DLV_OK); -} - -int -dwarf_get_abbrev_code(Dwarf_Abbrev abbrev, - Dwarf_Unsigned * returned_code, - Dwarf_Error * error) -{ - if (abbrev == NULL) { - _dwarf_error(NULL, error, DW_DLE_DWARF_ABBREV_NULL); - return (DW_DLV_ERROR); - } - - *returned_code = abbrev->ab_code; - return (DW_DLV_OK); -} - -/* DWARF defines DW_TAG_hi_user as 0xffff so no tag should be - over 16 bits. */ -int -dwarf_get_abbrev_tag(Dwarf_Abbrev abbrev, - Dwarf_Half * returned_tag, Dwarf_Error * error) -{ - if (abbrev == NULL) { - _dwarf_error(NULL, error, DW_DLE_DWARF_ABBREV_NULL); - return (DW_DLV_ERROR); - } - - *returned_tag = abbrev->ab_tag; - return (DW_DLV_OK); -} - - -int -dwarf_get_abbrev_children_flag(Dwarf_Abbrev abbrev, - Dwarf_Signed * returned_flag, - Dwarf_Error * error) -{ - if (abbrev == NULL) { - _dwarf_error(NULL, error, DW_DLE_DWARF_ABBREV_NULL); - return (DW_DLV_ERROR); - } - - *returned_flag = abbrev->ab_has_child; - return (DW_DLV_OK); -} - - -int -dwarf_get_abbrev_entry(Dwarf_Abbrev abbrev, - Dwarf_Signed index, - Dwarf_Half * returned_attr_num, - Dwarf_Signed * form, - Dwarf_Off * offset, Dwarf_Error * error) -{ - Dwarf_Byte_Ptr abbrev_ptr = 0; - Dwarf_Byte_Ptr abbrev_end = 0; - Dwarf_Byte_Ptr mark_abbrev_ptr = 0; - Dwarf_Half attr = 0; - Dwarf_Half attr_form = 0; - - if (index < 0) - return (DW_DLV_NO_ENTRY); - - if (abbrev == NULL) { - _dwarf_error(NULL, error, DW_DLE_DWARF_ABBREV_NULL); - return (DW_DLV_ERROR); - } - - if (abbrev->ab_code == 0) { - return (DW_DLV_NO_ENTRY); - } - - if (abbrev->ab_dbg == NULL) { - _dwarf_error(NULL, error, DW_DLE_DBG_NULL); - return (DW_DLV_ERROR); - } - - abbrev_ptr = abbrev->ab_abbrev_ptr; - abbrev_end = - abbrev->ab_dbg->de_debug_abbrev.dss_data + - abbrev->ab_dbg->de_debug_abbrev.dss_size; - - for (attr = 1, attr_form = 1; - index >= 0 && abbrev_ptr < abbrev_end && (attr != 0 || - attr_form != 0); - index--) { - Dwarf_Unsigned utmp4; - - mark_abbrev_ptr = abbrev_ptr; - DECODE_LEB128_UWORD(abbrev_ptr, utmp4); - attr = (Dwarf_Half) utmp4; - DECODE_LEB128_UWORD(abbrev_ptr, utmp4); - attr_form = (Dwarf_Half) utmp4; - } - - if (abbrev_ptr >= abbrev_end) { - _dwarf_error(abbrev->ab_dbg, error, DW_DLE_ABBREV_DECODE_ERROR); - return (DW_DLV_ERROR); - } - - if (index >= 0) { - return (DW_DLV_NO_ENTRY); - } - - if (form != NULL) - *form = attr_form; - if (offset != NULL) - *offset = mark_abbrev_ptr - abbrev->ab_dbg->de_debug_abbrev.dss_data; - - *returned_attr_num = (attr); - return DW_DLV_OK; -} |