blob: 4deccd0df89a01ea367d787827362cc068d66818 [file] [log] [blame]
Ulrich Drepperb08d5a82005-07-26 05:00:05 +00001/* Get attribute from abbreviation record.
2 Copyright (C) 2001, 2002 Red Hat, Inc.
3 Written by Ulrich Drepper <drepper@redhat.com>, 2001.
4
5 This program is Open Source software; you can redistribute it and/or
6 modify it under the terms of the Open Software License version 1.0 as
7 published by the Open Source Initiative.
8
9 You should have received a copy of the Open Software License along
10 with this program; if not, you may obtain a copy of the Open Software
11 License version 1.0 from http://www.opensource.org/licenses/osl.php or
12 by writing the Open Source Initiative c/o Lawrence Rosen, Esq.,
13 3001 King Ranch Road, Ukiah, CA 95482. */
14
15#ifdef HAVE_CONFIG_H
16# include <config.h>
17#endif
18
19#include <dwarf.h>
20#include <stdlib.h>
21
22#include <libdwarfP.h>
23
24
25int
26dwarf_get_abbrev_entry (abbrev, idx, attr_num, form, offset, error)
27 Dwarf_Abbrev abbrev;
28 Dwarf_Signed idx;
29 Dwarf_Half *attr_num;
30 Dwarf_Signed *form;
31 Dwarf_Off *offset;
32 Dwarf_Error *error;
33{
34 Dwarf_Small *attrp;
35 Dwarf_Small *start_attrp;
36 Dwarf_Word attr_name;
37 Dwarf_Word attr_form;
38
39 if (idx < 0)
40 return DW_DLV_NO_ENTRY;
41
42 /* Address in memory. */
43 attrp = abbrev->attrp;
44
45 /* Read the attributes, skip over the ones we don't want. */
46 do
47 {
48 start_attrp = attrp;
49
50 get_uleb128 (attr_name, attrp);
51 get_uleb128 (attr_form, attrp);
52
53 if (attr_name == 0 || attr_form == 0)
54 return DW_DLV_NO_ENTRY;
55 }
56 while (idx-- > 0);
57
58 *attr_num = attr_name;
59 *form = attr_form;
60 *offset = (start_attrp - abbrev->attrp) + abbrev->offset;
61
62 return DW_DLV_OK;
63}