1 /* Return signed constant represented by 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 <dwarf.h> 20 #include "libdwP.h" 21 22 23 int 24 dwarf_formsdata (attr, return_sval) 25 Dwarf_Attribute *attr; 26 Dwarf_Sword *return_sval; 27 { 28 if (attr == NULL) 29 return -1; 30 31 unsigned int u128; 32 unsigned char *datap; 33 34 switch (attr->form) 35 { 36 case DW_FORM_data1: 37 *return_sval = *attr->valp; 38 break; 39 40 case DW_FORM_data2: 41 *return_sval = read_2ubyte_unaligned (attr->cu->dbg, attr->valp); 42 break; 43 44 case DW_FORM_data4: 45 *return_sval = read_4ubyte_unaligned (attr->cu->dbg, attr->valp); 46 break; 47 48 case DW_FORM_data8: 49 *return_sval = read_8ubyte_unaligned (attr->cu->dbg, attr->valp); 50 break; 51 52 case DW_FORM_sdata: 53 datap = attr->valp; 54 get_sleb128 (u128, datap); 55 *return_sval = u128; 56 break; 57 58 case DW_FORM_udata: 59 datap = attr->valp; 60 get_uleb128 (u128, datap); 61 *return_sval = u128; 62 break; 63 64 default: 65 __libdw_seterrno (DWARF_E_NO_CONSTANT); 66 return -1; 67 } 68 69 return 0; 70 } 71