1*f3e7f55eSRobert Mustacchi /* 2*f3e7f55eSRobert Mustacchi 3*f3e7f55eSRobert Mustacchi Copyright (C) 2000,2002,2004 Silicon Graphics, Inc. All Rights Reserved. 4*f3e7f55eSRobert Mustacchi Portions Copyright 2002-2010 Sun Microsystems, Inc. All rights reserved. 5*f3e7f55eSRobert Mustacchi Portions Copyright 2008-2010 David Anderson. All rights reserved. 6*f3e7f55eSRobert Mustacchi 7*f3e7f55eSRobert Mustacchi This program is free software; you can redistribute it and/or modify it 8*f3e7f55eSRobert Mustacchi under the terms of version 2.1 of the GNU Lesser General Public License 9*f3e7f55eSRobert Mustacchi as published by the Free Software Foundation. 10*f3e7f55eSRobert Mustacchi 11*f3e7f55eSRobert Mustacchi This program is distributed in the hope that it would be useful, but 12*f3e7f55eSRobert Mustacchi WITHOUT ANY WARRANTY; without even the implied warranty of 13*f3e7f55eSRobert Mustacchi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14*f3e7f55eSRobert Mustacchi 15*f3e7f55eSRobert Mustacchi Further, this software is distributed without any warranty that it is 16*f3e7f55eSRobert Mustacchi free of the rightful claim of any third person regarding infringement 17*f3e7f55eSRobert Mustacchi or the like. Any license provided herein, whether implied or 18*f3e7f55eSRobert Mustacchi otherwise, applies only to this software file. Patent licenses, if 19*f3e7f55eSRobert Mustacchi any, provided herein do not apply to combinations of this program with 20*f3e7f55eSRobert Mustacchi other software, or any other product whatsoever. 21*f3e7f55eSRobert Mustacchi 22*f3e7f55eSRobert Mustacchi You should have received a copy of the GNU Lesser General Public 23*f3e7f55eSRobert Mustacchi License along with this program; if not, write the Free Software 24*f3e7f55eSRobert Mustacchi Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301, 25*f3e7f55eSRobert Mustacchi USA. 26*f3e7f55eSRobert Mustacchi 27*f3e7f55eSRobert Mustacchi Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, 28*f3e7f55eSRobert Mustacchi Mountain View, CA 94043, or: 29*f3e7f55eSRobert Mustacchi 30*f3e7f55eSRobert Mustacchi http://www.sgi.com 31*f3e7f55eSRobert Mustacchi 32*f3e7f55eSRobert Mustacchi For further information regarding this notice, see: 33*f3e7f55eSRobert Mustacchi 34*f3e7f55eSRobert Mustacchi http://oss.sgi.com/projects/GenInfo/NoticeExplan 35*f3e7f55eSRobert Mustacchi 36*f3e7f55eSRobert Mustacchi */ 37*f3e7f55eSRobert Mustacchi 38*f3e7f55eSRobert Mustacchi 39*f3e7f55eSRobert Mustacchi #ifdef HAVE_ELF_H 40*f3e7f55eSRobert Mustacchi #include <elf.h> 41*f3e7f55eSRobert Mustacchi #elif defined(HAVE_LIBELF_H) 42*f3e7f55eSRobert Mustacchi /* On one platform without elf.h this gets Elf32_Rel 43*f3e7f55eSRobert Mustacchi type defined (a required type). */ 44*f3e7f55eSRobert Mustacchi #include <libelf.h> 45*f3e7f55eSRobert Mustacchi #endif 46*f3e7f55eSRobert Mustacchi 47*f3e7f55eSRobert Mustacchi #if defined(sun) 48*f3e7f55eSRobert Mustacchi #include <sys/elf_SPARC.h> 49*f3e7f55eSRobert Mustacchi #include <sys/elf_386.h> 50*f3e7f55eSRobert Mustacchi #endif 51*f3e7f55eSRobert Mustacchi 52*f3e7f55eSRobert Mustacchi /* The target address is given: the place in the source integer 53*f3e7f55eSRobert Mustacchi is to be determined. 54*f3e7f55eSRobert Mustacchi */ 55*f3e7f55eSRobert Mustacchi #ifdef WORDS_BIGENDIAN 56*f3e7f55eSRobert Mustacchi #define WRITE_UNALIGNED(dbg,dest,source, srclength,len_out) \ 57*f3e7f55eSRobert Mustacchi { \ 58*f3e7f55eSRobert Mustacchi dbg->de_copy_word(dest, \ 59*f3e7f55eSRobert Mustacchi ((char *)source) +srclength-len_out, \ 60*f3e7f55eSRobert Mustacchi len_out) ; \ 61*f3e7f55eSRobert Mustacchi } 62*f3e7f55eSRobert Mustacchi 63*f3e7f55eSRobert Mustacchi 64*f3e7f55eSRobert Mustacchi #else /* LITTLE ENDIAN */ 65*f3e7f55eSRobert Mustacchi 66*f3e7f55eSRobert Mustacchi #define WRITE_UNALIGNED(dbg,dest,source, srclength,len_out) \ 67*f3e7f55eSRobert Mustacchi { \ 68*f3e7f55eSRobert Mustacchi dbg->de_copy_word( (dest) , \ 69*f3e7f55eSRobert Mustacchi ((char *)source) , \ 70*f3e7f55eSRobert Mustacchi len_out) ; \ 71*f3e7f55eSRobert Mustacchi } 72*f3e7f55eSRobert Mustacchi #endif 73*f3e7f55eSRobert Mustacchi 74*f3e7f55eSRobert Mustacchi 75*f3e7f55eSRobert Mustacchi #if defined(sparc) && defined(sun) 76*f3e7f55eSRobert Mustacchi #define REL32 Elf32_Rela 77*f3e7f55eSRobert Mustacchi #define REL64 Elf64_Rela 78*f3e7f55eSRobert Mustacchi #define REL_SEC_PREFIX ".rela" 79*f3e7f55eSRobert Mustacchi #else 80*f3e7f55eSRobert Mustacchi #define REL32 Elf32_Rel 81*f3e7f55eSRobert Mustacchi #define REL64 Elf64_Rel 82*f3e7f55eSRobert Mustacchi #define REL_SEC_PREFIX ".rel" 83*f3e7f55eSRobert Mustacchi #endif 84*f3e7f55eSRobert Mustacchi 85*f3e7f55eSRobert Mustacchi #include "dwarf.h" 86*f3e7f55eSRobert Mustacchi #include "libdwarf.h" 87*f3e7f55eSRobert Mustacchi 88*f3e7f55eSRobert Mustacchi #include "pro_opaque.h" 89*f3e7f55eSRobert Mustacchi #include "pro_error.h" 90*f3e7f55eSRobert Mustacchi #include "pro_util.h" 91*f3e7f55eSRobert Mustacchi #include "pro_encode_nm.h" 92*f3e7f55eSRobert Mustacchi #include "pro_alloc.h" 93