1 /* Return string associated with given attribute. 2 Copyright (C) 2003 Red Hat, Inc. 3 Written by Ulrich Drepper <drepper (at) redhat.com>, 2003. 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 "libdwP.h" 20 #include <string.h> 21 22 23 int 24 dwarf_haschildren (die) 25 Dwarf_Die *die; 26 { 27 /* Find the abbreviation entry. */ 28 Dwarf_Abbrev *abbrevp = die->abbrev; 29 if (abbrevp != (Dwarf_Abbrev *) -1l) 30 { 31 unsigned char *readp = (unsigned char *) die->addr; 32 33 /* First we have to get the abbreviation code so that we can decode 34 the data in the DIE. */ 35 unsigned int abbrev_code; 36 get_uleb128 (abbrev_code, readp); 37 38 abbrevp = __libdw_findabbrev (die->cu, abbrev_code); 39 die->abbrev = abbrevp ?: (Dwarf_Abbrev *) -1l; 40 } 41 if (unlikely (die->abbrev == (Dwarf_Abbrev *) -1l)) 42 { 43 __libdw_seterrno (DWARF_E_INVALID_DWARF); 44 return 0; 45 } 46 47 return die->abbrev->has_children; 48 } 49