summaryrefslogtreecommitdiffstats
path: root/libdwarf/dwarf_getconstant.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdwarf/dwarf_getconstant.c')
-rw-r--r--libdwarf/dwarf_getconstant.c137
1 files changed, 0 insertions, 137 deletions
diff --git a/libdwarf/dwarf_getconstant.c b/libdwarf/dwarf_getconstant.c
deleted file mode 100644
index cfffdbef..00000000
--- a/libdwarf/dwarf_getconstant.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Return constant value of given attribute type associated with die.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
- This file is part of Red Hat elfutils.
- Written by Ulrich Drepper <[email protected]>, 2000.
-
- Red Hat elfutils is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by the
- Free Software Foundation; version 2 of the License.
-
- Red Hat elfutils is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with Red Hat elfutils; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
-
- Red Hat elfutils is an included package of the Open Invention Network.
- An included package of the Open Invention Network is a package for which
- Open Invention Network licensees cross-license their patents. No patent
- license is granted, either expressly or impliedly, by designation as an
- included package. Should you wish to participate in the Open Invention
- Network licensing program, please visit www.openinventionnetwork.com
- <http://www.openinventionnetwork.com>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <dwarf.h>
-
-#include <libdwarfP.h>
-
-
-int
-__libdwarf_getconstant (die, name, return_size, error)
- Dwarf_Die die;
- Dwarf_Half name;
- Dwarf_Unsigned *return_size;
- Dwarf_Error *error;
-{
- Dwarf_Debug dbg = die->cu->dbg;
- Dwarf_Small *die_addr;
- Dwarf_Word u128;
- Dwarf_Abbrev abbrev;
- Dwarf_Small *attrp;
-
- /* Address of the given die. */
- die_addr = die->addr;
-
- /* Get abbrev code. */
- get_uleb128 (u128, die_addr);
- /* And get the abbreviation itself. */
- abbrev = __libdwarf_get_abbrev (dbg, die->cu, u128, error);
- if (abbrev == NULL)
- return DW_DLV_ERROR;
-
- /* This is where the attributes start. */
- attrp = abbrev->attrp;
-
- /* Search the name attribute. */
- while (1)
- {
- Dwarf_Word attr_name;
- Dwarf_Word attr_form;
-
- /* Are we still in bounds? */
- if (unlikely (attrp
- >= ((Dwarf_Small *) dbg->sections[IDX_debug_abbrev].addr
- + dbg->sections[IDX_debug_abbrev].size)))
- {
- __libdwarf_error (dbg, error, DW_E_INVALID_DWARF);
- return DW_DLV_ERROR;
- }
-
- /* Get attribute name and form.
-
- XXX We don't check whether this reads beyond the end of the
- section. */
- get_uleb128 (attr_name, attrp);
- get_uleb128 (attr_form, attrp);
-
- /* We can stop if we found the attribute with value zero. */
- if (attr_name == 0 && attr_form == 0)
- break;
-
- /* Is this the name attribute? */
- if (unlikely (attr_name == name))
- {
- switch (attr_form)
- {
- case DW_FORM_data1:
- *return_size = *die_addr;
- break;
- case DW_FORM_data2:
- *return_size = read_2ubyte_unaligned (dbg, die_addr);
- break;
- case DW_FORM_data4:
- *return_size = read_4ubyte_unaligned (dbg, die_addr);
- break;
- case DW_FORM_data8:
- *return_size = read_8ubyte_unaligned (dbg, die_addr);
- break;
- case DW_FORM_sdata:
- get_sleb128 (u128, die_addr);
- *return_size = u128;
- break;
- case DW_FORM_udata:
- get_uleb128 (u128, die_addr);
- *return_size = u128;
- break;
- default:
- __libdwarf_error (dbg, error, DW_E_NO_CONSTANT);
- return DW_DLV_ERROR;
- }
-
- return DW_DLV_OK;
- }
-
- /* Skip over the rest of this attribute (if there is any). */
- if (attr_form != 0)
- {
- size_t len;
-
- if (unlikely (__libdwarf_form_val_len (dbg, die->cu, attr_form,
- die_addr, &len, error)
- != DW_DLV_OK))
- return DW_DLV_ERROR;
-
- die_addr += len;
- }
- }
-
- /* No such attribute present. */
- return DW_DLV_NO_ENTRY;
-}