libelf-0.8.13.orig/0000755000000000000000000000000011351553647012507 5ustar rootrootlibelf-0.8.13.orig/VERSION0000644000000000000000000000000711273302621013537 0ustar rootroot0.8.13 libelf-0.8.13.orig/config.h.in0000644000000000000000000000762311015476702014533 0ustar rootroot/* config.h.in. Generated automatically from configure.in by autoheader. */ /* Define to empty if the keyword does not work. */ #undef const /* Define if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to `long' if doesn't define. */ #undef off_t /* Define to `unsigned' if doesn't define. */ #undef size_t /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if you want to include extra debugging code */ #undef ENABLE_DEBUG /* Define if you want to support extended ELF formats */ #undef ENABLE_EXTENDED_FORMAT /* Define if you want ELF format sanity checks by default */ #undef ENABLE_SANITY_CHECKS /* Define if memmove() does not copy overlapping arrays correctly */ #undef HAVE_BROKEN_MEMMOVE /* Define if you have the catgets function. */ #undef HAVE_CATGETS /* Define if you have the dgettext function. */ #undef HAVE_DGETTEXT /* Define if you have the memset function. */ #undef HAVE_MEMSET /* Define if struct nlist is declared in or */ #undef HAVE_STRUCT_NLIST_DECLARATION /* Define if Elf32_Dyn is declared in */ #undef __LIBELF_NEED_LINK_H /* Define if Elf32_Dyn is declared in */ #undef __LIBELF_NEED_SYS_LINK_H /* Define to `' or `' if one of them is present */ #undef __LIBELF_HEADER_ELF_H /* Define if you want 64-bit support (and your system supports it) */ #undef __LIBELF64 /* Define if you want 64-bit support, and are running IRIX */ #undef __LIBELF64_IRIX /* Define if you want 64-bit support, and are running Linux */ #undef __LIBELF64_LINUX /* Define if you want symbol versioning (and your system supports it) */ #undef __LIBELF_SYMBOL_VERSIONS /* Define if symbol versioning uses Sun section type (SHT_SUNW_*) */ #undef __LIBELF_SUN_SYMBOL_VERSIONS /* Define if symbol versioning uses GNU section types (SHT_GNU_*) */ #undef __LIBELF_GNU_SYMBOL_VERSIONS /* Define to a 64-bit signed integer type if one exists */ #undef __libelf_i64_t /* Define to a 64-bit unsigned integer type if one exists */ #undef __libelf_u64_t /* Define to a 32-bit signed integer type if one exists */ #undef __libelf_i32_t /* Define to a 32-bit unsigned integer type if one exists */ #undef __libelf_u32_t /* Define to a 16-bit signed integer type if one exists */ #undef __libelf_i16_t /* Define to a 16-bit unsigned integer type if one exists */ #undef __libelf_u16_t /* The number of bytes in a __int64. */ #undef SIZEOF___INT64 /* The number of bytes in a int. */ #undef SIZEOF_INT /* The number of bytes in a long. */ #undef SIZEOF_LONG /* The number of bytes in a long long. */ #undef SIZEOF_LONG_LONG /* The number of bytes in a short. */ #undef SIZEOF_SHORT /* Define if you have the ftruncate function. */ #undef HAVE_FTRUNCATE /* Define if you have the getpagesize function. */ #undef HAVE_GETPAGESIZE /* Define if you have the memcmp function. */ #undef HAVE_MEMCMP /* Define if you have the memcpy function. */ #undef HAVE_MEMCPY /* Define if you have the memmove function. */ #undef HAVE_MEMMOVE /* Define if you have the memset function. */ #undef HAVE_MEMSET /* Define if you have the header file. */ #undef HAVE_AR_H /* Define if you have the header file. */ #undef HAVE_ELF_H /* Define if you have the header file. */ #undef HAVE_FCNTL_H /* Define if you have the header file. */ #undef HAVE_GELF_H /* Define if you have the header file. */ #undef HAVE_LIBELF_H /* Define if you have the header file. */ #undef HAVE_LINK_H /* Define if you have the header file. */ #undef HAVE_NLIST_H /* Define if you have the header file. */ #undef HAVE_STDINT_H /* Define if you have the header file. */ #undef HAVE_SYS_ELF_H /* Define if you have the header file. */ #undef HAVE_SYS_LINK_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H libelf-0.8.13.orig/config.sub0000755000000000000000000007467010243651645014504 0ustar rootroot#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2004-03-12' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file 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; either version 2 of the License, or # (at your option) any later version. # # This program 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 this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m32rle | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | msp430-* \ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nv1) basic_machine=nv1-cray os=-unicosmp ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libelf-0.8.13.orig/acconfig.h0000644000000000000000000000561311015476664014436 0ustar rootroot/* * acconfig.h - Special definitions for libelf, processed by autoheader. * Copyright (C) 1995 - 2001, 2004, 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ /* @(#) $Id: acconfig.h,v 1.16 2008/05/23 08:17:56 michael Exp $ */ /* Define if you want to include extra debugging code */ #undef ENABLE_DEBUG /* Define if you want to support extended ELF formats */ #undef ENABLE_EXTENDED_FORMAT /* Define if you want ELF format sanity checks by default */ #undef ENABLE_SANITY_CHECKS /* Define if memmove() does not copy overlapping arrays correctly */ #undef HAVE_BROKEN_MEMMOVE /* Define if you have the catgets function. */ #undef HAVE_CATGETS /* Define if you have the dgettext function. */ #undef HAVE_DGETTEXT /* Define if you have the memset function. */ #undef HAVE_MEMSET /* Define if struct nlist is declared in or */ #undef HAVE_STRUCT_NLIST_DECLARATION /* Define if Elf32_Dyn is declared in */ #undef __LIBELF_NEED_LINK_H /* Define if Elf32_Dyn is declared in */ #undef __LIBELF_NEED_SYS_LINK_H /* Define to `' or `' if one of them is present */ #undef __LIBELF_HEADER_ELF_H /* Define if you want 64-bit support (and your system supports it) */ #undef __LIBELF64 /* Define if you want 64-bit support, and are running IRIX */ #undef __LIBELF64_IRIX /* Define if you want 64-bit support, and are running Linux */ #undef __LIBELF64_LINUX /* Define if you want symbol versioning (and your system supports it) */ #undef __LIBELF_SYMBOL_VERSIONS /* Define if symbol versioning uses Sun section type (SHT_SUNW_*) */ #undef __LIBELF_SUN_SYMBOL_VERSIONS /* Define if symbol versioning uses GNU section types (SHT_GNU_*) */ #undef __LIBELF_GNU_SYMBOL_VERSIONS /* Define to a 64-bit signed integer type if one exists */ #undef __libelf_i64_t /* Define to a 64-bit unsigned integer type if one exists */ #undef __libelf_u64_t /* Define to a 32-bit signed integer type if one exists */ #undef __libelf_i32_t /* Define to a 32-bit unsigned integer type if one exists */ #undef __libelf_u32_t /* Define to a 16-bit signed integer type if one exists */ #undef __libelf_i16_t /* Define to a 16-bit unsigned integer type if one exists */ #undef __libelf_u16_t libelf-0.8.13.orig/install-sh0000755000000000000000000000421210243651645014506 0ustar rootroot#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5; it is not part of GNU. # # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" instcmd="$mvprog" chmodcmd="" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; *) if [ x"$src" = x ] then src=$1 else dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` fi # Make a temp file name in the proper directory. dstdir=`dirname $dst` dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp # and set any options; do chmod last to preserve setuid bits if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi # Now rename the file to the real destination. $doit $rmcmd $dst $doit $mvcmd $dsttmp $dst exit 0 libelf-0.8.13.orig/aclocal.m40000644000000000000000000002224511015476664014354 0ustar rootroot# aclocal.m4 - Local additions to Autoconf macros. # Copyright (C) 1995 - 2006 Michael Riepe # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # @(#) $Id: aclocal.m4,v 1.28 2008/05/23 08:17:56 michael Exp $ AC_PREREQ(2.13) dnl mr_PACKAGE(package-name) AC_DEFUN(mr_PACKAGE, [changequote(<<, >>)dnl changequote([, ])dnl PACKAGE=$1 VERSION=`cat $srcdir/VERSION` AC_SUBST(PACKAGE) AC_SUBST(VERSION) AC_ARG_ENABLE(maintainer-mode, [ --enable-maintainer-mode enable maintainer-specific make rules (default: auto)], [mr_enable_maintainer_mode="$enableval"], [case :${I_AM_THE_MAINTAINER_OF}: in *:$1:*) mr_enable_maintainer_mode=yes;; *) mr_enable_maintainer_mode=no;; esac]) if test x"$mr_enable_maintainer_mode" = x"yes"; then MAINT= else MAINT='maintainer-only-' fi AC_SUBST(MAINT) ]) AC_DEFUN(mr_ENABLE_NLS, [ AC_PROVIDE([$0]) # Needed for `make dist' even if NLS is disabled. GMOFILES= MSGFILES= POFILES= for mr_lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $mr_lang.gmo" MSGFILES="$MSGFILES $mr_lang.msg" POFILES="$POFILES $mr_lang.po" done AC_SUBST(GMOFILES) AC_SUBST(MSGFILES) AC_SUBST(POFILES) AC_MSG_CHECKING([whether NLS is requested]) AC_ARG_ENABLE(nls, [ --enable-nls use Native Language Support (default: yes)], [mr_enable_nls="$enableval"], [mr_enable_nls=yes]) AC_MSG_RESULT($mr_enable_nls) CATOBJEXT= INSTOBJEXT= localedir= if test "$mr_enable_nls" = yes; then mr_PATH=`echo ":$PATH" | sed -e 's,:[^:]*openwin[^:]*,,g' -e 's,^:,,'` AC_CACHE_CHECK([for dgettext], mr_cv_func_dgettext, [ AC_TRY_LINK([#include ], [char *s = dgettext("", ""); return 0], [mr_cv_func_dgettext=yes], [mr_cv_func_dgettext=no]) ]) if test "$mr_cv_func_dgettext" = yes; then AC_PATH_PROG(MSGFMT, msgfmt, no, $mr_PATH) if test "$MSGFMT" != no; then AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT, $mr_PATH) AC_PATH_PROG(XGETTEXT, xgettext, xgettext, $mr_PATH) AC_PATH_PROG(MSGMERGE, msgmerge, msgmerge, $mr_PATH) AC_CACHE_CHECK([for GNU gettext], mr_cv_gnu_gettext, [ AC_TRY_LINK([], [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [mr_cv_gnu_gettext=yes], [mr_cv_gnu_gettext=no]) ]) if test "$mr_cv_gnu_gettext" = yes; then AC_CACHE_CHECK([for losing catgets-based GNU gettext], mr_cv_catgets_based_gettext, [ AC_TRY_LINK([], [extern int _msg_tbl_length; return _msg_tbl_length], [mr_cv_catgets_based_gettext=yes], [mr_cv_catgets_based_gettext=no]) ]) if test "$mr_cv_catgets_based_gettext" = yes; then # This loses completely. Turn it off and use catgets. LIBS=`echo $LIBS | sed 's,-lintl,,g'` mr_cv_func_dgettext=no else # Is there a better test for this case? AC_CACHE_CHECK([for pure GNU gettext], mr_cv_pure_gnu_gettext, [ AC_TRY_LINK([], [extern int gettext(); return gettext()], [mr_cv_pure_gnu_gettext=yes], [mr_cv_pure_gnu_gettext=no]) ]) if test "$mr_cv_pure_gnu_gettext" = yes; then CATOBJEXT=.gmo localedir='$(prefix)/share/locale' else CATOBJEXT=.mo localedir='$(prefix)/lib/locale' fi INSTOBJEXT=.mo fi else # System provided gettext CATOBJEXT=.mo INSTOBJEXT=.mo localedir='$(prefix)/lib/locale' fi else # Gettext but no msgfmt. Try catgets. mr_cv_func_dgettext=no fi fi if test "$mr_cv_func_dgettext" = yes; then AC_DEFINE(HAVE_DGETTEXT) else AC_CACHE_CHECK([for catgets], mr_cv_func_catgets, [ AC_TRY_LINK([#include ], [catgets(catopen("",0),0,0,"");return 0;], [mr_cv_func_catgets=yes], [mr_cv_func_catgets=no]) ]) if test "$mr_cv_func_catgets" = yes; then AC_PATH_PROG(GENCAT, gencat, no, $mr_PATH) if test "$GENCAT" != no; then AC_DEFINE(HAVE_CATGETS) AC_PATH_PROG(GMSGFMT, [gmsgfmt msgfmt], msgfmt, $mr_PATH) AC_PATH_PROG(XGETTEXT, xgettext, xgettext, $mr_PATH) CATOBJEXT=.cat INSTOBJEXT=.cat localedir='$(prefix)/lib/locale' fi else AC_MSG_WARN([no NLS support, disabled]) mr_enable_nls=no fi fi fi AC_SUBST(CATOBJEXT) AC_SUBST(INSTOBJEXT) AC_SUBST(localedir) POSUB= CATALOGS= if test "$mr_enable_nls" = yes; then AC_MSG_CHECKING([for catalogs to be installed]) mr_linguas= for mr_lang in ${LINGUAS=$ALL_LINGUAS}; do case " $ALL_LINGUAS " in *" $mr_lang "*) mr_linguas="$mr_linguas$mr_lang " CATALOGS="$CATALOGS $mr_lang$CATOBJEXT" ;; esac done AC_MSG_RESULT($mr_linguas) POSUB=po fi AC_SUBST(CATALOGS) AC_SUBST(POSUB) ]) AC_DEFUN(mr_TARGET_ELF, [ AC_PROVIDE([$0]) AC_CACHE_CHECK([for native ELF system], mr_cv_target_elf, [AC_TRY_RUN(changequote(<<, >>)dnl <<#include int main(int argc, char **argv) { char buf[BUFSIZ]; FILE *fp; int n; if ((fp = fopen(*argv, "r")) == NULL) { exit(1); } n = fread(buf, 1, sizeof(buf), fp); if (n >= 52 && buf[0] == '\177' && buf[1] == 'E' && buf[2] == 'L' && buf[3] == 'F') { exit(0); } exit(1); }>>, changequote([, ])dnl mr_cv_target_elf=yes, mr_cv_target_elf=no, mr_cv_target_elf=no)])]) AC_DEFUN(mr_ENABLE_SHARED, [ AC_PROVIDE([$0]) PICFLAGS= SHLIB_SFX= SHLINK_SFX= SONAME_SFX= LINK_SHLIB= INSTALL_SHLIB= DEPSHLIBS= AC_MSG_CHECKING([whether to build a shared library]) AC_ARG_ENABLE(shared, [ --enable-shared build shared library (default: yes)], [mr_enable_shared="$enableval"], [mr_enable_shared=yes]) AC_MSG_RESULT($mr_enable_shared) if test "$mr_enable_shared" = yes; then AC_MSG_CHECKING([whether GNU naming conventions are requested]) AC_ARG_ENABLE(gnu-names, [ --enable-gnu-names use GNU library naming conventions (default: no)], [mr_enable_gnu_names="$enableval"], [mr_enable_gnu_names=no]) AC_MSG_RESULT($mr_enable_gnu_names) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_CC]) AC_PATH_PROG(LD, ld, ld) case "$host" in *-linux*|*-gnu*) if test "$GCC" = yes; then mr_TARGET_ELF if test "$mr_cv_target_elf" = yes; then PICFLAGS='-fPIC -DPIC' if test "$mr_enable_gnu_names" = yes then SHLIB_SFX='-$(VERSION).so' else SHLIB_SFX='.so.$(VERSION)' fi SHLINK_SFX='.so' SONAME_SFX='.so.$(MAJOR)' LINK_SHLIB='$(CC) -shared -Wl,-soname,$(SONAME)' INSTALL_SHLIB='$(INSTALL_PROGRAM)' DEPSHLIBS='-lc' else AC_MSG_WARN([shared libraries not supported for $host]) mr_enable_shared=no fi elif ${CC} -V 2>&1 | grep 'Intel(R) C++ Compiler' >/dev/null 2>&1; then AC_MSG_WARN([Use --disable-shared if $CC fails to build the shared library]) PICFLAGS='-fPIC -DPIC' if test "$mr_enable_gnu_names" = yes then SHLIB_SFX='-$(VERSION).so' else SHLIB_SFX='.so.$(VERSION)' fi SHLINK_SFX='.so' SONAME_SFX='.so.$(MAJOR)' LINK_SHLIB='$(CC) -shared -Wl,-soname,$(SONAME)' INSTALL_SHLIB='$(INSTALL_PROGRAM)' DEPSHLIBS='-lc' else AC_MSG_WARN([GNU CC required for building shared libraries]) mr_enable_shared=no fi ;; i386-pc-nto-qnx*) mr_TARGET_ELF if test "$mr_cv_target_elf" = yes; then PICFLAGS='-fPIC -DPIC' if test "$mr_enable_gnu_names" = yes then SHLIB_SFX='-$(VERSION).so' else SHLIB_SFX='.so.$(VERSION)' fi SHLINK_SFX='.so' SONAME_SFX='.so.$(MAJOR)' LINK_SHLIB='$(CC) -shared -Wl,-soname,$(SONAME)' INSTALL_SHLIB='$(INSTALL_PROGRAM)' DEPSHLIBS='-lc' else AC_MSG_WARN([shared libraries not supported for $host]) mr_enable_shared=no fi ;; sparc-sun-solaris2*) if test "$GCC" = yes; then PICFLAGS='-fPIC -DPIC' else PICFLAGS='-K PIC -DPIC' fi if test "$mr_enable_gnu_names" = yes then SHLIB_SFX='-$(MAJOR).so' else SHLIB_SFX='.so.$(MAJOR)' fi SONAME_SFX='.so.$(MAJOR)' SHLINK_SFX='.so' LINK_SHLIB='$(LD) -G -z text -h $(SONAME)' INSTALL_SHLIB='$(INSTALL_PROGRAM)' ;; *) AC_MSG_WARN([shared libraries not supported for $host]) mr_enable_shared=no ;; esac else mr_enable_shared=no fi AC_SUBST(PICFLAGS) AC_SUBST(SHLIB_SFX) AC_SUBST(SHLINK_SFX) AC_SUBST(SONAME_SFX) AC_SUBST(LINK_SHLIB) AC_SUBST(INSTALL_SHLIB) AC_SUBST(DEPSHLIBS) DO_SHLIB="$mr_enable_shared" AC_SUBST(DO_SHLIB) ]) AC_DEFUN(mr_ENABLE_DEBUG, [ AC_PROVIDE([$0]) AC_ARG_ENABLE(debug, [ --enable-debug include extra debugging code (default: no)], [mr_enable_debug="$enableval"], [mr_enable_debug=no]) if test "$mr_enable_debug" = yes; then AC_DEFINE(ENABLE_DEBUG) fi ]) # vi: set ts=8 sw=2 : libelf-0.8.13.orig/MANIFEST0000644000000000000000000000337611273304244013637 0ustar rootroot25275 COPYING.LIB 35406 ChangeLog 7462 INSTALL 5908 Makefile.in 13232 README 7 VERSION 2955 acconfig.h 9381 aclocal.m4 43611 config.guess 3987 config.h.in 31160 config.sub 110753 configure 11736 configure.in 2186 install-sh 4798 lib/32.fsize.c 1556 lib/32.getehdr.c 1557 lib/32.getphdr.c 1665 lib/32.getshdr.c 2181 lib/32.newehdr.c 3055 lib/32.newphdr.c 12322 lib/32.xlatetof.c 14221 lib/64.xlatetof.c 8012 lib/Makefile.in 4010 lib/Makefile.w32 1119 lib/assert.c 10463 lib/begin.c 1685 lib/build.bat 3566 lib/byteswap.h 3937 lib/checksum.c 1901 lib/cntl.c 4851 lib/config.h.w32 12554 lib/cook.c 1183 lib/data.c 24585 lib/elf_repl.h 2899 lib/end.c 2137 lib/errmsg.c 1037 lib/errno.c 6222 lib/errors.h 8107 lib/ext_types.h 997 lib/fill.c 2400 lib/flag.c 5103 lib/gelf.h 4151 lib/gelfehdr.c 3965 lib/gelfphdr.c 3758 lib/gelfshdr.c 9456 lib/gelftrans.c 1175 lib/getarhdr.c 1380 lib/getaroff.c 2421 lib/getarsym.c 1096 lib/getbase.c 3841 lib/getdata.c 1353 lib/getident.c 1449 lib/getscn.c 1212 lib/hash.c 2562 lib/input.c 1088 lib/kind.c 1214 lib/libelf.def 9050 lib/libelf.h 1505 lib/memset.c 1098 lib/ndxscn.c 1558 lib/newdata.c 3488 lib/newscn.c 1356 lib/next.c 1607 lib/nextscn.c 5898 lib/nlist.c 1452 lib/nlist.h 5071 lib/opt.delscn.c 13133 lib/private.h 1286 lib/rand.c 2543 lib/rawdata.c 1541 lib/rawfile.c 3393 lib/strptr.c 2285 lib/swap64.c 3812 lib/sys_elf.h.in 4066 lib/sys_elf.h.w32 26008 lib/update.c 6884 lib/verdef.h 1586 lib/verdef_32_tof.c 1586 lib/verdef_32_tom.c 1614 lib/verdef_64_tof.c 1614 lib/verdef_64_tom.c 7135 lib/verneed.h 1435 lib/version.c 4425 lib/x.elfext.c 2721 lib/x.movscn.c 2870 lib/x.remscn.c 254 libelf.pc.in 619 mkinstalldirs 4593 po/Makefile.in 8748 po/de.gmo 52 po/de.msg 11332 po/de.po 3011 po/gmo2msg.c 6483 po/libelf.pot 10 po/stamp-po 10 stamp-h.in libelf-0.8.13.orig/INSTALL0000644000000000000000000001644610243651645013547 0ustar rootrootBasic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. libelf-0.8.13.orig/configure.in0000644000000000000000000002673011015476664015030 0ustar rootroot# configure.in - Configure template for libelf. # Process this file with autoconf to produce a configure script. # Copyright (C) 1995 - 2006 Michael Riepe # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # @(#) $Id: configure.in,v 1.41 2008/05/23 08:17:56 michael Exp $ AC_INIT(VERSION) AC_CONFIG_HEADER(config.h lib/sys_elf.h) AC_PREREQ(2.13) mr_PACKAGE(libelf) dnl NOTE: there must be at least one .po file! ALL_LINGUAS=`cd $srcdir/po && echo *.po | sed 's/\.po//g'` dnl Assuming all arguments have already been processed... set `echo $VERSION | sed 's/\./ /g'` MAJOR=${1-1} MINOR=${2-0} PATCH=${3-0} AC_SUBST(MAJOR) dnl Checks for programs. AC_PROG_MAKE_SET AC_PROG_CC AC_PROG_CPP AC_PROG_INSTALL AC_PROG_RANLIB AC_PROG_LN_S dnl Checks for libraries. dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(unistd.h stdint.h fcntl.h) AC_CHECK_HEADERS(elf.h sys/elf.h link.h sys/link.h) AC_CACHE_CHECK([if ${CC} can compile elf.h], libelf_cv_elf_h_works, [ AC_TRY_COMPILE( [#if HAVE_ELF_H #include #elif HAVE_SYS_ELF_H #include #endif], [Elf32_Ehdr dummy], [libelf_cv_elf_h_works=yes], [libelf_cv_elf_h_works=no]) ]) if test "$libelf_cv_elf_h_works" = no; then ac_cv_header_elf_h=no ac_cv_header_sys_elf_h=no fi if test "$ac_cv_header_elf_h" = yes; then AC_DEFINE(__LIBELF_HEADER_ELF_H, []) elif test "$ac_cv_header_sys_elf_h" = yes; then AC_DEFINE(__LIBELF_HEADER_ELF_H, []) fi AC_CHECK_HEADERS(ar.h libelf.h nlist.h gelf.h) AC_MSG_CHECKING([whether to install , and ]) AC_ARG_ENABLE(compat, [ --enable-compat install , and (default: auto)], [DO_COMPAT="$enableval"], [if test "$ac_cv_header_libelf_h$ac_cv_header_nlist_h$ac_cv_header_gelf_h" = yesyesyes then DO_COMPAT=no else DO_COMPAT=yes fi]) AC_MSG_RESULT($DO_COMPAT) AC_SUBST(DO_COMPAT) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_OFF_T AC_TYPE_SIZE_T AC_CHECK_SIZEOF(short,2) AC_CHECK_SIZEOF(int,4) AC_CHECK_SIZEOF(long,4) AC_CHECK_SIZEOF(long long,0) # Windows port AC_CHECK_SIZEOF(__int64, 0) if test "$ac_cv_header_elf_h" = yes \ || test "$ac_cv_header_sys_elf_h" = yes; then # Slowaris declares Elf32_Dyn in . # QNX declares Elf32_Dyn in . AC_CACHE_CHECK([for struct Elf32_Dyn], libelf_cv_struct_elf32_dyn, [ AC_TRY_COMPILE([#include __LIBELF_HEADER_ELF_H], [Elf32_Dyn x], [libelf_cv_struct_elf32_dyn=yes], AC_TRY_COMPILE([#include ], [Elf32_Dyn x], [libelf_cv_struct_elf32_dyn=link.h], AC_TRY_COMPILE([#include ], [Elf32_Dyn x], [libelf_cv_struct_elf32_dyn=sys/link.h], [libelf_cv_struct_elf32_dyn=no])))]) if test "$libelf_cv_struct_elf32_dyn" = link.h; then AC_DEFINE(__LIBELF_NEED_LINK_H) elif test "$libelf_cv_struct_elf32_dyn" = sys/link.h; then AC_DEFINE(__LIBELF_NEED_SYS_LINK_H) elif test "$libelf_cv_struct_elf32_dyn" = no; then AC_MSG_ERROR([no declaration for Elf32_Dyn]) fi # Linux declares struct nlist in . AC_CACHE_CHECK([for struct nlist in elf.h], libelf_cv_struct_nlist, [ AC_TRY_COMPILE([#include __LIBELF_HEADER_ELF_H], [struct nlist nl], [libelf_cv_struct_nlist=yes], [libelf_cv_struct_nlist=no])]) if test "$libelf_cv_struct_nlist" = yes; then AC_DEFINE(HAVE_STRUCT_NLIST_DECLARATION) fi # Check for 64-bit data types. AC_CACHE_CHECK([for struct Elf64_Ehdr], libelf_cv_struct_elf64_ehdr, AC_TRY_COMPILE([#include __LIBELF_HEADER_ELF_H], [Elf64_Ehdr x], [libelf_cv_struct_elf64_ehdr=yes], [libelf_cv_struct_elf64_ehdr=no])) # Linux lacks typedefs for scalar ELF64_* types. AC_CACHE_CHECK([for Elf64_Addr], libelf_cv_type_elf64_addr, AC_TRY_COMPILE([#include __LIBELF_HEADER_ELF_H], [Elf64_Addr x], [libelf_cv_type_elf64_addr=yes], [libelf_cv_type_elf64_addr=no])) # IRIX' struct Elf64_Rel is slightly different. Ugh. AC_CACHE_CHECK([for struct Elf64_Rel], libelf_cv_struct_elf64_rel, AC_TRY_COMPILE([#include __LIBELF_HEADER_ELF_H], [Elf64_Rel x; x.r_info = 1], [libelf_cv_struct_elf64_rel=yes], AC_TRY_COMPILE([#include __LIBELF_HEADER_ELF_H], [Elf64_Rel x; x.r_sym = 1], [libelf_cv_struct_elf64_rel=irix], [libelf_cv_struct_elf64_rel=no]))) case "$libelf_cv_struct_elf64_ehdr:\ $libelf_cv_type_elf64_addr:\ $libelf_cv_struct_elf64_rel" in yes:yes:yes) libelf_64bit=yes;; yes:yes:irix) AC_DEFINE(__LIBELF64_IRIX) libelf_64bit=yes;; yes:no:yes) AC_DEFINE(__LIBELF64_LINUX) libelf_64bit=yes;; *) libelf_64bit=no;; esac # Check for symbol versioning definitions AC_CACHE_CHECK([for Elf32_Verdef], libelf_cv_verdef32, AC_TRY_COMPILE( [#include __LIBELF_HEADER_ELF_H #if __LIBELF_NEED_LINK_H #include /* Solaris wants this */ #endif], [struct { Elf32_Verdef vd; Elf32_Verdaux vda; Elf32_Verneed vn; Elf32_Vernaux vna; } x], [libelf_cv_verdef32=yes], [libelf_cv_verdef32=no])) AC_CACHE_CHECK([for Elf64_Verdef], libelf_cv_verdef64, AC_TRY_COMPILE( [#include __LIBELF_HEADER_ELF_H #if __LIBELF_NEED_LINK_H #include /* Solaris wants this */ #endif], [struct { Elf64_Verdef vd; Elf64_Verdaux vda; Elf64_Verneed vn; Elf64_Vernaux vna; } x], [libelf_cv_verdef64=yes], [libelf_cv_verdef64=no])) AC_CACHE_CHECK([for SHT_SUNW_verdef], libelf_cv_sun_verdef, AC_TRY_COMPILE([#include __LIBELF_HEADER_ELF_H], [Elf32_Word x = SHT_SUNW_verdef + SHT_SUNW_verneed + SHT_SUNW_versym], [libelf_cv_sun_verdef=yes], [libelf_cv_sun_verdef=no])) AC_CACHE_CHECK([for SHT_GNU_verdef], libelf_cv_gnu_verdef, AC_TRY_COMPILE([#include __LIBELF_HEADER_ELF_H], [Elf32_Word x = SHT_GNU_verdef + SHT_GNU_verneed + SHT_GNU_versym], [libelf_cv_gnu_verdef=yes], [libelf_cv_gnu_verdef=no])) else # lib/elf_repl.h supports 64-bit libelf_64bit=yes # lib/elf_repl.h supports symbol versioning libelf_cv_verdef32=yes libelf_cv_verdef64=yes libelf_cv_sun_verdef=yes libelf_cv_gnu_verdef=yes fi AC_CACHE_CHECK([for 64-bit integer], libelf_cv_int64, [ if test "$ac_cv_sizeof_long" = 8; then libelf_cv_int64='long' elif test "$ac_cv_sizeof___int64" = 8; then libelf_cv_int64='__int64' elif test "$ac_cv_sizeof_long_long" = 8; then libelf_cv_int64='long long' else libelf_cv_int64=no fi]) if test "$libelf_cv_int64" = no; then libelf_64bit=no else AC_DEFINE_UNQUOTED(__libelf_i64_t, [$libelf_cv_int64]) AC_DEFINE_UNQUOTED(__libelf_u64_t, [unsigned $libelf_cv_int64]) fi AC_CACHE_CHECK([for 32-bit integer], libelf_cv_int32, [ if test "$ac_cv_sizeof_int" = 4; then libelf_cv_int32='int' elif test "$ac_cv_sizeof_long" = 4; then libelf_cv_int32='long' else libelf_cv_int32=no fi]) if test "$libelf_cv_int32" = no; then AC_MSG_ERROR([neither int nor long is 32-bit]) else AC_DEFINE_UNQUOTED(__libelf_i32_t, [$libelf_cv_int32]) AC_DEFINE_UNQUOTED(__libelf_u32_t, [unsigned $libelf_cv_int32]) fi AC_CACHE_CHECK([for 16-bit integer], libelf_cv_int16, [ if test "$ac_cv_sizeof_short" = 2; then libelf_cv_int16='short' elif test "$ac_cv_sizeof_int" = 2; then libelf_cv_int16='int' else libelf_cv_int16=no fi]) if test "$libelf_cv_int16" = no; then AC_MSG_ERROR([neither short nor int is 16-bit]) else AC_DEFINE_UNQUOTED(__libelf_i16_t, [$libelf_cv_int16]) AC_DEFINE_UNQUOTED(__libelf_u16_t, [unsigned $libelf_cv_int16]) fi dnl Checks for library functions. AC_FUNC_MMAP AC_CHECK_FUNCS(ftruncate memcmp memcpy memmove) AC_REPLACE_FUNCS(memset) if test "$ac_cv_func_memset" = yes; then AC_DEFINE(HAVE_MEMSET) fi AC_CACHE_CHECK([whether overlapping arrays are copied correctly], libelf_cv_working_memmove, [AC_TRY_RUN(changequote(<<, >>)dnl <<#include "confdefs.h" #if HAVE_MEMMOVE extern void *memmove(); #else extern void bcopy(); #define memmove(d,s,n) bcopy((s),(d),(n)) #endif extern int strcmp(); main() { char buf[] = "0123456789"; memmove(buf + 1, buf, 9); if (strcmp(buf, "0012345678")) exit(1); exit(0); }>>, changequote([, ])dnl libelf_cv_working_memmove=yes, libelf_cv_working_memmove=no, libelf_cv_working_memmove='maybe not')]) if test "$libelf_cv_working_memmove" != yes; then AC_DEFINE(HAVE_BROKEN_MEMMOVE) fi AC_CACHE_CHECK([the coffee machine], mr_cv_coffee_machine, [mr_cv_coffee_machine='empty - operator may not work as expected']) dnl Check for 64-bit support. AC_MSG_CHECKING([whether 64-bit ELF support is sufficient]) AC_MSG_RESULT($libelf_64bit) AC_MSG_CHECKING([whether to include 64-bit support]) if test "$libelf_64bit" = no; then libelf_enable_64bit=no else AC_ARG_ENABLE(elf64, [ --enable-elf64 compile in 64-bit support (default: auto)], [libelf_enable_64bit="$enableval"], [libelf_enable_64bit=yes]) fi AC_MSG_RESULT($libelf_enable_64bit) if test "$libelf_enable_64bit" = yes; then AC_DEFINE(__LIBELF64) fi AC_MSG_CHECKING([whether versioning support is sufficient]) libelf_versioning=no case "$libelf_enable_64bit:$libelf_cv_verdef32:$libelf_cv_verdef64" in no:yes:* | yes:yes:yes) if test "$libelf_cv_sun_verdef" = yes; then AC_DEFINE(__LIBELF_SUN_SYMBOL_VERSIONS) libelf_versioning=yes elif test "$libelf_cv_gnu_verdef" = yes; then AC_DEFINE(__LIBELF_GNU_SYMBOL_VERSIONS) libelf_versioning=yes fi;; esac AC_MSG_RESULT($libelf_versioning) AC_MSG_CHECKING([whether to include versioning support]) if test "$libelf_versioning" = no; then libelf_enable_versioning=no else AC_ARG_ENABLE(versioning, [ --enable-versioning compile in versioning support (default: auto)], [libelf_enable_versioning="$enableval"], [libelf_enable_versioning=yes]) fi AC_MSG_RESULT($libelf_enable_versioning) if test "$libelf_enable_versioning" = yes; then AC_DEFINE(__LIBELF_SYMBOL_VERSIONS) fi dnl Check for NLS support. mr_ENABLE_NLS dnl this is for gmo2msg... LIBINTL= AC_CHECK_LIB(intl, gettext, [LIBINTL=-lintl]) AC_SUBST(LIBINTL) dnl Check for shared library support. mr_ENABLE_SHARED dnl Check for extended ELF format support AC_ARG_ENABLE(extended-format, [ --enable-extended-format support extended file formats (default: no)], [mr_enable_extended_format="$enableval"], [mr_enable_extended_format=no]) if test "$mr_enable_extended_format" = yes; then AC_DEFINE(ENABLE_EXTENDED_FORMAT) fi dnl Check if ELF sanity checks should be enabled AC_ARG_ENABLE(sanity-checks, [ --enable-sanity-checks enable sanity checks by default (default: yes)], [mr_enable_sanity_checks="$enableval"], [mr_enable_sanity_checks=yes]) if test "$mr_enable_sanity_checks" = yes; then AC_DEFINE(ENABLE_SANITY_CHECKS) fi dnl Check for debug support. mr_ENABLE_DEBUG AC_OUTPUT([Makefile lib/Makefile po/Makefile libelf.pc], [echo timestamp > stamp-h; echo timestamp > lib/stamp-h]) # vi: set ts=8 sw=2 : libelf-0.8.13.orig/po/0000755000000000000000000000000011273304244013113 5ustar rootrootlibelf-0.8.13.orig/po/gmo2msg.c0000644000000000000000000000570311015476556014651 0ustar rootroot/* * gmo2msg.c - create X/Open message source file for libelf. * Copyright (C) 1996 - 2005 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef lint static const char rcsid[] = "@(#) $Id: gmo2msg.c,v 1.11 2008/05/23 08:16:46 michael Exp $"; #endif /* lint */ #include #include #include #include #include #define DOMAIN "libelf" static const char *msgs[] = { #define __err__(a,b) b, #include #undef __err__ }; int main(int argc, char **argv) { char buf[1024], *lang, *progname, *s; unsigned i; FILE *fp; setlocale(LC_ALL, ""); if (*argv && (progname = strrchr(argv[0], '/'))) { progname++; } else if (!(progname = *argv)) { progname = "gmo2msg"; } if (argc <= 1 || !(lang = argv[1])) { fprintf(stderr, "Usage: gmo2msg \n"); exit(1); } /* * Fool gettext... */ unlink(DOMAIN ".mo"); unlink("LC_MESSAGES"); unlink(lang); sprintf(buf, "%s.gmo", lang); if (link(buf, DOMAIN ".mo") == -1) { fprintf(stderr, "Cannot link %s to " DOMAIN ".mo\n", buf); perror(""); exit(1); } symlink(".", "LC_MESSAGES"); symlink(".", lang); textdomain(DOMAIN); getcwd(buf, sizeof(buf)); bindtextdomain(DOMAIN, buf); sprintf(buf, "%s.msg", lang); unlink(buf); if (!(fp = fopen(buf, "w"))) { perror(buf); exit(1); } fprintf(fp, "$set 1 Automatically created from %s.gmo by %s\n", lang, progname); /* * Translate messages. */ setlocale(LC_MESSAGES, lang); if ((s = gettext("")) && (s = strdup(s))) { s = strtok(s, "\n"); while (s) { fprintf(fp, "$ %s\n", s); s = strtok(NULL, "\n"); } } /* * Assume that messages contain printable ASCII characters ONLY. * That means no tabs, linefeeds etc. */ for (i = 0; i < sizeof(msgs)/sizeof(*msgs); i++) { s = gettext(msgs[i]); if (s != msgs[i] && strcmp(s, msgs[i]) != 0) { fprintf(fp, "$ \n$ Original message: %s\n", msgs[i]); fprintf(fp, "%u %s\n", i + 1, s); } } setlocale(LC_MESSAGES, ""); if (fclose(fp)) { perror("writing output file"); exit(1); } /* * Cleanup. */ unlink(DOMAIN ".mo"); unlink("LC_MESSAGES"); unlink(lang); exit(0); } libelf-0.8.13.orig/po/de.msg0000644000000000000000000000006411015503363014210 0ustar rootroot$set 1 Automatically created from de.gmo by gmo2msg libelf-0.8.13.orig/po/de.po0000644000000000000000000002610411015503343014041 0ustar rootroot# po/de.po - German messages for libelf. # Copyright (C) 1999 - 2003 Michael Riepe # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # # @(#) $Id: de.po,v 1.18 2008/05/23 08:57:07 michael Exp $ # msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-05-23 10:18+0200\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Date: 2001-10-06 20:40:10+0200\n" "From: Michael Riepe \n" "Xgettext-Options: -c -dlibelf -k_\n" "Files: ../lib/errors.h\n" #: ../lib/errors.h:25 msgid "no error" msgstr "Kein Fehler" #: ../lib/errors.h:26 msgid "unknown error" msgstr "Unbekannter Fehler" #: ../lib/errors.h:27 msgid "Internal error: unknown reason" msgstr "Interner Fehler: Ursache unbekannt" #: ../lib/errors.h:28 msgid "Internal error: not implemented" msgstr "Interner Fehler: Diese Funktion ist nicht implementiert" #: ../lib/errors.h:29 msgid "Request error: cntl(ELF_C_FDREAD) on write-only file" msgstr "Aufruffehler: cntl(ELF_C_FDREAD) ohne Leseberechtigung" #: ../lib/errors.h:30 msgid "Request error: invalid ELF_C_* argument" msgstr "Aufruffehler: Das ELF_C_*-Argument ist ungültig" #: ../lib/errors.h:31 msgid "Request error: file descriptor disabled" msgstr "Aufruffehler: Der Zugriff auf diese Datei ist nicht mehr möglich" #: ../lib/errors.h:32 msgid "Request error: not an archive" msgstr "Aufruffehler: Die bearbeitete Datei ist kein Archiv (.a)" #: ../lib/errors.h:33 msgid "Request error: offset out of range" msgstr "Aufruffehler: Die gewünschte Byteposition liegt außerhalb der Datei" #: ../lib/errors.h:34 msgid "Request error: unknown ELF version" msgstr "Aufruffehler: unbekannte ELF-Version" #: ../lib/errors.h:35 msgid "Request error: ELF_C_* argument does not match" msgstr "Aufruffehler: Das ELF_C_*-Argument paßt nicht zu den Zugriffsrechten" #: ../lib/errors.h:36 msgid "Request error: archive member begin() for writing" msgstr "Aufruffehler: Der Archivinhalt ist nicht schreibbar" #: ../lib/errors.h:37 msgid "Request error: archive/member file descriptor mismatch" msgstr "Aufruffehler: Die Datei- und Archiv-Deskriptoren passen nicht zusammen" #: ../lib/errors.h:38 msgid "Request error: not an ELF file" msgstr "Aufruffehler: Dies ist keine ELF-Datei" #: ../lib/errors.h:39 msgid "Request error: class file/memory mismatch" msgstr "Aufruffehler: Die Datei gehört zur falschen ELF-Klasse (32/64 Bit)" #: ../lib/errors.h:40 msgid "Request error: invalid ELF_T_* argument" msgstr "Aufruffehler: Das ELF_T_*-Argument ist ungültig" #: ../lib/errors.h:41 msgid "Request error: unknown data encoding" msgstr "Aufruffehler: unbekannte Datenrepräsentation (big/little endian)" #: ../lib/errors.h:42 msgid "Request error: destination buffer too small" msgstr "Aufruffehler: Der Zielpuffer ist zu klein" #: ../lib/errors.h:43 msgid "Request error: d_buf is NULL" msgstr "Aufruffehler: d_buf ist NULL" #: ../lib/errors.h:44 msgid "Request error: unknown ELF class" msgstr "Aufruffehler: unbekannte ELF-Klasse (32/64 Bit)" #: ../lib/errors.h:45 msgid "Request error: section does not belong to file" msgstr "Aufruffehler: Der Dateiabschnitt gehört nicht zu dieser Datei" #: ../lib/errors.h:46 msgid "Request error: no section at index" msgstr "Aufruffehler: Ein Abschnitt mit dieser Nummer existiert nicht" #: ../lib/errors.h:47 msgid "Request error: can't manipulate null section" msgstr "Aufruffehler: Sie versuchen, den \"Null\"-Abschnitt zu bearbeiten" #: ../lib/errors.h:48 msgid "Request error: data does not belong to section" msgstr "" "Aufruffehler: Dieser Datenblock gehört nicht zum angegebenen Dateiabschnitt" #: ../lib/errors.h:49 msgid "Request error: no string table" msgstr "Aufruffehler: Die Namenliste fehlt" #: ../lib/errors.h:50 msgid "Request error: string table offset out of range" msgstr "Aufruffehler: Die gewünschte Position liegt außerhalb der Namenliste" #: ../lib/errors.h:51 msgid "Request error: update(ELF_C_WRITE) on read-only file" msgstr "Aufruffehler: update(ELF_C_WRITE) ohne Schreibberechtigung" #: ../lib/errors.h:52 msgid "I/O error: seek" msgstr "Ein-/Ausgabefehler: Das Positionieren innerhalb der Datei schlug fehl" #: ../lib/errors.h:53 msgid "I/O error: file too big for memory" msgstr "Ein-/Ausgabefehler: Die Datei ist zu groß" #: ../lib/errors.h:54 msgid "I/O error: raw read" msgstr "Ein-/Ausgabefehler: Lesefehler" #: ../lib/errors.h:55 msgid "I/O error: get file size" msgstr "Ein-/Ausgabefehler: Die Dateigröße ist nicht zu ermitteln" #: ../lib/errors.h:56 msgid "I/O error: output write" msgstr "Ein-/Ausgabefehler: Schreibfehler" #: ../lib/errors.h:57 msgid "I/O error: can't truncate output file" msgstr "Ein-/Ausgabefehler: Das Verkürzen der Datei schlug fehl" #: ../lib/errors.h:58 msgid "Sequence error: must set ELF version first" msgstr "Falsche Reihenfolge: Sie müssen zuerst elf_version() aufrufen" #: ../lib/errors.h:59 msgid "Sequence error: must create ELF header first" msgstr "Falsche Reihenfolge: Sie müssen zuerst elf{32,64}_newehdr() aufrufen" #: ../lib/errors.h:60 msgid "Format error: reference outside file" msgstr "" "Fehler in der Datei: Eine Positionsangabe zeigt auf einen Punkt außerhalb " "der Datei" #: ../lib/errors.h:61 msgid "Format error: archive header truncated" msgstr "Fehler in der Datei: Der Archiv-Header ist unvollständig" #: ../lib/errors.h:62 msgid "Format error: archive fmag" msgstr "Fehler in der Datei: Die Archiv-Kennung ist falsch" #: ../lib/errors.h:63 msgid "Format error: archive header" msgstr "Fehler in der Datei: Der Archiv-Header ist fehlerhaft" #: ../lib/errors.h:64 msgid "Format error: archive member truncated" msgstr "Fehler in der Datei: Der Archivinhalt ist unvollständig" #: ../lib/errors.h:65 msgid "Format error: archive symbol table size" msgstr "Fehler in der Datei: Die Größe der Archiv-Symboltabelle ist falsch" #: ../lib/errors.h:66 msgid "Format error: archive string table" msgstr "Fehler in der Datei: Die Archiv-Namenliste ist defekt" #: ../lib/errors.h:67 msgid "Format error: archive special name unknown" msgstr "" "Fehler in der Datei: Es existiert ein internes Archiv-Objekt mit unbekanntem " "Namen" #: ../lib/errors.h:68 msgid "Format error: ELF header truncated" msgstr "Fehler in der Datei: Der ELF-Header ist unvollständig" #: ../lib/errors.h:69 msgid "Format error: program header table truncated" msgstr "Fehler in der Datei: Die ELF Program Header Table ist unvollständig" #: ../lib/errors.h:70 msgid "Format error: section header table truncated" msgstr "Fehler in der Datei: Die ELF Section Header Table ist unvollständig" #: ../lib/errors.h:71 msgid "Format error: data region truncated" msgstr "Fehler in der Datei: Ein Datenblock ist unvollständig" #: ../lib/errors.h:72 msgid "Format error: program header table alignment" msgstr "" "Fehler in der Datei: Die ELF Program Header Table liegt nicht auf einer " "Wortgrenze" #: ../lib/errors.h:73 msgid "Format error: section header table alignment" msgstr "" "Fehler in der Datei: Die ELF Section Header Table liegt nicht auf einer " "Wortgrenze" #: ../lib/errors.h:74 msgid "Format error: bad parameter in Verdef record" msgstr "Fehler in der Datei: Verdef-Datensatz enthält ungültige Parameter" #: ../lib/errors.h:75 msgid "Format error: unknown Verdef version" msgstr "Fehler in der Datei: libelf unterstützt die Verdef-Version nicht" #: ../lib/errors.h:76 msgid "Format error: bad parameter in Verneed record" msgstr "Fehler in der Datei: Verneed-Datensatz enthält ungültige Parameter" #: ../lib/errors.h:77 msgid "Format error: unknown Verneed version" msgstr "Fehler in der Datei: libelf unterstützt die Verneed-Version nicht" #: ../lib/errors.h:78 msgid "Format error: bad e_shnum value" msgstr "Fehler in der Datei: e_shnum enthält einen ungültigen Wert" #: ../lib/errors.h:79 #, fuzzy msgid "Format error: bad e_shentsize value" msgstr "Fehler in der Datei: e_shentsize enthält einen ungültigen Wert" #: ../lib/errors.h:80 #, fuzzy msgid "Format error: bad e_phentsize value" msgstr "Fehler in der Datei: e_phentsize enthält einen ungültigen Wert" #: ../lib/errors.h:81 msgid "Format error: unterminated string in string table" msgstr "" "Fehler in der Datei: Der Eintrag in der String-Tabelle ist nicht terminiert" #: ../lib/errors.h:82 msgid "Layout error: section size too small for data" msgstr "" "Layout-Fehler: Ein Dateiabschnitt ist zu kurz für die darin enthaltenen Daten" #: ../lib/errors.h:83 msgid "Layout error: overlapping sections" msgstr "Layout-Fehler: Zwei (oder mehr) Dateiabschnitte überlappen sich" #: ../lib/errors.h:84 msgid "Memory error: elf descriptor" msgstr "Zu wenig Speicher: für den Elf-Deskriptor" #: ../lib/errors.h:85 msgid "Memory error: archive symbol table" msgstr "Zu wenig Speicher: für die Archiv-Symboltabelle" #: ../lib/errors.h:86 msgid "Memory error: archive member header" msgstr "Zu wenig Speicher: für die Archiv-Verwaltungsinformationen" #: ../lib/errors.h:87 msgid "Memory error: ELF header" msgstr "Zu wenig Speicher: für den ELF-Header" #: ../lib/errors.h:88 msgid "Memory error: program header table" msgstr "Zu wenig Speicher: für die Program Header Table" #: ../lib/errors.h:89 msgid "Memory error: section header table" msgstr "Zu wenig Speicher: für die Section Header Table" #: ../lib/errors.h:90 msgid "Memory error: section descriptor" msgstr "Zu wenig Speicher: für den Elf_Scn-Deskriptor" #: ../lib/errors.h:91 msgid "Memory error: section data" msgstr "Zu wenig Speicher: für die Daten dieses Abschnitts" #: ../lib/errors.h:92 msgid "Memory error: output file space" msgstr "Zu wenig Speicher: für die Ausgabe" #: ../lib/errors.h:93 msgid "Memory error: temporary buffer" msgstr "Zu wenig Speicher: für einen temporären Puffer" #: ../lib/errors.h:94 msgid "GElf error: value out of range" msgstr "GElf-Fehler: eine Zahl ist außerhalb des darstellbaren Bereichs" #: ../lib/errors.h:95 msgid "GElf error: index out of range" msgstr "GElf-Fehler: Index außerhalb des erlaubten Bereichs" #: ../lib/errors.h:96 msgid "GElf error: type mismatch" msgstr "GElf-Fehler: Typfehler" #: ../lib/errors.h:97 msgid "GElf error: not enough memory for GElf_Sym" msgstr "GElf-Fehler: zu wenig Speicher für eine Variable vom Typ GElf_Sym" #: ../lib/errors.h:98 msgid "GElf error: not enough memory for GElf_Dyn" msgstr "GElf-Fehler: zu wenig Speicher für eine Variable vom Typ GElf_Dyn" #: ../lib/errors.h:99 msgid "GElf error: not enough memory for GElf_Rela" msgstr "GElf-Fehler: zu wenig Speicher für eine Variable vom Typ GElf_Rela" #: ../lib/errors.h:100 msgid "GElf error: not enough memory for GElf_Rel" msgstr "GElf-Fehler: zu wenig Speicher für eine Variable vom Typ GElf_Rel" libelf-0.8.13.orig/po/libelf.pot0000644000000000000000000001452311015476711015104 0ustar rootroot# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-05-23 10:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../lib/errors.h:25 msgid "no error" msgstr "" #: ../lib/errors.h:26 msgid "unknown error" msgstr "" #: ../lib/errors.h:27 msgid "Internal error: unknown reason" msgstr "" #: ../lib/errors.h:28 msgid "Internal error: not implemented" msgstr "" #: ../lib/errors.h:29 msgid "Request error: cntl(ELF_C_FDREAD) on write-only file" msgstr "" #: ../lib/errors.h:30 msgid "Request error: invalid ELF_C_* argument" msgstr "" #: ../lib/errors.h:31 msgid "Request error: file descriptor disabled" msgstr "" #: ../lib/errors.h:32 msgid "Request error: not an archive" msgstr "" #: ../lib/errors.h:33 msgid "Request error: offset out of range" msgstr "" #: ../lib/errors.h:34 msgid "Request error: unknown ELF version" msgstr "" #: ../lib/errors.h:35 msgid "Request error: ELF_C_* argument does not match" msgstr "" #: ../lib/errors.h:36 msgid "Request error: archive member begin() for writing" msgstr "" #: ../lib/errors.h:37 msgid "Request error: archive/member file descriptor mismatch" msgstr "" #: ../lib/errors.h:38 msgid "Request error: not an ELF file" msgstr "" #: ../lib/errors.h:39 msgid "Request error: class file/memory mismatch" msgstr "" #: ../lib/errors.h:40 msgid "Request error: invalid ELF_T_* argument" msgstr "" #: ../lib/errors.h:41 msgid "Request error: unknown data encoding" msgstr "" #: ../lib/errors.h:42 msgid "Request error: destination buffer too small" msgstr "" #: ../lib/errors.h:43 msgid "Request error: d_buf is NULL" msgstr "" #: ../lib/errors.h:44 msgid "Request error: unknown ELF class" msgstr "" #: ../lib/errors.h:45 msgid "Request error: section does not belong to file" msgstr "" #: ../lib/errors.h:46 msgid "Request error: no section at index" msgstr "" #: ../lib/errors.h:47 msgid "Request error: can't manipulate null section" msgstr "" #: ../lib/errors.h:48 msgid "Request error: data does not belong to section" msgstr "" #: ../lib/errors.h:49 msgid "Request error: no string table" msgstr "" #: ../lib/errors.h:50 msgid "Request error: string table offset out of range" msgstr "" #: ../lib/errors.h:51 msgid "Request error: update(ELF_C_WRITE) on read-only file" msgstr "" #: ../lib/errors.h:52 msgid "I/O error: seek" msgstr "" #: ../lib/errors.h:53 msgid "I/O error: file too big for memory" msgstr "" #: ../lib/errors.h:54 msgid "I/O error: raw read" msgstr "" #: ../lib/errors.h:55 msgid "I/O error: get file size" msgstr "" #: ../lib/errors.h:56 msgid "I/O error: output write" msgstr "" #: ../lib/errors.h:57 msgid "I/O error: can't truncate output file" msgstr "" #: ../lib/errors.h:58 msgid "Sequence error: must set ELF version first" msgstr "" #: ../lib/errors.h:59 msgid "Sequence error: must create ELF header first" msgstr "" #: ../lib/errors.h:60 msgid "Format error: reference outside file" msgstr "" #: ../lib/errors.h:61 msgid "Format error: archive header truncated" msgstr "" #: ../lib/errors.h:62 msgid "Format error: archive fmag" msgstr "" #: ../lib/errors.h:63 msgid "Format error: archive header" msgstr "" #: ../lib/errors.h:64 msgid "Format error: archive member truncated" msgstr "" #: ../lib/errors.h:65 msgid "Format error: archive symbol table size" msgstr "" #: ../lib/errors.h:66 msgid "Format error: archive string table" msgstr "" #: ../lib/errors.h:67 msgid "Format error: archive special name unknown" msgstr "" #: ../lib/errors.h:68 msgid "Format error: ELF header truncated" msgstr "" #: ../lib/errors.h:69 msgid "Format error: program header table truncated" msgstr "" #: ../lib/errors.h:70 msgid "Format error: section header table truncated" msgstr "" #: ../lib/errors.h:71 msgid "Format error: data region truncated" msgstr "" #: ../lib/errors.h:72 msgid "Format error: program header table alignment" msgstr "" #: ../lib/errors.h:73 msgid "Format error: section header table alignment" msgstr "" #: ../lib/errors.h:74 msgid "Format error: bad parameter in Verdef record" msgstr "" #: ../lib/errors.h:75 msgid "Format error: unknown Verdef version" msgstr "" #: ../lib/errors.h:76 msgid "Format error: bad parameter in Verneed record" msgstr "" #: ../lib/errors.h:77 msgid "Format error: unknown Verneed version" msgstr "" #: ../lib/errors.h:78 msgid "Format error: bad e_shnum value" msgstr "" #: ../lib/errors.h:79 msgid "Format error: bad e_shentsize value" msgstr "" #: ../lib/errors.h:80 msgid "Format error: bad e_phentsize value" msgstr "" #: ../lib/errors.h:81 msgid "Format error: unterminated string in string table" msgstr "" #: ../lib/errors.h:82 msgid "Layout error: section size too small for data" msgstr "" #: ../lib/errors.h:83 msgid "Layout error: overlapping sections" msgstr "" #: ../lib/errors.h:84 msgid "Memory error: elf descriptor" msgstr "" #: ../lib/errors.h:85 msgid "Memory error: archive symbol table" msgstr "" #: ../lib/errors.h:86 msgid "Memory error: archive member header" msgstr "" #: ../lib/errors.h:87 msgid "Memory error: ELF header" msgstr "" #: ../lib/errors.h:88 msgid "Memory error: program header table" msgstr "" #: ../lib/errors.h:89 msgid "Memory error: section header table" msgstr "" #: ../lib/errors.h:90 msgid "Memory error: section descriptor" msgstr "" #: ../lib/errors.h:91 msgid "Memory error: section data" msgstr "" #: ../lib/errors.h:92 msgid "Memory error: output file space" msgstr "" #: ../lib/errors.h:93 msgid "Memory error: temporary buffer" msgstr "" #: ../lib/errors.h:94 msgid "GElf error: value out of range" msgstr "" #: ../lib/errors.h:95 msgid "GElf error: index out of range" msgstr "" #: ../lib/errors.h:96 msgid "GElf error: type mismatch" msgstr "" #: ../lib/errors.h:97 msgid "GElf error: not enough memory for GElf_Sym" msgstr "" #: ../lib/errors.h:98 msgid "GElf error: not enough memory for GElf_Dyn" msgstr "" #: ../lib/errors.h:99 msgid "GElf error: not enough memory for GElf_Rela" msgstr "" #: ../lib/errors.h:100 msgid "GElf error: not enough memory for GElf_Rel" msgstr "" libelf-0.8.13.orig/po/de.gmo0000644000000000000000000002105411015503363014206 0ustar rootrootÞ•KteÌ`"a„Ÿ&¼&ã* "5'X€, -Í#û,,L$y,ž,Ë$ø% 1C u *” *¿ +ê * A [ %z "  à Ü ô   8 "W -z ¨ #Á "å  % "E h ƒ "¤ Ç .æ 1 6G ,~ )« 4Õ  .'+V'‚'ª'Ò"ú<["y.œ/Ë û"$?4d,™*Æñ úé5ò2(5[8‘7ÊR5UB‹:ÎA BK5ŽRÄCS[R¯C@FA‡KÉ3AIA‹BÍAR?i7©)á9 !EgE†7Ì"?'Mg%µ:Û/)F"p/“2Ã-ö/$.TDƒ3ÈFü?CBƒ6ÆýK)f@/Ñ/=1"o&’8¹Cò=6 Dt /¹ $é @!:O!DŠ!=Ï! ""F90?@#/>JI=E6 !%7G3 ."H<)*(8D:5 $K4, A B;2'-+C1 &Format error: ELF header truncatedFormat error: archive fmagFormat error: archive headerFormat error: archive header truncatedFormat error: archive member truncatedFormat error: archive special name unknownFormat error: archive string tableFormat error: archive symbol table sizeFormat error: bad e_shnum valueFormat error: bad parameter in Verdef recordFormat error: bad parameter in Verneed recordFormat error: data region truncatedFormat error: program header table alignmentFormat error: program header table truncatedFormat error: reference outside fileFormat error: section header table alignmentFormat error: section header table truncatedFormat error: unknown Verdef versionFormat error: unknown Verneed versionFormat error: unterminated string in string tableGElf error: index out of rangeGElf error: not enough memory for GElf_DynGElf error: not enough memory for GElf_RelGElf error: not enough memory for GElf_RelaGElf error: not enough memory for GElf_SymGElf error: type mismatchGElf error: value out of rangeI/O error: can't truncate output fileI/O error: file too big for memoryI/O error: get file sizeI/O error: output writeI/O error: raw readI/O error: seekInternal error: not implementedInternal error: unknown reasonLayout error: overlapping sectionsLayout error: section size too small for dataMemory error: ELF headerMemory error: archive member headerMemory error: archive symbol tableMemory error: elf descriptorMemory error: output file spaceMemory error: program header tableMemory error: section dataMemory error: section descriptorMemory error: section header tableMemory error: temporary bufferRequest error: ELF_C_* argument does not matchRequest error: archive member begin() for writingRequest error: archive/member file descriptor mismatchRequest error: can't manipulate null sectionRequest error: class file/memory mismatchRequest error: cntl(ELF_C_FDREAD) on write-only fileRequest error: d_buf is NULLRequest error: data does not belong to sectionRequest error: destination buffer too smallRequest error: file descriptor disabledRequest error: invalid ELF_C_* argumentRequest error: invalid ELF_T_* argumentRequest error: no section at indexRequest error: no string tableRequest error: not an ELF fileRequest error: not an archiveRequest error: offset out of rangeRequest error: section does not belong to fileRequest error: string table offset out of rangeRequest error: unknown ELF classRequest error: unknown ELF versionRequest error: unknown data encodingRequest error: update(ELF_C_WRITE) on read-only fileSequence error: must create ELF header firstSequence error: must set ELF version firstno errorunknown errorReport-Msgid-Bugs-To: POT-Creation-Date: 2008-05-23 10:18+0200 Content-Type: text/plain; charset=iso-8859-1 Date: 2001-10-06 20:40:10+0200 From: Michael Riepe Xgettext-Options: -c -dlibelf -k_ Files: ../lib/errors.h Fehler in der Datei: Der ELF-Header ist unvollständigFehler in der Datei: Die Archiv-Kennung ist falschFehler in der Datei: Der Archiv-Header ist fehlerhaftFehler in der Datei: Der Archiv-Header ist unvollständigFehler in der Datei: Der Archivinhalt ist unvollständigFehler in der Datei: Es existiert ein internes Archiv-Objekt mit unbekanntem NamenFehler in der Datei: Die Archiv-Namenliste ist defektFehler in der Datei: Die Größe der Archiv-Symboltabelle ist falschFehler in der Datei: e_shnum enthält einen ungültigen WertFehler in der Datei: Verdef-Datensatz enthält ungültige ParameterFehler in der Datei: Verneed-Datensatz enthält ungültige ParameterFehler in der Datei: Ein Datenblock ist unvollständigFehler in der Datei: Die ELF Program Header Table liegt nicht auf einer WortgrenzeFehler in der Datei: Die ELF Program Header Table ist unvollständigFehler in der Datei: Eine Positionsangabe zeigt auf einen Punkt außerhalb der DateiFehler in der Datei: Die ELF Section Header Table liegt nicht auf einer WortgrenzeFehler in der Datei: Die ELF Section Header Table ist unvollständigFehler in der Datei: libelf unterstützt die Verdef-Version nichtFehler in der Datei: libelf unterstützt die Verneed-Version nichtFehler in der Datei: Der Eintrag in der String-Tabelle ist nicht terminiertGElf-Fehler: Index außerhalb des erlaubten BereichsGElf-Fehler: zu wenig Speicher für eine Variable vom Typ GElf_DynGElf-Fehler: zu wenig Speicher für eine Variable vom Typ GElf_RelGElf-Fehler: zu wenig Speicher für eine Variable vom Typ GElf_RelaGElf-Fehler: zu wenig Speicher für eine Variable vom Typ GElf_SymGElf-Fehler: TypfehlerGElf-Fehler: eine Zahl ist außerhalb des darstellbaren BereichsEin-/Ausgabefehler: Das Verkürzen der Datei schlug fehlEin-/Ausgabefehler: Die Datei ist zu großEin-/Ausgabefehler: Die Dateigröße ist nicht zu ermittelnEin-/Ausgabefehler: SchreibfehlerEin-/Ausgabefehler: LesefehlerEin-/Ausgabefehler: Das Positionieren innerhalb der Datei schlug fehlInterner Fehler: Diese Funktion ist nicht implementiertInterner Fehler: Ursache unbekanntLayout-Fehler: Zwei (oder mehr) Dateiabschnitte überlappen sichLayout-Fehler: Ein Dateiabschnitt ist zu kurz für die darin enthaltenen DatenZu wenig Speicher: für den ELF-HeaderZu wenig Speicher: für die Archiv-VerwaltungsinformationenZu wenig Speicher: für die Archiv-SymboltabelleZu wenig Speicher: für den Elf-DeskriptorZu wenig Speicher: für die AusgabeZu wenig Speicher: für die Program Header TableZu wenig Speicher: für die Daten dieses AbschnittsZu wenig Speicher: für den Elf_Scn-DeskriptorZu wenig Speicher: für die Section Header TableZu wenig Speicher: für einen temporären PufferAufruffehler: Das ELF_C_*-Argument paßt nicht zu den ZugriffsrechtenAufruffehler: Der Archivinhalt ist nicht schreibbarAufruffehler: Die Datei- und Archiv-Deskriptoren passen nicht zusammenAufruffehler: Sie versuchen, den "Null"-Abschnitt zu bearbeitenAufruffehler: Die Datei gehört zur falschen ELF-Klasse (32/64 Bit)Aufruffehler: cntl(ELF_C_FDREAD) ohne LeseberechtigungAufruffehler: d_buf ist NULLAufruffehler: Dieser Datenblock gehört nicht zum angegebenen DateiabschnittAufruffehler: Der Zielpuffer ist zu kleinAufruffehler: Der Zugriff auf diese Datei ist nicht mehr möglichAufruffehler: Das ELF_C_*-Argument ist ungültigAufruffehler: Das ELF_T_*-Argument ist ungültigAufruffehler: Ein Abschnitt mit dieser Nummer existiert nichtAufruffehler: Die Namenliste fehltAufruffehler: Dies ist keine ELF-DateiAufruffehler: Die bearbeitete Datei ist kein Archiv (.a)Aufruffehler: Die gewünschte Byteposition liegt außerhalb der DateiAufruffehler: Der Dateiabschnitt gehört nicht zu dieser DateiAufruffehler: Die gewünschte Position liegt außerhalb der NamenlisteAufruffehler: unbekannte ELF-Klasse (32/64 Bit)Aufruffehler: unbekannte ELF-VersionAufruffehler: unbekannte Datenrepräsentation (big/little endian)Aufruffehler: update(ELF_C_WRITE) ohne SchreibberechtigungFalsche Reihenfolge: Sie müssen zuerst elf{32,64}_newehdr() aufrufenFalsche Reihenfolge: Sie müssen zuerst elf_version() aufrufenKein FehlerUnbekannter Fehlerlibelf-0.8.13.orig/po/Makefile.in0000644000000000000000000001076111015476556015177 0ustar rootroot# po/Makefile for libelf. # Copyright (C) 1995 - 2006 Michael Riepe # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # @(#) $Id: Makefile.in,v 1.18 2008/05/23 08:16:46 michael Exp $ instroot = prefix = @prefix@ exec_prefix = @exec_prefix@ localedir = @localedir@ CC = @CC@ RM = rm -f MV = mv -f INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GENCAT = @GENCAT@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ MSGMERGE = @MSGMERGE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ DEFS = -DHAVE_CONFIG_H LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ LIBINTL = @LIBINTL@ # no user serviceable parts below PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ topdir = .. subdir = po .SUFFIXES: .SUFFIXES: .po .mo .gmo .msg .cat .po.mo: @$(RM) $@ $(MSGFMT) -o $@ $< .po.gmo: file=$(srcdir)/`echo $*|sed 's,.*/,,'`.gmo; \ $(RM) $$file && $(GMSGFMT) -o $$file $< .msg.cat: @$(RM) $@ $(GENCAT) $@ $< POFILES = @POFILES@ GMOFILES = @GMOFILES@ MSGFILES = @MSGFILES@ DISTFILES = \ gmo2msg.c Makefile.in $(PACKAGE).pot stamp-po \ $(POFILES) $(GMOFILES) $(MSGFILES) POTFILES = $(top_srcdir)/lib/errors.h CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ INSTOBJEXT = @INSTOBJEXT@ all: $(CATALOGS) check: install: all install-data install-data: $(top_srcdir)/mkinstalldirs catalogs="$(CATALOGS)"; for cat in $$catalogs; do \ lang=`echo $$cat | sed 's,$(CATOBJEXT)$$,,'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(SHELL) $(top_srcdir)/mkinstalldirs $(instroot)$$dir; \ if test -r $$cat; then \ $(INSTALL_DATA) $$cat $(instroot)$$dir/$(PACKAGE)$(INSTOBJEXT); \ else \ $(INSTALL_DATA) $(srcdir)/$$cat $(instroot)$$dir/$(PACKAGE)$(INSTOBJEXT); \ fi; \ done uninstall: catalogs="$(CATALOGS)"; for cat in $$catalogs; do \ lang=`echo $$cat | sed 's,$(CATOBJEXT)$$,,'`; \ $(RM) $(instroot)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ done mostlyclean: $(RM) core core.* $(PACKAGE).po *.po.tmp clean: mostlyclean distclean: clean $(RM) gmo2msg *.mo *.cat $(RM) Makefile maintainer-clean: distclean $(RM) stamp-po $(PACKAGE).pot: $(POTFILES) $(XGETTEXT) -c -d$(PACKAGE) -k_ $(POTFILES) if cmp -s $(PACKAGE).po $(srcdir)/$(PACKAGE).pot; then \ $(RM) $(PACKAGE).po; \ else \ $(RM) $(srcdir)/$(PACKAGE).pot && \ $(MV) $(PACKAGE).po $(srcdir)/$(PACKAGE).pot; \ fi update-po: stamp-po stamp-po: $(PACKAGE).pot pofiles="$(POFILES)"; cd $(srcdir) && for po in $$pofiles; do \ $(RM) $$po.tmp; \ if $(MSGMERGE) $$po $(PACKAGE).pot > $$po.tmp; then \ $(RM) $$po; \ $(MV) $$po.tmp $$po; \ else \ echo "update for $$po failed!"; \ $(RM) $$po.tmp; \ fi; \ done $(RM) $@ && echo timestamp > $@ # Create X/Open message catalog sources from .gmo files. .gmo.msg: $(MAKE) $(srcdir)/gmo2msg cd $(srcdir) && ./gmo2msg `echo $*|sed 's,.*/,,'` .SUFFIXES: .c .c: @$(RM) $@ $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) \ $(LDFLAGS) $*.c $(LIBS) $(LIBINTL) -o $@ INCLUDES = -I$(topdir) -I. -I$(topdir)/lib -I$(srcdir) -I$(top_srcdir)/lib # maintainer only MAINT = @MAINT@ distdir = $(PACKAGE)-$(VERSION) distsubdir = $(topdir)/$(distdir)/$(subdir) $(MAINT)dist: update-po $(DISTFILES) if test -d $(distsubdir); then true; else mkdir $(distsubdir); fi files="$(DISTFILES)"; for file in $$files; do \ ln $(srcdir)/$$file $(distsubdir) >/dev/null 2>&1 || \ cp -p $(srcdir)/$$file $(distsubdir) || exit 1; \ done # For the justification of the following Makefile rules, see node # `Automatic Remaking' in GNU Autoconf documentation. $(MAINT)Makefile: Makefile.in $(topdir)/config.status cd $(topdir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libelf-0.8.13.orig/po/stamp-po0000644000000000000000000000001211015476712014573 0ustar rootroottimestamp libelf-0.8.13.orig/README0000644000000000000000000003166011273304131013356 0ustar rootrootThis is the public release of libelf-0.8.13, a free ELF object file access library. If you have problems with applications that use libelf and work with the commercial (SVR4, Solaris) version but not with this one, please contact me. IMPORTANT NOTE: If you have libelf-0.5.2 installed, you probably have a file .../include/elf.h that contains the single line ``#include ''. REMOVE THIS FILE BEFORE YOU RUN configure. Installation is straightforward - the package is autoconf'ed. Just do ``cd libelf-0.8.13; ./configure; make; make install''. Header files will be installed in .../include/libelf/. If your system does not provide its own versions of libelf.h, nlist.h or gelf.h, ``make install'' will add the missing headers. If you prefer not to have these files installed in /usr/include, use ``--disable-compat'' and add ``-I /usr/include/libelf'' to your CFLAGS when compiling libelf-based programs. Note to distribution makers: You can install libelf in a separate root hierarchy by using the command ``make instroot=/my/root install''. You should also use the ``--enable-compat'' configure option in that case, or run ``make instroot=/my/root install-compat'' manually, to install all the required header files. If you are running Linux with libc 5.* as the default C library, and you plan to use the 64-bit functions, you must either use ``-I.../include/libelf'', or remove /usr/include/libelf.h and use ``--enable-compat'' when running configure. Libc 6.* (aka glibc2) doesn't have its own , or . You need an ANSI/ISO C compiler to build libelf. Gcc is optimal. On some systems (in particular, Solaris and all variants of Linux), ``make'' will try to build a shared library. If you run into problems on your system, please pass ``--disable-shared'' to configure. If you build a shared library and want it to be installed as ``libelf-0.8.13.so'' rather than ``libelf.so.0.8.13'', please use ``./configure --enable-gnu-names''. Other files, e.g. ``libelf.so'' and ``libelf.so.0'' are NOT affected. Another configure option, ``--enable-debug'', adds debugging code to libelf; if you don't run into problems, you will probably not need it. When creating an ELF shared library, it is possible to add references to other shared libraries in the DYNAMIC section of the resulting file. The make variable DEPSHLIBS contains a list of libraries to add. It is set to ``-lc'' on Linux systems, and empty otherwise. To override this setting, use something like ``make DEPSHLIBS="-la -lb"''. For Linux, `-lc' is included automagically. NLS is available and enabled by default. To turn it off, pass the ``--disable-nls'' option to configure. Libelf can use gettext or catgets for accessing message catalogs. If gettext is available AND is part of libc (i.e. not in a separate library), it will be used. Otherwise, configure will look for catgets. If you have gettext in a separate library and want to use it, you should pass the library's name to configure, e.g. ``LIBS=-lintl ./configure''. Note that you MUST link your libelf-based applications with -lintl then, which is probably not what you want, or change the DEPSHLIBS variable described above (in case you're building a shared library). If you have GNU gettext 0.10 installed on your system, and if GNU gettext runs on top of the catgets interface (rather old Linux systems, using libc5), configure will refuse to use it and use catgets instead. If you absolutely want to use GNU gettext, go ahead and rebuild it (which is IMHO a good idea in general in this case): cd .../gettext-0.10 ac_cv_func_catgets=no ac_cv_func_gettext=no ./configure make make install After that, return to the libelf build directory, remove config.cache, and start over. *** Large File Support (LFS) applications *** Some 32-bit systems support files that are larger than the address space of the architecture. On these, the `off_t' data type may have 32 or 64 bits, depending on the API you choose. Since off_t is also part of the libelf API, in particular the Elf_Data and Elf_Arhdr structures, an application compiled with large file support will need a version of libelf that has also been compiled with LFS; otherwise, it won't work correctly. Similarly, a program compiled without LFS needs a library compiled without LFS. Note that libelf is currently unable to process large files on 32-bit architectures, whether you compile it for LFS or not, for the simple reason that the files won't fit into the processes' address space. Therefore, libelf is compiled without LFS by default. It can of course read and write ELF files for 64-bit architectures, but they will be limited in length on a 32-bit system. You may compile libelf with large file support by setting CPPFLAGS at configuration time: CPPFLAGS=`getconf LFS_CFLAGS` ./configure But I really, really recommend you don't, because it breaks binary compatibility with existing libelf based applications. *** 64-bit support *** Starting with libelf-0.7.0, libelf also supports 64-bit ELF files. This is enabled by default unless your system (or your compiler) does not support 64-bit integers, or lacks 64-bit declarations in . If you have problems building with 64-bit support, please do ./configure --disable-elf64 for the moment, and contact me. Please note that I haven't tested 64-bit support much. There are still some unresolved problems, e.g. IRIX uses different Elf64_Rel and Elf64_Rela structures (they replaced the r_info member), and the enumeration values for Elf_Type differ from the commercial (SVR4) implementation of libelf - they broke binary compatibility for no good reason, and I'm not willing to follow their footsteps. The result is that libelf-0.7.* ist upward compatible with libelf-0.6.4 (as it should be) but INCOMPATIBLE WITH SVR4 LIBELF. If you have both versions installed, you'd better make sure that you link with the library that matches the you're #include'ing. *** Symbol Versioning *** Libelf >= 0.8.0 supports the data structures and definitions used for symbol versioning on Solaris and Linux, in particular, the Elfxx_Verdef, Elfxx_Verdaux, Elfxx_Verneed, Elfxx_Vernaux and Elfxx_Versym structures and the SHT_XXX_verdef, SHT_XXX_verneed and SHT_XXX_versym section types (where `xx' is either `32' or `64', and `XXX' is either `SUNW' or `GNU'). Libelf now translates versioning sections to/from their external representation properly (earlier versions left them in `raw' format, with the data type set to ELF_T_BYTE). This may cause problems on systems which use the same (OS-specific) section types for different purposes. The configure program tries to figure out if your OS uses versioning; if that check fails, you can use ./configure --disable-versioning to turn off versioning translation support. *** W32 Support *** There is now some support for building on W32 systems (requires Microsoft VC++). In order to build a W32 DLL, cd into the `lib' subdirectory, edit build.bat if necessary (it needs the path to your compiler binaries) and run it. If you're lucky, libelf.dll and the import/export libraries will be built. If not, please drop me a line. I tested it on XP Pro (SP2), using VC++ 2005 Express Edition. Apparently, Visual Studio .NET 2003 works fine as well. Various notes regarding the W32 port: - When you open() an ELF file, remember to use the O_BINARY flag. - You may have to add /MD to the linker command line. *** Missing things *** * There is no documentation. You can use the Solaris manpages instead (available at http://docs.sun.com/). The ELF file format is described in several places; among them Suns "Linker and Libraries Guide" and the "System V Application Binary Interface" documents; http://www.caldera.com/developer/devspecs/gabi41.pdf and http://www.caldera.com/developer/gabi/ are probably good starting points. Processor-specific documentation is spread across a number of `Processor Supplement' documents, one for each architecture; you'll have to use a search engine to find them. * The COFF file format is not understood. This is so obsolete that it will probably never be implemented. * nlist(3) is incomplete; the n_type and n_sclass members of struct nl are set to zero even if type (that is, debug) information is available. * Libelf does not translate Solaris' `Move' and `Syminfo' sections. You can read them using elf_getdata(), but you'll only get raw (untranslated) bytes. Changes since 0.8.12: * New function elf_getaroff(). * Build fixes. Changes since 0.8.11: * Due to some unfortunate confusion, the elf_getphnum(), elf_getshnum() and elf_getshstrndx() are not compatible between libelf implementations. Therefore, the developers decided to replace them with new functions: elf_getphdrnum(), elf_getshdrnum() and elf_getshdrstrndx(), which will always return -1 on failure and 0 on success. Code using the old interface should be upgraded to increase portability. Changes since 0.8.10: * Fixed a bug in elf_rawfile(). * If you use ELF_F_LAYOUT together with ELF_F_LAYOUT_OVERLAP, elf_update() will now tolerate overlapping sections. Changes since 0.8.9: * Ported to QNX Neutrino. * Fixed Windows build errors. * Parallel (make -j) installation should work now. * It's now possible to enable and disable select sanity checks libelf performs. Currently, this affects the "NUL terminated string table entry" check performed in elf_strptr(). By default, the function will return an error if the string requested is not properly terminated - because some applications might dump core otherwise. If you configure libelf with `--disable-sanity-checks', however, the check (and, in the future, probably others as well) is disabled by default. You can still turn it on and off at runtime by setting the LIBELF_SANITY_CHECKS environment variable to an integer value: # disable all sanity checks export LIBELF_SANITY_CHECKS=0 # enable all sanity checks export LIBELF_SANITY_CHECKS=-1 Each bit of the value corresponds to a particular check, so you could use LIBELF_SANITY_CHECKS=1 to enable only the elf_strptr() check. You may also use a value in hex (0x...) or octal (0...) format. Changes since 0.8.8: * Improved translator for symbol versioning sections. * The W32 library is now built in the `lib' subdirectory. * Windows DLLs should work now. Changes since 0.8.6: * added elf_getphnum(). * added elf_getshnum(). * added elf_getshstrndx(). * added elfx_update_shstrndx(). * handle interrupted reads/writes more gracefully. * added (partial) support for unusual e_[ps]hentsize values. * fixed the bugs introduced in 0.8.7. Changes since 0.8.5: * added W32 support. * added workaround for alignment errors in archive members. * my email address has changed again ;) Changes since 0.8.4: * elf_strptr() should now work more safely with fragmented or badly formatted string tables. Changes since 0.8.3: * Fixed a bug in elf_update() that was introduced in 0.8.3. Changes since 0.8.2: * Should compile on MacOSX now. * Can read and write files with more than 65280 sections * Tries to handle 64-bit ELF files that use 8-byte hash table entries. In particular, libelf tries to guess the data type in elf_getdata(), and doesn't override sh_entsize in elf_update() any longer. If you want the library to pick the entry size, you must set its value to 0 before you call elf_update(). * No longer dumps core in elf_update() when a versioning section has no data. Instead, it returns an error message. Note that you're supposed to provide a valid d_buf for any section, unless it's empty or has SHT_NOBITS type. * Building a shared library is now the default (if supported). Changes since 0.8.0: * Corrected typo in lib/{32,64}.xlatetof.c that sometimes caused a compilation failure. * Use open(name, O_RDONLY|O_BINARY) in lib/nlist.c. Changes since 0.7.0: * I implemented the gelf_* interface, as found on Solaris. I don't know whether it's compatible -- the Solaris manpage isn't very specific, so I had to guess return values etc. in some cases. * Added elf{32,64}_checksum (supposed to be compatible with Solaris). * Added symbol versioning support. Changes since 0.6.4: * Fixed configure for IRIX systems * Added check for truncated archive members * Added check for misaligned SHDR/PHDR tables * Support for building libelf together with GNU libc * Added elf_memory(3) * Added 64-bit support Changes since 0.5.2: * some bug fixes * mmap support * new directory layout * There is a new function, elf_delscn(), that deletes a section from an ELF file. It also adjusts the sh_link and sh_info members in the section header table, if (and ONLY if) the ELF standard indicates that these values are section indices. References to the deleted section will be cleared, so be careful. * my email address has changed ;) Where to get libelf: ftp://ftp.ibiblio.org/pub/Linux/libs/ http://www.mr511.de/software/ Michael "Tired" Riepe libelf-0.8.13.orig/lib/0000755000000000000000000000000011273304244013243 5ustar rootrootlibelf-0.8.13.orig/lib/newdata.c0000644000000000000000000000302611015476447015044 0ustar rootroot/* newdata.c - implementation of the elf_newdata(3) function. Copyright (C) 1995 - 2000 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: newdata.c,v 1.10 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ Elf_Data* elf_newdata(Elf_Scn *scn) { Scn_Data *sd; if (!scn) { return NULL; } elf_assert(scn->s_magic == SCN_MAGIC); if (scn->s_index == SHN_UNDEF) { seterr(ERROR_NULLSCN); } else if (!(sd = (Scn_Data*)malloc(sizeof(*sd)))) { seterr(ERROR_MEM_SCNDATA); } else { *sd = _elf_data_init; sd->sd_scn = scn; sd->sd_data_flags = ELF_F_DIRTY; sd->sd_freeme = 1; sd->sd_data.d_version = _elf_version; if (scn->s_data_n) { scn->s_data_n->sd_link = sd; } else { scn->s_data_1 = sd; } scn->s_data_n = sd; return &sd->sd_data; } return NULL; } libelf-0.8.13.orig/lib/byteswap.h0000644000000000000000000000675611015476446015300 0ustar rootroot/* byteswap.h - functions and macros for byte swapping. Copyright (C) 1995 - 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ /* @(#) $Id: byteswap.h,v 1.7 2008/05/23 08:15:34 michael Exp $ */ #ifndef _BYTESWAP_H #define _BYTESWAP_H #define lu(from,i,s) (((__libelf_u32_t)((unsigned char*)(from))[i])<<(s)) #define li(from,i,s) (((__libelf_i32_t)(( signed char*)(from))[i])<<(s)) #define __load_u16L(from) ((__libelf_u32_t) \ (lu(from,1,8) | lu(from,0,0))) #define __load_u16M(from) ((__libelf_u32_t) \ (lu(from,0,8) | lu(from,1,0))) #define __load_i16L(from) ((__libelf_i32_t) \ (li(from,1,8) | lu(from,0,0))) #define __load_i16M(from) ((__libelf_i32_t) \ (li(from,0,8) | lu(from,1,0))) #define __load_u32L(from) ((__libelf_u32_t) \ (lu(from,3,24) | lu(from,2,16) | lu(from,1,8) | lu(from,0,0))) #define __load_u32M(from) ((__libelf_u32_t) \ (lu(from,0,24) | lu(from,1,16) | lu(from,2,8) | lu(from,3,0))) #define __load_i32L(from) ((__libelf_i32_t) \ (li(from,3,24) | lu(from,2,16) | lu(from,1,8) | lu(from,0,0))) #define __load_i32M(from) ((__libelf_i32_t) \ (li(from,0,24) | lu(from,1,16) | lu(from,2,8) | lu(from,3,0))) #define su(to,i,v,s) (((char*)(to))[i]=((__libelf_u32_t)(v)>>(s))) #define si(to,i,v,s) (((char*)(to))[i]=((__libelf_i32_t)(v)>>(s))) #define __store_u16L(to,v) \ (su(to,1,v,8), su(to,0,v,0)) #define __store_u16M(to,v) \ (su(to,0,v,8), su(to,1,v,0)) #define __store_i16L(to,v) \ (si(to,1,v,8), si(to,0,v,0)) #define __store_i16M(to,v) \ (si(to,0,v,8), si(to,1,v,0)) #define __store_u32L(to,v) \ (su(to,3,v,24), su(to,2,v,16), su(to,1,v,8), su(to,0,v,0)) #define __store_u32M(to,v) \ (su(to,0,v,24), su(to,1,v,16), su(to,2,v,8), su(to,3,v,0)) #define __store_i32L(to,v) \ (si(to,3,v,24), si(to,2,v,16), si(to,1,v,8), si(to,0,v,0)) #define __store_i32M(to,v) \ (si(to,0,v,24), si(to,1,v,16), si(to,2,v,8), si(to,3,v,0)) #if __LIBELF64 /* * conversion functions from swap64.c */ extern __libelf_u64_t _elf_load_u64L(const unsigned char *from); extern __libelf_u64_t _elf_load_u64M(const unsigned char *from); extern __libelf_i64_t _elf_load_i64L(const unsigned char *from); extern __libelf_i64_t _elf_load_i64M(const unsigned char *from); extern void _elf_store_u64L(unsigned char *to, __libelf_u64_t v); extern void _elf_store_u64M(unsigned char *to, __libelf_u64_t v); extern void _elf_store_i64L(unsigned char *to, __libelf_u64_t v); extern void _elf_store_i64M(unsigned char *to, __libelf_u64_t v); /* * aliases for existing conversion code */ #define __load_u64L _elf_load_u64L #define __load_u64M _elf_load_u64M #define __load_i64L _elf_load_i64L #define __load_i64M _elf_load_i64M #define __store_u64L _elf_store_u64L #define __store_u64M _elf_store_u64M #define __store_i64L _elf_store_i64L #define __store_i64M _elf_store_i64M #endif /* __LIBELF64 */ #endif /* _BYTESWAP_H */ libelf-0.8.13.orig/lib/swap64.c0000644000000000000000000000435511015476447014553 0ustar rootroot/* swap64.c - 64-bit byte swapping functions. Copyright (C) 1995 - 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #if __LIBELF64 #ifndef lint static const char rcsid[] = "@(#) $Id: swap64.c,v 1.6 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ __libelf_u64_t _elf_load_u64L(const unsigned char *from) { return ((__libelf_u64_t)__load_u32L(from + 4) << 32) | (__libelf_u64_t)__load_u32L(from); } __libelf_u64_t _elf_load_u64M(const unsigned char *from) { return ((__libelf_u64_t)__load_u32M(from) << 32) | (__libelf_u64_t)__load_u32M(from + 4); } __libelf_i64_t _elf_load_i64L(const unsigned char *from) { return ((__libelf_i64_t)__load_i32L(from + 4) << 32) | (__libelf_u64_t)__load_u32L(from); } __libelf_i64_t _elf_load_i64M(const unsigned char *from) { return ((__libelf_i64_t)__load_i32M(from) << 32) | (__libelf_u64_t)__load_u32M(from + 4); } void _elf_store_u64L(unsigned char *to, __libelf_u64_t v) { __store_u32L(to, (__libelf_u32_t)v); v >>= 32; __store_u32L(to + 4, (__libelf_u32_t)v); } void _elf_store_u64M(unsigned char *to, __libelf_u64_t v) { __store_u32M(to + 4, (__libelf_u32_t)v); v >>= 32; __store_u32M(to, (__libelf_u32_t)v); } void _elf_store_i64L(unsigned char *to, __libelf_u64_t v) { __store_u32L(to, (__libelf_u32_t)v); v >>= 32; __store_i32L(to + 4, (__libelf_u32_t)v); } void _elf_store_i64M(unsigned char *to, __libelf_u64_t v) { __store_u32M(to + 4, (__libelf_u32_t)v); v >>= 32; __store_i32M(to, (__libelf_u32_t)v); } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/opt.delscn.c0000644000000000000000000001171711015476447015500 0ustar rootroot/* opt.delscn.c - implementation of the elf_delscn(3) function. Copyright (C) 1995 - 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: opt.delscn.c,v 1.12 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ static size_t _newindex(size_t old, size_t index) { return old == index ? SHN_UNDEF : (old > index ? old - 1 : old); } static void _elf32_update_shdr(Elf *elf, size_t index) { Elf32_Shdr *shdr; Elf_Scn *scn; ((Elf32_Ehdr*)elf->e_ehdr)->e_shnum = elf->e_scn_n->s_index + 1; for (scn = elf->e_scn_1; scn; scn = scn->s_link) { shdr = &scn->s_shdr32; switch (shdr->sh_type) { case SHT_REL: case SHT_RELA: shdr->sh_info = _newindex(shdr->sh_info, index); /* fall through */ case SHT_DYNSYM: case SHT_DYNAMIC: case SHT_HASH: case SHT_SYMTAB: #if __LIBELF_SYMBOL_VERSIONS #if __LIBELF_SUN_SYMBOL_VERSIONS case SHT_SUNW_verdef: case SHT_SUNW_verneed: case SHT_SUNW_versym: #else /* __LIBELF_SUN_SYMBOL_VERSIONS */ case SHT_GNU_verdef: case SHT_GNU_verneed: case SHT_GNU_versym: #endif /* __LIBELF_SUN_SYMBOL_VERSIONS */ #endif /* __LIBELF_SYMBOL_VERSIONS */ shdr->sh_link = _newindex(shdr->sh_link, index); /* fall through */ default: break; } } } #if __LIBELF64 static void _elf64_update_shdr(Elf *elf, size_t index) { Elf64_Shdr *shdr; Elf_Scn *scn; ((Elf64_Ehdr*)elf->e_ehdr)->e_shnum = elf->e_scn_n->s_index + 1; for (scn = elf->e_scn_1; scn; scn = scn->s_link) { shdr = &scn->s_shdr64; switch (shdr->sh_type) { case SHT_REL: case SHT_RELA: shdr->sh_info = _newindex(shdr->sh_info, index); /* fall through */ case SHT_DYNSYM: case SHT_DYNAMIC: case SHT_HASH: case SHT_SYMTAB: #if __LIBELF_SYMBOL_VERSIONS #if __LIBELF_SUN_SYMBOL_VERSIONS case SHT_SUNW_verdef: case SHT_SUNW_verneed: case SHT_SUNW_versym: #else /* __LIBELF_SUN_SYMBOL_VERSIONS */ case SHT_GNU_verdef: case SHT_GNU_verneed: case SHT_GNU_versym: #endif /* __LIBELF_SUN_SYMBOL_VERSIONS */ #endif /* __LIBELF_SYMBOL_VERSIONS */ shdr->sh_link = _newindex(shdr->sh_link, index); /* fall through */ default: break; } } } #endif /* __LIBELF64 */ size_t elf_delscn(Elf *elf, Elf_Scn *scn) { Elf_Scn *pscn; Scn_Data *sd; Scn_Data *tmp; size_t index; if (!elf || !scn) { return SHN_UNDEF; } elf_assert(elf->e_magic == ELF_MAGIC); elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(elf->e_ehdr); if (scn->s_elf != elf) { seterr(ERROR_ELFSCNMISMATCH); return SHN_UNDEF; } elf_assert(elf->e_scn_1); if (scn == elf->e_scn_1) { seterr(ERROR_NULLSCN); return SHN_UNDEF; } /* * Find previous section. */ for (pscn = elf->e_scn_1; pscn->s_link; pscn = pscn->s_link) { if (pscn->s_link == scn) { break; } } if (pscn->s_link != scn) { seterr(ERROR_ELFSCNMISMATCH); return SHN_UNDEF; } /* * Unlink section. */ if (elf->e_scn_n == scn) { elf->e_scn_n = pscn; } pscn->s_link = scn->s_link; index = scn->s_index; /* * Free section descriptor and data. */ for (sd = scn->s_data_1; sd; sd = tmp) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); tmp = sd->sd_link; if (sd->sd_free_data && sd->sd_memdata) { free(sd->sd_memdata); } if (sd->sd_freeme) { free(sd); } } if ((sd = scn->s_rawdata)) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); if (sd->sd_free_data && sd->sd_memdata) { free(sd->sd_memdata); } if (sd->sd_freeme) { free(sd); } } if (scn->s_freeme) { elf_assert(scn->s_index > 0); free(scn); } /* * Adjust section indices. */ for (scn = pscn->s_link; scn; scn = scn->s_link) { elf_assert(scn->s_index > index); scn->s_index--; } /* * Adjust ELF header and well-known section headers. */ if (elf->e_class == ELFCLASS32) { _elf32_update_shdr(elf, index); return index; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { _elf64_update_shdr(elf, index); return index; } #endif /* __LIBELF64 */ else if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } return SHN_UNDEF; } libelf-0.8.13.orig/lib/ndxscn.c0000644000000000000000000000211211015476447014711 0ustar rootroot/* ndxscn.c - implementation of the elf_ndxscn(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: ndxscn.c,v 1.7 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ size_t elf_ndxscn(Elf_Scn *scn) { if (!scn) { return SHN_UNDEF; } elf_assert(scn->s_magic == SCN_MAGIC); return scn->s_index; } libelf-0.8.13.orig/lib/getarhdr.c0000644000000000000000000000222711015476446015222 0ustar rootroot/* getarhdr.c - implementation of the elf_getarhdr(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: getarhdr.c,v 1.7 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ Elf_Arhdr* elf_getarhdr(Elf *elf) { if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_arhdr) { return elf->e_arhdr; } seterr(ERROR_NOTARCHIVE); return NULL; } libelf-0.8.13.orig/lib/Makefile.w320000644000000000000000000000765211273303523015326 0ustar rootroot# lib/Makefile.w32 - Makefile for W32 port. # Copyright (C) 1995 - 2009 Michael Riepe # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # @(#) $Id: Makefile.w32,v 1.3 2009/11/01 13:04:19 michael Exp $ instroot = prefix = exec_prefix = libdir = includedir = installdirs = $(libdir) $(includedir) $(includedir)/libelf CC = cl /nologo LD = link /nologo AR = MV = RM = del LN_S = RANLIB = INSTALL = INSTALL_DATA = INSTALL_PROGRAM = CFLAGS = /O2 /W2 /TC /MD CPPFLAGS = DEFS = /DHAVE_CONFIG_H LDFLAGS = LIBS = DEPSHLIBS = DO_SHLIB = PICFLAGS = SHLIB_SFX = .dll SHLINK_SFX = SONAME_SFX = LINK_SHLIB = $(LD) /DLL $(LDFLAGS) SHLIB = libelf$(SHLIB_SFX) SHLINK = libelf$(SHLINK_SFX) SONAME = libelf$(SONAME_SFX) # install includes in includedir? DO_COMPAT = INCLUDES = /I. COMPILE = $(CC) /c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) # no user serviceable parts below PACKAGE = libelf VERSION = 0.8.9 MAJOR = 0 SHELL = /bin/sh srcdir = . top_srcdir = .. topdir = .. subdir = lib .SUFFIXES: .SUFFIXES: .obj .c .c.obj: $(COMPILE) $< # generic sources SRCS1 = begin.c cntl.c end.c errmsg.c errno.c fill.c flag.c getarhdr.c \ getarsym.c getbase.c getdata.c getident.c getscn.c hash.c kind.c \ ndxscn.c newdata.c newscn.c next.c nextscn.c rand.c rawdata.c \ rawfile.c strptr.c update.c version.c checksum.c getaroff.c OBJS1 = $(SRCS1:.c=.obj) # 32-bit sources SRCS2 = 32.fsize.c 32.getehdr.c 32.getphdr.c 32.getshdr.c 32.newehdr.c \ 32.newphdr.c 32.xlatetof.c OBJS2 = $(SRCS2:.c=.obj) # support SRCS3 = cook.c data.c input.c assert.c OBJS3 = $(SRCS3:.c=.obj) # nlist SRCS4 = nlist.c OBJS4 = $(SRCS4:.c=.obj) # opt SRCS5 = opt.delscn.c x.remscn.c x.movscn.c x.elfext.c OBJS5 = $(SRCS5:.c=.obj) # 64-bit sources SRCS64 = 64.xlatetof.c gelfehdr.c gelfphdr.c gelfshdr.c gelftrans.c swap64.c OBJS64 = $(SRCS64:.c=.obj) # Versioning sources SRCS_V = verdef_32_tof.c verdef_32_tom.c verdef_64_tof.c verdef_64_tom.c OBJS_V = $(SRCS_V:.c=.obj) HDRS_V = verdef.h verneed.h SRCS = $(SRCS1) $(SRCS2) $(SRCS3) $(SRCS4) $(SRCS5) $(SRCS64) $(SRCS_V) OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) $(OBJS64) $(OBJS_V) # missing functions LIBSRCS = memset.c LIBOBJS = # public header files HDRS = libelf.h nlist.h gelf.h # public header files (created by configure) AUXHDRS = sys_elf.h # private header files PRIVHDRS = byteswap.h errors.h ext_types.h private.h elf_repl.h $(HDRS_V) DISTFILES = $(SRCS) $(LIBSRCS) $(HDRS) $(PRIVHDRS) Makefile.in sys_elf.h.in all: $(OBJS) $(SHLIB) check: $(SHLIB): libelf.def $(OBJS) $(LIBOBJS) -@$(RM) $(SHLIB) $(LINK_SHLIB) /OUT:"$(SHLIB)" /DEF:"libelf.def" $(OBJS) $(LIBOBJS) kernel32.lib install: mostlyclean: -$(RM) *.obj -$(RM) $(SHLIB) -$(RM) libelf.lib -$(RM) libelf.exp clean: mostlyclean distclean: clean -$(RM) $(AUXHDRS) maintainer-clean: distclean # dependencies $(OBJS): private.h config.h libelf.h gelf.h errors.h $(AUXHDRS) 32.fsize.obj: ext_types.h 32.xlatetof.obj: byteswap.h ext_types.h 64.xlatetof.obj: byteswap.h ext_types.h getarsym.obj: byteswap.h memset.obj: config.h nlist.obj: nlist.h swap64.obj: byteswap.h $(OBJS_V): byteswap.h ext_types.h $(HDRS_V) libelf-0.8.13.orig/lib/flag.c0000644000000000000000000000454011015476446014333 0ustar rootroot/* flag.c - implementation of the elf_flag*(3) functions. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: flag.c,v 1.7 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ static unsigned _elf_flag(unsigned *f, Elf_Cmd cmd, unsigned flags) { if (cmd == ELF_C_SET) { return *f |= flags; } if (cmd == ELF_C_CLR) { return *f &= ~flags; } seterr(ERROR_INVALID_CMD); return 0; } unsigned elf_flagdata(Elf_Data *data, Elf_Cmd cmd, unsigned flags) { Scn_Data *sd = (Scn_Data*)data; if (!sd) { return 0; } elf_assert(sd->sd_magic == DATA_MAGIC); return _elf_flag(&sd->sd_data_flags, cmd, flags); } unsigned elf_flagehdr(Elf *elf, Elf_Cmd cmd, unsigned flags) { if (!elf) { return 0; } elf_assert(elf->e_magic == ELF_MAGIC); return _elf_flag(&elf->e_ehdr_flags, cmd, flags); } unsigned elf_flagelf(Elf *elf, Elf_Cmd cmd, unsigned flags) { if (!elf) { return 0; } elf_assert(elf->e_magic == ELF_MAGIC); return _elf_flag(&elf->e_elf_flags, cmd, flags); } unsigned elf_flagphdr(Elf *elf, Elf_Cmd cmd, unsigned flags) { if (!elf) { return 0; } elf_assert(elf->e_magic == ELF_MAGIC); return _elf_flag(&elf->e_phdr_flags, cmd, flags); } unsigned elf_flagscn(Elf_Scn *scn, Elf_Cmd cmd, unsigned flags) { if (!scn) { return 0; } elf_assert(scn->s_magic == SCN_MAGIC); return _elf_flag(&scn->s_scn_flags, cmd, flags); } unsigned elf_flagshdr(Elf_Scn *scn, Elf_Cmd cmd, unsigned flags) { if (!scn) { return 0; } elf_assert(scn->s_magic == SCN_MAGIC); return _elf_flag(&scn->s_shdr_flags, cmd, flags); } libelf-0.8.13.orig/lib/newscn.c0000644000000000000000000000664011015476447014723 0ustar rootroot/* * newscn.c - implementation of the elf_newscn(3) function. * Copyright (C) 1995 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: newscn.c,v 1.13 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ int _elf_update_shnum(Elf *elf, size_t shnum) { size_t extshnum = 0; Elf_Scn *scn; elf_assert(elf); elf_assert(elf->e_ehdr); scn = elf->e_scn_1; elf_assert(scn); elf_assert(scn->s_index == 0); if (shnum >= SHN_LORESERVE) { extshnum = shnum; shnum = 0; } if (elf->e_class == ELFCLASS32) { ((Elf32_Ehdr*)elf->e_ehdr)->e_shnum = shnum; scn->s_shdr32.sh_size = extshnum; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { ((Elf64_Ehdr*)elf->e_ehdr)->e_shnum = shnum; scn->s_shdr64.sh_size = extshnum; } #endif /* __LIBELF64 */ else { if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } return -1; } elf->e_ehdr_flags |= ELF_F_DIRTY; scn->s_shdr_flags |= ELF_F_DIRTY; return 0; } static Elf_Scn* _makescn(Elf *elf, size_t index) { Elf_Scn *scn; elf_assert(elf); elf_assert(elf->e_magic == ELF_MAGIC); elf_assert(elf->e_ehdr); elf_assert(_elf_scn_init.s_magic == SCN_MAGIC); if (!(scn = (Elf_Scn*)malloc(sizeof(*scn)))) { seterr(ERROR_MEM_SCN); return NULL; } *scn = _elf_scn_init; scn->s_elf = elf; scn->s_scn_flags = ELF_F_DIRTY; scn->s_shdr_flags = ELF_F_DIRTY; scn->s_freeme = 1; scn->s_index = index; return scn; } Elf_Scn* _elf_first_scn(Elf *elf) { Elf_Scn *scn; elf_assert(elf); elf_assert(elf->e_magic == ELF_MAGIC); if ((scn = elf->e_scn_1)) { return scn; } if ((scn = _makescn(elf, 0))) { elf->e_scn_1 = elf->e_scn_n = scn; if (_elf_update_shnum(elf, 1)) { free(scn); elf->e_scn_1 = elf->e_scn_n = scn = NULL; } } return scn; } static Elf_Scn* _buildscn(Elf *elf) { Elf_Scn *scn; if (!_elf_first_scn(elf)) { return NULL; } scn = elf->e_scn_n; elf_assert(scn); if (!(scn = _makescn(elf, scn->s_index + 1))) { return NULL; } if (_elf_update_shnum(elf, scn->s_index + 1)) { free(scn); return NULL; } elf->e_scn_n = elf->e_scn_n->s_link = scn; return scn; } Elf_Scn* elf_newscn(Elf *elf) { Elf_Scn *scn; if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (!elf->e_readable && !elf->e_ehdr) { seterr(ERROR_NOEHDR); } else if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (!elf->e_ehdr && !_elf_cook(elf)) { return NULL; } else if ((scn = _buildscn(elf))) { return scn; } return NULL; } libelf-0.8.13.orig/lib/sys_elf.h.w320000644000000000000000000000774210500040376015477 0ustar rootroot/* * lib/sys_elf.h.w32 - internal configuration file for W32 port * Copyright (C) 2004 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * @(#) $Id: sys_elf.h.w32,v 1.2 2006/09/07 15:55:42 michael Exp $ */ /* * DO NOT USE THIS IN APPLICATIONS - #include INSTEAD! */ /* Define to `' or `' if one of them is present */ #undef __LIBELF_HEADER_ELF_H /* Define if Elf32_Dyn is declared in */ #undef __LIBELF_NEED_LINK_H /* Define if Elf32_Dyn is declared in */ #undef __LIBELF_NEED_SYS_LINK_H /* Define if you want 64-bit support (and your system supports it) */ #define __LIBELF64 1 /* Define if you want 64-bit support, and are running IRIX */ #undef __LIBELF64_IRIX /* Define if you want 64-bit support, and are running Linux */ #undef __LIBELF64_LINUX /* Define if you want symbol versioning (and your system supports it) */ #define __LIBELF_SYMBOL_VERSIONS 1 /* Define to a 64-bit signed integer type if one exists */ #define __libelf_i64_t __int64 /* Define to a 64-bit unsigned integer type if one exists */ #define __libelf_u64_t unsigned __int64 /* Define to a 32-bit signed integer type if one exists */ #define __libelf_i32_t int /* Define to a 32-bit unsigned integer type if one exists */ #define __libelf_u32_t unsigned int /* Define to a 16-bit signed integer type if one exists */ #define __libelf_i16_t short int /* Define to a 16-bit unsigned integer type if one exists */ #define __libelf_u16_t unsigned short int /* * Ok, now get the correct instance of elf.h... */ #ifdef __LIBELF_HEADER_ELF_H # include __LIBELF_HEADER_ELF_H #else /* __LIBELF_HEADER_ELF_H */ # if __LIBELF_INTERNAL__ # include # else /* __LIBELF_INTERNAL__ */ # include # endif /* __LIBELF_INTERNAL__ */ #endif /* __LIBELF_HEADER_ELF_H */ /* * On some systems, is severely broken. Try to fix it. */ #ifdef __LIBELF_HEADER_ELF_H # ifndef ELF32_FSZ_ADDR # define ELF32_FSZ_ADDR 4 # define ELF32_FSZ_HALF 2 # define ELF32_FSZ_OFF 4 # define ELF32_FSZ_SWORD 4 # define ELF32_FSZ_WORD 4 # endif /* ELF32_FSZ_ADDR */ # ifndef STN_UNDEF # define STN_UNDEF 0 # endif /* STN_UNDEF */ # if __LIBELF64 # ifndef ELF64_FSZ_ADDR # define ELF64_FSZ_ADDR 8 # define ELF64_FSZ_HALF 2 # define ELF64_FSZ_OFF 8 # define ELF64_FSZ_SWORD 4 # define ELF64_FSZ_WORD 4 # define ELF64_FSZ_SXWORD 8 # define ELF64_FSZ_XWORD 8 # endif /* ELF64_FSZ_ADDR */ # ifndef ELF64_ST_BIND # define ELF64_ST_BIND(i) ((i)>>4) # define ELF64_ST_TYPE(i) ((i)&0xf) # define ELF64_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) # endif /* ELF64_ST_BIND */ # ifndef ELF64_R_SYM # define ELF64_R_SYM(i) ((Elf64_Xword)(i)>>32) # define ELF64_R_TYPE(i) ((i)&0xffffffffL) # define ELF64_R_INFO(s,t) (((Elf64_Xword)(s)<<32)+((t)&0xffffffffL)) # endif /* ELF64_R_SYM */ # if __LIBELF64_LINUX typedef __libelf_u64_t Elf64_Addr; typedef __libelf_u16_t Elf64_Half; typedef __libelf_u64_t Elf64_Off; typedef __libelf_i32_t Elf64_Sword; typedef __libelf_u32_t Elf64_Word; typedef __libelf_i64_t Elf64_Sxword; typedef __libelf_u64_t Elf64_Xword; # endif /* __LIBELF64_LINUX */ # endif /* __LIBELF64 */ #endif /* __LIBELF_HEADER_ELF_H */ libelf-0.8.13.orig/lib/64.xlatetof.c0000644000000000000000000003361511015476446015505 0ustar rootroot/* * 64.xlatetof.c - implementation of the elf64_xlateto[fm](3) functions. * Copyright (C) 1995 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #if __LIBELF64 #ifndef lint static const char rcsid[] = "@(#) $Id: 64.xlatetof.c,v 1.27 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ /* * Ugly, ugly */ #ifdef _WIN32 # define Cat2(a,b)a##b # define Cat3(a,b,c)a##b##c # define Ex1(m1,m2,a,b)m1##m2(a##b) # define Ex2(m1,m2,a,b,c)m1##m2(a,b##c) #else /* _WIN32 */ # define x # if defined/**/x # define Cat2(a,b)a##b # define Cat3(a,b,c)a##b##c # define Ex1(m1,m2,a,b)m1##m2(a##b) # define Ex2(m1,m2,a,b,c)m1##m2(a,b##c) # else # define Cat2(a,b)a/**/b # define Cat3(a,b,c)a/**/b/**/c # define Ex1(m1,m2,a,b)m1/**/m2(a/**/b) # define Ex2(m1,m2,a,b,c)m1/**/m2(a,b/**/c) # endif # undef x #endif /* _WIN32 */ /* * auxiliary macros for execution order reversal */ #define seq_forw(a,b) a b #define seq_back(a,b) b a /* * function instantiator */ #define copy_type_e_io(name,e,io,tfrom,tto,copy) \ static size_t \ Cat3(name,_,io)(unsigned char *dst, const unsigned char *src, size_t n) { \ n /= sizeof(tfrom); \ if (n && dst) { \ const tfrom *from = (const tfrom*)src; \ tto *to = (tto*)dst; \ size_t i; \ \ if (sizeof(tfrom) < sizeof(tto)) { \ from += n; \ to += n; \ for (i = 0; i < n; i++) { \ --from; \ --to; \ copy(e,io,seq_back) \ } \ } \ else { \ for (i = 0; i < n; i++) { \ copy(e,io,seq_forw) \ from++; \ to++; \ } \ } \ } \ return n * sizeof(tto); \ } #define copy_type_e(name,e,type,copy) \ copy_type_e_io(name,e,tom,Cat2(__ext_,type),type,copy) \ copy_type_e_io(name,e,tof,type,Cat2(__ext_,type),copy) /* * master function instantiator */ #define copy_type(name,version,type,copy) \ copy_type_e(Cat3(name,L,version),L,type,copy) \ copy_type_e(Cat3(name,M,version),M,type,copy) /* * scalar copying */ #define copy_scalar_tom(type) *to = Cat2(__load_,type)(*from); #define copy_scalar_tof(type) Cat2(__store_,type)(*to, *from); /* * structure member copying */ #define copy_tom(mb,type) to->mb = Cat2(__load_,type)(from->mb); #define copy_tof(mb,type) Cat2(__store_,type)(to->mb, from->mb); /* * structure member copying (direction independent) */ #define copy_byte(e,io,mb) to->mb = from->mb; #define copy_addr(e,io,mb) Ex2(copy_,io,mb,u64,e) #define copy_half(e,io,mb) Ex2(copy_,io,mb,u16,e) #define copy_off(e,io,mb) Ex2(copy_,io,mb,u64,e) #define copy_sword(e,io,mb) Ex2(copy_,io,mb,i32,e) #define copy_word(e,io,mb) Ex2(copy_,io,mb,u32,e) #define copy_sxword(e,io,mb) Ex2(copy_,io,mb,i64,e) #define copy_xword(e,io,mb) Ex2(copy_,io,mb,u64,e) #define copy_arr(e,io,mb) \ array_copy(to->mb, sizeof(to->mb), from->mb, sizeof(from->mb)); /* * scalar copying (direction independent) * these macros are used as `copy' arguments to copy_type() */ #define copy_addr_11(e,io,seq) Ex1(copy_scalar_,io,u64,e) #define copy_half_11(e,io,seq) Ex1(copy_scalar_,io,u16,e) #define copy_off_11(e,io,seq) Ex1(copy_scalar_,io,u64,e) #define copy_sword_11(e,io,seq) Ex1(copy_scalar_,io,i32,e) #define copy_word_11(e,io,seq) Ex1(copy_scalar_,io,u32,e) #define copy_sxword_11(e,io,seq)Ex1(copy_scalar_,io,i64,e) #define copy_xword_11(e,io,seq) Ex1(copy_scalar_,io,u64,e) /* * structure copying (direction independent) * these macros are used as `copy' arguments to copy_type() */ #define copy_dyn_11(e,io,seq) \ seq(copy_xword(e,io,d_tag), \ seq(copy_addr(e,io,d_un.d_ptr), \ nullcopy)) #define copy_ehdr_11(e,io,seq) \ seq(copy_arr(e,io,e_ident), \ seq(copy_half(e,io,e_type), \ seq(copy_half(e,io,e_machine), \ seq(copy_word(e,io,e_version), \ seq(copy_addr(e,io,e_entry), \ seq(copy_off(e,io,e_phoff), \ seq(copy_off(e,io,e_shoff), \ seq(copy_word(e,io,e_flags), \ seq(copy_half(e,io,e_ehsize), \ seq(copy_half(e,io,e_phentsize), \ seq(copy_half(e,io,e_phnum), \ seq(copy_half(e,io,e_shentsize), \ seq(copy_half(e,io,e_shnum), \ seq(copy_half(e,io,e_shstrndx), \ nullcopy)))))))))))))) #define copy_phdr_11(e,io,seq) \ seq(copy_word(e,io,p_type), \ seq(copy_word(e,io,p_flags), \ seq(copy_off(e,io,p_offset), \ seq(copy_addr(e,io,p_vaddr), \ seq(copy_addr(e,io,p_paddr), \ seq(copy_xword(e,io,p_filesz), \ seq(copy_xword(e,io,p_memsz), \ seq(copy_xword(e,io,p_align), \ nullcopy)))))))) #if __LIBELF64_IRIX #define copy_rela_11(e,io,seq) \ seq(copy_addr(e,io,r_offset), \ seq(copy_word(e,io,r_sym), \ seq(copy_byte(e,io,r_ssym), \ seq(copy_byte(e,io,r_type3), \ seq(copy_byte(e,io,r_type2), \ seq(copy_byte(e,io,r_type), \ seq(copy_sxword(e,io,r_addend), \ nullcopy))))))) #define copy_rel_11(e,io,seq) \ seq(copy_addr(e,io,r_offset), \ seq(copy_word(e,io,r_sym), \ seq(copy_byte(e,io,r_ssym), \ seq(copy_byte(e,io,r_type3), \ seq(copy_byte(e,io,r_type2), \ seq(copy_byte(e,io,r_type), \ nullcopy)))))) #else /* __LIBELF64_IRIX */ #define copy_rela_11(e,io,seq) \ seq(copy_addr(e,io,r_offset), \ seq(copy_xword(e,io,r_info), \ seq(copy_sxword(e,io,r_addend), \ nullcopy))) #define copy_rel_11(e,io,seq) \ seq(copy_addr(e,io,r_offset), \ seq(copy_xword(e,io,r_info), \ nullcopy)) #endif /* __LIBELF64_IRIX */ #define copy_shdr_11(e,io,seq) \ seq(copy_word(e,io,sh_name), \ seq(copy_word(e,io,sh_type), \ seq(copy_xword(e,io,sh_flags), \ seq(copy_addr(e,io,sh_addr), \ seq(copy_off(e,io,sh_offset), \ seq(copy_xword(e,io,sh_size), \ seq(copy_word(e,io,sh_link), \ seq(copy_word(e,io,sh_info), \ seq(copy_xword(e,io,sh_addralign), \ seq(copy_xword(e,io,sh_entsize), \ nullcopy)))))))))) #define copy_sym_11(e,io,seq) \ seq(copy_word(e,io,st_name), \ seq(copy_byte(e,io,st_info), \ seq(copy_byte(e,io,st_other), \ seq(copy_half(e,io,st_shndx), \ seq(copy_addr(e,io,st_value), \ seq(copy_xword(e,io,st_size), \ nullcopy)))))) #define nullcopy /**/ static size_t byte_copy(unsigned char *dst, const unsigned char *src, size_t n) { if (n && dst && dst != src) { #if HAVE_BROKEN_MEMMOVE size_t i; if (dst >= src + n || dst + n <= src) { memcpy(dst, src, n); } else if (dst < src) { for (i = 0; i < n; i++) { dst[i] = src[i]; } } else { for (i = n; --i; ) { dst[i] = src[i]; } } #else /* HAVE_BROKEN_MEMMOVE */ memmove(dst, src, n); #endif /* HAVE_BROKEN_MEMMOVE */ } return n; } static void array_copy(unsigned char *dst, size_t dlen, const unsigned char *src, size_t slen) { byte_copy(dst, src, dlen < slen ? dlen : slen); if (dlen > slen) { memset(dst + slen, 0, dlen - slen); } } /* * instantiate copy functions */ copy_type(addr_64,_,Elf64_Addr,copy_addr_11) copy_type(half_64,_,Elf64_Half,copy_half_11) copy_type(off_64,_,Elf64_Off,copy_off_11) copy_type(sword_64,_,Elf64_Sword,copy_sword_11) copy_type(word_64,_,Elf64_Word,copy_word_11) copy_type(sxword_64,_,Elf64_Sxword,copy_sxword_11) copy_type(xword_64,_,Elf64_Xword,copy_xword_11) copy_type(dyn_64,11,Elf64_Dyn,copy_dyn_11) copy_type(ehdr_64,11,Elf64_Ehdr,copy_ehdr_11) copy_type(phdr_64,11,Elf64_Phdr,copy_phdr_11) copy_type(rela_64,11,Elf64_Rela,copy_rela_11) copy_type(rel_64,11,Elf64_Rel,copy_rel_11) copy_type(shdr_64,11,Elf64_Shdr,copy_shdr_11) copy_type(sym_64,11,Elf64_Sym,copy_sym_11) typedef size_t (*xlator)(unsigned char*, const unsigned char*, size_t); typedef xlator xltab[ELF_T_NUM][2]; /* * translation table (64-bit, version 1 -> version 1) */ #if PIC static xltab #else /* PIC */ static const xltab #endif /* PIC */ xlate64_11[/*encoding*/] = { { { byte_copy, byte_copy }, { addr_64L__tom, addr_64L__tof }, { dyn_64L11_tom, dyn_64L11_tof }, { ehdr_64L11_tom, ehdr_64L11_tof }, { half_64L__tom, half_64L__tof }, { off_64L__tom, off_64L__tof }, { phdr_64L11_tom, phdr_64L11_tof }, { rela_64L11_tom, rela_64L11_tof }, { rel_64L11_tom, rel_64L11_tof }, { shdr_64L11_tom, shdr_64L11_tof }, { sword_64L__tom, sword_64L__tof }, { sym_64L11_tom, sym_64L11_tof }, { word_64L__tom, word_64L__tof }, { sxword_64L__tom, sxword_64L__tof }, { xword_64L__tom, xword_64L__tof }, #if __LIBELF_SYMBOL_VERSIONS { _elf_verdef_64L11_tom, _elf_verdef_64L11_tof }, { _elf_verneed_64L11_tom, _elf_verneed_64L11_tof }, #else /* __LIBELF_SYMBOL_VERSIONS */ { 0, 0 }, { 0, 0 }, #endif /* __LIBELF_SYMBOL_VERSIONS */ }, { { byte_copy, byte_copy }, { addr_64M__tom, addr_64M__tof }, { dyn_64M11_tom, dyn_64M11_tof }, { ehdr_64M11_tom, ehdr_64M11_tof }, { half_64M__tom, half_64M__tof }, { off_64M__tom, off_64M__tof }, { phdr_64M11_tom, phdr_64M11_tof }, { rela_64M11_tom, rela_64M11_tof }, { rel_64M11_tom, rel_64M11_tof }, { shdr_64M11_tom, shdr_64M11_tof }, { sword_64M__tom, sword_64M__tof }, { sym_64M11_tom, sym_64M11_tof }, { word_64M__tom, word_64M__tof }, { sxword_64M__tom, sxword_64M__tof }, { xword_64M__tom, xword_64M__tof }, #if __LIBELF_SYMBOL_VERSIONS { _elf_verdef_64M11_tom, _elf_verdef_64M11_tof }, { _elf_verneed_64M11_tom, _elf_verneed_64M11_tof }, #else /* __LIBELF_SYMBOL_VERSIONS */ { 0, 0 }, { 0, 0 }, #endif /* __LIBELF_SYMBOL_VERSIONS */ }, }; /* * main translation table (64-bit) */ #if PIC static xltab* #else /* PIC */ static const xltab *const #endif /* PIC */ xlate64[EV_CURRENT - EV_NONE][EV_CURRENT - EV_NONE] = { { xlate64_11, }, }; #define translator(sv,dv,enc,type,d) \ (xlate64[(sv) - EV_NONE - 1] \ [(dv) - EV_NONE - 1] \ [(enc) - ELFDATA2LSB] \ [(type) - ELF_T_BYTE] \ [d]) /* * destination buffer size */ size_t _elf64_xltsize(const Elf_Data *src, unsigned dv, unsigned encode, int tof) { Elf_Type type = src->d_type; unsigned sv = src->d_version; xlator op; if (!valid_version(sv) || !valid_version(dv)) { seterr(ERROR_UNKNOWN_VERSION); return (size_t)-1; } if (tof) { /* * Encoding doesn't really matter (the translator only looks at * the source, which resides in memory), but we need a proper * encoding to select a translator... */ encode = ELFDATA2LSB; } else if (!valid_encoding(encode)) { seterr(ERROR_UNKNOWN_ENCODING); return (size_t)-1; } if (!valid_type(type)) { seterr(ERROR_UNKNOWN_TYPE); return (size_t)-1; } if (!(op = translator(sv, dv, encode, type, tof))) { seterr(ERROR_UNKNOWN_TYPE); return (size_t)-1; } return (*op)(NULL, src->d_buf, src->d_size); } /* * direction-independent translation */ static Elf_Data* elf64_xlate(Elf_Data *dst, const Elf_Data *src, unsigned encode, int tof) { Elf_Type type; int dv; int sv; size_t dsize; size_t tmp; xlator op; if (!src || !dst) { return NULL; } if (!src->d_buf || !dst->d_buf) { seterr(ERROR_NULLBUF); return NULL; } if (!valid_encoding(encode)) { seterr(ERROR_UNKNOWN_ENCODING); return NULL; } sv = src->d_version; dv = dst->d_version; if (!valid_version(sv) || !valid_version(dv)) { seterr(ERROR_UNKNOWN_VERSION); return NULL; } type = src->d_type; if (!valid_type(type)) { seterr(ERROR_UNKNOWN_TYPE); return NULL; } op = translator(sv, dv, encode, type, tof); if (!op) { seterr(ERROR_UNKNOWN_TYPE); return NULL; } dsize = (*op)(NULL, src->d_buf, src->d_size); if (dsize == (size_t)-1) { return NULL; } if (dst->d_size < dsize) { seterr(ERROR_DST2SMALL); return NULL; } if (dsize) { tmp = (*op)(dst->d_buf, src->d_buf, src->d_size); if (tmp == (size_t)-1) { return NULL; } elf_assert(tmp == dsize); } dst->d_size = dsize; dst->d_type = type; return dst; } /* * finally, the "official" translation functions */ Elf_Data* elf64_xlatetom(Elf_Data *dst, const Elf_Data *src, unsigned encode) { return elf64_xlate(dst, src, encode, 0); } Elf_Data* elf64_xlatetof(Elf_Data *dst, const Elf_Data *src, unsigned encode) { return elf64_xlate(dst, src, encode, 1); } Elf_Data* gelf_xlatetom(Elf *elf, Elf_Data *dst, const Elf_Data *src, unsigned encode) { if (elf) { if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (elf->e_class == ELFCLASS32) { return elf32_xlatetom(dst, src, encode); } else if (elf->e_class == ELFCLASS64) { return elf64_xlatetom(dst, src, encode); } else if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } } return NULL; } Elf_Data* gelf_xlatetof(Elf *elf, Elf_Data *dst, const Elf_Data *src, unsigned encode) { if (elf) { if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (elf->e_class == ELFCLASS32) { return elf32_xlatetof(dst, src, encode); } else if (elf->e_class == ELFCLASS64) { return elf64_xlatetof(dst, src, encode); } else if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } } return NULL; } #endif /* __LIBELF64__ */ libelf-0.8.13.orig/lib/getdata.c0000644000000000000000000000740111015476446015032 0ustar rootroot/* getdata.c - implementation of the elf_getdata(3) function. Copyright (C) 1995 - 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: getdata.c,v 1.13 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ static Elf_Data* _elf_cook_scn(Elf *elf, Elf_Scn *scn, Scn_Data *sd) { Elf_Data dst; Elf_Data src; int flag = 0; size_t dlen; elf_assert(elf->e_data); /* * Prepare source */ src = sd->sd_data; src.d_version = elf->e_version; if (elf->e_rawdata) { src.d_buf = elf->e_rawdata + scn->s_offset; } else { src.d_buf = elf->e_data + scn->s_offset; } /* * Prepare destination (needs prepared source!) */ dst = sd->sd_data; if (elf->e_class == ELFCLASS32) { dlen = _elf32_xltsize(&src, dst.d_version, elf->e_encoding, 0); } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { dlen = _elf64_xltsize(&src, dst.d_version, elf->e_encoding, 0); } #endif /* __LIBELF64 */ else { elf_assert(valid_class(elf->e_class)); seterr(ERROR_UNIMPLEMENTED); return NULL; } if (dlen == (size_t)-1) { return NULL; } dst.d_size = dlen; if (elf->e_rawdata != elf->e_data && dst.d_size <= src.d_size) { dst.d_buf = elf->e_data + scn->s_offset; } else if (!(dst.d_buf = malloc(dst.d_size))) { seterr(ERROR_MEM_SCNDATA); return NULL; } else { flag = 1; } /* * Translate data */ if (_elf_xlatetom(elf, &dst, &src)) { sd->sd_memdata = (char*)dst.d_buf; sd->sd_data = dst; if (!(sd->sd_free_data = flag)) { elf->e_cooked = 1; } return &sd->sd_data; } if (flag) { free(dst.d_buf); } return NULL; } Elf_Data* elf_getdata(Elf_Scn *scn, Elf_Data *data) { Scn_Data *sd; Elf *elf; if (!scn) { return NULL; } elf_assert(scn->s_magic == SCN_MAGIC); if (scn->s_index == SHN_UNDEF) { seterr(ERROR_NULLSCN); } else if (data) { for (sd = scn->s_data_1; sd; sd = sd->sd_link) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); if (data == &sd->sd_data) { /* * sd_link allocated by elf_newdata(). */ return &sd->sd_link->sd_data; } } seterr(ERROR_SCNDATAMISMATCH); } else if ((sd = scn->s_data_1)) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); elf = scn->s_elf; elf_assert(elf); elf_assert(elf->e_magic == ELF_MAGIC); if (sd->sd_freeme) { /* allocated by elf_newdata() */ return &sd->sd_data; } else if (scn->s_type == SHT_NULL) { seterr(ERROR_NULLSCN); } else if (sd->sd_memdata) { /* already cooked */ return &sd->sd_data; } else if (scn->s_offset < 0 || scn->s_offset > elf->e_size) { seterr(ERROR_OUTSIDE); } else if (scn->s_type == SHT_NOBITS || !scn->s_size) { /* no data to read */ return &sd->sd_data; } else if (scn->s_offset + scn->s_size > elf->e_size) { seterr(ERROR_TRUNC_SCN); } else if (valid_class(elf->e_class)) { return _elf_cook_scn(elf, scn, sd); } else { seterr(ERROR_UNKNOWN_CLASS); } } return NULL; } libelf-0.8.13.orig/lib/x.elfext.c0000644000000000000000000001051111224706227015145 0ustar rootroot/* * x.elfext.c -- handle ELF format extensions * Copyright (C) 2002 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: x.elfext.c,v 1.5 2009/07/07 17:57:43 michael Exp $"; #endif /* lint */ int elf_getphdrnum(Elf *elf, size_t *resultp) { if (!elf) { return -1; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); return -1; } if (!elf->e_ehdr && !_elf_cook(elf)) { return -1; } if (resultp) { *resultp = elf->e_phnum; } return 0; } int elf_getshdrnum(Elf *elf, size_t *resultp) { size_t num = 0; Elf_Scn *scn; if (!elf) { return -1; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); return -1; } if (!elf->e_ehdr && !_elf_cook(elf)) { return -1; } if ((scn = elf->e_scn_n)) { num = scn->s_index + 1; } if (resultp) { *resultp = num; } return 0; } int elf_getshdrstrndx(Elf *elf, size_t *resultp) { size_t num = 0; size_t dummy; Elf_Scn *scn; if (!elf) { return -1; } elf_assert(elf->e_magic == ELF_MAGIC); if (resultp == NULL) { resultp = &dummy; /* handle NULL pointer gracefully */ } if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); return -1; } if (!elf->e_ehdr && !_elf_cook(elf)) { return -1; } if (elf->e_class == ELFCLASS32) { num = ((Elf32_Ehdr*)elf->e_ehdr)->e_shstrndx; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { num = ((Elf64_Ehdr*)elf->e_ehdr)->e_shstrndx; } #endif /* __LIBELF64 */ else { if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } return -1; } if (num != SHN_XINDEX) { *resultp = num; return 0; } /* * look at first section header */ if (!(scn = elf->e_scn_1)) { seterr(ERROR_NOSUCHSCN); return -1; } elf_assert(scn->s_magic == SCN_MAGIC); #if __LIBELF64 if (elf->e_class == ELFCLASS64) { *resultp = scn->s_shdr64.sh_link; return 0; } #endif /* __LIBELF64 */ *resultp = scn->s_shdr32.sh_link; return 0; } int elf_getphnum(Elf *elf, size_t *resultp) { return elf_getphdrnum(elf, resultp) ? LIBELF_FAILURE : LIBELF_SUCCESS; } int elf_getshnum(Elf *elf, size_t *resultp) { return elf_getshdrnum(elf, resultp) ? LIBELF_FAILURE : LIBELF_SUCCESS; } int elf_getshstrndx(Elf *elf, size_t *resultp) { return elf_getshdrstrndx(elf, resultp) ? LIBELF_FAILURE : LIBELF_SUCCESS; } int elfx_update_shstrndx(Elf *elf, size_t value) { size_t extvalue = 0; Elf_Scn *scn; if (!elf) { return LIBELF_FAILURE; } elf_assert(elf->e_magic == ELF_MAGIC); if (value >= SHN_LORESERVE) { extvalue = value; value = SHN_XINDEX; } if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); return LIBELF_FAILURE; } if (!elf->e_ehdr && !_elf_cook(elf)) { return LIBELF_FAILURE; } if (!(scn = _elf_first_scn(elf))) { return LIBELF_FAILURE; } elf_assert(scn->s_magic == SCN_MAGIC); if (elf->e_class == ELFCLASS32) { ((Elf32_Ehdr*)elf->e_ehdr)->e_shstrndx = value; scn->s_shdr32.sh_link = extvalue; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { ((Elf64_Ehdr*)elf->e_ehdr)->e_shstrndx = value; scn->s_shdr64.sh_link = extvalue; } #endif /* __LIBELF64 */ else { if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } return LIBELF_FAILURE; } elf->e_ehdr_flags |= ELF_F_DIRTY; scn->s_shdr_flags |= ELF_F_DIRTY; return LIBELF_SUCCESS; } libelf-0.8.13.orig/lib/errno.c0000644000000000000000000000201511015476446014542 0ustar rootroot/* errno.c - implementation of the elf_errno(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: errno.c,v 1.7 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ int elf_errno(void) { int tmp = _elf_errno; _elf_errno = 0; return tmp; } libelf-0.8.13.orig/lib/gelftrans.c0000644000000000000000000002236011015476446015407 0ustar rootroot/* gelftrans.c - gelf_* translation functions. Copyright (C) 2000 - 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #if __LIBELF64 #ifndef lint static const char rcsid[] = "@(#) $Id: gelftrans.c,v 1.10 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ #define check_and_copy(type, d, s, name, eret) \ do { \ if (sizeof((d)->name) < sizeof((s)->name) \ && (type)(s)->name != (s)->name) { \ seterr(ERROR_BADVALUE); \ return (eret); \ } \ (d)->name = (type)(s)->name; \ } while (0) /* * These macros are missing on some Linux systems */ #if !defined(ELF32_R_SYM) || !defined(ELF32_R_TYPE) || !defined(ELF32_R_INFO) # undef ELF32_R_SYM # undef ELF32_R_TYPE # undef ELF32_R_INFO # define ELF32_R_SYM(i) ((i)>>8) # define ELF32_R_TYPE(i) ((unsigned char)(i)) # define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t)) #endif /* !defined(...) */ #if !defined(ELF64_R_SYM) || !defined(ELF64_R_TYPE) || !defined(ELF64_R_INFO) # undef ELF64_R_SYM # undef ELF64_R_TYPE # undef ELF64_R_INFO # define ELF64_R_SYM(i) ((i)>>32) # define ELF64_R_TYPE(i) ((i)&0xffffffffL) # define ELF64_R_INFO(s,t) (((Elf64_Xword)(s)<<32)+((t)&0xffffffffL)) #endif /* !defined(...) */ static char* get_addr_and_class(const Elf_Data *data, int ndx, Elf_Type type, unsigned *cls) { Scn_Data *sd = (Scn_Data*)data; Elf_Scn *scn; Elf *elf; size_t n; if (!sd) { return NULL; } elf_assert(sd->sd_magic == DATA_MAGIC); scn = sd->sd_scn; elf_assert(scn); elf_assert(scn->s_magic == SCN_MAGIC); elf = scn->s_elf; elf_assert(elf); elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); return NULL; } if (!valid_class(elf->e_class)) { seterr(ERROR_UNKNOWN_CLASS); return NULL; } if (data->d_type != type) { seterr(ERROR_BADTYPE); return NULL; } n = _msize(elf->e_class, data->d_version, type); if (n == 0) { seterr(ERROR_UNIMPLEMENTED); return NULL; } if (ndx < 0 || data->d_size < (ndx + 1) * n) { seterr(ERROR_BADINDEX); return NULL; } if (!data->d_buf) { seterr(ERROR_NULLBUF); return NULL; } if (cls) { *cls = elf->e_class; } return (char*)data->d_buf + n * ndx; } GElf_Sym* gelf_getsym(Elf_Data *src, int ndx, GElf_Sym *dst) { GElf_Sym buf; unsigned cls; char *tmp; if (!dst) { dst = &buf; } tmp = get_addr_and_class(src, ndx, ELF_T_SYM, &cls); if (!tmp) { return NULL; } if (cls == ELFCLASS64) { *dst = *(Elf64_Sym*)tmp; } else if (cls == ELFCLASS32) { Elf32_Sym *src = (Elf32_Sym*)tmp; check_and_copy(GElf_Word, dst, src, st_name, NULL); check_and_copy(unsigned char, dst, src, st_info, NULL); check_and_copy(unsigned char, dst, src, st_other, NULL); check_and_copy(GElf_Half, dst, src, st_shndx, NULL); check_and_copy(GElf_Addr, dst, src, st_value, NULL); check_and_copy(GElf_Xword, dst, src, st_size, NULL); } else { seterr(ERROR_UNIMPLEMENTED); return NULL; } if (dst == &buf) { dst = (GElf_Sym*)malloc(sizeof(GElf_Sym)); if (!dst) { seterr(ERROR_MEM_SYM); return NULL; } *dst = buf; } return dst; } int gelf_update_sym(Elf_Data *dst, int ndx, GElf_Sym *src) { unsigned cls; char *tmp; tmp = get_addr_and_class(dst, ndx, ELF_T_SYM, &cls); if (!tmp) { return 0; } if (cls == ELFCLASS64) { *(Elf64_Sym*)tmp = *src; } else if (cls == ELFCLASS32) { Elf32_Sym *dst = (Elf32_Sym*)tmp; check_and_copy(Elf32_Word, dst, src, st_name, 0); check_and_copy(Elf32_Addr, dst, src, st_value, 0); check_and_copy(Elf32_Word, dst, src, st_size, 0); check_and_copy(unsigned char, dst, src, st_info, 0); check_and_copy(unsigned char, dst, src, st_other, 0); check_and_copy(Elf32_Half, dst, src, st_shndx, 0); } else { seterr(ERROR_UNIMPLEMENTED); return 0; } return 1; } GElf_Dyn* gelf_getdyn(Elf_Data *src, int ndx, GElf_Dyn *dst) { GElf_Dyn buf; unsigned cls; char *tmp; if (!dst) { dst = &buf; } tmp = get_addr_and_class(src, ndx, ELF_T_DYN, &cls); if (!tmp) { return NULL; } if (cls == ELFCLASS64) { *dst = *(Elf64_Dyn*)tmp; } else if (cls == ELFCLASS32) { Elf32_Dyn *src = (Elf32_Dyn*)tmp; check_and_copy(GElf_Sxword, dst, src, d_tag, NULL); check_and_copy(GElf_Xword, dst, src, d_un.d_val, NULL); } else { seterr(ERROR_UNIMPLEMENTED); return NULL; } if (dst == &buf) { dst = (GElf_Dyn*)malloc(sizeof(GElf_Dyn)); if (!dst) { seterr(ERROR_MEM_DYN); return NULL; } *dst = buf; } return dst; } int gelf_update_dyn(Elf_Data *dst, int ndx, GElf_Dyn *src) { unsigned cls; char *tmp; tmp = get_addr_and_class(dst, ndx, ELF_T_DYN, &cls); if (!tmp) { return 0; } if (cls == ELFCLASS64) { *(Elf64_Dyn*)tmp = *src; } else if (cls == ELFCLASS32) { Elf32_Dyn *dst = (Elf32_Dyn*)tmp; check_and_copy(Elf32_Sword, dst, src, d_tag, 0); check_and_copy(Elf32_Word, dst, src, d_un.d_val, 0); } else { seterr(ERROR_UNIMPLEMENTED); return 0; } return 1; } GElf_Rela* gelf_getrela(Elf_Data *src, int ndx, GElf_Rela *dst) { GElf_Rela buf; unsigned cls; char *tmp; if (!dst) { dst = &buf; } tmp = get_addr_and_class(src, ndx, ELF_T_RELA, &cls); if (!tmp) { return NULL; } if (cls == ELFCLASS64) { *dst = *(Elf64_Rela*)tmp; } else if (cls == ELFCLASS32) { Elf32_Rela *src = (Elf32_Rela*)tmp; check_and_copy(GElf_Addr, dst, src, r_offset, NULL); dst->r_info = ELF64_R_INFO((Elf64_Xword)ELF32_R_SYM(src->r_info), (Elf64_Xword)ELF32_R_TYPE(src->r_info)); check_and_copy(GElf_Sxword, dst, src, r_addend, NULL); } else { seterr(ERROR_UNIMPLEMENTED); return NULL; } if (dst == &buf) { dst = (GElf_Rela*)malloc(sizeof(GElf_Rela)); if (!dst) { seterr(ERROR_MEM_RELA); return NULL; } *dst = buf; } return dst; } int gelf_update_rela(Elf_Data *dst, int ndx, GElf_Rela *src) { unsigned cls; char *tmp; tmp = get_addr_and_class(dst, ndx, ELF_T_RELA, &cls); if (!tmp) { return 0; } if (cls == ELFCLASS64) { *(Elf64_Rela*)tmp = *src; } else if (cls == ELFCLASS32) { Elf32_Rela *dst = (Elf32_Rela*)tmp; check_and_copy(Elf32_Addr, dst, src, r_offset, 0); if (ELF64_R_SYM(src->r_info) > 0xffffffUL || ELF64_R_TYPE(src->r_info) > 0xffUL) { seterr(ERROR_BADVALUE); return 0; } dst->r_info = ELF32_R_INFO((Elf32_Word)ELF64_R_SYM(src->r_info), (Elf32_Word)ELF64_R_TYPE(src->r_info)); check_and_copy(Elf32_Sword, dst, src, r_addend, 0); } else { seterr(ERROR_UNIMPLEMENTED); return 0; } return 1; } GElf_Rel* gelf_getrel(Elf_Data *src, int ndx, GElf_Rel *dst) { GElf_Rel buf; unsigned cls; char *tmp; if (!dst) { dst = &buf; } tmp = get_addr_and_class(src, ndx, ELF_T_REL, &cls); if (!tmp) { return NULL; } if (cls == ELFCLASS64) { *dst = *(Elf64_Rel*)tmp; } else if (cls == ELFCLASS32) { Elf32_Rel *src = (Elf32_Rel*)tmp; check_and_copy(GElf_Addr, dst, src, r_offset, NULL); dst->r_info = ELF64_R_INFO((Elf64_Xword)ELF32_R_SYM(src->r_info), (Elf64_Xword)ELF32_R_TYPE(src->r_info)); } else { seterr(ERROR_UNIMPLEMENTED); return NULL; } if (dst == &buf) { dst = (GElf_Rel*)malloc(sizeof(GElf_Rel)); if (!dst) { seterr(ERROR_MEM_REL); return NULL; } *dst = buf; } return dst; } int gelf_update_rel(Elf_Data *dst, int ndx, GElf_Rel *src) { unsigned cls; char *tmp; tmp = get_addr_and_class(dst, ndx, ELF_T_REL, &cls); if (!tmp) { return 0; } if (cls == ELFCLASS64) { *(Elf64_Rel*)tmp = *src; } else if (cls == ELFCLASS32) { Elf32_Rel *dst = (Elf32_Rel*)tmp; check_and_copy(Elf32_Addr, dst, src, r_offset, 0); if (ELF64_R_SYM(src->r_info) > 0xffffffUL || ELF64_R_TYPE(src->r_info) > 0xffUL) { seterr(ERROR_BADVALUE); return 0; } dst->r_info = ELF32_R_INFO((Elf32_Word)ELF64_R_SYM(src->r_info), (Elf32_Word)ELF64_R_TYPE(src->r_info)); } else { seterr(ERROR_UNIMPLEMENTED); return 0; } return 1; } #if 0 GElf_Syminfo* gelf_getsyminfo(Elf_Data *src, int ndx, GElf_Syminfo *dst) { seterr(ERROR_UNIMPLEMENTED); return NULL; } int gelf_update_syminfo(Elf_Data *dst, int ndx, GElf_Syminfo *src) { seterr(ERROR_UNIMPLEMENTED); return 0; } GElf_Move* gelf_getmove(Elf_Data *src, int ndx, GElf_Move *src) { seterr(ERROR_UNIMPLEMENTED); return NULL; } int gelf_update_move(Elf_Data *dst, int ndx, GElf_Move *src) { seterr(ERROR_UNIMPLEMENTED); return 0; } #endif #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/nlist.h0000644000000000000000000000265411015476447014565 0ustar rootroot/* * nlist.h - public header file for nlist(3). * Copyright (C) 1995 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ /* @(#) $Id: nlist.h,v 1.10 2008/05/23 08:15:35 michael Exp $ */ #ifndef _NLIST_H #define _NLIST_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ struct nlist { char* n_name; long n_value; short n_scnum; unsigned short n_type; char n_sclass; char n_numaux; }; #if (__STDC__ + 0) || defined(__cplusplus) || defined(_WIN32) extern int nlist(const char *__filename, struct nlist *__nl); #else /* __STDC__ || defined(__cplusplus) */ extern int nlist(); #endif /* __STDC__ || defined(__cplusplus) */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _NLIST_H */ libelf-0.8.13.orig/lib/gelfphdr.c0000644000000000000000000000757511015476446015230 0ustar rootroot/* * gelfphdr.c - gelf_* translation functions. * Copyright (C) 2000 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #if __LIBELF64 #ifndef lint static const char rcsid[] = "@(#) $Id: gelfphdr.c,v 1.9 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ #define check_and_copy(type, d, s, name, eret) \ do { \ if (sizeof((d)->name) < sizeof((s)->name) \ && (type)(s)->name != (s)->name) { \ seterr(ERROR_BADVALUE); \ return (eret); \ } \ (d)->name = (type)(s)->name; \ } while (0) GElf_Phdr* gelf_getphdr(Elf *elf, int ndx, GElf_Phdr *dst) { GElf_Phdr buf; char *tmp; size_t n; if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); tmp = _elf_getphdr(elf, elf->e_class); if (!tmp) { return NULL; } if (ndx < 0 || ndx >= elf->e_phnum) { seterr(ERROR_BADINDEX); return NULL; } n = _msize(elf->e_class, _elf_version, ELF_T_PHDR); if (n == 0) { seterr(ERROR_UNIMPLEMENTED); return NULL; } if (!dst) { dst = &buf; } if (elf->e_class == ELFCLASS64) { *dst = *(Elf64_Phdr*)(tmp + ndx * n); } else if (elf->e_class == ELFCLASS32) { Elf32_Phdr *src = (Elf32_Phdr*)(tmp + ndx * n); check_and_copy(GElf_Word, dst, src, p_type, NULL); check_and_copy(GElf_Word, dst, src, p_flags, NULL); check_and_copy(GElf_Off, dst, src, p_offset, NULL); check_and_copy(GElf_Addr, dst, src, p_vaddr, NULL); check_and_copy(GElf_Addr, dst, src, p_paddr, NULL); check_and_copy(GElf_Xword, dst, src, p_filesz, NULL); check_and_copy(GElf_Xword, dst, src, p_memsz, NULL); check_and_copy(GElf_Xword, dst, src, p_align, NULL); } else { if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } return NULL; } if (dst == &buf) { dst = (GElf_Phdr*)malloc(sizeof(GElf_Phdr)); if (!dst) { seterr(ERROR_MEM_PHDR); return NULL; } *dst = buf; } return dst; } int gelf_update_phdr(Elf *elf, int ndx, GElf_Phdr *src) { char *tmp; size_t n; if (!elf || !src) { return 0; } elf_assert(elf->e_magic == ELF_MAGIC); tmp = _elf_getphdr(elf, elf->e_class); if (!tmp) { return 0; } if (ndx < 0 || ndx >= elf->e_phnum) { seterr(ERROR_BADINDEX); return 0; } n = _msize(elf->e_class, _elf_version, ELF_T_PHDR); if (n == 0) { seterr(ERROR_UNIMPLEMENTED); return 0; } if (elf->e_class == ELFCLASS64) { *(Elf64_Phdr*)(tmp + ndx * n) = *src; } else if (elf->e_class == ELFCLASS32) { Elf32_Phdr *dst = (Elf32_Phdr*)(tmp + ndx * n); check_and_copy(Elf32_Word, dst, src, p_type, 0); check_and_copy(Elf32_Off, dst, src, p_offset, 0); check_and_copy(Elf32_Addr, dst, src, p_vaddr, 0); check_and_copy(Elf32_Addr, dst, src, p_paddr, 0); check_and_copy(Elf32_Word, dst, src, p_filesz, 0); check_and_copy(Elf32_Word, dst, src, p_memsz, 0); check_and_copy(Elf32_Word, dst, src, p_flags, 0); check_and_copy(Elf32_Word, dst, src, p_align, 0); } else { if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } return 0; } return 1; } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/ext_types.h0000644000000000000000000001765311015476446015464 0ustar rootroot/* ext_types.h - external representation of ELF data types. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ /* @(#) $Id: ext_types.h,v 1.9 2008/05/23 08:15:34 michael Exp $ */ #ifndef _EXT_TYPES_H #define _EXT_TYPES_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Scalar data types */ typedef unsigned char __ext_Elf32_Addr [ELF32_FSZ_ADDR]; typedef unsigned char __ext_Elf32_Half [ELF32_FSZ_HALF]; typedef unsigned char __ext_Elf32_Off [ELF32_FSZ_OFF]; typedef unsigned char __ext_Elf32_Sword [ELF32_FSZ_SWORD]; typedef unsigned char __ext_Elf32_Word [ELF32_FSZ_WORD]; #if __LIBELF64 typedef unsigned char __ext_Elf32_Lword [8]; typedef unsigned char __ext_Elf64_Addr [ELF64_FSZ_ADDR]; typedef unsigned char __ext_Elf64_Half [ELF64_FSZ_HALF]; typedef unsigned char __ext_Elf64_Off [ELF64_FSZ_OFF]; typedef unsigned char __ext_Elf64_Sword [ELF64_FSZ_SWORD]; typedef unsigned char __ext_Elf64_Word [ELF64_FSZ_WORD]; typedef unsigned char __ext_Elf64_Sxword[ELF64_FSZ_SXWORD]; typedef unsigned char __ext_Elf64_Xword [ELF64_FSZ_XWORD]; typedef unsigned char __ext_Elf64_Lword [8]; #endif /* __LIBELF64 */ /* * ELF header */ typedef struct { unsigned char e_ident[EI_NIDENT]; __ext_Elf32_Half e_type; __ext_Elf32_Half e_machine; __ext_Elf32_Word e_version; __ext_Elf32_Addr e_entry; __ext_Elf32_Off e_phoff; __ext_Elf32_Off e_shoff; __ext_Elf32_Word e_flags; __ext_Elf32_Half e_ehsize; __ext_Elf32_Half e_phentsize; __ext_Elf32_Half e_phnum; __ext_Elf32_Half e_shentsize; __ext_Elf32_Half e_shnum; __ext_Elf32_Half e_shstrndx; } __ext_Elf32_Ehdr; #if __LIBELF64 typedef struct { unsigned char e_ident[EI_NIDENT]; __ext_Elf64_Half e_type; __ext_Elf64_Half e_machine; __ext_Elf64_Word e_version; __ext_Elf64_Addr e_entry; __ext_Elf64_Off e_phoff; __ext_Elf64_Off e_shoff; __ext_Elf64_Word e_flags; __ext_Elf64_Half e_ehsize; __ext_Elf64_Half e_phentsize; __ext_Elf64_Half e_phnum; __ext_Elf64_Half e_shentsize; __ext_Elf64_Half e_shnum; __ext_Elf64_Half e_shstrndx; } __ext_Elf64_Ehdr; #endif /* __LIBELF64 */ /* * Section header */ typedef struct { __ext_Elf32_Word sh_name; __ext_Elf32_Word sh_type; __ext_Elf32_Word sh_flags; __ext_Elf32_Addr sh_addr; __ext_Elf32_Off sh_offset; __ext_Elf32_Word sh_size; __ext_Elf32_Word sh_link; __ext_Elf32_Word sh_info; __ext_Elf32_Word sh_addralign; __ext_Elf32_Word sh_entsize; } __ext_Elf32_Shdr; #if __LIBELF64 typedef struct { __ext_Elf64_Word sh_name; __ext_Elf64_Word sh_type; __ext_Elf64_Xword sh_flags; __ext_Elf64_Addr sh_addr; __ext_Elf64_Off sh_offset; __ext_Elf64_Xword sh_size; __ext_Elf64_Word sh_link; __ext_Elf64_Word sh_info; __ext_Elf64_Xword sh_addralign; __ext_Elf64_Xword sh_entsize; } __ext_Elf64_Shdr; #endif /* __LIBELF64 */ /* * Symbol table */ typedef struct { __ext_Elf32_Word st_name; __ext_Elf32_Addr st_value; __ext_Elf32_Word st_size; unsigned char st_info; unsigned char st_other; __ext_Elf32_Half st_shndx; } __ext_Elf32_Sym; #if __LIBELF64 typedef struct { __ext_Elf64_Word st_name; unsigned char st_info; unsigned char st_other; __ext_Elf64_Half st_shndx; __ext_Elf64_Addr st_value; __ext_Elf64_Xword st_size; } __ext_Elf64_Sym; #endif /* __LIBELF64 */ /* * Relocation */ typedef struct { __ext_Elf32_Addr r_offset; __ext_Elf32_Word r_info; } __ext_Elf32_Rel; typedef struct { __ext_Elf32_Addr r_offset; __ext_Elf32_Word r_info; __ext_Elf32_Sword r_addend; } __ext_Elf32_Rela; #if __LIBELF64 typedef struct { __ext_Elf64_Addr r_offset; #if __LIBELF64_IRIX __ext_Elf64_Word r_sym; unsigned char r_ssym; unsigned char r_type3; unsigned char r_type2; unsigned char r_type; #else /* __LIBELF64_IRIX */ __ext_Elf64_Xword r_info; #endif /* __LIBELF64_IRIX */ } __ext_Elf64_Rel; typedef struct { __ext_Elf64_Addr r_offset; #if __LIBELF64_IRIX __ext_Elf64_Word r_sym; unsigned char r_ssym; unsigned char r_type3; unsigned char r_type2; unsigned char r_type; #else /* __LIBELF64_IRIX */ __ext_Elf64_Xword r_info; #endif /* __LIBELF64_IRIX */ __ext_Elf64_Sxword r_addend; } __ext_Elf64_Rela; #endif /* __LIBELF64 */ /* * Program header */ typedef struct { __ext_Elf32_Word p_type; __ext_Elf32_Off p_offset; __ext_Elf32_Addr p_vaddr; __ext_Elf32_Addr p_paddr; __ext_Elf32_Word p_filesz; __ext_Elf32_Word p_memsz; __ext_Elf32_Word p_flags; __ext_Elf32_Word p_align; } __ext_Elf32_Phdr; #if __LIBELF64 typedef struct { __ext_Elf64_Word p_type; __ext_Elf64_Word p_flags; __ext_Elf64_Off p_offset; __ext_Elf64_Addr p_vaddr; __ext_Elf64_Addr p_paddr; __ext_Elf64_Xword p_filesz; __ext_Elf64_Xword p_memsz; __ext_Elf64_Xword p_align; } __ext_Elf64_Phdr; #endif /* __LIBELF64 */ /* * Dynamic structure */ typedef struct { __ext_Elf32_Sword d_tag; union { __ext_Elf32_Word d_val; __ext_Elf32_Addr d_ptr; } d_un; } __ext_Elf32_Dyn; #if __LIBELF64 typedef struct { __ext_Elf64_Sxword d_tag; union { __ext_Elf64_Xword d_val; __ext_Elf64_Addr d_ptr; } d_un; } __ext_Elf64_Dyn; #endif /* __LIBELF64 */ /* * Version definitions */ typedef struct { __ext_Elf32_Half vd_version; __ext_Elf32_Half vd_flags; __ext_Elf32_Half vd_ndx; __ext_Elf32_Half vd_cnt; __ext_Elf32_Word vd_hash; __ext_Elf32_Word vd_aux; __ext_Elf32_Word vd_next; } __ext_Elf32_Verdef; typedef struct { __ext_Elf32_Word vda_name; __ext_Elf32_Word vda_next; } __ext_Elf32_Verdaux; typedef struct { __ext_Elf32_Half vn_version; __ext_Elf32_Half vn_cnt; __ext_Elf32_Word vn_file; __ext_Elf32_Word vn_aux; __ext_Elf32_Word vn_next; } __ext_Elf32_Verneed; typedef struct { __ext_Elf32_Word vna_hash; __ext_Elf32_Half vna_flags; __ext_Elf32_Half vna_other; __ext_Elf32_Word vna_name; __ext_Elf32_Word vna_next; } __ext_Elf32_Vernaux; #if __LIBELF64 typedef struct { __ext_Elf64_Half vd_version; __ext_Elf64_Half vd_flags; __ext_Elf64_Half vd_ndx; __ext_Elf64_Half vd_cnt; __ext_Elf64_Word vd_hash; __ext_Elf64_Word vd_aux; __ext_Elf64_Word vd_next; } __ext_Elf64_Verdef; typedef struct { __ext_Elf64_Word vda_name; __ext_Elf64_Word vda_next; } __ext_Elf64_Verdaux; typedef struct { __ext_Elf64_Half vn_version; __ext_Elf64_Half vn_cnt; __ext_Elf64_Word vn_file; __ext_Elf64_Word vn_aux; __ext_Elf64_Word vn_next; } __ext_Elf64_Verneed; typedef struct { __ext_Elf64_Word vna_hash; __ext_Elf64_Half vna_flags; __ext_Elf64_Half vna_other; __ext_Elf64_Word vna_name; __ext_Elf64_Word vna_next; } __ext_Elf64_Vernaux; #endif /* __LIBELF64 */ /* * Move section */ #if __LIBELF64 typedef struct { __ext_Elf32_Lword m_value; __ext_Elf32_Word m_info; __ext_Elf32_Word m_poffset; __ext_Elf32_Half m_repeat; __ext_Elf32_Half m_stride; } __ext_Elf32_Move; typedef struct { __ext_Elf64_Lword m_value; __ext_Elf64_Xword m_info; __ext_Elf64_Xword m_poffset; __ext_Elf64_Half m_repeat; __ext_Elf64_Half m_stride; } __ext_Elf64_Move; #endif /* __LIBELF64 */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _EXT_TYPES_H */ libelf-0.8.13.orig/lib/update.c0000644000000000000000000006263011205555771014710 0ustar rootroot/* * update.c - implementation of the elf_update(3) function. * Copyright (C) 1995 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: update.c,v 1.34 2009/05/22 17:08:09 michael Exp $"; #endif /* lint */ #include #if HAVE_MMAP #include #endif /* HAVE_MMAP */ static const unsigned short __encoding = ELFDATA2LSB + (ELFDATA2MSB << 8); #define native_encoding (*(unsigned char*)&__encoding) #define rewrite(var,val,f) \ do{if((var)!=(val)){(var)=(val);(f)|=ELF_F_DIRTY;}}while(0) #define align(var,val) \ do{if((val)>1){(var)+=(val)-1;(var)-=(var)%(val);}}while(0) #undef max #define max(a,b) ((a)>(b)?(a):(b)) static off_t scn_data_layout(Elf_Scn *scn, unsigned v, unsigned type, size_t *algn, unsigned *flag) { Elf *elf = scn->s_elf; Elf_Data *data; int layout = (elf->e_elf_flags & ELF_F_LAYOUT) == 0; size_t scn_align = 1; size_t len = 0; Scn_Data *sd; size_t fsize; if (!(sd = scn->s_data_1)) { /* no data in section */ *algn = scn_align; return (off_t)len; } /* load data from file, if any */ if (!(data = elf_getdata(scn, NULL))) { return (off_t)-1; } elf_assert(data == &sd->sd_data); for (; sd; sd = sd->sd_link) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); if (!valid_version(sd->sd_data.d_version)) { return (off_t)-1; } fsize = sd->sd_data.d_size; if (fsize && type != SHT_NOBITS && valid_type(sd->sd_data.d_type)) { if (elf->e_class == ELFCLASS32) { fsize = _elf32_xltsize(&sd->sd_data, v, ELFDATA2LSB, 1); } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { fsize = _elf64_xltsize(&sd->sd_data, v, ELFDATA2LSB, 1); } #endif /* __LIBELF64 */ else { elf_assert(valid_class(elf->e_class)); seterr(ERROR_UNIMPLEMENTED); return (off_t)-1; } if (fsize == (size_t)-1) { return (off_t)-1; } } if (layout) { align(len, sd->sd_data.d_align); scn_align = max(scn_align, sd->sd_data.d_align); rewrite(sd->sd_data.d_off, (off_t)len, sd->sd_data_flags); len += fsize; } else { len = max(len, sd->sd_data.d_off + fsize); } *flag |= sd->sd_data_flags; } *algn = scn_align; return (off_t)len; } static size_t scn_entsize(const Elf *elf, unsigned version, unsigned stype) { Elf_Type type; switch ((type = _elf_scn_type(stype))) { case ELF_T_BYTE: return 0; case ELF_T_VDEF: case ELF_T_VNEED: return 0; /* What else can I do? Thank you, Sun! */ default: return _fsize(elf->e_class, version, type); } } static off_t _elf32_layout(Elf *elf, unsigned *flag) { int layout = (elf->e_elf_flags & ELF_F_LAYOUT) == 0; int allow_overlap = (elf->e_elf_flags & ELF_F_LAYOUT_OVERLAP) != 0; Elf32_Ehdr *ehdr = (Elf32_Ehdr*)elf->e_ehdr; size_t off = 0; unsigned version; unsigned encoding; size_t align_addr; size_t entsize; unsigned phnum; unsigned shnum; Elf_Scn *scn; *flag = elf->e_elf_flags | elf->e_phdr_flags; if ((version = ehdr->e_version) == EV_NONE) { version = EV_CURRENT; } if (!valid_version(version)) { seterr(ERROR_UNKNOWN_VERSION); return -1; } if ((encoding = ehdr->e_ident[EI_DATA]) == ELFDATANONE) { encoding = native_encoding; } if (!valid_encoding(encoding)) { seterr(ERROR_UNKNOWN_ENCODING); return -1; } entsize = _fsize(ELFCLASS32, version, ELF_T_EHDR); elf_assert(entsize); rewrite(ehdr->e_ehsize, entsize, elf->e_ehdr_flags); off = entsize; align_addr = _fsize(ELFCLASS32, version, ELF_T_ADDR); elf_assert(align_addr); if ((phnum = elf->e_phnum)) { entsize = _fsize(ELFCLASS32, version, ELF_T_PHDR); elf_assert(entsize); if (layout) { align(off, align_addr); rewrite(ehdr->e_phoff, off, elf->e_ehdr_flags); off += phnum * entsize; } else { off = max(off, ehdr->e_phoff + phnum * entsize); } } else { entsize = 0; if (layout) { rewrite(ehdr->e_phoff, 0, elf->e_ehdr_flags); } } if (phnum >= PN_XNUM) { Elf_Scn *scn = elf->e_scn_1; Elf32_Shdr *shdr = &scn->s_shdr32; elf_assert(scn); elf_assert(scn->s_index == 0); rewrite(shdr->sh_info, phnum, scn->s_shdr_flags); *flag |= scn->s_shdr_flags; phnum = PN_XNUM; } rewrite(ehdr->e_phnum, phnum, elf->e_ehdr_flags); rewrite(ehdr->e_phentsize, entsize, elf->e_ehdr_flags); for (scn = elf->e_scn_1, shnum = 0; scn; scn = scn->s_link, ++shnum) { Elf32_Shdr *shdr = &scn->s_shdr32; size_t scn_align = 1; off_t len; elf_assert(scn->s_index == shnum); *flag |= scn->s_scn_flags; if (scn->s_index == SHN_UNDEF) { rewrite(shdr->sh_entsize, 0, scn->s_shdr_flags); if (layout) { rewrite(shdr->sh_offset, 0, scn->s_shdr_flags); rewrite(shdr->sh_size, 0, scn->s_shdr_flags); rewrite(shdr->sh_addralign, 0, scn->s_shdr_flags); } *flag |= scn->s_shdr_flags; continue; } if (shdr->sh_type == SHT_NULL) { *flag |= scn->s_shdr_flags; continue; } len = scn_data_layout(scn, version, shdr->sh_type, &scn_align, flag); if (len == -1) { return -1; } /* * Never override the program's choice. */ if (shdr->sh_entsize == 0) { entsize = scn_entsize(elf, version, shdr->sh_type); if (entsize > 1) { rewrite(shdr->sh_entsize, entsize, scn->s_shdr_flags); } } if (layout) { align(off, scn_align); rewrite(shdr->sh_offset, off, scn->s_shdr_flags); rewrite(shdr->sh_size, (size_t)len, scn->s_shdr_flags); rewrite(shdr->sh_addralign, scn_align, scn->s_shdr_flags); if (shdr->sh_type != SHT_NOBITS) { off += (size_t)len; } } else if ((size_t)len > shdr->sh_size) { seterr(ERROR_SCN2SMALL); return -1; } else { Elf_Scn *scn2; size_t end1, end2; end1 = shdr->sh_offset; if (shdr->sh_type != SHT_NOBITS) { end1 += shdr->sh_size; } if (!allow_overlap && shdr->sh_offset < off) { /* * check for overlapping sections */ for (scn2 = elf->e_scn_1; scn2; scn2 = scn2->s_link) { if (scn2 == scn) { break; } end2 = scn2->s_shdr32.sh_offset; if (scn2->s_shdr32.sh_type != SHT_NOBITS) { end2 += scn2->s_shdr32.sh_size; } if (end1 > scn2->s_shdr32.sh_offset && end2 > shdr->sh_offset) { seterr(ERROR_SCN_OVERLAP); return -1; } } } if (off < end1) { off = end1; } } *flag |= scn->s_shdr_flags; } if (shnum) { entsize = _fsize(ELFCLASS32, version, ELF_T_SHDR); elf_assert(entsize); if (layout) { align(off, align_addr); rewrite(ehdr->e_shoff, off, elf->e_ehdr_flags); off += shnum * entsize; } else { off = max(off, ehdr->e_shoff + shnum * entsize); } } else { entsize = 0; if (layout) { rewrite(ehdr->e_shoff, 0, elf->e_ehdr_flags); } } if (shnum >= SHN_LORESERVE) { Elf_Scn *scn = elf->e_scn_1; Elf32_Shdr *shdr = &scn->s_shdr32; elf_assert(scn->s_index == 0); rewrite(shdr->sh_size, shnum, scn->s_shdr_flags); *flag |= scn->s_shdr_flags; shnum = 0; } rewrite(ehdr->e_shnum, shnum, elf->e_ehdr_flags); rewrite(ehdr->e_shentsize, entsize, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_MAG0], ELFMAG0, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_MAG1], ELFMAG1, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_MAG2], ELFMAG2, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_MAG3], ELFMAG3, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_CLASS], ELFCLASS32, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_DATA], encoding, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_VERSION], version, elf->e_ehdr_flags); rewrite(ehdr->e_version, version, elf->e_ehdr_flags); *flag |= elf->e_ehdr_flags; return off; } #if __LIBELF64 static off_t _elf64_layout(Elf *elf, unsigned *flag) { int layout = (elf->e_elf_flags & ELF_F_LAYOUT) == 0; int allow_overlap = (elf->e_elf_flags & ELF_F_LAYOUT_OVERLAP) != 0; Elf64_Ehdr *ehdr = (Elf64_Ehdr*)elf->e_ehdr; size_t off = 0; unsigned version; unsigned encoding; size_t align_addr; size_t entsize; unsigned phnum; unsigned shnum; Elf_Scn *scn; *flag = elf->e_elf_flags | elf->e_phdr_flags; if ((version = ehdr->e_version) == EV_NONE) { version = EV_CURRENT; } if (!valid_version(version)) { seterr(ERROR_UNKNOWN_VERSION); return -1; } if ((encoding = ehdr->e_ident[EI_DATA]) == ELFDATANONE) { encoding = native_encoding; } if (!valid_encoding(encoding)) { seterr(ERROR_UNKNOWN_ENCODING); return -1; } entsize = _fsize(ELFCLASS64, version, ELF_T_EHDR); elf_assert(entsize); rewrite(ehdr->e_ehsize, entsize, elf->e_ehdr_flags); off = entsize; align_addr = _fsize(ELFCLASS64, version, ELF_T_ADDR); elf_assert(align_addr); if ((phnum = elf->e_phnum)) { entsize = _fsize(ELFCLASS64, version, ELF_T_PHDR); elf_assert(entsize); if (layout) { align(off, align_addr); rewrite(ehdr->e_phoff, off, elf->e_ehdr_flags); off += phnum * entsize; } else { off = max(off, ehdr->e_phoff + phnum * entsize); } } else { entsize = 0; if (layout) { rewrite(ehdr->e_phoff, 0, elf->e_ehdr_flags); } } if (phnum >= PN_XNUM) { Elf_Scn *scn = elf->e_scn_1; Elf32_Shdr *shdr = &scn->s_shdr32; /* modify first section header, too! */ elf_assert(scn); elf_assert(scn->s_index == 0); rewrite(shdr->sh_info, phnum, scn->s_shdr_flags); *flag |= scn->s_shdr_flags; phnum = PN_XNUM; } rewrite(ehdr->e_phnum, phnum, elf->e_ehdr_flags); rewrite(ehdr->e_phentsize, entsize, elf->e_ehdr_flags); for (scn = elf->e_scn_1, shnum = 0; scn; scn = scn->s_link, ++shnum) { Elf64_Shdr *shdr = &scn->s_shdr64; size_t scn_align = 1; off_t len; elf_assert(scn->s_index == shnum); *flag |= scn->s_scn_flags; if (scn->s_index == SHN_UNDEF) { rewrite(shdr->sh_entsize, 0, scn->s_shdr_flags); if (layout) { rewrite(shdr->sh_offset, 0, scn->s_shdr_flags); rewrite(shdr->sh_size, 0, scn->s_shdr_flags); rewrite(shdr->sh_addralign, 0, scn->s_shdr_flags); } *flag |= scn->s_shdr_flags; continue; } if (shdr->sh_type == SHT_NULL) { *flag |= scn->s_shdr_flags; continue; } len = scn_data_layout(scn, version, shdr->sh_type, &scn_align, flag); if (len == -1) { return -1; } /* * Never override the program's choice. */ if (shdr->sh_entsize == 0) { entsize = scn_entsize(elf, version, shdr->sh_type); if (entsize > 1) { rewrite(shdr->sh_entsize, entsize, scn->s_shdr_flags); } } if (layout) { align(off, scn_align); rewrite(shdr->sh_offset, off, scn->s_shdr_flags); rewrite(shdr->sh_size, (size_t)len, scn->s_shdr_flags); rewrite(shdr->sh_addralign, scn_align, scn->s_shdr_flags); if (shdr->sh_type != SHT_NOBITS) { off += (size_t)len; } } else if ((size_t)len > shdr->sh_size) { seterr(ERROR_SCN2SMALL); return -1; } else { Elf_Scn *scn2; size_t end1, end2; end1 = shdr->sh_offset; if (shdr->sh_type != SHT_NOBITS) { end1 += shdr->sh_size; } if (!allow_overlap && shdr->sh_offset < off) { /* * check for overlapping sections */ for (scn2 = elf->e_scn_1; scn2; scn2 = scn2->s_link) { if (scn2 == scn) { break; } end2 = scn2->s_shdr64.sh_offset; if (scn2->s_shdr64.sh_type != SHT_NOBITS) { end2 += scn2->s_shdr64.sh_size; } if (end1 > scn2->s_shdr64.sh_offset && end2 > shdr->sh_offset) { seterr(ERROR_SCN_OVERLAP); return -1; } } } if (off < end1) { off = end1; } } *flag |= scn->s_shdr_flags; } if (shnum) { entsize = _fsize(ELFCLASS64, version, ELF_T_SHDR); elf_assert(entsize); if (layout) { align(off, align_addr); rewrite(ehdr->e_shoff, off, elf->e_ehdr_flags); off += shnum * entsize; } else { off = max(off, ehdr->e_shoff + shnum * entsize); } } else { entsize = 0; if (layout) { rewrite(ehdr->e_shoff, 0, elf->e_ehdr_flags); } } if (shnum >= SHN_LORESERVE) { Elf_Scn *scn = elf->e_scn_1; Elf64_Shdr *shdr = &scn->s_shdr64; elf_assert(scn->s_index == 0); rewrite(shdr->sh_size, shnum, scn->s_shdr_flags); *flag |= scn->s_shdr_flags; shnum = 0; } rewrite(ehdr->e_shnum, shnum, elf->e_ehdr_flags); rewrite(ehdr->e_shentsize, entsize, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_MAG0], ELFMAG0, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_MAG1], ELFMAG1, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_MAG2], ELFMAG2, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_MAG3], ELFMAG3, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_CLASS], ELFCLASS64, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_DATA], encoding, elf->e_ehdr_flags); rewrite(ehdr->e_ident[EI_VERSION], version, elf->e_ehdr_flags); rewrite(ehdr->e_version, version, elf->e_ehdr_flags); *flag |= elf->e_ehdr_flags; return off; } #endif /* __LIBELF64 */ #define ptrinside(p,a,l) ((p)>=(a)&&(p)<(a)+(l)) #define newptr(p,o,n) ((p)=((p)-(o))+(n)) static int _elf_update_pointers(Elf *elf, char *outbuf, size_t len) { Elf_Scn *scn; Scn_Data *sd; char *data, *rawdata; elf_assert(elf); elf_assert(elf->e_data); elf_assert(!elf->e_parent); elf_assert(!elf->e_unmap_data); elf_assert(elf->e_kind == ELF_K_ELF); elf_assert(len >= EI_NIDENT); /* resize memory images */ if (len <= elf->e_dsize) { /* don't shorten the memory image */ data = elf->e_data; } else if ((data = (char*)realloc(elf->e_data, len))) { elf->e_dsize = len; } else { seterr(ERROR_IO_2BIG); return -1; } if (elf->e_rawdata == elf->e_data) { /* update frozen raw image */ memcpy(data, outbuf, len); elf->e_data = elf->e_rawdata = data; /* cooked data is stored outside the raw image */ return 0; } if (elf->e_rawdata) { /* update raw image */ if (!(rawdata = (char*)realloc(elf->e_rawdata, len))) { seterr(ERROR_IO_2BIG); return -1; } memcpy(rawdata, outbuf, len); elf->e_rawdata = rawdata; } if (data == elf->e_data) { /* nothing more to do */ return 0; } /* adjust internal pointers */ for (scn = elf->e_scn_1; scn; scn = scn->s_link) { elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(scn->s_elf == elf); if ((sd = scn->s_data_1)) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); if (sd->sd_memdata && !sd->sd_free_data) { elf_assert(ptrinside(sd->sd_memdata, elf->e_data, elf->e_dsize)); if (sd->sd_data.d_buf == sd->sd_memdata) { newptr(sd->sd_memdata, elf->e_data, data); sd->sd_data.d_buf = sd->sd_memdata; } else { newptr(sd->sd_memdata, elf->e_data, data); } } } if ((sd = scn->s_rawdata)) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); if (sd->sd_memdata && sd->sd_free_data) { size_t off, len; if (elf->e_class == ELFCLASS32) { off = scn->s_shdr32.sh_offset; len = scn->s_shdr32.sh_size; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { off = scn->s_shdr64.sh_offset; len = scn->s_shdr64.sh_size; } #endif /* __LIBELF64 */ else { seterr(ERROR_UNIMPLEMENTED); return -1; } if (!(rawdata = (char*)realloc(sd->sd_memdata, len))) { seterr(ERROR_IO_2BIG); return -1; } memcpy(rawdata, outbuf + off, len); if (sd->sd_data.d_buf == sd->sd_memdata) { sd->sd_data.d_buf = rawdata; } sd->sd_memdata = rawdata; } } } elf->e_data = data; return 0; } #undef ptrinside #undef newptr static off_t _elf32_write(Elf *elf, char *outbuf, size_t len) { Elf32_Ehdr *ehdr; Elf32_Shdr *shdr; Elf_Scn *scn; Scn_Data *sd; Elf_Data src; Elf_Data dst; unsigned encode; elf_assert(len); elf_assert(elf->e_ehdr); ehdr = (Elf32_Ehdr*)elf->e_ehdr; encode = ehdr->e_ident[EI_DATA]; src.d_buf = ehdr; src.d_type = ELF_T_EHDR; src.d_size = _msize(ELFCLASS32, _elf_version, ELF_T_EHDR); src.d_version = _elf_version; dst.d_buf = outbuf; dst.d_size = ehdr->e_ehsize; dst.d_version = ehdr->e_version; if (!elf32_xlatetof(&dst, &src, encode)) { return -1; } if (elf->e_phnum) { src.d_buf = elf->e_phdr; src.d_type = ELF_T_PHDR; src.d_size = elf->e_phnum * _msize(ELFCLASS32, _elf_version, ELF_T_PHDR); src.d_version = _elf_version; dst.d_buf = outbuf + ehdr->e_phoff; dst.d_size = elf->e_phnum * ehdr->e_phentsize; dst.d_version = ehdr->e_version; if (!elf32_xlatetof(&dst, &src, encode)) { return -1; } } for (scn = elf->e_scn_1; scn; scn = scn->s_link) { elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(scn->s_elf == elf); src.d_buf = &scn->s_uhdr; src.d_type = ELF_T_SHDR; src.d_size = _msize(ELFCLASS32, EV_CURRENT, ELF_T_SHDR); src.d_version = EV_CURRENT; dst.d_buf = outbuf + ehdr->e_shoff + scn->s_index * ehdr->e_shentsize; dst.d_size = ehdr->e_shentsize; dst.d_version = ehdr->e_version; if (!elf32_xlatetof(&dst, &src, encode)) { return -1; } if (scn->s_index == SHN_UNDEF) { continue; } shdr = &scn->s_shdr32; if (shdr->sh_type == SHT_NULL || shdr->sh_type == SHT_NOBITS) { continue; } /* XXX: this is probably no longer necessary */ if (scn->s_data_1 && !elf_getdata(scn, NULL)) { return -1; } for (sd = scn->s_data_1; sd; sd = sd->sd_link) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); src = sd->sd_data; if (!src.d_size) { continue; } if (!src.d_buf) { seterr(ERROR_NULLBUF); return -1; } dst.d_buf = outbuf + shdr->sh_offset + src.d_off; dst.d_size = src.d_size; dst.d_version = ehdr->e_version; if (valid_type(src.d_type)) { size_t tmp; tmp = _elf32_xltsize(&src, dst.d_version, ELFDATA2LSB, 1); if (tmp == (size_t)-1) { return -1; } dst.d_size = tmp; } else { src.d_type = ELF_T_BYTE; } if (!elf32_xlatetof(&dst, &src, encode)) { return -1; } } } /* cleanup */ if (elf->e_readable && _elf_update_pointers(elf, outbuf, len)) { return -1; } /* NOTE: ehdr is no longer valid! */ ehdr = (Elf32_Ehdr*)elf->e_ehdr; elf_assert(ehdr); elf->e_encoding = ehdr->e_ident[EI_DATA]; elf->e_version = ehdr->e_ident[EI_VERSION]; elf->e_elf_flags &= ~ELF_F_DIRTY; elf->e_ehdr_flags &= ~ELF_F_DIRTY; elf->e_phdr_flags &= ~ELF_F_DIRTY; for (scn = elf->e_scn_1; scn; scn = scn->s_link) { scn->s_scn_flags &= ~ELF_F_DIRTY; scn->s_shdr_flags &= ~ELF_F_DIRTY; for (sd = scn->s_data_1; sd; sd = sd->sd_link) { sd->sd_data_flags &= ~ELF_F_DIRTY; } if (elf->e_readable) { shdr = &scn->s_shdr32; scn->s_type = shdr->sh_type; scn->s_size = shdr->sh_size; scn->s_offset = shdr->sh_offset; } } elf->e_size = len; return len; } #if __LIBELF64 static off_t _elf64_write(Elf *elf, char *outbuf, size_t len) { Elf64_Ehdr *ehdr; Elf64_Shdr *shdr; Elf_Scn *scn; Scn_Data *sd; Elf_Data src; Elf_Data dst; unsigned encode; elf_assert(len); elf_assert(elf->e_ehdr); ehdr = (Elf64_Ehdr*)elf->e_ehdr; encode = ehdr->e_ident[EI_DATA]; src.d_buf = ehdr; src.d_type = ELF_T_EHDR; src.d_size = _msize(ELFCLASS64, _elf_version, ELF_T_EHDR); src.d_version = _elf_version; dst.d_buf = outbuf; dst.d_size = ehdr->e_ehsize; dst.d_version = ehdr->e_version; if (!elf64_xlatetof(&dst, &src, encode)) { return -1; } if (elf->e_phnum) { src.d_buf = elf->e_phdr; src.d_type = ELF_T_PHDR; src.d_size = elf->e_phnum * _msize(ELFCLASS64, _elf_version, ELF_T_PHDR); src.d_version = _elf_version; dst.d_buf = outbuf + ehdr->e_phoff; dst.d_size = elf->e_phnum * ehdr->e_phentsize; dst.d_version = ehdr->e_version; if (!elf64_xlatetof(&dst, &src, encode)) { return -1; } } for (scn = elf->e_scn_1; scn; scn = scn->s_link) { elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(scn->s_elf == elf); src.d_buf = &scn->s_uhdr; src.d_type = ELF_T_SHDR; src.d_size = _msize(ELFCLASS64, EV_CURRENT, ELF_T_SHDR); src.d_version = EV_CURRENT; dst.d_buf = outbuf + ehdr->e_shoff + scn->s_index * ehdr->e_shentsize; dst.d_size = ehdr->e_shentsize; dst.d_version = ehdr->e_version; if (!elf64_xlatetof(&dst, &src, encode)) { return -1; } if (scn->s_index == SHN_UNDEF) { continue; } shdr = &scn->s_shdr64; if (shdr->sh_type == SHT_NULL || shdr->sh_type == SHT_NOBITS) { continue; } /* XXX: this is probably no longer necessary */ if (scn->s_data_1 && !elf_getdata(scn, NULL)) { return -1; } for (sd = scn->s_data_1; sd; sd = sd->sd_link) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); src = sd->sd_data; if (!src.d_size) { continue; } if (!src.d_buf) { seterr(ERROR_NULLBUF); return -1; } dst.d_buf = outbuf + shdr->sh_offset + src.d_off; dst.d_size = src.d_size; dst.d_version = ehdr->e_version; if (valid_type(src.d_type)) { size_t tmp; tmp = _elf64_xltsize(&src, dst.d_version, ELFDATA2LSB, 1); if (tmp == (size_t)-1) { return -1; } dst.d_size = tmp; } else { src.d_type = ELF_T_BYTE; } if (!elf64_xlatetof(&dst, &src, encode)) { return -1; } } } /* cleanup */ if (elf->e_readable && _elf_update_pointers(elf, outbuf, len)) { return -1; } /* NOTE: ehdr is no longer valid! */ ehdr = (Elf64_Ehdr*)elf->e_ehdr; elf_assert(ehdr); elf->e_encoding = ehdr->e_ident[EI_DATA]; elf->e_version = ehdr->e_ident[EI_VERSION]; elf->e_elf_flags &= ~ELF_F_DIRTY; elf->e_ehdr_flags &= ~ELF_F_DIRTY; elf->e_phdr_flags &= ~ELF_F_DIRTY; for (scn = elf->e_scn_1; scn; scn = scn->s_link) { scn->s_scn_flags &= ~ELF_F_DIRTY; scn->s_shdr_flags &= ~ELF_F_DIRTY; for (sd = scn->s_data_1; sd; sd = sd->sd_link) { sd->sd_data_flags &= ~ELF_F_DIRTY; } if (elf->e_readable) { shdr = &scn->s_shdr64; scn->s_type = shdr->sh_type; scn->s_size = shdr->sh_size; scn->s_offset = shdr->sh_offset; } } elf->e_size = len; return len; } #endif /* __LIBELF64 */ static int xwrite(int fd, char *buffer, size_t len) { size_t done = 0; size_t n; while (done < len) { n = write(fd, buffer + done, len - done); if (n == 0) { /* file system full */ return -1; } else if (n != (size_t)-1) { /* some bytes written, continue */ done += n; } else if (errno != EAGAIN && errno != EINTR) { /* real error */ return -1; } } return 0; } static off_t _elf_output(Elf *elf, int fd, size_t len, off_t (*_elf_write)(Elf*, char*, size_t)) { char *buf; off_t err; elf_assert(len); #if HAVE_FTRUNCATE ftruncate(fd, 0); #endif /* HAVE_FTRUNCATE */ #if HAVE_MMAP /* * Make sure the file is (at least) len bytes long */ #if HAVE_FTRUNCATE lseek(fd, (off_t)len, SEEK_SET); if (ftruncate(fd, len)) { #else /* HAVE_FTRUNCATE */ { #endif /* HAVE_FTRUNCATE */ if (lseek(fd, (off_t)len - 1, SEEK_SET) != (off_t)len - 1) { seterr(ERROR_IO_SEEK); return -1; } if (xwrite(fd, "", 1)) { seterr(ERROR_IO_WRITE); return -1; } } buf = (void*)mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (buf != (char*)-1) { if ((char)_elf_fill && !(elf->e_elf_flags & ELF_F_LAYOUT)) { memset(buf, _elf_fill, len); } err = _elf_write(elf, buf, len); munmap(buf, len); return err; } #endif /* HAVE_MMAP */ if (!(buf = (char*)malloc(len))) { seterr(ERROR_MEM_OUTBUF); return -1; } memset(buf, _elf_fill, len); err = _elf_write(elf, buf, len); if (err != -1 && (size_t)err == len) { if (lseek(fd, (off_t)0, SEEK_SET)) { seterr(ERROR_IO_SEEK); err = -1; } else if (xwrite(fd, buf, len)) { seterr(ERROR_IO_WRITE); err = -1; } } free(buf); return err; } off_t elf_update(Elf *elf, Elf_Cmd cmd) { unsigned flag; off_t len; if (!elf) { return -1; } elf_assert(elf->e_magic == ELF_MAGIC); if (cmd == ELF_C_WRITE) { if (!elf->e_writable) { seterr(ERROR_RDONLY); return -1; } if (elf->e_disabled) { seterr(ERROR_FDDISABLED); return -1; } } else if (cmd != ELF_C_NULL) { seterr(ERROR_INVALID_CMD); return -1; } if (!elf->e_ehdr) { seterr(ERROR_NOEHDR); } else if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (elf->e_class == ELFCLASS32) { len = _elf32_layout(elf, &flag); if (len != -1 && cmd == ELF_C_WRITE && (flag & ELF_F_DIRTY)) { len = _elf_output(elf, elf->e_fd, (size_t)len, _elf32_write); } return len; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { len = _elf64_layout(elf, &flag); if (len != -1 && cmd == ELF_C_WRITE && (flag & ELF_F_DIRTY)) { len = _elf_output(elf, elf->e_fd, (size_t)len, _elf64_write); } return len; } #endif /* __LIBELF64 */ else if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } return -1; } libelf-0.8.13.orig/lib/32.getehdr.c0000644000000000000000000000302411015476446015263 0ustar rootroot/* 32.getehdr.c - implementation of the elf{32,64}_getehdr(3) functions. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: 32.getehdr.c,v 1.9 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ char* _elf_getehdr(Elf *elf, unsigned cls) { if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (elf->e_class != cls) { seterr(ERROR_CLASSMISMATCH); } else if (elf->e_ehdr || _elf_cook(elf)) { return elf->e_ehdr; } return NULL; } Elf32_Ehdr* elf32_getehdr(Elf *elf) { return (Elf32_Ehdr*)_elf_getehdr(elf, ELFCLASS32); } #if __LIBELF64 Elf64_Ehdr* elf64_getehdr(Elf *elf) { return (Elf64_Ehdr*)_elf_getehdr(elf, ELFCLASS64); } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/strptr.c0000644000000000000000000000650111015476447014760 0ustar rootroot/* * strptr.c - implementation of the elf_strptr(3) function. * Copyright (C) 1995 - 2007 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: strptr.c,v 1.12 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ char* elf_strptr(Elf *elf, size_t section, size_t offset) { Elf_Data *data; Elf_Scn *scn; size_t n; char *s; if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (!(scn = elf_getscn(elf, section))) { return NULL; } if (scn->s_index == SHN_UNDEF) { seterr(ERROR_NOSTRTAB); return NULL; } /* * checking the section header is more appropriate */ if (elf->e_class == ELFCLASS32) { if (scn->s_shdr32.sh_type != SHT_STRTAB) { seterr(ERROR_NOSTRTAB); return NULL; } } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { if (scn->s_shdr64.sh_type != SHT_STRTAB) { seterr(ERROR_NOSTRTAB); return NULL; } } #endif /* __LIBELF64 */ else if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); return NULL; } else { seterr(ERROR_UNKNOWN_CLASS); return NULL; } /* * Find matching buffer */ n = 0; data = NULL; if (elf->e_elf_flags & ELF_F_LAYOUT) { /* * Programmer is responsible for d_off * Note: buffers may be in any order! */ while ((data = elf_getdata(scn, data))) { n = data->d_off; if (offset >= n && offset - n < data->d_size) { /* * Found it */ break; } } } else { /* * Calculate offsets myself */ while ((data = elf_getdata(scn, data))) { if (data->d_align > 1) { n += data->d_align - 1; n -= n % data->d_align; } if (offset < n) { /* * Invalid offset: points into a hole */ seterr(ERROR_BADSTROFF); return NULL; } if (offset - n < data->d_size) { /* * Found it */ break; } n += data->d_size; } } if (data == NULL) { /* * Not found */ seterr(ERROR_BADSTROFF); return NULL; } if (data->d_buf == NULL) { /* * Buffer is NULL (usually the programmers' fault) */ seterr(ERROR_NULLBUF); return NULL; } offset -= n; s = (char*)data->d_buf; if (!(_elf_sanity_checks & SANITY_CHECK_STRPTR)) { return s + offset; } /* * Perform extra sanity check */ for (n = offset; n < data->d_size; n++) { if (s[n] == '\0') { /* * Return properly NUL terminated string */ return s + offset; } } /* * String is not NUL terminated * Return error to avoid SEGV in application */ seterr(ERROR_UNTERM); return NULL; } libelf-0.8.13.orig/lib/rawfile.c0000644000000000000000000000300511205555742015044 0ustar rootroot/* * rawfile.c - implementation of the elf_rawfile(3) function. * Copyright (C) 1995 - 2009 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: rawfile.c,v 1.8 2009/05/22 17:07:46 michael Exp $"; #endif /* lint */ char* elf_rawfile(Elf *elf, size_t *ptr) { size_t tmp; if (!ptr) { ptr = &tmp; } *ptr = 0; if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (!elf->e_readable) { return NULL; } else if (elf->e_size) { if (!elf->e_rawdata) { elf_assert(elf->e_data); if (!elf->e_cooked) { elf->e_rawdata = elf->e_data; } else if (!(elf->e_rawdata = _elf_read(elf, NULL, 0, elf->e_size))) { return NULL; } } *ptr = elf->e_size; } return elf->e_rawdata; } libelf-0.8.13.orig/lib/next.c0000644000000000000000000000251411015476447014400 0ustar rootroot/* next.c - implementation of the elf_next(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: next.c,v 1.7 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ Elf_Cmd elf_next(Elf *elf) { if (!elf) { return ELF_C_NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (!elf->e_parent) { return ELF_C_NULL; } elf_assert(elf->e_parent->e_magic == ELF_MAGIC); elf_assert(elf->e_parent->e_kind == ELF_K_AR); elf->e_parent->e_off = elf->e_next; if (elf->e_next == elf->e_parent->e_size) { return ELF_C_NULL; } return ELF_C_READ; } libelf-0.8.13.orig/lib/getident.c0000644000000000000000000000251111015476446015221 0ustar rootroot/* getident.c - implementation of the elf_getident(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: getident.c,v 1.7 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ char* elf_getident(Elf *elf, size_t *ptr) { size_t tmp; if (!ptr) { ptr = &tmp; } if (!elf) { *ptr = 0; return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_kind != ELF_K_ELF) { *ptr = elf->e_idlen; return elf->e_data; } if (elf->e_ehdr || _elf_cook(elf)) { *ptr = elf->e_idlen; return elf->e_ehdr; } *ptr = 0; return NULL; } libelf-0.8.13.orig/lib/cook.c0000644000000000000000000003041211015476446014352 0ustar rootroot/* * cook.c - read and translate ELF files. * Copyright (C) 1995 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: cook.c,v 1.29 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ const Elf_Scn _elf_scn_init = INIT_SCN; const Scn_Data _elf_data_init = INIT_DATA; Elf_Type _elf_scn_type(unsigned t) { switch (t) { case SHT_DYNAMIC: return ELF_T_DYN; case SHT_DYNSYM: return ELF_T_SYM; case SHT_HASH: return ELF_T_WORD; case SHT_REL: return ELF_T_REL; case SHT_RELA: return ELF_T_RELA; case SHT_SYMTAB: return ELF_T_SYM; case SHT_SYMTAB_SHNDX: return ELF_T_WORD; /* XXX: really? */ #if __LIBELF_SYMBOL_VERSIONS #if __LIBELF_SUN_SYMBOL_VERSIONS case SHT_SUNW_verdef: return ELF_T_VDEF; case SHT_SUNW_verneed: return ELF_T_VNEED; case SHT_SUNW_versym: return ELF_T_HALF; #else /* __LIBELF_SUN_SYMBOL_VERSIONS */ case SHT_GNU_verdef: return ELF_T_VDEF; case SHT_GNU_verneed: return ELF_T_VNEED; case SHT_GNU_versym: return ELF_T_HALF; #endif /* __LIBELF_SUN_SYMBOL_VERSIONS */ #endif /* __LIBELF_SYMBOL_VERSIONS */ } return ELF_T_BYTE; } /* * Check for overflow on 32-bit systems */ #define overflow(a,b,t) (sizeof(a) < sizeof(t) && (t)(a) != (b)) #define truncerr(t) ((t)==ELF_T_EHDR?ERROR_TRUNC_EHDR: \ ((t)==ELF_T_PHDR?ERROR_TRUNC_PHDR: \ ERROR_INTERNAL)) #define memerr(t) ((t)==ELF_T_EHDR?ERROR_MEM_EHDR: \ ((t)==ELF_T_PHDR?ERROR_MEM_PHDR: \ ERROR_INTERNAL)) Elf_Data* _elf_xlatetom(const Elf *elf, Elf_Data *dst, const Elf_Data *src) { if (elf->e_class == ELFCLASS32) { return elf32_xlatetom(dst, src, elf->e_encoding); } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { return elf64_xlatetom(dst, src, elf->e_encoding); } #endif /* __LIBELF64 */ seterr(ERROR_UNIMPLEMENTED); return NULL; } static char* _elf_item(void *buf, Elf *elf, Elf_Type type, size_t off) { Elf_Data src, dst; elf_assert(valid_type(type)); if (off < 0 || off > elf->e_size) { seterr(ERROR_OUTSIDE); return NULL; } src.d_type = type; src.d_version = elf->e_version; src.d_size = _fsize(elf->e_class, src.d_version, type); elf_assert(src.d_size); if ((elf->e_size - off) < src.d_size) { seterr(truncerr(type)); return NULL; } dst.d_version = _elf_version; dst.d_size = _msize(elf->e_class, dst.d_version, type); elf_assert(dst.d_size); if (!(dst.d_buf = buf) && !(dst.d_buf = malloc(dst.d_size))) { seterr(memerr(type)); return NULL; } elf_assert(elf->e_data); if (elf->e_rawdata) { src.d_buf = elf->e_rawdata + off; } else { src.d_buf = elf->e_data + off; } if (_elf_xlatetom(elf, &dst, &src)) { return (char*)dst.d_buf; } if (dst.d_buf != buf) { free(dst.d_buf); } return NULL; } static int _elf_cook_phdr(Elf *elf) { size_t num, off, entsz; if (elf->e_class == ELFCLASS32) { num = ((Elf32_Ehdr*)elf->e_ehdr)->e_phnum; off = ((Elf32_Ehdr*)elf->e_ehdr)->e_phoff; entsz = ((Elf32_Ehdr*)elf->e_ehdr)->e_phentsize; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { num = ((Elf64_Ehdr*)elf->e_ehdr)->e_phnum; off = ((Elf64_Ehdr*)elf->e_ehdr)->e_phoff; entsz = ((Elf64_Ehdr*)elf->e_ehdr)->e_phentsize; /* * Check for overflow on 32-bit systems */ if (overflow(off, ((Elf64_Ehdr*)elf->e_ehdr)->e_phoff, Elf64_Off)) { seterr(ERROR_OUTSIDE); return 0; } } #endif /* __LIBELF64 */ else { seterr(ERROR_UNIMPLEMENTED); return 0; } if (off) { Elf_Scn *scn; size_t size; unsigned i; char *p; if (num == PN_XNUM) { /* * Overflow in ehdr->e_phnum. * Get real value from first SHDR. */ if (!(scn = elf->e_scn_1)) { seterr(ERROR_NOSUCHSCN); return 0; } if (elf->e_class == ELFCLASS32) { num = scn->s_shdr32.sh_info; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { num = scn->s_shdr64.sh_info; } #endif /* __LIBELF64 */ /* we already had this else { seterr(ERROR_UNIMPLEMENTED); return 0; } */ } size = _fsize(elf->e_class, elf->e_version, ELF_T_PHDR); elf_assert(size); #if ENABLE_EXTENDED_FORMAT if (entsz < size) { #else /* ENABLE_EXTENDED_FORMAT */ if (entsz != size) { #endif /* ENABLE_EXTENDED_FORMAT */ seterr(ERROR_EHDR_PHENTSIZE); return 0; } size = _msize(elf->e_class, _elf_version, ELF_T_PHDR); elf_assert(size); if (!(p = malloc(num * size))) { seterr(memerr(ELF_T_PHDR)); return 0; } for (i = 0; i < num; i++) { if (!_elf_item(p + i * size, elf, ELF_T_PHDR, off + i * entsz)) { free(p); return 0; } } elf->e_phdr = p; elf->e_phnum = num; } return 1; } static int _elf_cook_shdr(Elf *elf) { size_t num, off, entsz; if (elf->e_class == ELFCLASS32) { num = ((Elf32_Ehdr*)elf->e_ehdr)->e_shnum; off = ((Elf32_Ehdr*)elf->e_ehdr)->e_shoff; entsz = ((Elf32_Ehdr*)elf->e_ehdr)->e_shentsize; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { num = ((Elf64_Ehdr*)elf->e_ehdr)->e_shnum; off = ((Elf64_Ehdr*)elf->e_ehdr)->e_shoff; entsz = ((Elf64_Ehdr*)elf->e_ehdr)->e_shentsize; /* * Check for overflow on 32-bit systems */ if (overflow(off, ((Elf64_Ehdr*)elf->e_ehdr)->e_shoff, Elf64_Off)) { seterr(ERROR_OUTSIDE); return 0; } } #endif /* __LIBELF64 */ else { seterr(ERROR_UNIMPLEMENTED); return 0; } if (off) { struct tmp { Elf_Scn scn; Scn_Data data; } *head; Elf_Data src, dst; Elf_Scn *scn; Scn_Data *sd; unsigned i; if (off < 0 || off > elf->e_size) { seterr(ERROR_OUTSIDE); return 0; } src.d_type = ELF_T_SHDR; src.d_version = elf->e_version; src.d_size = _fsize(elf->e_class, src.d_version, ELF_T_SHDR); elf_assert(src.d_size); #if ENABLE_EXTENDED_FORMAT if (entsz < src.d_size) { #else /* ENABLE_EXTENDED_FORMAT */ if (entsz != src.d_size) { #endif /* ENABLE_EXTENDED_FORMAT */ seterr(ERROR_EHDR_SHENTSIZE); return 0; } dst.d_version = EV_CURRENT; if (num == 0) { union { Elf32_Shdr sh32; #if __LIBELF64 Elf64_Shdr sh64; #endif /* __LIBELF64 */ } u; /* * Overflow in ehdr->e_shnum. * Get real value from first SHDR. */ if (elf->e_size - off < entsz) { seterr(ERROR_TRUNC_SHDR); return 0; } if (elf->e_rawdata) { src.d_buf = elf->e_rawdata + off; } else { src.d_buf = elf->e_data + off; } dst.d_buf = &u; dst.d_size = sizeof(u); if (!_elf_xlatetom(elf, &dst, &src)) { return 0; } elf_assert(dst.d_size == _msize(elf->e_class, EV_CURRENT, ELF_T_SHDR)); elf_assert(dst.d_type == ELF_T_SHDR); if (elf->e_class == ELFCLASS32) { num = u.sh32.sh_size; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { num = u.sh64.sh_size; /* * Check for overflow on 32-bit systems */ if (overflow(num, u.sh64.sh_size, Elf64_Xword)) { seterr(ERROR_OUTSIDE); return 0; } } #endif /* __LIBELF64 */ } if ((elf->e_size - off) / entsz < num) { seterr(ERROR_TRUNC_SHDR); return 0; } if (!(head = (struct tmp*)malloc(num * sizeof(struct tmp)))) { seterr(ERROR_MEM_SCN); return 0; } for (scn = NULL, i = num; i-- > 0; ) { head[i].scn = _elf_scn_init; head[i].data = _elf_data_init; head[i].scn.s_link = scn; if (!scn) { elf->e_scn_n = &head[i].scn; } scn = &head[i].scn; sd = &head[i].data; if (elf->e_rawdata) { src.d_buf = elf->e_rawdata + off + i * entsz; } else { src.d_buf = elf->e_data + off + i * entsz; } dst.d_buf = &scn->s_uhdr; dst.d_size = sizeof(scn->s_uhdr); if (!_elf_xlatetom(elf, &dst, &src)) { elf->e_scn_n = NULL; free(head); return 0; } elf_assert(dst.d_size == _msize(elf->e_class, EV_CURRENT, ELF_T_SHDR)); elf_assert(dst.d_type == ELF_T_SHDR); scn->s_elf = elf; scn->s_index = i; scn->s_data_1 = sd; scn->s_data_n = sd; sd->sd_scn = scn; if (elf->e_class == ELFCLASS32) { Elf32_Shdr *shdr = &scn->s_shdr32; scn->s_type = shdr->sh_type; scn->s_size = shdr->sh_size; scn->s_offset = shdr->sh_offset; sd->sd_data.d_align = shdr->sh_addralign; sd->sd_data.d_type = _elf_scn_type(scn->s_type); } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { Elf64_Shdr *shdr = &scn->s_shdr64; scn->s_type = shdr->sh_type; scn->s_size = shdr->sh_size; scn->s_offset = shdr->sh_offset; sd->sd_data.d_align = shdr->sh_addralign; /* * Check for overflow on 32-bit systems */ if (overflow(scn->s_size, shdr->sh_size, Elf64_Xword) || overflow(scn->s_offset, shdr->sh_offset, Elf64_Off) || overflow(sd->sd_data.d_align, shdr->sh_addralign, Elf64_Xword)) { seterr(ERROR_OUTSIDE); return 0; } sd->sd_data.d_type = _elf_scn_type(scn->s_type); /* * QUIRKS MODE: * * Some 64-bit architectures use 64-bit entries in the * .hash section. This violates the ELF standard, and * should be fixed. It's mostly harmless as long as the * binary and the machine running your program have the * same byte order, but you're in trouble if they don't, * and if the entry size is wrong. * * As a workaround, I let libelf guess the right size * for the binary. This relies pretty much on the fact * that the binary provides correct data in the section * headers. If it doesn't, it's probably broken anyway. * Therefore, libelf uses a standard conforming value * when it's not absolutely sure. */ if (scn->s_type == SHT_HASH) { int override = 0; /* * sh_entsize must reflect the entry size */ if (shdr->sh_entsize == ELF64_FSZ_ADDR) { override++; } /* * sh_size must be a multiple of sh_entsize */ if (shdr->sh_size % ELF64_FSZ_ADDR == 0) { override++; } /* * There must be room for at least 2 entries */ if (shdr->sh_size >= 2 * ELF64_FSZ_ADDR) { override++; } /* * sh_addralign must be correctly set */ if (shdr->sh_addralign == ELF64_FSZ_ADDR) { override++; } /* * The section must be properly aligned */ if (shdr->sh_offset % ELF64_FSZ_ADDR == 0) { override++; } /* XXX: also look at the data? */ /* * Make a conservative decision... */ if (override >= 5) { sd->sd_data.d_type = ELF_T_ADDR; } } /* * END QUIRKS MODE. */ } #endif /* __LIBELF64 */ /* we already had this else { seterr(ERROR_UNIMPLEMENTED); return 0; } */ sd->sd_data.d_size = scn->s_size; sd->sd_data.d_version = _elf_version; } elf_assert(scn == &head[0].scn); elf->e_scn_1 = &head[0].scn; head[0].scn.s_freeme = 1; } return 1; } static int _elf_cook_file(Elf *elf) { elf->e_ehdr = _elf_item(NULL, elf, ELF_T_EHDR, 0); if (!elf->e_ehdr) { return 0; } /* * Note: _elf_cook_phdr may require the first section header! */ if (!_elf_cook_shdr(elf)) { return 0; } if (!_elf_cook_phdr(elf)) { return 0; } return 1; } int _elf_cook(Elf *elf) { elf_assert(_elf_scn_init.s_magic == SCN_MAGIC); elf_assert(_elf_data_init.sd_magic == DATA_MAGIC); elf_assert(elf); elf_assert(elf->e_magic == ELF_MAGIC); elf_assert(elf->e_kind == ELF_K_ELF); elf_assert(!elf->e_ehdr); if (!valid_version(elf->e_version)) { seterr(ERROR_UNKNOWN_VERSION); } else if (!valid_encoding(elf->e_encoding)) { seterr(ERROR_UNKNOWN_ENCODING); } else if (valid_class(elf->e_class)) { return _elf_cook_file(elf); } else { seterr(ERROR_UNKNOWN_CLASS); } return 0; } libelf-0.8.13.orig/lib/32.xlatetof.c0000644000000000000000000003004211015476446015467 0ustar rootroot/* * 32.xlatetof.c - implementation of the elf32_xlateto[fm](3) functions. * Copyright (C) 1995 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #ifndef lint static const char rcsid[] = "@(#) $Id: 32.xlatetof.c,v 1.27 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ /* * Ugly, ugly */ #ifdef _WIN32 # define Cat2(a,b)a##b # define Cat3(a,b,c)a##b##c # define Ex1(m1,m2,a,b)m1##m2(a##b) # define Ex2(m1,m2,a,b,c)m1##m2(a,b##c) #else /* _WIN32 */ # define x # if defined/**/x # define Cat2(a,b)a##b # define Cat3(a,b,c)a##b##c # define Ex1(m1,m2,a,b)m1##m2(a##b) # define Ex2(m1,m2,a,b,c)m1##m2(a,b##c) # else # define Cat2(a,b)a/**/b # define Cat3(a,b,c)a/**/b/**/c # define Ex1(m1,m2,a,b)m1/**/m2(a/**/b) # define Ex2(m1,m2,a,b,c)m1/**/m2(a,b/**/c) # endif # undef x #endif /* _WIN32 */ /* * auxiliary macros for execution order reversal */ #define seq_forw(a,b) a b #define seq_back(a,b) b a /* * function instantiator */ #define copy_type_e_io(name,e,io,tfrom,tto,copy) \ static size_t \ Cat3(name,_,io)(unsigned char *dst, const unsigned char *src, size_t n) { \ n /= sizeof(tfrom); \ if (n && dst) { \ const tfrom *from = (const tfrom*)src; \ tto *to = (tto*)dst; \ size_t i; \ \ if (sizeof(tfrom) < sizeof(tto)) { \ from += n; \ to += n; \ for (i = 0; i < n; i++) { \ --from; \ --to; \ copy(e,io,seq_back) \ } \ } \ else { \ for (i = 0; i < n; i++) { \ copy(e,io,seq_forw) \ from++; \ to++; \ } \ } \ } \ return n * sizeof(tto); \ } #define copy_type_e(name,e,type,copy) \ copy_type_e_io(name,e,tom,Cat2(__ext_,type),type,copy) \ copy_type_e_io(name,e,tof,type,Cat2(__ext_,type),copy) /* * master function instantiator */ #define copy_type(name,version,type,copy) \ copy_type_e(Cat3(name,L,version),L,type,copy) \ copy_type_e(Cat3(name,M,version),M,type,copy) /* * scalar copying */ #define copy_scalar_tom(type) *to = Cat2(__load_,type)(*from); #define copy_scalar_tof(type) Cat2(__store_,type)(*to, *from); /* * structure member copying */ #define copy_tom(mb,type) to->mb = Cat2(__load_,type)(from->mb); #define copy_tof(mb,type) Cat2(__store_,type)(to->mb, from->mb); /* * structure member copying (direction independent) */ #define copy_byte(e,io,mb) to->mb = from->mb; #define copy_addr(e,io,mb) Ex2(copy_,io,mb,u32,e) #define copy_half(e,io,mb) Ex2(copy_,io,mb,u16,e) #define copy_off(e,io,mb) Ex2(copy_,io,mb,u32,e) #define copy_sword(e,io,mb) Ex2(copy_,io,mb,i32,e) #define copy_word(e,io,mb) Ex2(copy_,io,mb,u32,e) #define copy_arr(e,io,mb) \ array_copy(to->mb, sizeof(to->mb), from->mb, sizeof(from->mb)); /* * scalar copying (direction independent) * these macros are used as `copy' arguments to copy_type() */ #define copy_addr_11(e,io,seq) Ex1(copy_scalar_,io,u32,e) #define copy_half_11(e,io,seq) Ex1(copy_scalar_,io,u16,e) #define copy_off_11(e,io,seq) Ex1(copy_scalar_,io,u32,e) #define copy_sword_11(e,io,seq) Ex1(copy_scalar_,io,i32,e) #define copy_word_11(e,io,seq) Ex1(copy_scalar_,io,u32,e) /* * structure copying (direction independent) * these macros are used as `copy' arguments to copy_type() */ #define copy_dyn_11(e,io,seq) \ seq(copy_sword(e,io,d_tag), \ seq(copy_addr(e,io,d_un.d_ptr), \ nullcopy)) #define copy_ehdr_11(e,io,seq) \ seq(copy_arr(e,io,e_ident), \ seq(copy_half(e,io,e_type), \ seq(copy_half(e,io,e_machine), \ seq(copy_word(e,io,e_version), \ seq(copy_addr(e,io,e_entry), \ seq(copy_off(e,io,e_phoff), \ seq(copy_off(e,io,e_shoff), \ seq(copy_word(e,io,e_flags), \ seq(copy_half(e,io,e_ehsize), \ seq(copy_half(e,io,e_phentsize), \ seq(copy_half(e,io,e_phnum), \ seq(copy_half(e,io,e_shentsize), \ seq(copy_half(e,io,e_shnum), \ seq(copy_half(e,io,e_shstrndx), \ nullcopy)))))))))))))) #define copy_phdr_11(e,io,seq) \ seq(copy_word(e,io,p_type), \ seq(copy_off(e,io,p_offset), \ seq(copy_addr(e,io,p_vaddr), \ seq(copy_addr(e,io,p_paddr), \ seq(copy_word(e,io,p_filesz), \ seq(copy_word(e,io,p_memsz), \ seq(copy_word(e,io,p_flags), \ seq(copy_word(e,io,p_align), \ nullcopy)))))))) #define copy_rela_11(e,io,seq) \ seq(copy_addr(e,io,r_offset), \ seq(copy_word(e,io,r_info), \ seq(copy_sword(e,io,r_addend), \ nullcopy))) #define copy_rel_11(e,io,seq) \ seq(copy_addr(e,io,r_offset), \ seq(copy_word(e,io,r_info), \ nullcopy)) #define copy_shdr_11(e,io,seq) \ seq(copy_word(e,io,sh_name), \ seq(copy_word(e,io,sh_type), \ seq(copy_word(e,io,sh_flags), \ seq(copy_addr(e,io,sh_addr), \ seq(copy_off(e,io,sh_offset), \ seq(copy_word(e,io,sh_size), \ seq(copy_word(e,io,sh_link), \ seq(copy_word(e,io,sh_info), \ seq(copy_word(e,io,sh_addralign), \ seq(copy_word(e,io,sh_entsize), \ nullcopy)))))))))) #define copy_sym_11(e,io,seq) \ seq(copy_word(e,io,st_name), \ seq(copy_addr(e,io,st_value), \ seq(copy_word(e,io,st_size), \ seq(copy_byte(e,io,st_info), \ seq(copy_byte(e,io,st_other), \ seq(copy_half(e,io,st_shndx), \ nullcopy)))))) #define nullcopy /**/ static size_t byte_copy(unsigned char *dst, const unsigned char *src, size_t n) { if (n && dst && dst != src) { #if HAVE_BROKEN_MEMMOVE size_t i; if (dst >= src + n || dst + n <= src) { memcpy(dst, src, n); } else if (dst < src) { for (i = 0; i < n; i++) { dst[i] = src[i]; } } else { for (i = n; --i; ) { dst[i] = src[i]; } } #else /* HAVE_BROKEN_MEMMOVE */ memmove(dst, src, n); #endif /* HAVE_BROKEN_MEMMOVE */ } return n; } static void array_copy(unsigned char *dst, size_t dlen, const unsigned char *src, size_t slen) { byte_copy(dst, src, dlen < slen ? dlen : slen); if (dlen > slen) { memset(dst + slen, 0, dlen - slen); } } /* * instantiate copy functions */ copy_type(addr_32,_,Elf32_Addr,copy_addr_11) copy_type(half_32,_,Elf32_Half,copy_half_11) copy_type(off_32,_,Elf32_Off,copy_off_11) copy_type(sword_32,_,Elf32_Sword,copy_sword_11) copy_type(word_32,_,Elf32_Word,copy_word_11) copy_type(dyn_32,11,Elf32_Dyn,copy_dyn_11) copy_type(ehdr_32,11,Elf32_Ehdr,copy_ehdr_11) copy_type(phdr_32,11,Elf32_Phdr,copy_phdr_11) copy_type(rela_32,11,Elf32_Rela,copy_rela_11) copy_type(rel_32,11,Elf32_Rel,copy_rel_11) copy_type(shdr_32,11,Elf32_Shdr,copy_shdr_11) copy_type(sym_32,11,Elf32_Sym,copy_sym_11) typedef size_t (*xlator)(unsigned char*, const unsigned char*, size_t); typedef xlator xltab[ELF_T_NUM][2]; /* * translation table (32-bit, version 1 -> version 1) */ #if PIC static xltab #else /* PIC */ static const xltab #endif /* PIC */ xlate32_11[/*encoding*/] = { { { byte_copy, byte_copy }, { addr_32L__tom, addr_32L__tof }, { dyn_32L11_tom, dyn_32L11_tof }, { ehdr_32L11_tom, ehdr_32L11_tof }, { half_32L__tom, half_32L__tof }, { off_32L__tom, off_32L__tof }, { phdr_32L11_tom, phdr_32L11_tof }, { rela_32L11_tom, rela_32L11_tof }, { rel_32L11_tom, rel_32L11_tof }, { shdr_32L11_tom, shdr_32L11_tof }, { sword_32L__tom, sword_32L__tof }, { sym_32L11_tom, sym_32L11_tof }, { word_32L__tom, word_32L__tof }, { 0, 0 }, /* there is no Sxword */ { 0, 0 }, /* there is no Xword */ #if __LIBELF_SYMBOL_VERSIONS { _elf_verdef_32L11_tom, _elf_verdef_32L11_tof }, { _elf_verneed_32L11_tom, _elf_verneed_32L11_tof }, #else /* __LIBELF_SYMBOL_VERSIONS */ { 0, 0 }, { 0, 0 }, #endif /* __LIBELF_SYMBOL_VERSIONS */ }, { { byte_copy, byte_copy }, { addr_32M__tom, addr_32M__tof }, { dyn_32M11_tom, dyn_32M11_tof }, { ehdr_32M11_tom, ehdr_32M11_tof }, { half_32M__tom, half_32M__tof }, { off_32M__tom, off_32M__tof }, { phdr_32M11_tom, phdr_32M11_tof }, { rela_32M11_tom, rela_32M11_tof }, { rel_32M11_tom, rel_32M11_tof }, { shdr_32M11_tom, shdr_32M11_tof }, { sword_32M__tom, sword_32M__tof }, { sym_32M11_tom, sym_32M11_tof }, { word_32M__tom, word_32M__tof }, { 0, 0 }, /* there is no Sxword */ { 0, 0 }, /* there is no Xword */ #if __LIBELF_SYMBOL_VERSIONS { _elf_verdef_32M11_tom, _elf_verdef_32M11_tof }, { _elf_verneed_32M11_tom, _elf_verneed_32M11_tof }, #else /* __LIBELF_SYMBOL_VERSIONS */ { 0, 0 }, { 0, 0 }, #endif /* __LIBELF_SYMBOL_VERSIONS */ }, }; /* * main translation table (32-bit) */ #if PIC static xltab* #else /* PIC */ static const xltab *const #endif /* PIC */ xlate32[EV_CURRENT - EV_NONE][EV_CURRENT - EV_NONE] = { { xlate32_11, }, }; #define translator(sv,dv,enc,type,d) \ (xlate32[(sv) - EV_NONE - 1] \ [(dv) - EV_NONE - 1] \ [(enc) - ELFDATA2LSB] \ [(type) - ELF_T_BYTE] \ [d]) /* * destination buffer size */ size_t _elf32_xltsize(const Elf_Data *src, unsigned dv, unsigned encode, int tof) { Elf_Type type = src->d_type; unsigned sv = src->d_version; xlator op; if (!valid_version(sv) || !valid_version(dv)) { seterr(ERROR_UNKNOWN_VERSION); return (size_t)-1; } if (tof) { /* * Encoding doesn't really matter (the translator only looks at * the source, which resides in memory), but we need a proper * encoding to select a translator... */ encode = ELFDATA2LSB; } else if (!valid_encoding(encode)) { seterr(ERROR_UNKNOWN_ENCODING); return (size_t)-1; } if (!valid_type(type)) { seterr(ERROR_UNKNOWN_TYPE); return (size_t)-1; } if (!(op = translator(sv, dv, encode, type, tof))) { seterr(ERROR_UNKNOWN_TYPE); return (size_t)-1; } return (*op)(NULL, src->d_buf, src->d_size); } /* * direction-independent translation */ static Elf_Data* elf32_xlate(Elf_Data *dst, const Elf_Data *src, unsigned encode, int tof) { Elf_Type type; int dv; int sv; size_t dsize; size_t tmp; xlator op; if (!src || !dst) { return NULL; } if (!src->d_buf || !dst->d_buf) { seterr(ERROR_NULLBUF); return NULL; } if (!valid_encoding(encode)) { seterr(ERROR_UNKNOWN_ENCODING); return NULL; } sv = src->d_version; dv = dst->d_version; if (!valid_version(sv) || !valid_version(dv)) { seterr(ERROR_UNKNOWN_VERSION); return NULL; } type = src->d_type; if (!valid_type(type)) { seterr(ERROR_UNKNOWN_TYPE); return NULL; } op = translator(sv, dv, encode, type, tof); if (!op) { seterr(ERROR_UNKNOWN_TYPE); return NULL; } dsize = (*op)(NULL, src->d_buf, src->d_size); if (dsize == (size_t)-1) { return NULL; } if (dst->d_size < dsize) { seterr(ERROR_DST2SMALL); return NULL; } if (dsize) { tmp = (*op)(dst->d_buf, src->d_buf, src->d_size); if (tmp == (size_t)-1) { return NULL; } elf_assert(tmp == dsize); } dst->d_size = dsize; dst->d_type = type; return dst; } /* * finally, the "official" translation functions */ Elf_Data* elf32_xlatetom(Elf_Data *dst, const Elf_Data *src, unsigned encode) { return elf32_xlate(dst, src, encode, 0); } Elf_Data* elf32_xlatetof(Elf_Data *dst, const Elf_Data *src, unsigned encode) { return elf32_xlate(dst, src, encode, 1); } libelf-0.8.13.orig/lib/libelf.h0000644000000000000000000002153211224706227014657 0ustar rootroot/* * libelf.h - public header file for libelf. * Copyright (C) 1995 - 2008 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ /* @(#) $Id: libelf.h,v 1.29 2009/07/07 17:57:43 michael Exp $ */ #ifndef _LIBELF_H #define _LIBELF_H #include /* for size_t */ #include #if __LIBELF_INTERNAL__ #include #else /* __LIBELF_INTERNAL__ */ #include #endif /* __LIBELF_INTERNAL__ */ #if defined __GNUC__ && !defined __cplusplus #define DEPRECATED __attribute__((deprecated)) #else #define DEPRECATED /* nothing */ #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #ifndef __P # if (__STDC__ + 0) || defined(__cplusplus) || defined(_WIN32) # define __P(args) args # else /* __STDC__ || defined(__cplusplus) */ # define __P(args) () # endif /* __STDC__ || defined(__cplusplus) */ #endif /* __P */ /* * Commands */ typedef enum { ELF_C_NULL = 0, /* must be first, 0 */ ELF_C_READ, ELF_C_WRITE, ELF_C_CLR, ELF_C_SET, ELF_C_FDDONE, ELF_C_FDREAD, ELF_C_RDWR, ELF_C_NUM /* must be last */ } Elf_Cmd; /* * Flags */ #define ELF_F_DIRTY 0x1 #define ELF_F_LAYOUT 0x4 /* * Allow sections to overlap when ELF_F_LAYOUT is in effect. * Note that this flag ist NOT portable, and that it may render * the output file unusable. Use with extreme caution! */ #define ELF_F_LAYOUT_OVERLAP 0x10000000 /* * File types */ typedef enum { ELF_K_NONE = 0, /* must be first, 0 */ ELF_K_AR, ELF_K_COFF, ELF_K_ELF, ELF_K_NUM /* must be last */ } Elf_Kind; /* * Data types */ typedef enum { ELF_T_BYTE = 0, /* must be first, 0 */ ELF_T_ADDR, ELF_T_DYN, ELF_T_EHDR, ELF_T_HALF, ELF_T_OFF, ELF_T_PHDR, ELF_T_RELA, ELF_T_REL, ELF_T_SHDR, ELF_T_SWORD, ELF_T_SYM, ELF_T_WORD, /* * New stuff for 64-bit. * * Most implementations add ELF_T_SXWORD after ELF_T_SWORD * which breaks binary compatibility with earlier versions. * If this causes problems for you, contact me. */ ELF_T_SXWORD, ELF_T_XWORD, /* * Symbol versioning. Sun broke binary compatibility (again!), * but I won't. */ ELF_T_VDEF, ELF_T_VNEED, ELF_T_NUM /* must be last */ } Elf_Type; /* * Elf descriptor */ typedef struct Elf Elf; /* * Section descriptor */ typedef struct Elf_Scn Elf_Scn; /* * Archive member header */ typedef struct { char* ar_name; time_t ar_date; long ar_uid; long ar_gid; unsigned long ar_mode; off_t ar_size; char* ar_rawname; } Elf_Arhdr; /* * Archive symbol table */ typedef struct { char* as_name; size_t as_off; unsigned long as_hash; } Elf_Arsym; /* * Data descriptor */ typedef struct { void* d_buf; Elf_Type d_type; size_t d_size; off_t d_off; size_t d_align; unsigned d_version; } Elf_Data; /* * Function declarations */ extern Elf *elf_begin __P((int __fd, Elf_Cmd __cmd, Elf *__ref)); extern Elf *elf_memory __P((char *__image, size_t __size)); extern int elf_cntl __P((Elf *__elf, Elf_Cmd __cmd)); extern int elf_end __P((Elf *__elf)); extern const char *elf_errmsg __P((int __err)); extern int elf_errno __P((void)); extern void elf_fill __P((int __fill)); extern unsigned elf_flagdata __P((Elf_Data *__data, Elf_Cmd __cmd, unsigned __flags)); extern unsigned elf_flagehdr __P((Elf *__elf, Elf_Cmd __cmd, unsigned __flags)); extern unsigned elf_flagelf __P((Elf *__elf, Elf_Cmd __cmd, unsigned __flags)); extern unsigned elf_flagphdr __P((Elf *__elf, Elf_Cmd __cmd, unsigned __flags)); extern unsigned elf_flagscn __P((Elf_Scn *__scn, Elf_Cmd __cmd, unsigned __flags)); extern unsigned elf_flagshdr __P((Elf_Scn *__scn, Elf_Cmd __cmd, unsigned __flags)); extern size_t elf32_fsize __P((Elf_Type __type, size_t __count, unsigned __ver)); extern Elf_Arhdr *elf_getarhdr __P((Elf *__elf)); extern Elf_Arsym *elf_getarsym __P((Elf *__elf, size_t *__ptr)); extern off_t elf_getbase __P((Elf *__elf)); extern Elf_Data *elf_getdata __P((Elf_Scn *__scn, Elf_Data *__data)); extern Elf32_Ehdr *elf32_getehdr __P((Elf *__elf)); extern char *elf_getident __P((Elf *__elf, size_t *__ptr)); extern Elf32_Phdr *elf32_getphdr __P((Elf *__elf)); extern Elf_Scn *elf_getscn __P((Elf *__elf, size_t __index)); extern Elf32_Shdr *elf32_getshdr __P((Elf_Scn *__scn)); extern unsigned long elf_hash __P((const unsigned char *__name)); extern Elf_Kind elf_kind __P((Elf *__elf)); extern size_t elf_ndxscn __P((Elf_Scn *__scn)); extern Elf_Data *elf_newdata __P((Elf_Scn *__scn)); extern Elf32_Ehdr *elf32_newehdr __P((Elf *__elf)); extern Elf32_Phdr *elf32_newphdr __P((Elf *__elf, size_t __count)); extern Elf_Scn *elf_newscn __P((Elf *__elf)); extern Elf_Cmd elf_next __P((Elf *__elf)); extern Elf_Scn *elf_nextscn __P((Elf *__elf, Elf_Scn *__scn)); extern size_t elf_rand __P((Elf *__elf, size_t __offset)); extern Elf_Data *elf_rawdata __P((Elf_Scn *__scn, Elf_Data *__data)); extern char *elf_rawfile __P((Elf *__elf, size_t *__ptr)); extern char *elf_strptr __P((Elf *__elf, size_t __section, size_t __offset)); extern off_t elf_update __P((Elf *__elf, Elf_Cmd __cmd)); extern unsigned elf_version __P((unsigned __ver)); extern Elf_Data *elf32_xlatetof __P((Elf_Data *__dst, const Elf_Data *__src, unsigned __encode)); extern Elf_Data *elf32_xlatetom __P((Elf_Data *__dst, const Elf_Data *__src, unsigned __encode)); /* * Additional functions found on Solaris */ extern long elf32_checksum __P((Elf *__elf)); #if __LIBELF64 /* * 64-bit ELF functions * Not available on all platforms */ extern Elf64_Ehdr *elf64_getehdr __P((Elf *__elf)); extern Elf64_Ehdr *elf64_newehdr __P((Elf *__elf)); extern Elf64_Phdr *elf64_getphdr __P((Elf *__elf)); extern Elf64_Phdr *elf64_newphdr __P((Elf *__elf, size_t __count)); extern Elf64_Shdr *elf64_getshdr __P((Elf_Scn *__scn)); extern size_t elf64_fsize __P((Elf_Type __type, size_t __count, unsigned __ver)); extern Elf_Data *elf64_xlatetof __P((Elf_Data *__dst, const Elf_Data *__src, unsigned __encode)); extern Elf_Data *elf64_xlatetom __P((Elf_Data *__dst, const Elf_Data *__src, unsigned __encode)); /* * Additional functions found on Solaris */ extern long elf64_checksum __P((Elf *__elf)); #endif /* __LIBELF64 */ /* * ELF format extensions * * These functions return 0 on failure, 1 on success. Since other * implementations of libelf may behave differently (there was quite * some confusion about the correct values), they are now officially * deprecated and should be replaced with the three new functions below. */ DEPRECATED extern int elf_getphnum __P((Elf *__elf, size_t *__resultp)); DEPRECATED extern int elf_getshnum __P((Elf *__elf, size_t *__resultp)); DEPRECATED extern int elf_getshstrndx __P((Elf *__elf, size_t *__resultp)); /* * Replacement functions (return -1 on failure, 0 on success). */ extern int elf_getphdrnum __P((Elf *__elf, size_t *__resultp)); extern int elf_getshdrnum __P((Elf *__elf, size_t *__resultp)); extern int elf_getshdrstrndx __P((Elf *__elf, size_t *__resultp)); /* * Convenience functions * * elfx_update_shstrndx is elf_getshstrndx's counterpart. * It should be used to set the e_shstrndx member. * There is no update function for e_shnum or e_phnum * because libelf handles them internally. */ extern int elfx_update_shstrndx __P((Elf *__elf, size_t __index)); /* * Experimental extensions: * * elfx_movscn() moves section `__scn' directly after section `__after'. * elfx_remscn() removes section `__scn'. Both functions update * the section indices; elfx_remscn() also adjusts the ELF header's * e_shnum member. The application is responsible for updating other * data (in particular, e_shstrndx and the section headers' sh_link and * sh_info members). * * elfx_movscn() returns the new index of the moved section. * elfx_remscn() returns the original index of the removed section. * A return value of zero indicates an error. */ extern size_t elfx_movscn __P((Elf *__elf, Elf_Scn *__scn, Elf_Scn *__after)); extern size_t elfx_remscn __P((Elf *__elf, Elf_Scn *__scn)); /* * elf_delscn() is obsolete. Please use elfx_remscn() instead. */ extern size_t elf_delscn __P((Elf *__elf, Elf_Scn *__scn)); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _LIBELF_H */ libelf-0.8.13.orig/lib/errors.h0000644000000000000000000001411611015476446014743 0ustar rootroot/* * errors.h - exhaustive list of all error codes and messages for libelf. * Copyright (C) 1995 - 2003, 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ /* @(#) $Id: errors.h,v 1.18 2008/05/23 08:15:34 michael Exp $ */ /* dummy for xgettext */ #define _(str) str __err__(ERROR_OK, _("no error")) __err__(ERROR_UNKNOWN, _("unknown error")) __err__(ERROR_INTERNAL, _("Internal error: unknown reason")) __err__(ERROR_UNIMPLEMENTED, _("Internal error: not implemented")) __err__(ERROR_WRONLY, _("Request error: cntl(ELF_C_FDREAD) on write-only file")) __err__(ERROR_INVALID_CMD, _("Request error: invalid ELF_C_* argument")) __err__(ERROR_FDDISABLED, _("Request error: file descriptor disabled")) __err__(ERROR_NOTARCHIVE, _("Request error: not an archive")) __err__(ERROR_BADOFF, _("Request error: offset out of range")) __err__(ERROR_UNKNOWN_VERSION, _("Request error: unknown ELF version")) __err__(ERROR_CMDMISMATCH, _("Request error: ELF_C_* argument does not match")) __err__(ERROR_MEMBERWRITE, _("Request error: archive member begin() for writing")) __err__(ERROR_FDMISMATCH, _("Request error: archive/member file descriptor mismatch")) __err__(ERROR_NOTELF, _("Request error: not an ELF file")) __err__(ERROR_CLASSMISMATCH, _("Request error: class file/memory mismatch")) __err__(ERROR_UNKNOWN_TYPE, _("Request error: invalid ELF_T_* argument")) __err__(ERROR_UNKNOWN_ENCODING, _("Request error: unknown data encoding")) __err__(ERROR_DST2SMALL, _("Request error: destination buffer too small")) __err__(ERROR_NULLBUF, _("Request error: d_buf is NULL")) __err__(ERROR_UNKNOWN_CLASS, _("Request error: unknown ELF class")) __err__(ERROR_ELFSCNMISMATCH, _("Request error: section does not belong to file")) __err__(ERROR_NOSUCHSCN, _("Request error: no section at index")) __err__(ERROR_NULLSCN, _("Request error: can't manipulate null section")) __err__(ERROR_SCNDATAMISMATCH, _("Request error: data does not belong to section")) __err__(ERROR_NOSTRTAB, _("Request error: no string table")) __err__(ERROR_BADSTROFF, _("Request error: string table offset out of range")) __err__(ERROR_RDONLY, _("Request error: update(ELF_C_WRITE) on read-only file")) __err__(ERROR_IO_SEEK, _("I/O error: seek")) __err__(ERROR_IO_2BIG, _("I/O error: file too big for memory")) __err__(ERROR_IO_READ, _("I/O error: raw read")) __err__(ERROR_IO_GETSIZE, _("I/O error: get file size")) __err__(ERROR_IO_WRITE, _("I/O error: output write")) __err__(ERROR_IO_TRUNC, _("I/O error: can't truncate output file")) __err__(ERROR_VERSION_UNSET, _("Sequence error: must set ELF version first")) __err__(ERROR_NOEHDR, _("Sequence error: must create ELF header first")) __err__(ERROR_OUTSIDE, _("Format error: reference outside file")) __err__(ERROR_TRUNC_ARHDR, _("Format error: archive header truncated")) __err__(ERROR_ARFMAG, _("Format error: archive fmag")) __err__(ERROR_ARHDR, _("Format error: archive header")) __err__(ERROR_TRUNC_MEMBER, _("Format error: archive member truncated")) __err__(ERROR_SIZE_ARSYMTAB, _("Format error: archive symbol table size")) __err__(ERROR_ARSTRTAB, _("Format error: archive string table")) __err__(ERROR_ARSPECIAL, _("Format error: archive special name unknown")) __err__(ERROR_TRUNC_EHDR, _("Format error: ELF header truncated")) __err__(ERROR_TRUNC_PHDR, _("Format error: program header table truncated")) __err__(ERROR_TRUNC_SHDR, _("Format error: section header table truncated")) __err__(ERROR_TRUNC_SCN, _("Format error: data region truncated")) __err__(ERROR_ALIGN_PHDR, _("Format error: program header table alignment")) __err__(ERROR_ALIGN_SHDR, _("Format error: section header table alignment")) __err__(ERROR_VERDEF_FORMAT, _("Format error: bad parameter in Verdef record")) __err__(ERROR_VERDEF_VERSION, _("Format error: unknown Verdef version")) __err__(ERROR_VERNEED_FORMAT, _("Format error: bad parameter in Verneed record")) __err__(ERROR_VERNEED_VERSION, _("Format error: unknown Verneed version")) __err__(ERROR_EHDR_SHNUM, _("Format error: bad e_shnum value")) __err__(ERROR_EHDR_SHENTSIZE, _("Format error: bad e_shentsize value")) __err__(ERROR_EHDR_PHENTSIZE, _("Format error: bad e_phentsize value")) __err__(ERROR_UNTERM, _("Format error: unterminated string in string table")) __err__(ERROR_SCN2SMALL, _("Layout error: section size too small for data")) __err__(ERROR_SCN_OVERLAP, _("Layout error: overlapping sections")) __err__(ERROR_MEM_ELF, _("Memory error: elf descriptor")) __err__(ERROR_MEM_ARSYMTAB, _("Memory error: archive symbol table")) __err__(ERROR_MEM_ARHDR, _("Memory error: archive member header")) __err__(ERROR_MEM_EHDR, _("Memory error: ELF header")) __err__(ERROR_MEM_PHDR, _("Memory error: program header table")) __err__(ERROR_MEM_SHDR, _("Memory error: section header table")) __err__(ERROR_MEM_SCN, _("Memory error: section descriptor")) __err__(ERROR_MEM_SCNDATA, _("Memory error: section data")) __err__(ERROR_MEM_OUTBUF, _("Memory error: output file space")) __err__(ERROR_MEM_TEMPORARY, _("Memory error: temporary buffer")) __err__(ERROR_BADVALUE, _("GElf error: value out of range")) __err__(ERROR_BADINDEX, _("GElf error: index out of range")) __err__(ERROR_BADTYPE, _("GElf error: type mismatch")) __err__(ERROR_MEM_SYM, _("GElf error: not enough memory for GElf_Sym")) __err__(ERROR_MEM_DYN, _("GElf error: not enough memory for GElf_Dyn")) __err__(ERROR_MEM_RELA, _("GElf error: not enough memory for GElf_Rela")) __err__(ERROR_MEM_REL, _("GElf error: not enough memory for GElf_Rel")) libelf-0.8.13.orig/lib/getbase.c0000644000000000000000000000211011015476446015023 0ustar rootroot/* getbase.c - implementation of the elf_getbase(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: getbase.c,v 1.7 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ off_t elf_getbase(Elf *elf) { if (!elf) { return -1; } elf_assert(elf->e_magic == ELF_MAGIC); return (off_t)elf->e_base; } libelf-0.8.13.orig/lib/nextscn.c0000644000000000000000000000310711015476447015103 0ustar rootroot/* nextscn.c - implementation of the elf_nextscn(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: nextscn.c,v 1.7 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ Elf_Scn* elf_nextscn(Elf *elf, Elf_Scn *scn) { if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (scn) { elf_assert(scn->s_magic == SCN_MAGIC); if (scn->s_elf == elf) { return scn->s_link; } seterr(ERROR_ELFSCNMISMATCH); } else if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (elf->e_ehdr || _elf_cook(elf)) { elf_assert(elf->e_ehdr); for (scn = elf->e_scn_1; scn; scn = scn->s_link) { elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(scn->s_elf == elf); if (scn->s_index == 1) { return scn; } } seterr(ERROR_NOSUCHSCN); } return NULL; } libelf-0.8.13.orig/lib/rand.c0000644000000000000000000000240611015476447014346 0ustar rootroot/* rand.c - implementation of the elf_rand(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: rand.c,v 1.7 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ size_t elf_rand(Elf *elf, size_t offset) { if (!elf) { return 0; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_kind != ELF_K_AR) { seterr(ERROR_NOTARCHIVE); } else if (offset <= 0 || offset > elf->e_size) { seterr(ERROR_BADOFF); } else { elf->e_off = offset; return offset; } return 0; } libelf-0.8.13.orig/lib/verdef.h0000644000000000000000000001534411015476447014707 0ustar rootroot/* * verdef.h - copy versioning information. * Copyright (C) 2001 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef lint static const char verdef_h_rcsid[] = "@(#) $Id: verdef.h,v 1.13 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ #if VER_DEF_CURRENT != 1 #error libelf currently does not support VER_DEF_CURRENT != 1 #endif /* VER_DEF_CURRENT != 1 */ #if TOFILE static void __store_verdaux(verdaux_ftype *dst, const verdaux_mtype *src, unsigned enc) { if (enc == ELFDATA2LSB) { __store_u32L(dst->vda_name, src->vda_name); __store_u32L(dst->vda_next, src->vda_next); } else { __store_u32M(dst->vda_name, src->vda_name); __store_u32M(dst->vda_next, src->vda_next); } } static void __store_verdef(verdef_ftype *dst, const verdef_mtype *src, unsigned enc) { if (enc == ELFDATA2LSB) { __store_u16L(dst->vd_version, src->vd_version); __store_u16L(dst->vd_flags, src->vd_flags); __store_u16L(dst->vd_ndx, src->vd_ndx); __store_u16L(dst->vd_cnt, src->vd_cnt); __store_u32L(dst->vd_hash, src->vd_hash); __store_u32L(dst->vd_aux, src->vd_aux); __store_u32L(dst->vd_next, src->vd_next); } else { __store_u16M(dst->vd_version, src->vd_version); __store_u16M(dst->vd_flags, src->vd_flags); __store_u16M(dst->vd_ndx, src->vd_ndx); __store_u16M(dst->vd_cnt, src->vd_cnt); __store_u32M(dst->vd_hash, src->vd_hash); __store_u32M(dst->vd_aux, src->vd_aux); __store_u32M(dst->vd_next, src->vd_next); } } typedef verdaux_mtype verdaux_stype; typedef verdaux_ftype verdaux_dtype; typedef verdef_mtype verdef_stype; typedef verdef_ftype verdef_dtype; typedef align_mtype verdef_atype; #define copy_verdaux_srctotmp(d, s, e) (*(d) = *(s)) #define copy_verdaux_tmptodst(d, s, e) __store_verdaux((d), (s), (e)) #define copy_verdef_srctotmp(d, s, e) (*(d) = *(s)) #define copy_verdef_tmptodst(d, s, e) __store_verdef((d), (s), (e)) #define translator_suffix _tof #else /* TOFILE */ static void __load_verdaux(verdaux_mtype *dst, const verdaux_ftype *src, unsigned enc) { if (enc == ELFDATA2LSB) { dst->vda_name = __load_u32L(src->vda_name); dst->vda_next = __load_u32L(src->vda_next); } else { dst->vda_name = __load_u32M(src->vda_name); dst->vda_next = __load_u32M(src->vda_next); } } static void __load_verdef(verdef_mtype *dst, const verdef_ftype *src, unsigned enc) { if (enc == ELFDATA2LSB) { dst->vd_version = __load_u16L(src->vd_version); dst->vd_flags = __load_u16L(src->vd_flags); dst->vd_ndx = __load_u16L(src->vd_ndx); dst->vd_cnt = __load_u16L(src->vd_cnt); dst->vd_hash = __load_u32L(src->vd_hash); dst->vd_aux = __load_u32L(src->vd_aux); dst->vd_next = __load_u32L(src->vd_next); } else { dst->vd_version = __load_u16M(src->vd_version); dst->vd_flags = __load_u16M(src->vd_flags); dst->vd_ndx = __load_u16M(src->vd_ndx); dst->vd_cnt = __load_u16M(src->vd_cnt); dst->vd_hash = __load_u32M(src->vd_hash); dst->vd_aux = __load_u32M(src->vd_aux); dst->vd_next = __load_u32M(src->vd_next); } } typedef verdaux_ftype verdaux_stype; typedef verdaux_mtype verdaux_dtype; typedef verdef_ftype verdef_stype; typedef verdef_mtype verdef_dtype; typedef align_ftype verdef_atype; #define copy_verdaux_srctotmp(d, s, e) __load_verdaux((d), (s), (e)) #define copy_verdaux_tmptodst(d, s, e) (*(d) = *(s)) #define copy_verdef_srctotmp(d, s, e) __load_verdef((d), (s), (e)) #define copy_verdef_tmptodst(d, s, e) (*(d) = *(s)) #define translator_suffix _tom #endif /* TOFILE */ #define cat3(a,b,c) a##b##c #define xlt3(p,e,s) cat3(p,e,s) #define xltprefix(x) xlt3(x,_,class_suffix) #define translator(x,e) xlt3(xltprefix(_elf_##x),e,translator_suffix) static size_t xlt_verdef(unsigned char *dst, const unsigned char *src, size_t n, unsigned enc) { size_t off; if (sizeof(verdef_stype) != sizeof(verdef_dtype) || sizeof(verdaux_stype) != sizeof(verdaux_dtype)) { /* never happens for ELF v1 and Verneed v1 */ seterr(ERROR_UNIMPLEMENTED); return (size_t)-1; } /* size translation shortcut */ if (dst == NULL) { return n; } if (src == NULL) { seterr(ERROR_NULLBUF); return (size_t)-1; } off = 0; while (off + sizeof(verdef_stype) <= n) { const verdef_stype *svd; verdef_dtype *dvd; verdef_mtype vd; size_t acount; size_t aoff; /* * check for proper alignment */ if (off % sizeof(verdef_atype)) { seterr(ERROR_VERDEF_FORMAT); return (size_t)-1; } /* * copy and check src */ svd = (verdef_stype*)(src + off); dvd = (verdef_dtype*)(dst + off); copy_verdef_srctotmp(&vd, svd, enc); if (vd.vd_version < 1 || vd.vd_version > VER_DEF_CURRENT) { seterr(ERROR_VERDEF_VERSION); return (size_t)-1; } if (vd.vd_cnt < 1 || vd.vd_aux == 0) { seterr(ERROR_VERDEF_FORMAT); return (size_t)-1; } copy_verdef_tmptodst(dvd, &vd, enc); /* * copy aux array */ aoff = off + vd.vd_aux; for (acount = 0; acount < vd.vd_cnt; acount++) { const verdaux_stype *svda; verdaux_dtype *dvda; verdaux_mtype vda; /* * are we still inside the buffer limits? */ if (aoff + sizeof(verdaux_stype) > n) { break; } /* * check for proper alignment */ if (aoff % sizeof(verdef_atype)) { seterr(ERROR_VERDEF_FORMAT); return (size_t)-1; } /* * copy and check src */ svda = (verdaux_stype*)(src + aoff); dvda = (verdaux_dtype*)(dst + aoff); copy_verdaux_srctotmp(&vda, svda, enc); copy_verdaux_tmptodst(dvda, &vda, enc); /* * advance to next verdaux */ if (vda.vda_next == 0) { /* end of list */ break; } aoff += vda.vda_next; } /* * advance to next verdef */ if (vd.vd_next == 0) { /* end of list */ break; } off += vd.vd_next; } return n; } size_t translator(verdef,L11)(unsigned char *dst, const unsigned char *src, size_t n) { return xlt_verdef(dst, src, n, ELFDATA2LSB); } size_t translator(verdef,M11)(unsigned char *dst, const unsigned char *src, size_t n) { return xlt_verdef(dst, src, n, ELFDATA2MSB); } libelf-0.8.13.orig/lib/end.c0000644000000000000000000000552311015476446014172 0ustar rootroot/* * end.c - implementation of the elf_end(3) function. * Copyright (C) 1995 - 2004 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: end.c,v 1.12 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ #if HAVE_MMAP #include #endif /* HAVE_MMAP */ static void _elf_free(void *ptr) { if (ptr) { free(ptr); } } static void _elf_free_scns(Elf *elf, Elf_Scn *scn) { Scn_Data *sd, *tmp; Elf_Scn *freescn; for (freescn = NULL; scn; scn = scn->s_link) { elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(scn->s_elf == elf); for (sd = scn->s_data_1; sd; sd = tmp) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); tmp = sd->sd_link; if (sd->sd_free_data) { _elf_free(sd->sd_memdata); } if (sd->sd_freeme) { free(sd); } } if ((sd = scn->s_rawdata)) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); if (sd->sd_free_data) { _elf_free(sd->sd_memdata); } if (sd->sd_freeme) { free(sd); } } if (scn->s_freeme) { _elf_free(freescn); freescn = scn; } } _elf_free(freescn); } int elf_end(Elf *elf) { Elf **siblings; if (!elf) { return 0; } elf_assert(elf->e_magic == ELF_MAGIC); if (--elf->e_count) { return elf->e_count; } if (elf->e_parent) { elf_assert(elf->e_parent->e_magic == ELF_MAGIC); elf_assert(elf->e_parent->e_kind == ELF_K_AR); siblings = &elf->e_parent->e_members; while (*siblings) { if (*siblings == elf) { *siblings = elf->e_link; break; } siblings = &(*siblings)->e_link; } elf_end(elf->e_parent); _elf_free(elf->e_arhdr); } #if HAVE_MMAP else if (elf->e_unmap_data) { munmap(elf->e_data, elf->e_size); } #endif /* HAVE_MMAP */ else if (!elf->e_memory) { _elf_free(elf->e_data); } _elf_free_scns(elf, elf->e_scn_1); if (elf->e_rawdata != elf->e_data) { _elf_free(elf->e_rawdata); } if (elf->e_free_syms) { _elf_free(elf->e_symtab); } _elf_free(elf->e_ehdr); _elf_free(elf->e_phdr); free(elf); return 0; } libelf-0.8.13.orig/lib/checksum.c0000644000000000000000000000754111015476446015230 0ustar rootroot/* checksum.c - implementation of the elf{32,64}_checksum(3) functions. Copyright (C) 1995 - 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: checksum.c,v 1.7 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ /* * Compatibility note: * * The algorithm used in {elf32,elf64,gelf}_checksum() does not seem to * be documented. I hope I got it right. My implementation does the * following: * * - skip sections that do not have the SHF_ALLOC flag set * - skip sections of type SHT_NULL, SHT_NOBITS, SHT_DYNSYM and * SHT_DYNAMIC * - add all data bytes from the remaining sections, modulo 2**32 * - add upper and lower half of the result * - subtract 0xffff if the result is > 0xffff * - if any error occurs, return 0L */ static int skip_section(Elf_Scn *scn, unsigned cls) { if (cls == ELFCLASS32) { Elf32_Shdr *shdr = &scn->s_shdr32; if (!(shdr->sh_flags & SHF_ALLOC)) { return 1; } switch (shdr->sh_type) { case SHT_NULL: case SHT_NOBITS: /* Solaris seems to ignore these, too */ case SHT_DYNSYM: case SHT_DYNAMIC: return 1; } } #if __LIBELF64 else if (cls == ELFCLASS64) { Elf64_Shdr *shdr = &scn->s_shdr64; if (!(shdr->sh_flags & SHF_ALLOC)) { return 1; } switch (shdr->sh_type) { case SHT_NULL: case SHT_NOBITS: /* Solaris seems to ignore these, too */ case SHT_DYNSYM: case SHT_DYNAMIC: return 1; } } #endif /* __LIBELF64 */ else { seterr(ERROR_UNIMPLEMENTED); } return 0; } static long add_bytes(unsigned char *ptr, size_t len) { long csum = 0; while (len--) { csum += *ptr++; } return csum; } static long _elf_csum(Elf *elf) { long csum = 0; Elf_Data *data; Elf_Scn *scn; if (!elf->e_ehdr && !_elf_cook(elf)) { /* propagate errors from _elf_cook */ return 0L; } seterr(0); for (scn = elf->e_scn_1; scn; scn = scn->s_link) { if (scn->s_index == SHN_UNDEF || skip_section(scn, elf->e_class)) { continue; } data = NULL; while ((data = elf_getdata(scn, data))) { if (data->d_size) { if (data->d_buf == NULL) { seterr(ERROR_NULLBUF); return 0L; } csum += add_bytes(data->d_buf, data->d_size); } } } if (_elf_errno) { return 0L; } csum = (csum & 0xffff) + ((csum >> 16) & 0xffff); if (csum > 0xffff) { csum -= 0xffff; } return csum; } long elf32_checksum(Elf *elf) { if (elf) { if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (elf->e_class != ELFCLASS32) { seterr(ERROR_CLASSMISMATCH); } else { return _elf_csum(elf); } } return 0L; } #if __LIBELF64 long elf64_checksum(Elf *elf) { if (elf) { if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (elf->e_class != ELFCLASS64) { seterr(ERROR_CLASSMISMATCH); } else { return _elf_csum(elf); } } return 0L; } long gelf_checksum(Elf *elf) { if (elf) { if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (!valid_class(elf->e_class)) { seterr(ERROR_UNKNOWN_CLASS); } else { return _elf_csum(elf); } } return 0L; } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/build.bat0000644000000000000000000000322510472372604015041 0ustar rootroot@echo off rem lib/build.bat - build script for W32 port rem Copyright (C) 2004 - 2006 Michael Riepe rem rem This library is free software; you can redistribute it and/or rem modify it under the terms of the GNU Library General Public rem License as published by the Free Software Foundation; either rem version 2 of the License, or (at your option) any later version. rem rem This library is distributed in the hope that it will be useful, rem but WITHOUT ANY WARRANTY; without even the implied warranty of rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU rem Library General Public License for more details. rem rem You should have received a copy of the GNU Library General Public rem License along with this library; if not, write to the Free Software rem Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. rem @(#) $Id: build.bat,v 1.1 2006/08/21 18:03:48 michael Exp $ rem *** BEGIN EDIT HERE *** rem Please uncomment the line that suits your system: rem call "C:\Program Files\Microsoft Visual Studio\VC98\bin\vcvars32.bat" rem call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat" rem call "C:\Programme\Microsoft Visual Studio\VC98\bin\vcvars32.bat" rem call "C:\Programme\Microsoft Visual Studio 8\VC\bin\vcvars32.bat" rem OR, if you have to set the path to the compiler directly: rem set PATH="C:\PATH\TO\COMPILER\BINARY;%PATH%" rem Of course, you'll have to enter the correct path above. rem You may also have to change CC (default: cl.exe) in Makefile.w32. rem *** END EDIT HERE *** copy config.h.w32 config.h copy sys_elf.h.w32 sys_elf.h nmake /nologo /f Makefile.w32 %1 libelf-0.8.13.orig/lib/config.h.w320000644000000000000000000001136310500040376015272 0ustar rootroot/* * lib/config.h.w32 - configuration file for W32 port * Copyright (C) 2004 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * @(#) $Id: config.h.w32,v 1.2 2006/09/07 15:55:42 michael Exp $ */ /* Define to empty if the keyword does not work. */ #undef const /* Define if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to `long' if doesn't define. */ #undef off_t /* Define to `unsigned' if doesn't define. */ #undef size_t /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if you want to include extra debugging code */ #define ENABLE_DEBUG 1 /* Define if memmove() does not copy overlapping arrays correctly */ #undef HAVE_BROKEN_MEMMOVE /* Define if you have the catgets function. */ #undef HAVE_CATGETS /* Define if you have the dgettext function. */ #undef HAVE_DGETTEXT /* Define if you have the memset function. */ #define HAVE_MEMSET 1 /* Define if struct nlist is declared in or */ #undef HAVE_STRUCT_NLIST_DECLARATION /* Define if Elf32_Dyn is declared in */ #undef __LIBELF_NEED_LINK_H /* Define if Elf32_Dyn is declared in */ #undef __LIBELF_NEED_SYS_LINK_H /* Define to `' or `' if one of them is present */ #undef __LIBELF_HEADER_ELF_H /* Define if you want 64-bit support (and your system supports it) */ #define __LIBELF64 1 /* Define if you want 64-bit support, and are running IRIX */ #undef __LIBELF64_IRIX /* Define if you want 64-bit support, and are running Linux */ #undef __LIBELF64_LINUX /* Define if you want symbol versioning (and your system supports it) */ #define __LIBELF_SYMBOL_VERSIONS 1 /* Define if symbol versioning uses Sun section type (SHT_SUNW_*) */ #define __LIBELF_SUN_SYMBOL_VERSIONS 1 /* Define if symbol versioning uses GNU section types (SHT_GNU_*) */ #undef __LIBELF_GNU_SYMBOL_VERSIONS /* Define to a 64-bit signed integer type if one exists */ #define __libelf_i64_t __int64 /* Define to a 64-bit unsigned integer type if one exists */ #define __libelf_u64_t unsigned __int64 /* Define to a 32-bit signed integer type if one exists */ #define __libelf_i32_t int /* Define to a 32-bit unsigned integer type if one exists */ #define __libelf_u32_t unsigned int /* Define to a 16-bit signed integer type if one exists */ #define __libelf_i16_t short int /* Define to a 16-bit unsigned integer type if one exists */ #define __libelf_u16_t unsigned short int /* The number of bytes in a __int64. */ #define SIZEOF___INT64 8 /* The number of bytes in a int. */ #define SIZEOF_INT 4 /* The number of bytes in a long. */ #define SIZEOF_LONG 4 /* The number of bytes in a long long. */ #define SIZEOF_LONG_LONG 0 /* The number of bytes in a short. */ #define SIZEOF_SHORT 2 /* Define if you have the ftruncate function. */ #undef HAVE_FTRUNCATE /* Define if you have the getpagesize function. */ #undef HAVE_GETPAGESIZE /* Define if you have the memcmp function. */ #define HAVE_MEMCMP 1 /* Define if you have the memcpy function. */ #define HAVE_MEMCPY 1 /* Define if you have the memmove function. */ #define HAVE_MEMMOVE 1 /* Define if you have the memset function. */ #define HAVE_MEMSET 1 /* Define if you have the header file. */ #undef HAVE_AR_H /* Define if you have the header file. */ #undef HAVE_ELF_H /* Define if you have the header file. */ #undef HAVE_FCNTL_H /* Define if you have the header file. */ #undef HAVE_GELF_H /* Define if you have the header file. */ #undef HAVE_LIBELF_H /* Define if you have the header file. */ #undef HAVE_LINK_H /* Define if you have the header file. */ #undef HAVE_NLIST_H /* Define if you have the header file. */ #undef HAVE_SYS_ELF_H /* Define if you have the header file. */ #undef HAVE_SYS_LINK_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H libelf-0.8.13.orig/lib/kind.c0000644000000000000000000000210011015476447014336 0ustar rootroot/* kind.c - implementation of the elf_kind(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: kind.c,v 1.7 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ Elf_Kind elf_kind(Elf *elf) { if (!elf) { return ELF_K_NONE; } elf_assert(elf->e_magic == ELF_MAGIC); return elf->e_kind; } libelf-0.8.13.orig/lib/version.c0000644000000000000000000000263311015476447015111 0ustar rootroot/* * version.c - implementation of the elf_version(3) function. * Copyright (C) 1995 - 1998, 2007 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: version.c,v 1.8 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ unsigned elf_version(unsigned ver) { const char *s; unsigned tmp; if ((s = getenv("LIBELF_SANITY_CHECKS"))) { _elf_sanity_checks = (int)strtol(s, (char**)NULL, 0); } if (ver == EV_NONE) { return EV_CURRENT; } if (!valid_version(ver)) { seterr(ERROR_UNKNOWN_VERSION); return EV_NONE; } tmp = _elf_version == EV_NONE ? EV_CURRENT : _elf_version; _elf_version = ver; return tmp; } libelf-0.8.13.orig/lib/verdef_64_tom.c0000644000000000000000000000311611015476447016064 0ustar rootroot/* verdef_64_tom.c - copy 64-bit versioning information. Copyright (C) 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #if __LIBELF64 && __LIBELF_SYMBOL_VERSIONS #ifndef lint static const char rcsid[] = "@(#) $Id: verdef_64_tom.c,v 1.5 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ typedef Elf64_Verdaux verdaux_mtype; typedef Elf64_Verdef verdef_mtype; typedef Elf64_Vernaux vernaux_mtype; typedef Elf64_Verneed verneed_mtype; typedef Elf64_Word align_mtype; typedef __ext_Elf64_Verdaux verdaux_ftype; typedef __ext_Elf64_Verdef verdef_ftype; typedef __ext_Elf64_Vernaux vernaux_ftype; typedef __ext_Elf64_Verneed verneed_ftype; typedef __ext_Elf64_Word align_ftype; #define class_suffix 64 #undef TOFILE #define TOFILE 0 /* * Include shared code */ #include "verdef.h" #include "verneed.h" #endif /* __LIBELF64 && __LIBELF_SYMBOL_VERSIONS */ libelf-0.8.13.orig/lib/input.c0000644000000000000000000000500211015476447014554 0ustar rootroot/* * input.c - low-level input for libelf. * Copyright (C) 1995 - 2001, 2005 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: input.c,v 1.11 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ #include #if HAVE_MMAP #include #endif /* HAVE_MMAP */ static int xread(int fd, char *buffer, size_t len) { size_t done = 0; size_t n; while (done < len) { n = read(fd, buffer + done, len - done); if (n == 0) { /* premature end of file */ return -1; } else if (n != (size_t)-1) { /* some bytes read, continue */ done += n; } else if (errno != EAGAIN && errno != EINTR) { /* real error */ return -1; } } return 0; } void* _elf_read(Elf *elf, void *buffer, size_t off, size_t len) { void *tmp; elf_assert(elf); elf_assert(elf->e_magic == ELF_MAGIC); elf_assert(off >= 0 && off + len <= elf->e_size); if (elf->e_disabled) { seterr(ERROR_FDDISABLED); } else if (len) { off += elf->e_base; if (lseek(elf->e_fd, (off_t)off, SEEK_SET) != (off_t)off) { seterr(ERROR_IO_SEEK); } else if (!(tmp = buffer) && !(tmp = malloc(len))) { seterr(ERROR_IO_2BIG); } else if (xread(elf->e_fd, tmp, len)) { seterr(ERROR_IO_READ); if (tmp != buffer) { free(tmp); } } else { return tmp; } } return NULL; } void* _elf_mmap(Elf *elf) { #if HAVE_MMAP void *tmp; elf_assert(elf); elf_assert(elf->e_magic == ELF_MAGIC); elf_assert(elf->e_base == 0); if (elf->e_disabled) { seterr(ERROR_FDDISABLED); } else if (elf->e_size) { tmp = (void*)mmap(0, elf->e_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, elf->e_fd, 0); if (tmp != (void*)-1) { return tmp; } } #endif /* HAVE_MMAP */ return NULL; } libelf-0.8.13.orig/lib/rawdata.c0000644000000000000000000000475711015476447015060 0ustar rootroot/* rawdata.c - implementation of the elf_rawdata(3) function. Copyright (C) 1995 - 2000 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: rawdata.c,v 1.10 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ Elf_Data* elf_rawdata(Elf_Scn *scn, Elf_Data *data) { Scn_Data *sd; Elf *elf; if (!scn) { return NULL; } elf_assert(scn->s_magic == SCN_MAGIC); elf = scn->s_elf; elf_assert(elf); elf_assert(elf->e_magic == ELF_MAGIC); if (!elf->e_readable) { return NULL; } else if (scn->s_index == SHN_UNDEF || scn->s_type == SHT_NULL) { seterr(ERROR_NULLSCN); } else if (data) { return NULL; } else if ((sd = scn->s_rawdata)) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); return &sd->sd_data; } else if (scn->s_offset < 0 || scn->s_offset > elf->e_size) { seterr(ERROR_OUTSIDE); } else if (scn->s_type != SHT_NOBITS && scn->s_offset + scn->s_size > elf->e_size) { seterr(ERROR_TRUNC_SCN); } else if (!(sd = (Scn_Data*)malloc(sizeof(*sd)))) { seterr(ERROR_MEM_SCNDATA); } else { *sd = _elf_data_init; sd->sd_scn = scn; sd->sd_freeme = 1; sd->sd_data.d_size = scn->s_size; sd->sd_data.d_version = _elf_version; if (scn->s_type != SHT_NOBITS && scn->s_size) { if (!(sd->sd_memdata = (char*)malloc(scn->s_size))) { seterr(ERROR_IO_2BIG); free(sd); return NULL; } else if (elf->e_rawdata) { memcpy(sd->sd_memdata, elf->e_rawdata + scn->s_offset, scn->s_size); } else if (!_elf_read(elf, sd->sd_memdata, scn->s_offset, scn->s_size)) { free(sd->sd_memdata); free(sd); return NULL; } sd->sd_data.d_buf = sd->sd_memdata; sd->sd_free_data = 1; } scn->s_rawdata = sd; return &sd->sd_data; } return NULL; } libelf-0.8.13.orig/lib/libelf.def0000644000000000000000000000227610454753560015200 0ustar rootrootLIBRARY libelf VERSION 0.8 EXPORTS elf_begin elf_cntl elf_delscn elf_end elf_errmsg elf_errno elf_fill elf_flagdata elf_flagehdr elf_flagelf elf_flagphdr elf_flagscn elf_flagshdr elf_getarhdr elf_getarsym elf_getbase elf_getdata elf_getident elf_getscn elf_hash elf_kind elf_memory elf_ndxscn elf_newdata elf_newscn elf_next elf_nextscn elf_rand elf_rawdata elf_rawfile elf_strptr elf_update elf_version elf32_checksum elf32_fsize elf32_getehdr elf32_getphdr elf32_getshdr elf32_newehdr elf32_newphdr elf32_xlatetof elf32_xlatetom elf64_checksum elf64_fsize elf64_getehdr elf64_getphdr elf64_getshdr elf64_newehdr elf64_newphdr elf64_xlatetof elf64_xlatetom elfx_movscn elfx_remscn gelf_checksum gelf_fsize gelf_getclass gelf_getdyn gelf_getehdr gelf_getphdr gelf_getrel gelf_getrela gelf_getshdr gelf_getsym gelf_msize gelf_newehdr gelf_newphdr gelf_update_dyn gelf_update_ehdr gelf_update_phdr gelf_update_rel gelf_update_rela gelf_update_shdr gelf_update_sym gelf_xlatetof gelf_xlatetom elf_getphnum elf_getshnum elf_getshstrndx elfx_update_shstrndx libelf-0.8.13.orig/lib/32.fsize.c0000644000000000000000000001127611015476445014770 0ustar rootroot/* 32.fsize.c - implementation of the elf{32,64}_fsize(3) functions. Copyright (C) 1995 - 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #ifndef lint static const char rcsid[] = "@(#) $Id: 32.fsize.c,v 1.13 2008/05/23 08:15:33 michael Exp $"; #endif /* lint */ const size_t _elf_fmsize[2][EV_CURRENT - EV_NONE][ELF_T_NUM][2] = { /* ELFCLASS32 */ { /* version 1 */ { { sizeof(unsigned char), sizeof(unsigned char) }, { sizeof(Elf32_Addr), sizeof(__ext_Elf32_Addr) }, { sizeof(Elf32_Dyn), sizeof(__ext_Elf32_Dyn) }, { sizeof(Elf32_Ehdr), sizeof(__ext_Elf32_Ehdr) }, { sizeof(Elf32_Half), sizeof(__ext_Elf32_Half) }, { sizeof(Elf32_Off), sizeof(__ext_Elf32_Off) }, { sizeof(Elf32_Phdr), sizeof(__ext_Elf32_Phdr) }, { sizeof(Elf32_Rela), sizeof(__ext_Elf32_Rela) }, { sizeof(Elf32_Rel), sizeof(__ext_Elf32_Rel) }, { sizeof(Elf32_Shdr), sizeof(__ext_Elf32_Shdr) }, { sizeof(Elf32_Sword), sizeof(__ext_Elf32_Sword) }, { sizeof(Elf32_Sym), sizeof(__ext_Elf32_Sym) }, { sizeof(Elf32_Word), sizeof(__ext_Elf32_Word) }, { 0, 0 }, /* there is no Elf32_Sxword */ { 0, 0 }, /* there is no Elf32_Xword */ /* XXX: check Solaris values */ { 0, 0 }, /* Elf32_Verdef/Verdaux size varies */ { 0, 0 }, /* Elf32_Verneed/Vernaux size varies */ }, }, #if __LIBELF64 /* ELFCLASS64 */ { /* version 1 */ { { sizeof(unsigned char), sizeof(unsigned char) }, { sizeof(Elf64_Addr), sizeof(__ext_Elf64_Addr) }, { sizeof(Elf64_Dyn), sizeof(__ext_Elf64_Dyn) }, { sizeof(Elf64_Ehdr), sizeof(__ext_Elf64_Ehdr) }, { sizeof(Elf64_Half), sizeof(__ext_Elf64_Half) }, { sizeof(Elf64_Off), sizeof(__ext_Elf64_Off) }, { sizeof(Elf64_Phdr), sizeof(__ext_Elf64_Phdr) }, { sizeof(Elf64_Rela), sizeof(__ext_Elf64_Rela) }, { sizeof(Elf64_Rel), sizeof(__ext_Elf64_Rel) }, { sizeof(Elf64_Shdr), sizeof(__ext_Elf64_Shdr) }, { sizeof(Elf64_Sword), sizeof(__ext_Elf64_Sword) }, { sizeof(Elf64_Sym), sizeof(__ext_Elf64_Sym) }, { sizeof(Elf64_Word), sizeof(__ext_Elf64_Word) }, { sizeof(Elf64_Sxword), sizeof(__ext_Elf64_Sxword) }, { sizeof(Elf64_Xword), sizeof(__ext_Elf64_Xword) }, /* XXX: check Solaris values */ { 0, 0 }, /* Elf64_Verdef/Verdaux size varies */ { 0, 0 }, /* Elf64_Verneed/Vernaux size varies */ }, }, #endif /* __LIBELF64 */ }; static size_t _elf_fsize(unsigned cls, Elf_Type type, unsigned ver) { size_t n = 0; if (!valid_version(ver)) { seterr(ERROR_UNKNOWN_VERSION); } else if (!valid_type(type)) { seterr(ERROR_UNKNOWN_TYPE); } else if (!(n = _fsize(cls, ver, type))) { seterr(ERROR_UNKNOWN_TYPE); } return n; } size_t elf32_fsize(Elf_Type type, size_t count, unsigned ver) { return count * _elf_fsize(ELFCLASS32, type, ver); } #if __LIBELF64 size_t elf64_fsize(Elf_Type type, size_t count, unsigned ver) { return count * _elf_fsize(ELFCLASS64, type, ver); } size_t gelf_fsize(Elf *elf, Elf_Type type, size_t count, unsigned ver) { if (elf) { if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (valid_class(elf->e_class)) { return count * _elf_fsize(elf->e_class, type, ver); } else { seterr(ERROR_UNKNOWN_CLASS); } } return 0; } /* * Extension: report memory size */ size_t gelf_msize(Elf *elf, Elf_Type type, size_t count, unsigned ver) { size_t n; if (elf) { if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (!valid_class(elf->e_class)) { seterr(ERROR_UNKNOWN_CLASS); } else if (!valid_version(ver)) { seterr(ERROR_UNKNOWN_VERSION); } else if (!valid_type(type)) { seterr(ERROR_UNKNOWN_TYPE); } else if (!(n = _msize(elf->e_class, ver, type))) { seterr(ERROR_UNKNOWN_TYPE); } else { return count * n; } } return 0; } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/x.movscn.c0000644000000000000000000000524111015476447015175 0ustar rootroot/* x.movscn.c - implementation of the elfx_movscn(3) function. Copyright (C) 1995 - 2001, 2003 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: x.movscn.c,v 1.14 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ size_t elfx_movscn(Elf *elf, Elf_Scn *scn, Elf_Scn *after) { Elf_Scn *prev; Elf_Scn *tmp; int off; if (!elf || !scn || !after) { return SHN_UNDEF; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); return SHN_UNDEF; } elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(after->s_magic == SCN_MAGIC); if (scn->s_elf != elf || after->s_elf != elf) { seterr(ERROR_ELFSCNMISMATCH); return SHN_UNDEF; } elf_assert(elf->e_scn_1); if (scn == elf->e_scn_1) { seterr(ERROR_NULLSCN); return SHN_UNDEF; } if (scn == after || scn == after->s_link) { /* nothing to do */ return scn->s_index; } /* * Find previous section. */ prev = NULL; for (tmp = elf->e_scn_1; tmp->s_link; tmp = tmp->s_link) { if (tmp->s_link == scn) { prev = tmp; break; } } elf_assert(prev != NULL); /* * Update section indices */ off = 0; for (tmp = elf->e_scn_1; tmp; tmp = tmp->s_link) { if (off) { tmp->s_index += off; } if (tmp == after) { off++; } else if (tmp == scn) { off--; } } elf_assert(off == 0); /* * Move section. */ prev->s_link = scn->s_link; scn->s_link = after->s_link; after->s_link = scn; scn->s_index = after->s_index + 1; if (elf->e_scn_n == scn) { elf->e_scn_n = prev; } else if (elf->e_scn_n == after) { elf->e_scn_n = scn; } #if ENABLE_DEBUG /* * Check section indices */ tmp = elf->e_scn_1; elf_assert(tmp->s_index == 0); while (tmp->s_link) { elf_assert(tmp->s_link->s_index == tmp->s_index + 1); tmp = tmp->s_link; } #endif /* ENABLE_DEBUG */ return scn->s_index; } libelf-0.8.13.orig/lib/verneed.h0000644000000000000000000001573711015476447015072 0ustar rootroot/* * verneed.h - copy versioning information. * Copyright (C) 2001 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef lint static const char verneed_h_rcsid[] = "@(#) $Id: verneed.h,v 1.13 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ #if VER_NEED_CURRENT != 1 #error libelf currently does not support VER_NEED_CURRENT != 1 #endif /* VER_NEED_CURRENT != 1 */ #if TOFILE static void __store_vernaux(vernaux_ftype *dst, const vernaux_mtype *src, unsigned enc) { if (enc == ELFDATA2LSB) { __store_u32L(dst->vna_hash, src->vna_hash); __store_u16L(dst->vna_flags, src->vna_flags); __store_u16L(dst->vna_other, src->vna_other); __store_u32L(dst->vna_name, src->vna_name); __store_u32L(dst->vna_next, src->vna_next); } else { __store_u32M(dst->vna_hash, src->vna_hash); __store_u16M(dst->vna_flags, src->vna_flags); __store_u16M(dst->vna_other, src->vna_other); __store_u32M(dst->vna_name, src->vna_name); __store_u32M(dst->vna_next, src->vna_next); } } static void __store_verneed(verneed_ftype *dst, const verneed_mtype *src, unsigned enc) { if (enc == ELFDATA2LSB) { __store_u16L(dst->vn_version, src->vn_version); __store_u16L(dst->vn_cnt, src->vn_cnt); __store_u32L(dst->vn_file, src->vn_file); __store_u32L(dst->vn_aux, src->vn_aux); __store_u32L(dst->vn_next, src->vn_next); } else { __store_u16M(dst->vn_version, src->vn_version); __store_u16M(dst->vn_cnt, src->vn_cnt); __store_u32M(dst->vn_file, src->vn_file); __store_u32M(dst->vn_aux, src->vn_aux); __store_u32M(dst->vn_next, src->vn_next); } } typedef vernaux_mtype vernaux_stype; typedef vernaux_ftype vernaux_dtype; typedef verneed_mtype verneed_stype; typedef verneed_ftype verneed_dtype; typedef align_mtype verneed_atype; #define copy_vernaux_srctotmp(d, s, e) (*(d) = *(s)) #define copy_vernaux_tmptodst(d, s, e) __store_vernaux((d), (s), (e)) #define copy_verneed_srctotmp(d, s, e) (*(d) = *(s)) #define copy_verneed_tmptodst(d, s, e) __store_verneed((d), (s), (e)) #define translator_suffix _tof #else /* TOFILE */ static void __load_vernaux(vernaux_mtype *dst, const vernaux_ftype *src, unsigned enc) { if (enc == ELFDATA2LSB) { dst->vna_hash = __load_u32L(src->vna_hash); dst->vna_flags = __load_u16L(src->vna_flags); dst->vna_other = __load_u16L(src->vna_other); dst->vna_name = __load_u32L(src->vna_name); dst->vna_next = __load_u32L(src->vna_next); } else { dst->vna_hash = __load_u32M(src->vna_hash); dst->vna_flags = __load_u16M(src->vna_flags); dst->vna_other = __load_u16M(src->vna_other); dst->vna_name = __load_u32M(src->vna_name); dst->vna_next = __load_u32M(src->vna_next); } } static void __load_verneed(verneed_mtype *dst, const verneed_ftype *src, unsigned enc) { if (enc == ELFDATA2LSB) { dst->vn_version = __load_u16L(src->vn_version); dst->vn_cnt = __load_u16L(src->vn_cnt); dst->vn_file = __load_u32L(src->vn_file); dst->vn_aux = __load_u32L(src->vn_aux); dst->vn_next = __load_u32L(src->vn_next); } else { dst->vn_version = __load_u16M(src->vn_version); dst->vn_cnt = __load_u16M(src->vn_cnt); dst->vn_file = __load_u32M(src->vn_file); dst->vn_aux = __load_u32M(src->vn_aux); dst->vn_next = __load_u32M(src->vn_next); } } typedef vernaux_ftype vernaux_stype; typedef vernaux_mtype vernaux_dtype; typedef verneed_ftype verneed_stype; typedef verneed_mtype verneed_dtype; typedef align_ftype verneed_atype; #define copy_vernaux_srctotmp(d, s, e) __load_vernaux((d), (s), (e)) #define copy_vernaux_tmptodst(d, s, e) (*(d) = *(s)) #define copy_verneed_srctotmp(d, s, e) __load_verneed((d), (s), (e)) #define copy_verneed_tmptodst(d, s, e) (*(d) = *(s)) #define translator_suffix _tom #endif /* TOFILE */ #define cat3(a,b,c) a##b##c #define xlt3(p,e,s) cat3(p,e,s) #define xltprefix(x) xlt3(x,_,class_suffix) #define translator(x,e) xlt3(xltprefix(_elf_##x),e,translator_suffix) static size_t xlt_verneed(unsigned char *dst, const unsigned char *src, size_t n, unsigned enc) { size_t off; if (sizeof(verneed_stype) != sizeof(verneed_dtype) || sizeof(vernaux_stype) != sizeof(vernaux_dtype)) { /* never happens for ELF v1 and Verneed v1 */ seterr(ERROR_UNIMPLEMENTED); return (size_t)-1; } /* size translation shortcut */ if (dst == NULL) { return n; } if (src == NULL) { seterr(ERROR_NULLBUF); return (size_t)-1; } off = 0; while (off + sizeof(verneed_stype) <= n) { const verneed_stype *svn; verneed_dtype *dvn; verneed_mtype vn; size_t acount; size_t aoff; /* * check for proper alignment */ if (off % sizeof(verneed_atype)) { seterr(ERROR_VERNEED_FORMAT); return (size_t)-1; } /* * copy and check src */ svn = (verneed_stype*)(src + off); dvn = (verneed_dtype*)(dst + off); copy_verneed_srctotmp(&vn, svn, enc); if (vn.vn_version < 1 || vn.vn_version > VER_NEED_CURRENT) { seterr(ERROR_VERNEED_VERSION); return (size_t)-1; } if (vn.vn_cnt < 1 || vn.vn_aux == 0) { seterr(ERROR_VERNEED_FORMAT); return (size_t)-1; } copy_verneed_tmptodst(dvn, &vn, enc); /* * copy aux array */ aoff = off + vn.vn_aux; for (acount = 0; acount < vn.vn_cnt; acount++) { const vernaux_stype *svna; vernaux_dtype *dvna; vernaux_mtype vna; /* * are we still inside the buffer limits? */ if (aoff + sizeof(vernaux_stype) > n) { break; } /* * check for proper alignment */ if (aoff % sizeof(verneed_atype)) { seterr(ERROR_VERNEED_FORMAT); return (size_t)-1; } /* * copy and check src */ svna = (vernaux_stype*)(src + aoff); dvna = (vernaux_dtype*)(dst + aoff); copy_vernaux_srctotmp(&vna, svna, enc); copy_vernaux_tmptodst(dvna, &vna, enc); /* * advance to next vernaux */ if (vna.vna_next == 0) { /* end of list */ break; } aoff += vna.vna_next; } /* * advance to next verneed */ if (vn.vn_next == 0) { /* end of list */ break; } off += vn.vn_next; } return n; } size_t translator(verneed,L11)(unsigned char *dst, const unsigned char *src, size_t n) { return xlt_verneed(dst, src, n, ELFDATA2LSB); } size_t translator(verneed,M11)(unsigned char *dst, const unsigned char *src, size_t n) { return xlt_verneed(dst, src, n, ELFDATA2MSB); } libelf-0.8.13.orig/lib/hash.c0000644000000000000000000000227411015476447014350 0ustar rootroot/* hash.c - implementation of the elf_hash(3) function. Copyright (C) 1995 - 2002 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: hash.c,v 1.10 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ unsigned long elf_hash(const unsigned char *name) { unsigned long hash = 0; unsigned long tmp; while (*name) { hash = (hash << 4) + (unsigned char)*name++; if ((tmp = hash & 0xf0000000)) { hash ^= tmp | (tmp >> 24); } } return hash; } libelf-0.8.13.orig/lib/cntl.c0000644000000000000000000000355511015476446014367 0ustar rootroot/* cntl.c - implementation of the elf_cntl(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: cntl.c,v 1.7 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ int elf_cntl(Elf *elf, Elf_Cmd cmd) { Elf_Scn *scn; Elf *child; if (!elf) { return -1; } elf_assert(elf->e_magic == ELF_MAGIC); if (cmd == ELF_C_FDREAD) { if (!elf->e_readable) { seterr(ERROR_WRONLY); return -1; } } else if (cmd != ELF_C_FDDONE) { seterr(ERROR_INVALID_CMD); return -1; } if (elf->e_disabled) { return 0; } if (elf->e_kind == ELF_K_AR) { for (child = elf->e_members; child; child = child->e_link) { elf_assert(elf == child->e_parent); if (elf_cntl(child, cmd)) { return -1; } } } else if (elf->e_kind == ELF_K_ELF && cmd == ELF_C_FDREAD) { if (!elf->e_ehdr && !_elf_cook(elf)) { return -1; } for (scn = elf->e_scn_1; scn; scn = scn->s_link) { if (scn->s_index == SHN_UNDEF || scn->s_type == SHT_NULL) { continue; } else if (!elf_getdata(scn, NULL)) { return -1; } } } elf->e_disabled = 1; return 0; } libelf-0.8.13.orig/lib/elf_repl.h0000644000000000000000000006001111273303523015201 0ustar rootroot/* * elf_repl.h - public header file for systems that lack it. * Copyright (C) 1995 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ /* @(#) $Id: elf_repl.h,v 1.22 2009/11/01 13:04:19 michael Exp $ */ /* * NEVER INCLUDE THIS FILE DIRECTLY - USE INSTEAD! */ #ifndef _ELF_REPL_H #define _ELF_REPL_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Scalar data types */ typedef __libelf_u32_t Elf32_Addr; typedef __libelf_u16_t Elf32_Half; typedef __libelf_u32_t Elf32_Off; typedef __libelf_i32_t Elf32_Sword; typedef __libelf_u32_t Elf32_Word; #define ELF32_FSZ_ADDR 4 #define ELF32_FSZ_HALF 2 #define ELF32_FSZ_OFF 4 #define ELF32_FSZ_SWORD 4 #define ELF32_FSZ_WORD 4 #if __LIBELF64 typedef __libelf_u64_t Elf64_Addr; typedef __libelf_u16_t Elf64_Half; typedef __libelf_u64_t Elf64_Off; typedef __libelf_i32_t Elf64_Sword; typedef __libelf_u32_t Elf64_Word; typedef __libelf_i64_t Elf64_Sxword; typedef __libelf_u64_t Elf64_Xword; #define ELF64_FSZ_ADDR 8 #define ELF64_FSZ_HALF 2 #define ELF64_FSZ_OFF 8 #define ELF64_FSZ_SWORD 4 #define ELF64_FSZ_WORD 4 #define ELF64_FSZ_SXWORD 8 #define ELF64_FSZ_XWORD 8 /* * Blame Sun for this... */ typedef __libelf_u64_t Elf64_Lword; typedef __libelf_u64_t Elf32_Lword; #endif /* __LIBELF64 */ /* * ELF header */ #define EI_NIDENT 16 typedef struct { unsigned char e_ident[EI_NIDENT]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry; Elf32_Off e_phoff; Elf32_Off e_shoff; Elf32_Word e_flags; Elf32_Half e_ehsize; Elf32_Half e_phentsize; Elf32_Half e_phnum; Elf32_Half e_shentsize; Elf32_Half e_shnum; Elf32_Half e_shstrndx; } Elf32_Ehdr; #if __LIBELF64 typedef struct { unsigned char e_ident[EI_NIDENT]; Elf64_Half e_type; Elf64_Half e_machine; Elf64_Word e_version; Elf64_Addr e_entry; Elf64_Off e_phoff; Elf64_Off e_shoff; Elf64_Word e_flags; Elf64_Half e_ehsize; Elf64_Half e_phentsize; Elf64_Half e_phnum; Elf64_Half e_shentsize; Elf64_Half e_shnum; Elf64_Half e_shstrndx; } Elf64_Ehdr; #endif /* __LIBELF64 */ /* * e_ident */ #define EI_MAG0 0 #define EI_MAG1 1 #define EI_MAG2 2 #define EI_MAG3 3 #define EI_CLASS 4 #define EI_DATA 5 #define EI_VERSION 6 #define EI_OSABI 7 #define EI_ABIVERSION 8 #define EI_PAD 9 #define ELFMAG0 0x7f #define ELFMAG1 'E' #define ELFMAG2 'L' #define ELFMAG3 'F' #define ELFMAG "\177ELF" #define SELFMAG 4 /* * e_ident[EI_CLASS] */ #define ELFCLASSNONE 0 #define ELFCLASS32 1 #define ELFCLASS64 2 #define ELFCLASSNUM 3 /* * e_ident[EI_DATA] */ #define ELFDATANONE 0 #define ELFDATA2LSB 1 #define ELFDATA2MSB 2 #define ELFDATANUM 3 /* * e_ident[EI_OSABI] */ #define ELFOSABI_NONE 0 /* No extensions or unspecified */ #define ELFOSABI_SYSV ELFOSABI_NONE #define ELFOSABI_HPUX 1 /* Hewlett-Packard HP-UX */ #define ELFOSABI_NETBSD 2 /* NetBSD */ #define ELFOSABI_LINUX 3 /* Linux */ #define ELFOSABI_SOLARIS 6 /* Sun Solaris */ #define ELFOSABI_AIX 7 /* AIX */ #define ELFOSABI_IRIX 8 /* IRIX */ #define ELFOSABI_FREEBSD 9 /* FreeBSD */ #define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX */ #define ELFOSABI_MODESTO 11 /* Novell Modesto */ #define ELFOSABI_OPENBSD 12 /* Open BSD */ #define ELFOSABI_OPENVMS 13 /* Open VMS */ #define ELFOSABI_NSK 14 /* Hewlett-Packard Non-Stop Kernel */ #define ELFOSABI_AROS 15 /* Amiga Research OS */ /* these are probably obsolete: */ #define ELFOSABI_ARM 97 /* ARM */ #define ELFOSABI_STANDALONE 255 /* standalone (embedded) application */ /* * e_type */ #define ET_NONE 0 #define ET_REL 1 #define ET_EXEC 2 #define ET_DYN 3 #define ET_CORE 4 #define ET_NUM 5 #define ET_LOOS 0xfe00 #define ET_HIOS 0xfeff #define ET_LOPROC 0xff00 #define ET_HIPROC 0xffff /* * e_machine */ #define EM_NONE 0 /* No machine */ #define EM_M32 1 /* AT&T WE 32100 */ #define EM_SPARC 2 /* SPARC */ #define EM_386 3 /* Intel 80386 */ #define EM_68K 4 /* Motorola 68000 */ #define EM_88K 5 /* Motorola 88000 */ #define EM_486 6 /* Intel i486 (DO NOT USE THIS ONE) */ #define EM_860 7 /* Intel 80860 */ #define EM_MIPS 8 /* MIPS I Architecture */ #define EM_S370 9 /* IBM System/370 Processor */ #define EM_MIPS_RS3_LE 10 /* MIPS RS3000 Little-endian */ #define EM_SPARC64 11 /* SPARC 64-bit */ #define EM_PARISC 15 /* Hewlett-Packard PA-RISC */ #define EM_VPP500 17 /* Fujitsu VPP500 */ #define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ #define EM_960 19 /* Intel 80960 */ #define EM_PPC 20 /* PowerPC */ #define EM_PPC64 21 /* 64-bit PowerPC */ #define EM_S390 22 /* IBM System/390 Processor */ #define EM_V800 36 /* NEC V800 */ #define EM_FR20 37 /* Fujitsu FR20 */ #define EM_RH32 38 /* TRW RH-32 */ #define EM_RCE 39 /* Motorola RCE */ #define EM_ARM 40 /* Advanced RISC Machines ARM */ #define EM_ALPHA 41 /* Digital Alpha */ #define EM_SH 42 /* Hitachi SH */ #define EM_SPARCV9 43 /* SPARC Version 9 */ #define EM_TRICORE 44 /* Siemens TriCore embedded processor */ #define EM_ARC 45 /* Argonaut RISC Core, Argonaut Technologies Inc. */ #define EM_H8_300 46 /* Hitachi H8/300 */ #define EM_H8_300H 47 /* Hitachi H8/300H */ #define EM_H8S 48 /* Hitachi H8S */ #define EM_H8_500 49 /* Hitachi H8/500 */ #define EM_IA_64 50 /* Intel IA-64 processor architecture */ #define EM_MIPS_X 51 /* Stanford MIPS-X */ #define EM_COLDFIRE 52 /* Motorola ColdFire */ #define EM_68HC12 53 /* Motorola M68HC12 */ #define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator */ #define EM_PCP 55 /* Siemens PCP */ #define EM_NCPU 56 /* Sony nCPU embedded RISC processor */ #define EM_NDR1 57 /* Denso NDR1 microprocessor */ #define EM_STARCORE 58 /* Motorola Star*Core processor */ #define EM_ME16 59 /* Toyota ME16 processor */ #define EM_ST100 60 /* STMicroelectronics ST100 processor */ #define EM_TINYJ 61 /* Advanced Logic Corp. TinyJ embedded processor family */ #define EM_X86_64 62 /* AMD x86-64 architecture */ #define EM_AMD64 EM_X86_64 #define EM_PDSP 63 /* Sony DSP Processor */ #define EM_FX66 66 /* Siemens FX66 microcontroller */ #define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 bit microcontroller */ #define EM_ST7 68 /* STMicroelectronics ST7 8-bit microcontroller */ #define EM_68HC16 69 /* Motorola MC68HC16 Microcontroller */ #define EM_68HC11 70 /* Motorola MC68HC11 Microcontroller */ #define EM_68HC08 71 /* Motorola MC68HC08 Microcontroller */ #define EM_68HC05 72 /* Motorola MC68HC05 Microcontroller */ #define EM_SVX 73 /* Silicon Graphics SVx */ #define EM_ST19 74 /* STMicroelectronics ST19 8-bit microcontroller */ #define EM_VAX 75 /* Digital VAX */ #define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */ #define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded processor */ #define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */ #define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */ #define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */ #define EM_HUANY 81 /* Harvard University machine-independent object files */ #define EM_PRISM 82 /* SiTera Prism */ #define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ #define EM_FR30 84 /* Fujitsu FR30 */ #define EM_D10V 85 /* Mitsubishi D10V */ #define EM_D30V 86 /* Mitsubishi D30V */ #define EM_V850 87 /* NEC v850 */ #define EM_M32R 88 /* Mitsubishi M32R */ #define EM_MN10300 89 /* Matsushita MN10300 */ #define EM_MN10200 90 /* Matsushita MN10200 */ #define EM_PJ 91 /* picoJava */ #define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ #define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */ #define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ #define EM_VIDEOCORE 95 /* Alphamosaic VideoCore processor */ #define EM_TMM_GPP 96 /* Thompson Multimedia General Purpose Processor */ #define EM_NS32K 97 /* National Semiconductor 32000 series */ #define EM_TPC 98 /* Tenor Network TPC processor */ #define EM_SNP1K 99 /* Trebia SNP 1000 processor */ #define EM_ST200 100 /* STMicroelectronics (www.st.com) ST200 microcontroller */ #define EM_IP2K 101 /* Ubicom IP2xxx microcontroller family */ #define EM_MAX 102 /* MAX Processor */ #define EM_CR 103 /* National Semiconductor CompactRISC microprocessor */ #define EM_F2MC16 104 /* Fujitsu F2MC16 */ #define EM_MSP430 105 /* Texas Instruments embedded microcontroller msp430 */ #define EM_BLACKFIN 106 /* Analog Devices Blackfin (DSP) processor */ #define EM_SE_C33 107 /* S1C33 Family of Seiko Epson processors */ #define EM_SEP 108 /* Sharp embedded microprocessor */ #define EM_ARCA 109 /* Arca RISC Microprocessor */ #define EM_UNICORE 110 /* Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University */ #define EM_NUM 111 /* * e_ident[EI_VERSION], e_version */ #define EV_NONE 0 #define EV_CURRENT 1 #define EV_NUM 2 /* * Section header */ typedef struct { Elf32_Word sh_name; Elf32_Word sh_type; Elf32_Word sh_flags; Elf32_Addr sh_addr; Elf32_Off sh_offset; Elf32_Word sh_size; Elf32_Word sh_link; Elf32_Word sh_info; Elf32_Word sh_addralign; Elf32_Word sh_entsize; } Elf32_Shdr; #if __LIBELF64 typedef struct { Elf64_Word sh_name; Elf64_Word sh_type; Elf64_Xword sh_flags; Elf64_Addr sh_addr; Elf64_Off sh_offset; Elf64_Xword sh_size; Elf64_Word sh_link; Elf64_Word sh_info; Elf64_Xword sh_addralign; Elf64_Xword sh_entsize; } Elf64_Shdr; #endif /* __LIBELF64 */ /* * Special section indices */ #define SHN_UNDEF 0 #define SHN_LORESERVE 0xff00 #define SHN_LOPROC 0xff00 #define SHN_HIPROC 0xff1f #define SHN_LOOS 0xff20 #define SHN_HIOS 0xff3f #define SHN_ABS 0xfff1 #define SHN_COMMON 0xfff2 #define SHN_XINDEX 0xffff #define SHN_HIRESERVE 0xffff /* * sh_type */ #define SHT_NULL 0 #define SHT_PROGBITS 1 #define SHT_SYMTAB 2 #define SHT_STRTAB 3 #define SHT_RELA 4 #define SHT_HASH 5 #define SHT_DYNAMIC 6 #define SHT_NOTE 7 #define SHT_NOBITS 8 #define SHT_REL 9 #define SHT_SHLIB 10 #define SHT_DYNSYM 11 #define SHT_INIT_ARRAY 14 #define SHT_FINI_ARRAY 15 #define SHT_PREINIT_ARRAY 16 #define SHT_GROUP 17 #define SHT_SYMTAB_SHNDX 18 #define SHT_NUM 19 #define SHT_LOOS 0x60000000 #define SHT_HIOS 0x6fffffff #define SHT_LOPROC 0x70000000 #define SHT_HIPROC 0x7fffffff #define SHT_LOUSER 0x80000000 #define SHT_HIUSER 0xffffffff /* * Solaris extensions */ #define SHT_LOSUNW 0x6ffffff4 #define SHT_SUNW_dof 0x6ffffff4 #define SHT_SUNW_cap 0x6ffffff5 #define SHT_SUNW_SIGNATURE 0x6ffffff6 #define SHT_SUNW_ANNOTATE 0x6ffffff7 #define SHT_SUNW_DEBUGSTR 0x6ffffff8 #define SHT_SUNW_DEBUG 0x6ffffff9 #define SHT_SUNW_move 0x6ffffffa #define SHT_SUNW_COMDAT 0x6ffffffb #define SHT_SUNW_syminfo 0x6ffffffc #define SHT_SUNW_verdef 0x6ffffffd #define SHT_SUNW_verneed 0x6ffffffe #define SHT_SUNW_versym 0x6fffffff #define SHT_HISUNW 0x6fffffff #define SHT_SPARC_GOTDATA 0x70000000 #define SHT_AMD64_UNWIND 0x70000001 /* * GNU extensions */ #define SHT_GNU_verdef 0x6ffffffd #define SHT_GNU_verneed 0x6ffffffe #define SHT_GNU_versym 0x6fffffff /* * sh_flags */ #define SHF_WRITE 0x1 #define SHF_ALLOC 0x2 #define SHF_EXECINSTR 0x4 #define SHF_MERGE 0x10 #define SHF_STRINGS 0x20 #define SHF_INFO_LINK 0x40 #define SHF_LINK_ORDER 0x80 #define SHF_OS_NONCONFORMING 0x100 #define SHF_GROUP 0x200 #define SHF_TLS 0x400 #define SHF_MASKOS 0x0ff00000 #define SHF_MASKPROC 0xf0000000 /* * Solaris extensions */ #define SHF_AMD64_LARGE 0x10000000 #define SHF_ORDERED 0x40000000 #define SHF_EXCLUDE 0x80000000 /* * Section group flags */ #define GRP_COMDAT 0x1 #define GRP_MASKOS 0x0ff00000 #define GRP_MASKPROC 0xf0000000 /* * Symbol table */ typedef struct { Elf32_Word st_name; Elf32_Addr st_value; Elf32_Word st_size; unsigned char st_info; unsigned char st_other; Elf32_Half st_shndx; } Elf32_Sym; #if __LIBELF64 typedef struct { Elf64_Word st_name; unsigned char st_info; unsigned char st_other; Elf64_Half st_shndx; Elf64_Addr st_value; Elf64_Xword st_size; } Elf64_Sym; #endif /* __LIBELF64 */ /* * Special symbol indices */ #define STN_UNDEF 0 /* * Macros for manipulating st_info */ #define ELF32_ST_BIND(i) ((i)>>4) #define ELF32_ST_TYPE(i) ((i)&0xf) #define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) #if __LIBELF64 #define ELF64_ST_BIND(i) ((i)>>4) #define ELF64_ST_TYPE(i) ((i)&0xf) #define ELF64_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) #endif /* __LIBELF64 */ /* * Symbol binding */ #define STB_LOCAL 0 #define STB_GLOBAL 1 #define STB_WEAK 2 #define STB_NUM 3 #define STB_LOOS 10 #define STB_HIOS 12 #define STB_LOPROC 13 #define STB_HIPROC 15 /* * Symbol types */ #define STT_NOTYPE 0 #define STT_OBJECT 1 #define STT_FUNC 2 #define STT_SECTION 3 #define STT_FILE 4 #define STT_COMMON 5 #define STT_TLS 6 #define STT_NUM 7 #define STT_LOOS 10 #define STT_HIOS 12 #define STT_LOPROC 13 #define STT_HIPROC 15 /* * Macros for manipulating st_other */ #define ELF32_ST_VISIBILITY(o) ((o)&0x3) #if __LIBELF64 #define ELF64_ST_VISIBILITY(o) ((o)&0x3) #endif /* __LIBELF64 */ /* * Symbol visibility */ #define STV_DEFAULT 0 #define STV_INTERNAL 1 #define STV_HIDDEN 2 #define STV_PROTECTED 3 /* * Relocation */ typedef struct { Elf32_Addr r_offset; Elf32_Word r_info; } Elf32_Rel; typedef struct { Elf32_Addr r_offset; Elf32_Word r_info; Elf32_Sword r_addend; } Elf32_Rela; #if __LIBELF64 typedef struct { Elf64_Addr r_offset; Elf64_Xword r_info; } Elf64_Rel; typedef struct { Elf64_Addr r_offset; Elf64_Xword r_info; Elf64_Sxword r_addend; } Elf64_Rela; #endif /* __LIBELF64 */ /* * Macros for manipulating r_info */ #define ELF32_R_SYM(i) ((i)>>8) #define ELF32_R_TYPE(i) ((unsigned char)(i)) #define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t)) #if __LIBELF64 #define ELF64_R_SYM(i) ((Elf64_Xword)(i)>>32) #define ELF64_R_TYPE(i) ((i)&0xffffffffL) #define ELF64_R_INFO(s,t) (((Elf64_Xword)(s)<<32)+((t)&0xffffffffL)) #endif /* __LIBELF64 */ /* * Note entry header */ typedef struct { Elf32_Word n_namesz; /* name size */ Elf32_Word n_descsz; /* descriptor size */ Elf32_Word n_type; /* descriptor type */ } Elf32_Nhdr; #if __LIBELF64 /* Solaris and GNU use this layout. Be compatible. */ /* XXX: Latest ELF specs say it's 64-bit!!! */ typedef struct { Elf64_Word n_namesz; /* name size */ Elf64_Word n_descsz; /* descriptor size */ Elf64_Word n_type; /* descriptor type */ } Elf64_Nhdr; #endif /* __LIBELF64 */ /* * Well-known descriptor types for ET_CORE files */ #define NT_PRSTATUS 1 #define NT_PRFPREG 2 #define NT_PRPSINFO 3 /* * Program header */ typedef struct { Elf32_Word p_type; Elf32_Off p_offset; Elf32_Addr p_vaddr; Elf32_Addr p_paddr; Elf32_Word p_filesz; Elf32_Word p_memsz; Elf32_Word p_flags; Elf32_Word p_align; } Elf32_Phdr; #if __LIBELF64 typedef struct { Elf64_Word p_type; Elf64_Word p_flags; Elf64_Off p_offset; Elf64_Addr p_vaddr; Elf64_Addr p_paddr; Elf64_Xword p_filesz; Elf64_Xword p_memsz; Elf64_Xword p_align; } Elf64_Phdr; #endif /* __LIBELF64 */ /* * Special numbers */ #define PN_XNUM 0xffff /* * p_type */ #define PT_NULL 0 #define PT_LOAD 1 #define PT_DYNAMIC 2 #define PT_INTERP 3 #define PT_NOTE 4 #define PT_SHLIB 5 #define PT_PHDR 6 #define PT_TLS 7 #define PT_NUM 8 #define PT_LOOS 0x60000000 #define PT_HIOS 0x6fffffff #define PT_LOPROC 0x70000000 #define PT_HIPROC 0x7fffffff /* * Solaris extensions */ #define PT_SUNW_UNWIND 0x6464e550 #define PT_LOSUNW 0x6ffffffa #define PT_SUNWBSS 0x6ffffffa #define PT_SUNWSTACK 0x6ffffffb #define PT_SUNWDTRACE 0x6ffffffc #define PT_SUNWCAP 0x6ffffffd #define PT_HISUNW 0x6fffffff /* * p_flags */ #define PF_X 0x1 #define PF_W 0x2 #define PF_R 0x4 #define PF_MASKOS 0x0ff00000 #define PF_MASKPROC 0xf0000000 /* * Dynamic structure */ typedef struct { Elf32_Sword d_tag; union { Elf32_Word d_val; Elf32_Addr d_ptr; } d_un; } Elf32_Dyn; #if __LIBELF64 typedef struct { Elf64_Sxword d_tag; union { Elf64_Xword d_val; Elf64_Addr d_ptr; } d_un; } Elf64_Dyn; #endif /* __LIBELF64 */ /* * Dynamic array tags */ /* d_un exec shared */ #define DT_NULL 0 /* ign. mand. mand. */ #define DT_NEEDED 1 /* d_val opt. opt. */ #define DT_PLTRELSZ 2 /* d_val opt. opt. */ #define DT_PLTGOT 3 /* d_ptr opt. opt. */ #define DT_HASH 4 /* d_ptr mand. mand. */ #define DT_STRTAB 5 /* d_ptr mand. mand. */ #define DT_SYMTAB 6 /* d_ptr mand. mand. */ #define DT_RELA 7 /* d_ptr mand. opt. */ #define DT_RELASZ 8 /* d_val mand. opt. */ #define DT_RELAENT 9 /* d_val mand. opt. */ #define DT_STRSZ 10 /* d_val mand. mand. */ #define DT_SYMENT 11 /* d_val mand. mand. */ #define DT_INIT 12 /* d_ptr opt. opt. */ #define DT_FINI 13 /* d_ptr opt. opt. */ #define DT_SONAME 14 /* d_val ign. opt. */ #define DT_RPATH 15 /* d_val opt. ign. */ #define DT_SYMBOLIC 16 /* ign. ign. opt. */ #define DT_REL 17 /* d_ptr mand. opt. */ #define DT_RELSZ 18 /* d_val mand. opt. */ #define DT_RELENT 19 /* d_val mand. opt. */ #define DT_PLTREL 20 /* d_val opt. opt. */ #define DT_DEBUG 21 /* d_ptr opt. ign. */ #define DT_TEXTREL 22 /* ign. opt. opt. */ #define DT_JMPREL 23 /* d_ptr opt. opt. */ #define DT_BIND_NOW 24 /* ign. opt. opt. */ #define DT_INIT_ARRAY 25 /* d_ptr opt. opt. */ #define DT_FINI_ARRAY 26 /* d_ptr opt. opt. */ #define DT_INIT_ARRAYSZ 27 /* d_val opt. opt. */ #define DT_FINI_ARRAYSZ 28 /* d_val opt. opt. */ #define DT_RUNPATH 29 /* d_val opt. opt. */ #define DT_FLAGS 30 /* d_val opt. opt. */ #define DT_ENCODING 32 /* odd/even encoding rule starts here */ #define DT_PREINIT_ARRAY 32 /* d_ptr opt. ign. */ #define DT_PREINIT_ARRAYSZ 33 /* d_val opt. ign. */ #define DT_NUM 34 #define DT_LOOS 0x6000000D #define DT_HIOS 0x6ffff000 #define DT_LOPROC 0x70000000 #define DT_HIPROC 0x7fffffff /* * DT_FLAGS values */ #define DF_ORIGIN 0x1 #define DF_SYMBOLIC 0x2 #define DF_TEXTREL 0x4 #define DF_BIND_NOW 0x8 #define DF_STATIC_TLS 0x10 /* * Solaris extensions */ #define DT_VALRNGLO 0x6ffffd00 #define DT_CHECKSUM 0x6ffffdf8 #define DT_PLTPADSZ 0x6ffffdf9 #define DT_MOVEENT 0x6ffffdfa #define DT_MOVESZ 0x6ffffdfb #define DT_FEATURE_1 0x6ffffdfc #define DT_POSFLAG_1 0x6ffffdfd #define DT_SYMINSZ 0x6ffffdfe #define DT_SYMINENT 0x6ffffdff #define DT_VALRNGHI 0x6ffffdff #define DT_ADDRRNGLO 0x6ffffe00 #define DT_CONFIG 0x6ffffefa #define DT_DEPAUDIT 0x6ffffefb #define DT_AUDIT 0x6ffffefc #define DT_PLTPAD 0x6ffffefd #define DT_MOVETAB 0x6ffffefe #define DT_SYMINFO 0x6ffffeff #define DT_ADDRRNGHI 0x6ffffeff #define DT_RELACOUNT 0x6ffffff9 #define DT_RELCOUNT 0x6ffffffa #define DT_FLAGS_1 0x6ffffffb #define DT_VERDEF 0x6ffffffc #define DT_VERDEFNUM 0x6ffffffd #define DT_VERNEED 0x6ffffffe #define DT_VERNEEDNUM 0x6fffffff #define DT_AUXILIARY 0x7ffffffd #define DT_USED 0x7ffffffe #define DT_FILTER 0x7fffffff /* * GNU extensions */ #define DT_VERSYM 0x6ffffff0 /* * DT_FEATURE_1 values */ #define DTF_1_PARINIT 0x1 #define DTF_1_CONFEXP 0x2 /* * DT_POSFLAG_1 values */ #define DF_P1_LAZYLOAD 0x1 #define DF_P1_GROUPPERM 0x2 /* * DT_FLAGS_1 values */ #define DF_1_NOW 0x00000001 #define DF_1_GLOBAL 0x00000002 #define DF_1_GROUP 0x00000004 #define DF_1_NODELETE 0x00000008 #define DF_1_LOADFLTR 0x00000010 #define DF_1_INITFIRST 0x00000020 #define DF_1_NOOPEN 0x00000040 #define DF_1_ORIGIN 0x00000080 #define DF_1_DIRECT 0x00000100 #define DF_1_TRANS 0x00000200 #define DF_1_INTERPOSE 0x00000400 #define DF_1_NODEFLIB 0x00000800 #define DF_1_NODUMP 0x00001000 #define DF_1_CONFALT 0x00002000 #define DF_1_ENDFILTEE 0x00004000 #define DF_1_DISPRELDNE 0x00008000 #define DF_1_DISPRELPND 0x00010000 /* * Syminfo structure */ typedef struct { Elf32_Half si_boundto; Elf32_Half si_flags; } Elf32_Syminfo; #if __LIBELF64 typedef struct { Elf64_Half si_boundto; Elf64_Half si_flags; } Elf64_Syminfo; #endif /* __LIBELF64 */ /* * Syminfo version (stored in unused first entry) */ #define SYMINFO_NONE 0 #define SYMINFO_CURRENT 1 #define SYMINFO_NUM 2 /* * si_boundto special values */ #define SYMINFO_BT_LOWRESERVE 0xff00 #define SYMINFO_BT_PARENT 0xfffe /* bound to parent */ #define SYMINFO_BT_SELF 0xffff /* bound to self */ /* * si_flags */ #define SYMINFO_FLG_DIRECT 0x01 /* bound to an object */ #define SYMINFO_FLG_PASSTHRU 0x02 /* pass-thru symbol */ #define SYMINFO_FLG_COPY 0x04 /* result of a copy relocation */ #define SYMINFO_FLG_LAZYLOAD 0x08 /* bound to lazy-loaded object */ /* * Version definitions */ typedef struct { Elf32_Half vd_version; Elf32_Half vd_flags; Elf32_Half vd_ndx; Elf32_Half vd_cnt; Elf32_Word vd_hash; Elf32_Word vd_aux; Elf32_Word vd_next; } Elf32_Verdef; typedef struct { Elf32_Word vda_name; Elf32_Word vda_next; } Elf32_Verdaux; typedef struct { Elf32_Half vn_version; Elf32_Half vn_cnt; Elf32_Word vn_file; Elf32_Word vn_aux; Elf32_Word vn_next; } Elf32_Verneed; typedef struct { Elf32_Word vna_hash; Elf32_Half vna_flags; Elf32_Half vna_other; Elf32_Word vna_name; Elf32_Word vna_next; } Elf32_Vernaux; typedef Elf32_Half Elf32_Versym; #if __LIBELF64 typedef struct { Elf64_Half vd_version; Elf64_Half vd_flags; Elf64_Half vd_ndx; Elf64_Half vd_cnt; Elf64_Word vd_hash; Elf64_Word vd_aux; Elf64_Word vd_next; } Elf64_Verdef; typedef struct { Elf64_Word vda_name; Elf64_Word vda_next; } Elf64_Verdaux; typedef struct { Elf64_Half vn_version; Elf64_Half vn_cnt; Elf64_Word vn_file; Elf64_Word vn_aux; Elf64_Word vn_next; } Elf64_Verneed; typedef struct { Elf64_Word vna_hash; Elf64_Half vna_flags; Elf64_Half vna_other; Elf64_Word vna_name; Elf64_Word vna_next; } Elf64_Vernaux; typedef Elf64_Half Elf64_Versym; #endif /* __LIBELF64 */ /* * vd_version */ #define VER_DEF_NONE 0 #define VER_DEF_CURRENT 1 #define VER_DEF_NUM 2 /* * vn_version */ #define VER_NEED_NONE 0 #define VER_NEED_CURRENT 1 #define VER_NEED_NUM 2 /* * vd_flags / vna_flags */ #define VER_FLG_BASE 0x1 /* vd_flags only */ #define VER_FLG_WEAK 0x2 /* * Elf*_Versym special values */ #define VER_NDX_LOCAL 0 #define VER_NDX_GLOBAL 1 /* * Solaris extensions */ /* * Move section */ #if __LIBELF64 typedef struct { Elf32_Lword m_value; Elf32_Word m_info; Elf32_Word m_poffset; Elf32_Half m_repeat; Elf32_Half m_stride; } Elf32_Move; typedef struct { Elf64_Lword m_value; Elf64_Xword m_info; Elf64_Xword m_poffset; Elf64_Half m_repeat; Elf64_Half m_stride; } Elf64_Move; #define ELF32_M_SYM(info) ((info)>>8) #define ELF32_M_SIZE(info) ((unsigned char)(info)) #define ELF32_M_INFO(sym, sz) (((sym)<<8)+(unsigned char)(sz)) #define ELF64_M_SYM(info) ((Elf64_Xword)(info)>>8) #define ELF64_M_SIZE(info) ((unsigned char)(info)) #define ELF64_M_INFO(sym, sz) (((Elf64_Xword)(sym)<<8)+(unsigned char)(sz)) #endif /* __LIBELF64 */ /* * Capabilities */ typedef struct { Elf32_Word c_tag; union { Elf32_Word c_val; Elf32_Addr c_ptr; } c_un; } Elf32_Cap; #if __LIBELF64 typedef struct { Elf64_Xword c_tag; union { Elf64_Xword c_val; Elf64_Addr c_ptr; } c_un; } Elf64_Cap; #endif /* __LIBELF64 */ #define CA_SUNW_NULL 0 /* c_un ignored */ #define CA_SUNW_HW_1 1 /* c_un.c_val */ #define CA_SUNW_SF_1 2 /* c_un.c_val */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _ELF_REPL_H */ libelf-0.8.13.orig/lib/assert.c0000644000000000000000000000213711015476446014723 0ustar rootroot/* assert.c - assert function for libelf. Copyright (C) 1999 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: assert.c,v 1.5 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ #include void __elf_assert(const char *file, unsigned line, const char *cond) { fprintf(stderr, "%s:%u: libelf assertion failure: %s\n", file, line, cond); abort(); } libelf-0.8.13.orig/lib/data.c0000644000000000000000000000223711015476446014334 0ustar rootroot/* * data.c - libelf internal variables. * Copyright (C) 1995 - 1998, 2007 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: data.c,v 1.8 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ unsigned _elf_version = EV_NONE; int _elf_errno = 0; int _elf_fill = 0; #if ENABLE_SANITY_CHECKS #define SANITY_CHECKS -1 #else #define SANITY_CHECKS 0 #endif int _elf_sanity_checks = SANITY_CHECKS; libelf-0.8.13.orig/lib/sys_elf.h.in0000644000000000000000000000734411015503343015470 0ustar rootroot/* sys_elf.h.in - configure template for private "switch" file. Copyright (C) 1998 - 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ /* @(#) $Id: sys_elf.h.in,v 1.13 2008/05/23 08:57:07 michael Exp $ */ /* * DO NOT USE THIS IN APPLICATIONS - #include INSTEAD! */ /* Define to `' or `' if one of them is present */ #undef __LIBELF_HEADER_ELF_H /* Define if Elf32_Dyn is declared in */ #undef __LIBELF_NEED_LINK_H /* Define if Elf32_Dyn is declared in */ #undef __LIBELF_NEED_SYS_LINK_H /* Define if you want 64-bit support (and your system supports it) */ #undef __LIBELF64 /* Define if you want 64-bit support, and are running IRIX */ #undef __LIBELF64_IRIX /* Define if you want 64-bit support, and are running Linux */ #undef __LIBELF64_LINUX /* Define if you want symbol versioning (and your system supports it) */ #undef __LIBELF_SYMBOL_VERSIONS /* Define to a 64-bit signed integer type if one exists */ #undef __libelf_i64_t /* Define to a 64-bit unsigned integer type if one exists */ #undef __libelf_u64_t /* Define to a 32-bit signed integer type if one exists */ #undef __libelf_i32_t /* Define to a 32-bit unsigned integer type if one exists */ #undef __libelf_u32_t /* Define to a 16-bit signed integer type if one exists */ #undef __libelf_i16_t /* Define to a 16-bit unsigned integer type if one exists */ #undef __libelf_u16_t /* * Ok, now get the correct instance of elf.h... */ #ifdef __LIBELF_HEADER_ELF_H # include __LIBELF_HEADER_ELF_H #else /* __LIBELF_HEADER_ELF_H */ # if __LIBELF_INTERNAL__ # include # else /* __LIBELF_INTERNAL__ */ # include # endif /* __LIBELF_INTERNAL__ */ #endif /* __LIBELF_HEADER_ELF_H */ /* * On some systems, is severely broken. Try to fix it. */ #ifdef __LIBELF_HEADER_ELF_H # ifndef ELF32_FSZ_ADDR # define ELF32_FSZ_ADDR 4 # define ELF32_FSZ_HALF 2 # define ELF32_FSZ_OFF 4 # define ELF32_FSZ_SWORD 4 # define ELF32_FSZ_WORD 4 # endif /* ELF32_FSZ_ADDR */ # ifndef STN_UNDEF # define STN_UNDEF 0 # endif /* STN_UNDEF */ # if __LIBELF64 # ifndef ELF64_FSZ_ADDR # define ELF64_FSZ_ADDR 8 # define ELF64_FSZ_HALF 2 # define ELF64_FSZ_OFF 8 # define ELF64_FSZ_SWORD 4 # define ELF64_FSZ_WORD 4 # define ELF64_FSZ_SXWORD 8 # define ELF64_FSZ_XWORD 8 # endif /* ELF64_FSZ_ADDR */ # ifndef ELF64_ST_BIND # define ELF64_ST_BIND(i) ((i)>>4) # define ELF64_ST_TYPE(i) ((i)&0xf) # define ELF64_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) # endif /* ELF64_ST_BIND */ # ifndef ELF64_R_SYM # define ELF64_R_SYM(i) ((Elf64_Xword)(i)>>32) # define ELF64_R_TYPE(i) ((i)&0xffffffffL) # define ELF64_R_INFO(s,t) (((Elf64_Xword)(s)<<32)+((t)&0xffffffffL)) # endif /* ELF64_R_SYM */ # if __LIBELF64_LINUX typedef __libelf_u64_t Elf64_Addr; typedef __libelf_u16_t Elf64_Half; typedef __libelf_u64_t Elf64_Off; typedef __libelf_i32_t Elf64_Sword; typedef __libelf_u32_t Elf64_Word; typedef __libelf_i64_t Elf64_Sxword; typedef __libelf_u64_t Elf64_Xword; # endif /* __LIBELF64_LINUX */ # endif /* __LIBELF64 */ #endif /* __LIBELF_HEADER_ELF_H */ libelf-0.8.13.orig/lib/verdef_32_tof.c0000644000000000000000000000306211015476447016050 0ustar rootroot/* verdef_32_tof.c - copy 32-bit versioning information. Copyright (C) 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #if __LIBELF_SYMBOL_VERSIONS #ifndef lint static const char rcsid[] = "@(#) $Id: verdef_32_tof.c,v 1.5 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ typedef Elf32_Verdaux verdaux_mtype; typedef Elf32_Verdef verdef_mtype; typedef Elf32_Vernaux vernaux_mtype; typedef Elf32_Verneed verneed_mtype; typedef Elf32_Word align_mtype; typedef __ext_Elf32_Verdaux verdaux_ftype; typedef __ext_Elf32_Verdef verdef_ftype; typedef __ext_Elf32_Vernaux vernaux_ftype; typedef __ext_Elf32_Verneed verneed_ftype; typedef __ext_Elf32_Word align_ftype; #define class_suffix 32 #undef TOFILE #define TOFILE 1 /* * Include shared code */ #include "verdef.h" #include "verneed.h" #endif /* __LIBELF_SYMBOL_VERSIONS */ libelf-0.8.13.orig/lib/getscn.c0000644000000000000000000000265111015476447014707 0ustar rootroot/* getscn.c - implementation of the elf_getscn(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: getscn.c,v 1.7 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ Elf_Scn* elf_getscn(Elf *elf, size_t index) { Elf_Scn *scn; if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (elf->e_ehdr || _elf_cook(elf)) { for (scn = elf->e_scn_1; scn; scn = scn->s_link) { elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(scn->s_elf == elf); if (scn->s_index == index) { return scn; } } seterr(ERROR_NOSUCHSCN); } return NULL; } libelf-0.8.13.orig/lib/32.getshdr.c0000644000000000000000000000320111015476446015276 0ustar rootroot/* 32.getshdr.c - implementation of the elf{32,64}_getshdr(3) functions. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: 32.getshdr.c,v 1.10 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ Elf32_Shdr* elf32_getshdr(Elf_Scn *scn) { if (!scn) { return NULL; } elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(scn->s_elf); elf_assert(scn->s_elf->e_magic == ELF_MAGIC); if (scn->s_elf->e_class == ELFCLASS32) { return &scn->s_shdr32; } seterr(ERROR_CLASSMISMATCH); return NULL; } #if __LIBELF64 Elf64_Shdr* elf64_getshdr(Elf_Scn *scn) { if (!scn) { return NULL; } elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(scn->s_elf); elf_assert(scn->s_elf->e_magic == ELF_MAGIC); if (scn->s_elf->e_class == ELFCLASS64) { return &scn->s_shdr64; } seterr(ERROR_CLASSMISMATCH); return NULL; } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/gelfehdr.c0000644000000000000000000001006711015476446015203 0ustar rootroot/* * gelfehdr.c - gelf_* translation functions. * Copyright (C) 2000 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #if __LIBELF64 #ifndef lint static const char rcsid[] = "@(#) $Id: gelfehdr.c,v 1.9 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ #define check_and_copy(type, d, s, name, eret) \ do { \ if (sizeof((d)->name) < sizeof((s)->name) \ && (type)(s)->name != (s)->name) { \ seterr(ERROR_BADVALUE); \ return (eret); \ } \ (d)->name = (type)(s)->name; \ } while (0) GElf_Ehdr* gelf_getehdr(Elf *elf, GElf_Ehdr *dst) { GElf_Ehdr buf; char *tmp; if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); tmp = _elf_getehdr(elf, elf->e_class); if (!tmp) { return NULL; } if (!dst) { dst = &buf; } if (elf->e_class == ELFCLASS64) { *dst = *(Elf64_Ehdr*)tmp; } else if (elf->e_class == ELFCLASS32) { Elf32_Ehdr *src = (Elf32_Ehdr*)tmp; memcpy(dst->e_ident, src->e_ident, EI_NIDENT); check_and_copy(GElf_Half, dst, src, e_type, NULL); check_and_copy(GElf_Half, dst, src, e_machine, NULL); check_and_copy(GElf_Word, dst, src, e_version, NULL); check_and_copy(GElf_Addr, dst, src, e_entry, NULL); check_and_copy(GElf_Off, dst, src, e_phoff, NULL); check_and_copy(GElf_Off, dst, src, e_shoff, NULL); check_and_copy(GElf_Word, dst, src, e_flags, NULL); check_and_copy(GElf_Half, dst, src, e_ehsize, NULL); check_and_copy(GElf_Half, dst, src, e_phentsize, NULL); check_and_copy(GElf_Half, dst, src, e_phnum, NULL); check_and_copy(GElf_Half, dst, src, e_shentsize, NULL); check_and_copy(GElf_Half, dst, src, e_shnum, NULL); check_and_copy(GElf_Half, dst, src, e_shstrndx, NULL); } else { if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } return NULL; } if (dst == &buf) { dst = (GElf_Ehdr*)malloc(sizeof(GElf_Ehdr)); if (!dst) { seterr(ERROR_MEM_EHDR); return NULL; } *dst = buf; } return dst; } int gelf_update_ehdr(Elf *elf, GElf_Ehdr *src) { char *tmp; if (!elf || !src) { return 0; } elf_assert(elf->e_magic == ELF_MAGIC); tmp = _elf_getehdr(elf, elf->e_class); if (!tmp) { return 0; } if (elf->e_class == ELFCLASS64) { *(Elf64_Ehdr*)tmp = *src; } else if (elf->e_class == ELFCLASS32) { Elf32_Ehdr *dst = (Elf32_Ehdr*)tmp; memcpy(dst->e_ident, src->e_ident, EI_NIDENT); check_and_copy(Elf32_Half, dst, src, e_type, 0); check_and_copy(Elf32_Half, dst, src, e_machine, 0); check_and_copy(Elf32_Word, dst, src, e_version, 0); check_and_copy(Elf32_Addr, dst, src, e_entry, 0); check_and_copy(Elf32_Off, dst, src, e_phoff, 0); check_and_copy(Elf32_Off, dst, src, e_shoff, 0); check_and_copy(Elf32_Word, dst, src, e_flags, 0); check_and_copy(Elf32_Half, dst, src, e_ehsize, 0); check_and_copy(Elf32_Half, dst, src, e_phentsize, 0); check_and_copy(Elf32_Half, dst, src, e_phnum, 0); check_and_copy(Elf32_Half, dst, src, e_shentsize, 0); check_and_copy(Elf32_Half, dst, src, e_shnum, 0); check_and_copy(Elf32_Half, dst, src, e_shstrndx, 0); } else { if (valid_class(elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } return 0; } return 1; } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/32.newehdr.c0000644000000000000000000000420511015476446015277 0ustar rootroot/* * 32.newehdr.c - implementation of the elf{32,64}_newehdr(3) functions. * Copyright (C) 1995 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: 32.newehdr.c,v 1.16 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ static char* _elf_newehdr(Elf *elf, unsigned cls) { size_t size; if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_readable) { return _elf_getehdr(elf, cls); } else if (!elf->e_ehdr) { size = _msize(cls, _elf_version, ELF_T_EHDR); elf_assert(size); if ((elf->e_ehdr = (char*)malloc(size))) { memset(elf->e_ehdr, 0, size); elf->e_ehdr_flags |= ELF_F_DIRTY; elf->e_kind = ELF_K_ELF; elf->e_class = cls; return elf->e_ehdr; } seterr(ERROR_MEM_EHDR); } else if (elf->e_class != cls) { seterr(ERROR_CLASSMISMATCH); } else { elf_assert(elf->e_kind == ELF_K_ELF); return elf->e_ehdr; } return NULL; } Elf32_Ehdr* elf32_newehdr(Elf *elf) { return (Elf32_Ehdr*)_elf_newehdr(elf, ELFCLASS32); } #if __LIBELF64 Elf64_Ehdr* elf64_newehdr(Elf *elf) { return (Elf64_Ehdr*)_elf_newehdr(elf, ELFCLASS64); } unsigned long gelf_newehdr(Elf *elf, int cls) { if (!valid_class(cls) || !_msize(cls, _elf_version, ELF_T_EHDR)) { seterr(ERROR_UNKNOWN_CLASS); return 0; } return (unsigned long)_elf_newehdr(elf, cls); } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/Makefile.in0000644000000000000000000001751411273303523015317 0ustar rootroot# lib/Makefile for libelf. # Copyright (C) 1995 - 2009 Michael Riepe # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # @(#) $Id: Makefile.in,v 1.40 2009/11/01 13:04:19 michael Exp $ instroot = prefix = @prefix@ exec_prefix = @exec_prefix@ libdir = @libdir@ includedir = @includedir@ installdirs = $(libdir) $(includedir) $(includedir)/libelf CC = @CC@ LD = @LD@ AR = ar MV = mv -f RM = rm -f LN_S = @LN_S@ RANLIB = @RANLIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ DEFS = -DHAVE_CONFIG_H LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ DEPSHLIBS = @DEPSHLIBS@ DO_SHLIB = @DO_SHLIB@ PICFLAGS = @PICFLAGS@ SHLIB_SFX = @SHLIB_SFX@ SHLINK_SFX = @SHLINK_SFX@ SONAME_SFX = @SONAME_SFX@ LINK_SHLIB = @LINK_SHLIB@ INSTALL_SHLIB = @INSTALL_SHLIB@ SHLIB = libelf$(SHLIB_SFX) SHLINK = libelf$(SHLINK_SFX) SONAME = libelf$(SONAME_SFX) # install includes in includedir? DO_COMPAT = @DO_COMPAT@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) # no user serviceable parts below PACKAGE = @PACKAGE@ VERSION = @VERSION@ MAJOR = @MAJOR@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ topdir = .. subdir = lib .SUFFIXES: .SUFFIXES: .c .o .c.o: @$(RM) $@ $(@:.o=.os) if test -n "$(PICFLAGS)"; then \ $(COMPILE) $(PICFLAGS) $< && $(MV) $@ $(@:.o=.os); \ else true; fi $(COMPILE) $< INCLUDES = -I$(topdir) -I. -I$(srcdir) # generic sources SRCS1 = begin.c cntl.c end.c errmsg.c errno.c fill.c flag.c getarhdr.c \ getarsym.c getbase.c getdata.c getident.c getscn.c hash.c kind.c \ ndxscn.c newdata.c newscn.c next.c nextscn.c rand.c rawdata.c \ rawfile.c strptr.c update.c version.c checksum.c getaroff.c OBJS1 = begin.o cntl.o end.o errmsg.o errno.o fill.o flag.o getarhdr.o \ getarsym.o getbase.o getdata.o getident.o getscn.o hash.o kind.o \ ndxscn.o newdata.o newscn.o next.o nextscn.o rand.o rawdata.o \ rawfile.o strptr.o update.o version.o checksum.o getaroff.o # 32-bit sources SRCS2 = 32.fsize.c 32.getehdr.c 32.getphdr.c 32.getshdr.c 32.newehdr.c \ 32.newphdr.c 32.xlatetof.c OBJS2 = 32.fsize.o 32.getehdr.o 32.getphdr.o 32.getshdr.o 32.newehdr.o \ 32.newphdr.o 32.xlatetof.o # support SRCS3 = cook.c data.c input.c assert.c OBJS3 = cook.o data.o input.o assert.o # nlist SRCS4 = nlist.c OBJS4 = nlist.o # opt SRCS5 = opt.delscn.c x.remscn.c x.movscn.c x.elfext.c OBJS5 = opt.delscn.o x.remscn.o x.movscn.o x.elfext.o # 64-bit sources SRCS64 = 64.xlatetof.c gelfehdr.c gelfphdr.c gelfshdr.c gelftrans.c swap64.c OBJS64 = 64.xlatetof.o gelfehdr.o gelfphdr.o gelfshdr.o gelftrans.o swap64.o # Versioning sources SRCS_V = verdef_32_tof.c verdef_32_tom.c verdef_64_tof.c verdef_64_tom.c OBJS_V = verdef_32_tof.o verdef_32_tom.o verdef_64_tof.o verdef_64_tom.o HDRS_V = verdef.h verneed.h SRCS = $(SRCS1) $(SRCS2) $(SRCS3) $(SRCS4) $(SRCS5) $(SRCS64) $(SRCS_V) OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) $(OBJS64) $(OBJS_V) # missing functions LIBSRCS = memset.c LIBOBJS = @LIBOBJS@ # public header files HDRS = libelf.h nlist.h gelf.h # public header files (created by configure) AUXHDRS = sys_elf.h # private header files PRIVHDRS = byteswap.h errors.h ext_types.h private.h elf_repl.h \ $(HDRS_V) DISTFILES = $(SRCS) $(LIBSRCS) $(HDRS) $(PRIVHDRS) Makefile.in sys_elf.h.in \ Makefile.w32 build.bat config.h.w32 libelf.def sys_elf.h.w32 all: libelf.a shared-$(DO_SHLIB) check: shared-yes: $(SHLIB) shared-no: libelf.a: $(OBJS) $(LIBOBJS) @$(RM) $@ $(AR) rcv $@ $(OBJS) $(LIBOBJS) $(RANLIB) $@ $(SHLIB): libelf.a @$(RM) $(SHLIB) $(LINK_SHLIB) -o $(SHLIB) $(OBJS:.o=.os) $(LIBOBJS:.o=.os) $(DEPSHLIBS) if test "$(SONAME)" = "$(SHLIB)"; then true; else \ $(RM) $(SONAME) && $(LN_S) $(SHLIB) $(SONAME); \ fi if test "$(SHLINK)" = "$(SHLIB)"; then true; else \ $(RM) $(SHLINK) && $(LN_S) $(SHLIB) $(SHLINK); \ fi install: install-data \ install-shared-$(DO_SHLIB) install-compat-$(DO_COMPAT) installdirs: $(top_srcdir)/mkinstalldirs dirs="$(installdirs)"; for dir in $$dirs; do \ $(SHELL) $(top_srcdir)/mkinstalldirs $(instroot)$$dir; \ done install-data: all installdirs $(INSTALL_DATA) libelf.a $(instroot)$(libdir) -cd $(instroot)$(libdir) && $(RANLIB) libelf.a files="$(HDRS) $(AUXHDRS) elf_repl.h"; for file in $$files; do \ if test -r $$file; then \ $(INSTALL_DATA) $$file $(instroot)$(includedir)/libelf; \ else \ $(INSTALL_DATA) $(srcdir)/$$file $(instroot)$(includedir)/libelf; \ fi; \ done uninstall: uninstall-data \ uninstall-shared-$(DO_SHLIB) uninstall-compat-$(DO_COMPAT) uninstall-data: $(RM) $(instroot)$(libdir)/libelf.a $(RM) -r $(instroot)$(includedir)/libelf install-shared-yes: install-shared install-shared-no: install-shared: installdirs $(SHLIB) $(INSTALL_SHLIB) $(SHLIB) $(instroot)$(libdir) if test "$(SONAME)" = "$(SHLIB)"; then true; else \ cd $(instroot)$(libdir) && $(RM) $(SONAME) && $(LN_S) $(SHLIB) $(SONAME); \ fi if test "$(SHLINK)" = "$(SHLIB)"; then true; else \ cd $(instroot)$(libdir) && $(RM) $(SHLINK) && $(LN_S) $(SHLIB) $(SHLINK); \ fi uninstall-shared-yes: uninstall-shared uninstall-shared-no: uninstall-shared: cd $(instroot)$(libdir) && $(RM) $(SHLIB) $(SONAME) $(SHLINK) install-compat-yes: install-compat install-compat-no: install-compat: installdirs files="$(HDRS)"; for file in $$files; do \ if test -f $(instroot)$(includedir)/$$file; then true; else \ echo "#include " > $(instroot)$(includedir)/$$file; \ fi; \ done uninstall-compat-yes: uninstall-compat uninstall-compat-no: uninstall-compat: files="$(HDRS)"; for file in $$files; do \ if grep "^#include \$$" $(instroot)$(includedir)/$$file >/dev/null 2>&1; then \ $(RM) $(instroot)$(includedir)/$$file; \ else true; fi; \ done mostlyclean: $(RM) *.o *.a *.os $(SHLIB) $(SONAME) $(SHLINK) $(RM) *~ core a.out errlist clean: mostlyclean distclean: clean $(RM) stamp-h $(AUXHDRS) $(RM) Makefile maintainer-clean: distclean # maintainer only MAINT = @MAINT@ distdir = $(PACKAGE)-$(VERSION) distsubdir = $(topdir)/$(distdir)/$(subdir) $(MAINT)dist: $(DISTFILES) if test -d $(distsubdir); then true; else mkdir $(distsubdir); fi files="$(DISTFILES)"; for file in $$files; do \ ln $(srcdir)/$$file $(distsubdir) || \ cp -p $(srcdir)/$$file $(distsubdir) || exit 1; \ done # For the justification of the following Makefile rules, see node # `Automatic Remaking' in GNU Autoconf documentation. $(MAINT)Makefile: Makefile.in $(topdir)/config.status cd $(topdir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status $(MAINT)sys_elf.h: stamp-h $(MAINT)stamp-h: sys_elf.h.in $(topdir)/config.status cd $(topdir) && CONFIG_FILES= CONFIG_HEADERS=$(subdir)/sys_elf.h ./config.status $(RM) stamp-h && echo timestamp > stamp-h # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # dependencies $(OBJS): private.h $(topdir)/config.h libelf.h gelf.h errors.h $(AUXHDRS) 32.fsize.o: ext_types.h 32.xlatetof.o: byteswap.h ext_types.h 64.xlatetof.o: byteswap.h ext_types.h getarsym.o: byteswap.h memset.o: $(topdir)/config.h nlist.o: nlist.h swap64.o: byteswap.h $(OBJS_V): byteswap.h ext_types.h $(HDRS_V) libelf-0.8.13.orig/lib/errmsg.c0000644000000000000000000000413111015476446014715 0ustar rootroot/* * errmsg.c - implementation of the elf_errmsg(3) function. * Copyright (C) 1995 - 1999, 2004 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: errmsg.c,v 1.11 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ #if HAVE_DGETTEXT # undef HAVE_CATGETS # include #else /* HAVE_DGETTEXT */ # define dgettext(dom, str) str #endif /* HAVE_DGETTEXT */ #if HAVE_CATGETS # include static nl_catd _libelf_cat = (nl_catd)0; #endif /* HAVE_CATGETS */ #if HAVE_DGETTEXT || HAVE_CATGETS static const char domain[] = "libelf"; #endif /* HAVE_DGETTEXT || HAVE_CATGETS */ #if PIC static const char *_messages[] = { #else /* PIC */ static const char *const _messages[] = { #endif /* PIC */ #define __err__(a,b) b, #include /* include string tables from errors.h */ #undef __err__ }; const char* elf_errmsg(int err) { if (err == 0) { err = _elf_errno; if (err == 0) { return NULL; } } else if (err == -1) { err = _elf_errno; } if (err < 0 || err >= ERROR_NUM || _messages[err] == NULL) { err = ERROR_UNKNOWN; } #if HAVE_CATGETS if (_libelf_cat == (nl_catd)0) { _libelf_cat = catopen(domain, 0); } if (_libelf_cat != (nl_catd)-1) { return catgets(_libelf_cat, 1, err + 1, _messages[err]); } #endif /* HAVE_CATGETS */ return dgettext(domain, _messages[err]); } libelf-0.8.13.orig/lib/gelf.h0000644000000000000000000001175711015476446014354 0ustar rootroot/* * gelf.h - public header file for libelf. * Copyright (C) 2000 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ /* @(#) $Id: gelf.h,v 1.16 2008/05/23 08:15:34 michael Exp $ */ #ifndef _GELF_H #define _GELF_H #if __LIBELF_INTERNAL__ #include #else /* __LIBELF_INTERNAL__ */ #include #endif /* __LIBELF_INTERNAL__ */ #if __LIBELF_NEED_LINK_H #include #elif __LIBELF_NEED_SYS_LINK_H #include #endif /* __LIBELF_NEED_LINK_H */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #ifndef __P # if (__STDC__ + 0) || defined(__cplusplus) || defined(_WIN32) # define __P(args) args # else /* __STDC__ || defined(__cplusplus) */ # define __P(args) () # endif /* __STDC__ || defined(__cplusplus) */ #endif /* __P */ #if !__LIBELF64 #error "GElf is not supported on this system." #else /* __LIBELF64 */ typedef Elf64_Addr GElf_Addr; typedef Elf64_Half GElf_Half; typedef Elf64_Off GElf_Off; typedef Elf64_Sword GElf_Sword; typedef Elf64_Word GElf_Word; typedef Elf64_Sxword GElf_Sxword; typedef Elf64_Xword GElf_Xword; typedef Elf64_Ehdr GElf_Ehdr; typedef Elf64_Phdr GElf_Phdr; typedef Elf64_Shdr GElf_Shdr; typedef Elf64_Dyn GElf_Dyn; typedef Elf64_Rel GElf_Rel; typedef Elf64_Rela GElf_Rela; typedef Elf64_Sym GElf_Sym; /* * Symbol versioning */ #if __LIBELF_SYMBOL_VERSIONS typedef Elf64_Verdef GElf_Verdef; typedef Elf64_Verneed GElf_Verneed; typedef Elf64_Verdaux GElf_Verdaux; typedef Elf64_Vernaux GElf_Vernaux; #endif /* __LIBELF_SYMBOL_VERSIONS */ /* * These types aren't implemented (yet) * typedef Elf64_Move GElf_Move; typedef Elf64_Syminfo GElf_Syminfo; */ /* * Generic macros */ #define GELF_ST_BIND ELF64_ST_BIND #define GELF_ST_TYPE ELF64_ST_TYPE #define GELF_ST_INFO ELF64_ST_INFO #define GELF_R_TYPE ELF64_R_TYPE #define GELF_R_SYM ELF64_R_SYM #define GELF_R_INFO ELF64_R_INFO /* * Function declarations */ extern int gelf_getclass __P((Elf *__elf)); extern size_t gelf_fsize __P((Elf *__elf, Elf_Type __type, size_t __count, unsigned __ver)); extern Elf_Data *gelf_xlatetof __P((Elf *__elf, Elf_Data *__dst, const Elf_Data *__src, unsigned __encode)); extern Elf_Data *gelf_xlatetom __P((Elf *__elf, Elf_Data *__dst, const Elf_Data *__src, unsigned __encode)); extern GElf_Ehdr *gelf_getehdr __P((Elf *__elf, GElf_Ehdr *__dst)); extern int gelf_update_ehdr __P((Elf *__elf, GElf_Ehdr *__src)); extern unsigned long gelf_newehdr __P((Elf *__elf, int __elfclass)); extern GElf_Phdr *gelf_getphdr __P((Elf *__elf, int ndx, GElf_Phdr *__dst)); extern int gelf_update_phdr __P((Elf *__elf, int ndx, GElf_Phdr *__src)); extern unsigned long gelf_newphdr __P((Elf *__elf, size_t __phnum)); extern GElf_Shdr *gelf_getshdr __P((Elf_Scn *__scn, GElf_Shdr *__dst)); extern int gelf_update_shdr __P((Elf_Scn *__scn, GElf_Shdr *__src)); extern GElf_Dyn *gelf_getdyn __P((Elf_Data *__src, int __ndx, GElf_Dyn *__dst)); extern int gelf_update_dyn __P((Elf_Data *__dst, int __ndx, GElf_Dyn *__src)); extern GElf_Rel *gelf_getrel __P((Elf_Data *__src, int __ndx, GElf_Rel *__dst)); extern int gelf_update_rel __P((Elf_Data *__dst, int __ndx, GElf_Rel *__src)); extern GElf_Rela *gelf_getrela __P((Elf_Data *__src, int __ndx, GElf_Rela *__dst)); extern int gelf_update_rela __P((Elf_Data *__dst, int __ndx, GElf_Rela *__src)); extern GElf_Sym *gelf_getsym __P((Elf_Data *__src, int __ndx, GElf_Sym *__dst)); extern int gelf_update_sym __P((Elf_Data *__dst, int __ndx, GElf_Sym *__src)); extern long gelf_checksum __P((Elf *__elf)); /* * These functions aren't implemented (yet) * extern GElf_Move *gelf_getmove __P((Elf_Data *__src, int __ndx, GElf_Move *__src)); extern int gelf_update_move __P((Elf_Data *__dst, int __ndx, GElf_Move *__src)); * extern GElf_Syminfo* gelf_getsyminfo __P((Elf_Data *__src, int __ndx, GElf_Syminfo *__dst)); extern int gelf_update_syminfo __P((Elf_Data *__dst, int __ndx, GElf_Syminfo *__src)); */ /* * Extensions (not available in other versions of libelf) */ extern size_t gelf_msize __P((Elf *__elf, Elf_Type __type, size_t __count, unsigned __ver)); #endif /* __LIBELF64 */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _GELF_H */ libelf-0.8.13.orig/lib/verdef_64_tof.c0000644000000000000000000000311611015476447016055 0ustar rootroot/* verdef_64_tof.c - copy 64-bit versioning information. Copyright (C) 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #if __LIBELF64 && __LIBELF_SYMBOL_VERSIONS #ifndef lint static const char rcsid[] = "@(#) $Id: verdef_64_tof.c,v 1.5 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ typedef Elf64_Verdaux verdaux_mtype; typedef Elf64_Verdef verdef_mtype; typedef Elf64_Vernaux vernaux_mtype; typedef Elf64_Verneed verneed_mtype; typedef Elf64_Word align_mtype; typedef __ext_Elf64_Verdaux verdaux_ftype; typedef __ext_Elf64_Verdef verdef_ftype; typedef __ext_Elf64_Vernaux vernaux_ftype; typedef __ext_Elf64_Verneed verneed_ftype; typedef __ext_Elf64_Word align_ftype; #define class_suffix 64 #undef TOFILE #define TOFILE 1 /* * Include shared code */ #include "verdef.h" #include "verneed.h" #endif /* __LIBELF64 && __LIBELF_SYMBOL_VERSIONS */ libelf-0.8.13.orig/lib/32.getphdr.c0000644000000000000000000000302511015476446015277 0ustar rootroot/* 32.getphdr.c - implementation of the elf{32,64}_getphdr(3) functions. Copyright (C) 1995 - 2000 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: 32.getphdr.c,v 1.11 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ char* _elf_getphdr(Elf *elf, unsigned cls) { if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (elf->e_class != cls) { seterr(ERROR_CLASSMISMATCH); } else if (elf->e_ehdr || _elf_cook(elf)) { return elf->e_phdr; } return NULL; } Elf32_Phdr* elf32_getphdr(Elf *elf) { return (Elf32_Phdr*)_elf_getphdr(elf, ELFCLASS32); } #if __LIBELF64 Elf64_Phdr* elf64_getphdr(Elf *elf) { return (Elf64_Phdr*)_elf_getphdr(elf, ELFCLASS64); } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/memset.c0000644000000000000000000000274111015476447014716 0ustar rootroot/* * memset.c - replacement for memset(3), using duff's device. * Copyright (C) 1995 - 2004 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #if HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ #ifndef lint static const char rcsid[] = "@(#) $Id: memset.c,v 1.11 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ #include /* for size_t */ #include void* _elf_memset(void *s, int c, size_t n) { char *t = (char*)s; if (n) { switch (n % 8u) { do { n -= 8; default: case 0: *t++ = (char)c; case 7: *t++ = (char)c; case 6: *t++ = (char)c; case 5: *t++ = (char)c; case 4: *t++ = (char)c; case 3: *t++ = (char)c; case 2: *t++ = (char)c; case 1: *t++ = (char)c; } while (n > 8); } } return s; } libelf-0.8.13.orig/lib/gelfshdr.c0000644000000000000000000000725611015476446015227 0ustar rootroot/* * gelfshdr.c - gelf_* translation functions. * Copyright (C) 2000 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #if __LIBELF64 #ifndef lint static const char rcsid[] = "@(#) $Id: gelfshdr.c,v 1.10 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ #define check_and_copy(type, d, s, name, eret) \ do { \ if (sizeof((d)->name) < sizeof((s)->name) \ && (type)(s)->name != (s)->name) { \ seterr(ERROR_BADVALUE); \ return (eret); \ } \ (d)->name = (type)(s)->name; \ } while (0) GElf_Shdr* gelf_getshdr(Elf_Scn *scn, GElf_Shdr *dst) { GElf_Shdr buf; if (!scn) { return NULL; } elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(scn->s_elf); elf_assert(scn->s_elf->e_magic == ELF_MAGIC); if (!dst) { dst = &buf; } if (scn->s_elf->e_class == ELFCLASS64) { *dst = scn->s_shdr64; } else if (scn->s_elf->e_class == ELFCLASS32) { Elf32_Shdr *src = &scn->s_shdr32; check_and_copy(GElf_Word, dst, src, sh_name, NULL); check_and_copy(GElf_Word, dst, src, sh_type, NULL); check_and_copy(GElf_Xword, dst, src, sh_flags, NULL); check_and_copy(GElf_Addr, dst, src, sh_addr, NULL); check_and_copy(GElf_Off, dst, src, sh_offset, NULL); check_and_copy(GElf_Xword, dst, src, sh_size, NULL); check_and_copy(GElf_Word, dst, src, sh_link, NULL); check_and_copy(GElf_Word, dst, src, sh_info, NULL); check_and_copy(GElf_Xword, dst, src, sh_addralign, NULL); check_and_copy(GElf_Xword, dst, src, sh_entsize, NULL); } else { if (valid_class(scn->s_elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } return NULL; } if (dst == &buf) { dst = (GElf_Shdr*)malloc(sizeof(GElf_Shdr)); if (!dst) { seterr(ERROR_MEM_SHDR); return NULL; } *dst = buf; } return dst; } int gelf_update_shdr(Elf_Scn *scn, GElf_Shdr *src) { if (!scn || !src) { return 0; } elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(scn->s_elf); elf_assert(scn->s_elf->e_magic == ELF_MAGIC); if (scn->s_elf->e_class == ELFCLASS64) { scn->s_shdr64 = *src; } else if (scn->s_elf->e_class == ELFCLASS32) { Elf32_Shdr *dst = &scn->s_shdr32; check_and_copy(Elf32_Word, dst, src, sh_name, 0); check_and_copy(Elf32_Word, dst, src, sh_type, 0); check_and_copy(Elf32_Word, dst, src, sh_flags, 0); check_and_copy(Elf32_Addr, dst, src, sh_addr, 0); check_and_copy(Elf32_Off, dst, src, sh_offset, 0); check_and_copy(Elf32_Word, dst, src, sh_size, 0); check_and_copy(Elf32_Word, dst, src, sh_link, 0); check_and_copy(Elf32_Word, dst, src, sh_info, 0); check_and_copy(Elf32_Word, dst, src, sh_addralign, 0); check_and_copy(Elf32_Word, dst, src, sh_entsize, 0); } else { if (valid_class(scn->s_elf->e_class)) { seterr(ERROR_UNIMPLEMENTED); } else { seterr(ERROR_UNKNOWN_CLASS); } return 0; } return 1; } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/getaroff.c0000644000000000000000000000254411273303523015210 0ustar rootroot/* * getaroff.c - implementation of the elf_getaroff(3) function. * Copyright (C) 2009 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: getaroff.c,v 1.1 2009/11/01 13:04:19 michael Exp $"; #endif /* lint */ off_t elf_getaroff(Elf *elf) { Elf *ref; if (!elf) { return (off_t)-1; } elf_assert(elf->e_magic == ELF_MAGIC); if (!(ref = elf->e_parent)) { return (off_t)-1; } elf_assert(ref->e_magic == ELF_MAGIC); elf_assert(elf->e_base >= ref->e_base + SARMAG + sizeof(struct ar_hdr)); return (off_t)(elf->e_base - ref->e_base - sizeof(struct ar_hdr)); } libelf-0.8.13.orig/lib/fill.c0000644000000000000000000000174511015476446014354 0ustar rootroot/* fill.c - implementation of the elf_fill(3) function. Copyright (C) 1995 - 1998 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: fill.c,v 1.7 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ void elf_fill(int fill) { _elf_fill = fill; } libelf-0.8.13.orig/lib/begin.c0000644000000000000000000002433711273303523014503 0ustar rootroot/* * begin.c - implementation of the elf_begin(3) and elf_memory(3) functions. * Copyright (C) 1995 - 2004 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: begin.c,v 1.22 2009/11/01 13:04:19 michael Exp $"; #endif /* lint */ static const Elf _elf_init = INIT_ELF; static const char fmag[] = ARFMAG; static unsigned long getnum(const char *str, size_t len, int base, size_t *err) { unsigned long result = 0; while (len && *str == ' ') { str++; len--; } while (len && *str >= '0' && (*str - '0') < base) { result = base * result + *str++ - '0'; len--; } while (len && *str == ' ') { str++; len--; } if (len) { *err = len; } return result; } static void _elf_init_ar(Elf *elf) { struct ar_hdr *hdr; size_t offset; size_t size; size_t err = 0; elf->e_kind = ELF_K_AR; elf->e_idlen = SARMAG; elf->e_off = SARMAG; /* process special members */ offset = SARMAG; while (!elf->e_strtab && offset + sizeof(*hdr) <= elf->e_size) { hdr = (struct ar_hdr*)(elf->e_data + offset); if (memcmp(hdr->ar_fmag, fmag, sizeof(fmag) - 1)) { break; } if (hdr->ar_name[0] != '/') { break; } size = getnum(hdr->ar_size, sizeof(hdr->ar_size), 10, &err); if (err || !size) { break; } offset += sizeof(*hdr); if (offset + size > elf->e_size) { break; } if (hdr->ar_name[1] == '/' && hdr->ar_name[2] == ' ') { elf->e_strtab = elf->e_data + offset; elf->e_strlen = size; break; } if (hdr->ar_name[1] != ' ') { break; } /* * Windows (.lib) archives provide two symbol tables * The first one is the one we want. */ if (!elf->e_symtab) { elf->e_symtab = elf->e_data + offset; elf->e_symlen = size; } offset += size + (size & 1); } } static Elf_Arhdr* _elf_arhdr(Elf *arf) { struct ar_hdr *hdr; Elf_Arhdr *arhdr; size_t namelen; size_t tmp; char *name; size_t err = 0; if (arf->e_off == arf->e_size) { /* no error! */ return NULL; } if (arf->e_off < 0 || arf->e_off > arf->e_size) { seterr(ERROR_OUTSIDE); return NULL; } if (arf->e_off + sizeof(*hdr) > arf->e_size) { seterr(ERROR_TRUNC_ARHDR); return NULL; } elf_assert(arf->e_data != NULL); hdr = (struct ar_hdr*)(arf->e_data + arf->e_off); if (memcmp(hdr->ar_fmag, fmag, sizeof(fmag) - 1)) { seterr(ERROR_ARFMAG); return NULL; } name = hdr->ar_name; for (namelen = sizeof(hdr->ar_name); namelen > 0; namelen--) { if (name[namelen - 1] != ' ') { break; } } if (name[0] == '/') { if (name[1] >= '0' && name[1] <= '9') { if (!arf->e_strtab) { seterr(ERROR_ARSTRTAB); return NULL; } tmp = getnum(&name[1], namelen - 1, 10, &err); if (err) { seterr(ERROR_ARSPECIAL); return NULL; } if (tmp < 0 || tmp >= arf->e_strlen) { seterr(ERROR_ARSTRTAB); return NULL; } for (namelen = tmp; namelen < arf->e_strlen; namelen++) { if (arf->e_strtab[namelen] == '/') { break; } } if (namelen == arf->e_strlen) { seterr(ERROR_ARSTRTAB); return NULL; } name = arf->e_strtab + tmp; namelen -= tmp; } else if (namelen != 1 && !(namelen == 2 && name[1] == '/')) { seterr(ERROR_ARSPECIAL); return NULL; } } else if (namelen > 0 && name[namelen - 1] == '/') { namelen--; } /* XXX some broken software omits the trailing slash else { namelen = 0; } */ if (!(arhdr = (Elf_Arhdr*)malloc(sizeof(*arhdr) + sizeof(hdr->ar_name) + namelen + 2))) { seterr(ERROR_MEM_ARHDR); return NULL; } arhdr->ar_name = NULL; arhdr->ar_rawname = (char*)(arhdr + 1); arhdr->ar_date = getnum(hdr->ar_date, sizeof(hdr->ar_date), 10, &err); arhdr->ar_uid = getnum(hdr->ar_uid, sizeof(hdr->ar_uid), 10, &err); arhdr->ar_gid = getnum(hdr->ar_gid, sizeof(hdr->ar_gid), 10, &err); arhdr->ar_mode = getnum(hdr->ar_mode, sizeof(hdr->ar_mode), 8, &err); arhdr->ar_size = getnum(hdr->ar_size, sizeof(hdr->ar_size), 10, &err); if (err) { free(arhdr); seterr(ERROR_ARHDR); return NULL; } if (arf->e_off + sizeof(struct ar_hdr) + arhdr->ar_size > arf->e_size) { free(arhdr); seterr(ERROR_TRUNC_MEMBER); return NULL; } memcpy(arhdr->ar_rawname, hdr->ar_name, sizeof(hdr->ar_name)); arhdr->ar_rawname[sizeof(hdr->ar_name)] = '\0'; if (namelen) { arhdr->ar_name = arhdr->ar_rawname + sizeof(hdr->ar_name) + 1; memcpy(arhdr->ar_name, name, namelen); arhdr->ar_name[namelen] = '\0'; } return arhdr; } static void _elf_check_type(Elf *elf, size_t size) { elf->e_idlen = size; if (size >= EI_NIDENT && !memcmp(elf->e_data, ELFMAG, SELFMAG)) { elf->e_kind = ELF_K_ELF; elf->e_idlen = EI_NIDENT; elf->e_class = elf->e_data[EI_CLASS]; elf->e_encoding = elf->e_data[EI_DATA]; elf->e_version = elf->e_data[EI_VERSION]; } else if (size >= SARMAG && !memcmp(elf->e_data, ARMAG, SARMAG)) { _elf_init_ar(elf); } } Elf* elf_begin(int fd, Elf_Cmd cmd, Elf *ref) { Elf_Arhdr *arhdr = NULL; size_t size = 0; off_t off; Elf *elf; elf_assert(_elf_init.e_magic == ELF_MAGIC); if (_elf_version == EV_NONE) { seterr(ERROR_VERSION_UNSET); return NULL; } else if (cmd == ELF_C_NULL) { return NULL; } else if (cmd == ELF_C_WRITE) { ref = NULL; } else if (cmd != ELF_C_READ && cmd != ELF_C_RDWR) { seterr(ERROR_INVALID_CMD); return NULL; } else if (ref) { elf_assert(ref->e_magic == ELF_MAGIC); if (!ref->e_readable || (cmd == ELF_C_RDWR && !ref->e_writable)) { seterr(ERROR_CMDMISMATCH); return NULL; } if (ref->e_kind != ELF_K_AR) { ref->e_count++; return ref; } if (cmd == ELF_C_RDWR) { seterr(ERROR_MEMBERWRITE); return NULL; } if (ref->e_memory) { fd = ref->e_fd; } else if (fd != ref->e_fd) { seterr(ERROR_FDMISMATCH); return NULL; } if (!(arhdr = _elf_arhdr(ref))) { return NULL; } size = arhdr->ar_size; } else if ((off = lseek(fd, (off_t)0, SEEK_END)) == (off_t)-1 || (off_t)(size = off) != off) { seterr(ERROR_IO_GETSIZE); return NULL; } if (!(elf = (Elf*)malloc(sizeof(Elf)))) { seterr(ERROR_MEM_ELF); return NULL; } *elf = _elf_init; elf->e_fd = fd; elf->e_parent = ref; elf->e_size = elf->e_dsize = size; if (cmd != ELF_C_READ) { elf->e_writable = 1; } if (cmd != ELF_C_WRITE) { elf->e_readable = 1; } else { return elf; } if (ref) { size_t offset = ref->e_off + sizeof(struct ar_hdr); Elf *xelf; elf_assert(arhdr); elf->e_arhdr = arhdr; elf->e_base = ref->e_base + offset; /* * Share the archive's memory image. To avoid * multiple independent elf descriptors if the * same member is requested twice, scan the list * of open members for duplicates. * * I don't know how SVR4 handles this case. Don't rely on it. */ for (xelf = ref->e_members; xelf; xelf = xelf->e_link) { elf_assert(xelf->e_parent == ref); if (xelf->e_base == elf->e_base) { free(arhdr); free(elf); xelf->e_count++; return xelf; } } if (size == 0) { elf->e_data = NULL; } #if 1 else { /* * Archive members may be misaligned. Freezing them will * cause libelf to allocate buffers for translated data, * which should be properly aligned in all cases. */ elf_assert(!ref->e_cooked); elf->e_data = elf->e_rawdata = ref->e_data + offset; } #else else if (ref->e_data == ref->e_rawdata) { elf_assert(!ref->e_cooked); /* * archive is frozen - freeze member, too */ elf->e_data = elf->e_rawdata = ref->e_data + offset; } else { elf_assert(!ref->e_memory); elf->e_data = ref->e_data + offset; /* * The member's memory image may have been modified if * the member has been processed before. Since we need the * original image, we have to re-read the archive file. * Will fail if the archive's file descriptor is disabled. */ if (!ref->e_cooked) { ref->e_cooked = 1; } else if (!_elf_read(ref, elf->e_data, offset, size)) { free(arhdr); free(elf); return NULL; } } #endif elf->e_next = offset + size + (size & 1); elf->e_disabled = ref->e_disabled; elf->e_memory = ref->e_memory; /* parent/child linking */ elf->e_link = ref->e_members; ref->e_members = elf; ref->e_count++; /* Slowaris compatibility - do not rely on this! */ ref->e_off = elf->e_next; } else if (size) { #if HAVE_MMAP /* * Using mmap on writable files will interfere with elf_update */ if (!elf->e_writable && (elf->e_data = _elf_mmap(elf))) { elf->e_unmap_data = 1; } else #endif /* HAVE_MMAP */ if (!(elf->e_data = _elf_read(elf, NULL, 0, size))) { free(elf); return NULL; } } _elf_check_type(elf, size); return elf; } Elf* elf_memory(char *image, size_t size) { Elf *elf; elf_assert(_elf_init.e_magic == ELF_MAGIC); if (_elf_version == EV_NONE) { seterr(ERROR_VERSION_UNSET); return NULL; } else if (size == 0 || image == NULL) { /* TODO: set error code? */ return NULL; } if (!(elf = (Elf*)malloc(sizeof(Elf)))) { seterr(ERROR_MEM_ELF); return NULL; } *elf = _elf_init; elf->e_size = elf->e_dsize = size; elf->e_data = elf->e_rawdata = image; elf->e_readable = 1; elf->e_disabled = 1; elf->e_memory = 1; _elf_check_type(elf, size); return elf; } #if __LIBELF64 int gelf_getclass(Elf *elf) { if (elf && elf->e_kind == ELF_K_ELF && valid_class(elf->e_class)) { return elf->e_class; } return ELFCLASSNONE; } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/private.h0000644000000000000000000003151511273303523015072 0ustar rootroot/* * private.h - private definitions for libelf. * Copyright (C) 1995 - 2007 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ /* @(#) $Id: private.h,v 1.40 2009/11/01 13:04:19 michael Exp $ */ #ifndef _PRIVATE_H #define _PRIVATE_H #define __LIBELF_INTERNAL__ 1 #if HAVE_CONFIG_H # include #endif /* HAVE_CONFIG_H */ /* * Workaround for GLIBC bug: * include before */ #if HAVE_STDINT_H #include #endif #include #if STDC_HEADERS # include # include #else /* STDC_HEADERS */ extern void *malloc(), *realloc(); extern void free(), bcopy(), abort(); extern int strcmp(), strncmp(), memcmp(); extern void *memcpy(), *memmove(), *memset(); #endif /* STDC_HEADERS */ #if defined(_WIN32) #include #else #if HAVE_UNISTD_H # include #else /* HAVE_UNISTD_H */ extern int read(), write(), close(); extern off_t lseek(); #if HAVE_FTRUNCATE extern int ftruncate(); #endif /* HAVE_FTRUNCATE */ #endif /* HAVE_UNISTD_H */ #endif /* defined(_WIN32) */ #ifndef SEEK_SET #define SEEK_SET 0 #endif /* SEEK_SET */ #ifndef SEEK_CUR #define SEEK_CUR 1 #endif /* SEEK_CUR */ #ifndef SEEK_END #define SEEK_END 2 #endif /* SEEK_END */ #if !HAVE_MEMCMP # define memcmp strncmp #endif /* !HAVE_MEMCMP */ #if !HAVE_MEMCPY # define memcpy(d,s,n) bcopy(s,d,n) #endif /* !HAVE_MEMCPY */ #if !HAVE_MEMMOVE # define memmove(d,s,n) bcopy(s,d,n) #endif /* !HAVE_MEMMOVE */ #if !HAVE_MEMSET # define memset _elf_memset extern void *_elf_memset(); #endif /* !HAVE_MEMSET */ #if HAVE_STRUCT_NLIST_DECLARATION # define nlist __override_nlist_declaration #endif /* HAVE_STRUCT_NLIST_DECLARATION */ #if __LIBELF_NEED_LINK_H # include #elif __LIBELF_NEED_SYS_LINK_H # include #endif /* __LIBELF_NEED_LINK_H */ #if HAVE_AR_H #include #else /* HAVE_AR_H */ #define ARMAG "!\n" #define SARMAG 8 struct ar_hdr { char ar_name[16]; char ar_date[12]; char ar_uid[6]; char ar_gid[6]; char ar_mode[8]; char ar_size[10]; char ar_fmag[2]; }; #define ARFMAG "`\n" #endif /* HAVE_AR_H */ #include #if HAVE_STRUCT_NLIST_DECLARATION # undef nlist #endif /* HAVE_STRUCT_NLIST_DECLARATION */ #if __LIBELF64 #include #endif /* __LIBELF64 */ typedef struct Scn_Data Scn_Data; /* * ELF descriptor */ struct Elf { /* common */ size_t e_size; /* file/member size */ size_t e_dsize; /* size of memory image */ Elf_Kind e_kind; /* kind of file */ char* e_data; /* file/member data */ char* e_rawdata; /* file/member raw data */ size_t e_idlen; /* identifier size */ int e_fd; /* file descriptor */ unsigned e_count; /* activation count */ /* archive members (still common) */ Elf* e_parent; /* NULL if not an archive member */ size_t e_next; /* 0 if not an archive member */ size_t e_base; /* 0 if not an archive member */ Elf* e_link; /* next archive member or NULL */ Elf_Arhdr* e_arhdr; /* archive member header or NULL */ /* archives */ size_t e_off; /* current member offset (for elf_begin) */ Elf* e_members; /* linked list of active archive members */ char* e_symtab; /* archive symbol table */ size_t e_symlen; /* length of archive symbol table */ char* e_strtab; /* archive string table */ size_t e_strlen; /* length of archive string table */ /* ELF files */ unsigned e_class; /* ELF class */ unsigned e_encoding; /* ELF data encoding */ unsigned e_version; /* ELF version */ char* e_ehdr; /* ELF header */ char* e_phdr; /* ELF program header table */ size_t e_phnum; /* size of program header table */ Elf_Scn* e_scn_1; /* first section */ Elf_Scn* e_scn_n; /* last section */ unsigned e_elf_flags; /* elf flags (ELF_F_*) */ unsigned e_ehdr_flags; /* ehdr flags (ELF_F_*) */ unsigned e_phdr_flags; /* phdr flags (ELF_F_*) */ /* misc flags */ unsigned e_readable : 1; /* file is readable */ unsigned e_writable : 1; /* file is writable */ unsigned e_disabled : 1; /* e_fd has been disabled */ unsigned e_cooked : 1; /* e_data was modified */ unsigned e_free_syms : 1; /* e_symtab is malloc'ed */ unsigned e_unmap_data : 1; /* e_data is mmap'ed */ unsigned e_memory : 1; /* created by elf_memory() */ /* magic number for debugging */ long e_magic; }; #define ELF_MAGIC 0x012b649e #define INIT_ELF {\ /* e_size */ 0,\ /* e_dsize */ 0,\ /* e_kind */ ELF_K_NONE,\ /* e_data */ NULL,\ /* e_rawdata */ NULL,\ /* e_idlen */ 0,\ /* e_fd */ -1,\ /* e_count */ 1,\ /* e_parent */ NULL,\ /* e_next */ 0,\ /* e_base */ 0,\ /* e_link */ NULL,\ /* e_arhdr */ NULL,\ /* e_off */ 0,\ /* e_members */ NULL,\ /* e_symtab */ NULL,\ /* e_symlen */ 0,\ /* e_strtab */ NULL,\ /* e_strlen */ 0,\ /* e_class */ ELFCLASSNONE,\ /* e_encoding */ ELFDATANONE,\ /* e_version */ EV_NONE,\ /* e_ehdr */ NULL,\ /* e_phdr */ NULL,\ /* e_phnum */ 0,\ /* e_scn_1 */ NULL,\ /* e_scn_n */ NULL,\ /* e_elf_flags */ 0,\ /* e_ehdr_flags */ 0,\ /* e_phdr_flags */ 0,\ /* e_readable */ 0,\ /* e_writable */ 0,\ /* e_disabled */ 0,\ /* e_cooked */ 0,\ /* e_free_syms */ 0,\ /* e_unmap_data */ 0,\ /* e_memory */ 0,\ /* e_magic */ ELF_MAGIC\ } /* * Section descriptor */ struct Elf_Scn { Elf_Scn* s_link; /* pointer to next Elf_Scn */ Elf* s_elf; /* pointer to elf descriptor */ size_t s_index; /* number of this section */ unsigned s_scn_flags; /* section flags (ELF_F_*) */ unsigned s_shdr_flags; /* shdr flags (ELF_F_*) */ Scn_Data* s_data_1; /* first data buffer */ Scn_Data* s_data_n; /* last data buffer */ Scn_Data* s_rawdata; /* raw data buffer */ /* data copied from shdr */ unsigned s_type; /* section type */ size_t s_offset; /* section offset */ size_t s_size; /* section size */ /* misc flags */ unsigned s_freeme : 1; /* this Elf_Scn was malloc'ed */ /* section header */ union { #if __LIBELF64 Elf64_Shdr u_shdr64; #endif /* __LIBELF64 */ Elf32_Shdr u_shdr32; } s_uhdr; /* magic number for debugging */ long s_magic; }; #define s_shdr32 s_uhdr.u_shdr32 #define s_shdr64 s_uhdr.u_shdr64 #define SCN_MAGIC 0x012c747d #define INIT_SCN {\ /* s_link */ NULL,\ /* s_elf */ NULL,\ /* s_index */ 0,\ /* s_scn_flags */ 0,\ /* s_shdr_flags */ 0,\ /* s_data_1 */ NULL,\ /* s_data_n */ NULL,\ /* s_rawdata */ NULL,\ /* s_type */ SHT_NULL,\ /* s_offset */ 0,\ /* s_size */ 0,\ /* s_freeme */ 0,\ /* s_uhdr */ {{0,}},\ /* s_magic */ SCN_MAGIC\ } /* * Data descriptor */ struct Scn_Data { Elf_Data sd_data; /* must be first! */ Scn_Data* sd_link; /* pointer to next Scn_Data */ Elf_Scn* sd_scn; /* pointer to section */ char* sd_memdata; /* memory image of section */ unsigned sd_data_flags; /* data flags (ELF_F_*) */ /* misc flags */ unsigned sd_freeme : 1; /* this Scn_Data was malloc'ed */ unsigned sd_free_data : 1; /* sd_memdata is malloc'ed */ /* magic number for debugging */ long sd_magic; }; #define DATA_MAGIC 0x01072639 #define INIT_DATA {\ {\ /* d_buf */ NULL,\ /* d_type */ ELF_T_BYTE,\ /* d_size */ 0,\ /* d_off */ 0,\ /* d_align */ 0,\ /* d_version */ EV_NONE\ },\ /* sd_link */ NULL,\ /* sd_scn */ NULL,\ /* sd_memdata */ NULL,\ /* sd_data_flags */ 0,\ /* sd_freeme */ 0,\ /* sd_free_data */ 0,\ /* sd_magic */ DATA_MAGIC\ } /* * Private status variables */ extern unsigned _elf_version; extern int _elf_errno; extern int _elf_fill; extern int _elf_sanity_checks; #define SANITY_CHECK_STRPTR (1u << 0) /* * Private functions */ extern void *_elf_read __P((Elf*, void*, size_t, size_t)); extern void *_elf_mmap __P((Elf*)); extern int _elf_cook __P((Elf*)); extern char *_elf_getehdr __P((Elf*, unsigned)); extern char *_elf_getphdr __P((Elf*, unsigned)); extern Elf_Data *_elf_xlatetom __P((const Elf*, Elf_Data*, const Elf_Data*)); extern Elf_Type _elf_scn_type __P((unsigned)); extern size_t _elf32_xltsize __P((const Elf_Data *__src, unsigned __dv, unsigned __encode, int __tof)); extern size_t _elf64_xltsize __P((const Elf_Data *__src, unsigned __dv, unsigned __encode, int __tof)); extern int _elf_update_shnum(Elf *__elf, size_t __shnum); extern Elf_Scn *_elf_first_scn(Elf *__elf); /* * Special translators */ extern size_t _elf_verdef_32L11_tof __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verdef_32L11_tom __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verdef_32M11_tof __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verdef_32M11_tom __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verdef_64L11_tof __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verdef_64L11_tom __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verdef_64M11_tof __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verdef_64M11_tom __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verneed_32L11_tof __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verneed_32L11_tom __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verneed_32M11_tof __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verneed_32M11_tom __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verneed_64L11_tof __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verneed_64L11_tom __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verneed_64M11_tof __P((unsigned char *dst, const unsigned char *src, size_t n)); extern size_t _elf_verneed_64M11_tom __P((unsigned char *dst, const unsigned char *src, size_t n)); /* * Private data */ extern const Elf_Scn _elf_scn_init; extern const Scn_Data _elf_data_init; extern const size_t _elf_fmsize[2][EV_CURRENT - EV_NONE][ELF_T_NUM][2]; /* * Access macros for _elf_fmsize[] */ #define _fmsize(c,v,t,w) \ (_elf_fmsize[(c)-ELFCLASS32][(v)-EV_NONE-1][(t)-ELF_T_BYTE][(w)]) #define _fsize(c,v,t) _fmsize((c),(v),(t),1) #define _msize(c,v,t) _fmsize((c),(v),(t),0) /* * Various checks */ #define valid_class(c) ((c) >= ELFCLASS32 && (c) <= ELFCLASS64) #define valid_encoding(e) ((e) >= ELFDATA2LSB && (e) <= ELFDATA2MSB) #define valid_version(v) ((v) > EV_NONE && (v) <= EV_CURRENT) #define valid_type(t) ((unsigned)(t) < ELF_T_NUM) /* * Error codes */ enum { #define __err__(a,b) a, #include /* include constants from errors.h */ #undef __err__ ERROR_NUM }; #define seterr(err) (_elf_errno = (err)) /* * Sizes of data types (external representation) * These definitions should be in , but... */ #ifndef ELF32_FSZ_ADDR # define ELF32_FSZ_ADDR 4 # define ELF32_FSZ_HALF 2 # define ELF32_FSZ_OFF 4 # define ELF32_FSZ_SWORD 4 # define ELF32_FSZ_WORD 4 #endif /* ELF32_FSZ_ADDR */ #ifndef ELF64_FSZ_ADDR # define ELF64_FSZ_ADDR 8 # define ELF64_FSZ_HALF 2 # define ELF64_FSZ_OFF 8 # define ELF64_FSZ_SWORD 4 # define ELF64_FSZ_SXWORD 8 # define ELF64_FSZ_WORD 4 # define ELF64_FSZ_XWORD 8 #endif /* ELF64_FSZ_ADDR */ /* * More missing pieces, in no particular order */ #ifndef SHT_SYMTAB_SHNDX #define SHT_SYMTAB_SHNDX 18 #endif /* SHT_SYMTAB_SHNDX */ #ifndef SHN_XINDEX #define SHN_XINDEX 0xffff #endif /* SHN_XINDEX */ #ifndef PN_XNUM #define PN_XNUM 0xffff #endif /* PN_XNUM */ /* * Debugging */ #if ENABLE_DEBUG extern void __elf_assert __P((const char*, unsigned, const char*)); # if (__STDC__ + 0) # define elf_assert(x) do{if(!(x))__elf_assert(__FILE__,__LINE__,#x);}while(0) # else /* __STDC__ */ # define elf_assert(x) do{if(!(x))__elf_assert(__FILE__,__LINE__,"x");}while(0) # endif /* __STDC__ */ #else /* ENABLE_DEBUG */ # define elf_assert(x) do{}while(0) #endif /* ENABLE_DEBUG */ /* * Return values for certain functions */ #define LIBELF_SUCCESS 1 #define LIBELF_FAILURE 0 #endif /* _PRIVATE_H */ libelf-0.8.13.orig/lib/x.remscn.c0000644000000000000000000000546611015476447015170 0ustar rootroot/* x.remscn.c - implementation of the elfx_remscn(3) function. Copyright (C) 1995 - 2001, 2003 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: x.remscn.c,v 1.15 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ size_t elfx_remscn(Elf *elf, Elf_Scn *scn) { Elf_Scn *pscn; Scn_Data *sd; Scn_Data *tmp; size_t index; if (!elf || !scn) { return SHN_UNDEF; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); return SHN_UNDEF; } elf_assert(scn->s_magic == SCN_MAGIC); elf_assert(elf->e_ehdr); if (scn->s_elf != elf) { seterr(ERROR_ELFSCNMISMATCH); return SHN_UNDEF; } elf_assert(elf->e_scn_1); if (scn == elf->e_scn_1) { seterr(ERROR_NULLSCN); return SHN_UNDEF; } /* * Find previous section. */ for (pscn = elf->e_scn_1; pscn->s_link; pscn = pscn->s_link) { if (pscn->s_link == scn) { break; } } if (pscn->s_link != scn) { seterr(ERROR_ELFSCNMISMATCH); return SHN_UNDEF; } /* * Unlink section. */ if (elf->e_scn_n == scn) { elf->e_scn_n = pscn; } pscn->s_link = scn->s_link; index = scn->s_index; /* * Free section descriptor and data. */ for (sd = scn->s_data_1; sd; sd = tmp) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); tmp = sd->sd_link; if (sd->sd_free_data && sd->sd_memdata) { free(sd->sd_memdata); } if (sd->sd_freeme) { free(sd); } } if ((sd = scn->s_rawdata)) { elf_assert(sd->sd_magic == DATA_MAGIC); elf_assert(sd->sd_scn == scn); if (sd->sd_free_data && sd->sd_memdata) { free(sd->sd_memdata); } if (sd->sd_freeme) { free(sd); } } if (scn->s_freeme) { elf_assert(scn->s_index > 0); free(scn); } /* * Adjust section indices. */ for (scn = pscn->s_link; scn; scn = scn->s_link) { elf_assert(scn->s_index > index); scn->s_index--; } /* * Adjust section count in ELF header */ if (_elf_update_shnum(elf, elf->e_scn_n->s_index + 1)) { return SHN_UNDEF; } return index; } libelf-0.8.13.orig/lib/getarsym.c0000644000000000000000000000456511015476446015264 0ustar rootroot/* * getarsym.c - implementation of the elf_getarsym(3) function. * Copyright (C) 1995 - 1998, 2004 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #ifndef lint static const char rcsid[] = "@(#) $Id: getarsym.c,v 1.9 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ Elf_Arsym* elf_getarsym(Elf *elf, size_t *ptr) { Elf_Arsym *syms; size_t count; size_t tmp; size_t i; char *s; char *e; if (!ptr) { ptr = &tmp; } *ptr = 0; if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (elf->e_kind != ELF_K_AR) { seterr(ERROR_NOTARCHIVE); return NULL; } if (elf->e_symtab && !elf->e_free_syms) { if (elf->e_symlen < 4) { seterr(ERROR_SIZE_ARSYMTAB); return NULL; } count = __load_u32M(elf->e_symtab); if (elf->e_symlen < 4 * (count + 1)) { seterr(ERROR_SIZE_ARSYMTAB); return NULL; } if (!(syms = (Elf_Arsym*)malloc((count + 1) * sizeof(*syms)))) { seterr(ERROR_MEM_ARSYMTAB); return NULL; } s = elf->e_symtab + 4 * (count + 1); e = elf->e_symtab + elf->e_symlen; for (i = 0; i < count; i++, s++) { syms[i].as_name = s; while (s < e && *s) { s++; } if (s >= e) { seterr(ERROR_SIZE_ARSYMTAB); free(syms); return NULL; } elf_assert(!*s); syms[i].as_hash = elf_hash((unsigned char*)syms[i].as_name); syms[i].as_off = __load_u32M(elf->e_symtab + 4 * (i + 1)); } syms[count].as_name = NULL; syms[count].as_hash = ~0UL; syms[count].as_off = 0; elf->e_symtab = (char*)syms; elf->e_symlen = count + 1; elf->e_free_syms = 1; } *ptr = elf->e_symlen; return (Elf_Arsym*)elf->e_symtab; } libelf-0.8.13.orig/lib/32.newphdr.c0000644000000000000000000000575711015476446015327 0ustar rootroot/* * 32.newphdr.c - implementation of the elf{32,64}_newphdr(3) functions. * Copyright (C) 1995 - 2006 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #ifndef lint static const char rcsid[] = "@(#) $Id: 32.newphdr.c,v 1.16 2008/05/23 08:15:34 michael Exp $"; #endif /* lint */ static char* _elf_newphdr(Elf *elf, size_t count, unsigned cls) { size_t extcount = 0; Elf_Scn *scn = NULL; char *phdr = NULL; size_t size; if (!elf) { return NULL; } elf_assert(elf->e_magic == ELF_MAGIC); if (!elf->e_ehdr && !elf->e_readable) { seterr(ERROR_NOEHDR); } else if (elf->e_kind != ELF_K_ELF) { seterr(ERROR_NOTELF); } else if (elf->e_class != cls) { seterr(ERROR_CLASSMISMATCH); } else if (elf->e_ehdr || _elf_cook(elf)) { size = _msize(cls, _elf_version, ELF_T_PHDR); elf_assert(size); if (!(scn = _elf_first_scn(elf))) { return NULL; } if (count) { if (!(phdr = (char*)malloc(count * size))) { seterr(ERROR_MEM_PHDR); return NULL; } memset(phdr, 0, count * size); } elf_assert(elf->e_ehdr); elf->e_phnum = count; if (count >= PN_XNUM) { /* * get NULL section (create it if necessary) */ extcount = count; count = PN_XNUM; } if (cls == ELFCLASS32) { ((Elf32_Ehdr*)elf->e_ehdr)->e_phnum = count; scn->s_shdr32.sh_info = extcount; } #if __LIBELF64 else if (cls == ELFCLASS64) { ((Elf64_Ehdr*)elf->e_ehdr)->e_phnum = count; scn->s_shdr64.sh_info = extcount; } #endif /* __LIBELF64 */ else { seterr(ERROR_UNIMPLEMENTED); if (phdr) { free(phdr); } return NULL; } if (elf->e_phdr) { free(elf->e_phdr); } elf->e_phdr = phdr; elf->e_phdr_flags |= ELF_F_DIRTY; elf->e_ehdr_flags |= ELF_F_DIRTY; scn->s_scn_flags |= ELF_F_DIRTY; return phdr; } return NULL; } Elf32_Phdr* elf32_newphdr(Elf *elf, size_t count) { return (Elf32_Phdr*)_elf_newphdr(elf, count, ELFCLASS32); } #if __LIBELF64 Elf64_Phdr* elf64_newphdr(Elf *elf, size_t count) { return (Elf64_Phdr*)_elf_newphdr(elf, count, ELFCLASS64); } unsigned long gelf_newphdr(Elf *elf, size_t phnum) { if (!valid_class(elf->e_class)) { seterr(ERROR_UNKNOWN_CLASS); return 0; } return (unsigned long)_elf_newphdr(elf, phnum, elf->e_class); } #endif /* __LIBELF64 */ libelf-0.8.13.orig/lib/nlist.c0000644000000000000000000001341211015476447014552 0ustar rootroot/* * nlist.c - implementation of the nlist(3) function. * Copyright (C) 1995 - 2004 Michael Riepe * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #ifndef lint static const char rcsid[] = "@(#) $Id: nlist.c,v 1.15 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ #if !defined(_WIN32) #if HAVE_FCNTL_H #include #else extern int open(); #endif /* HAVE_FCNTL_H */ #endif /* defined(_WIN32) */ #ifndef O_RDONLY #define O_RDONLY 0 #endif /* O_RDONLY */ #ifndef O_BINARY #define O_BINARY 0 #endif /* O_BINARY */ #define FILE_OPEN_MODE (O_RDONLY | O_BINARY) #define PRIME 217 struct hash { const char* name; unsigned long hash; unsigned next; }; static const char* symbol_name(Elf *elf, const void *syms, const char *names, size_t nlimit, size_t index) { size_t off; if (elf->e_class == ELFCLASS32) { off = ((Elf32_Sym*)syms)[index].st_name; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { off = ((Elf64_Sym*)syms)[index].st_name; } #endif /* __LIBELF64 */ else { return NULL; } if (off >= 0 && off < nlimit) { return &names[off]; } return NULL; } static void copy_symbol(Elf *elf, struct nlist *np, const void *syms, size_t index) { if (elf->e_class == ELFCLASS32) { np->n_value = ((Elf32_Sym*)syms)[index].st_value; np->n_scnum = ((Elf32_Sym*)syms)[index].st_shndx; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { np->n_value = ((Elf64_Sym*)syms)[index].st_value; np->n_scnum = ((Elf64_Sym*)syms)[index].st_shndx; } #endif /* __LIBELF64 */ /* * this needs more work */ np->n_type = 0; np->n_sclass = 0; np->n_numaux = 0; } static int _elf_nlist(Elf *elf, struct nlist *nl) { unsigned first[PRIME]; Elf_Scn *symtab = NULL; Elf_Scn *strtab = NULL; Elf_Data *symdata; Elf_Data *strdata; size_t symsize; size_t nsymbols; const char *name; struct hash *table; unsigned long hash; unsigned i; struct nlist *np; /* * Get and translate ELF header, section table and so on. * Must be class independent, so don't use elf32_get*(). */ if (elf->e_kind != ELF_K_ELF) { return -1; } if (!elf->e_ehdr && !_elf_cook(elf)) { return -1; } /* * Find symbol table. If there is none, try dynamic symbols. */ for (symtab = elf->e_scn_1; symtab; symtab = symtab->s_link) { if (symtab->s_type == SHT_SYMTAB) { break; } if (symtab->s_type == SHT_DYNSYM) { strtab = symtab; } } if (!symtab && !(symtab = strtab)) { return -1; } /* * Get associated string table. */ i = 0; if (elf->e_class == ELFCLASS32) { i = symtab->s_shdr32.sh_link; } #if __LIBELF64 else if (elf->e_class == ELFCLASS64) { i = symtab->s_shdr64.sh_link; } #endif /* __LIBELF64 */ if (i == 0) { return -1; } for (strtab = elf->e_scn_1; strtab; strtab = strtab->s_link) { if (strtab->s_index == i) { break; } } if (!strtab || strtab->s_type != SHT_STRTAB) { return -1; } /* * Get and translate section data. */ symdata = elf_getdata(symtab, NULL); strdata = elf_getdata(strtab, NULL); if (!symdata || !strdata) { return -1; } symsize = _msize(elf->e_class, _elf_version, ELF_T_SYM); elf_assert(symsize); nsymbols = symdata->d_size / symsize; if (!symdata->d_buf || !strdata->d_buf || !nsymbols || !strdata->d_size) { return -1; } /* * Build a simple hash table. */ if (!(table = (struct hash*)malloc(nsymbols * sizeof(*table)))) { return -1; } for (i = 0; i < PRIME; i++) { first[i] = 0; } for (i = 0; i < nsymbols; i++) { table[i].name = NULL; table[i].hash = 0; table[i].next = 0; } for (i = 1; i < nsymbols; i++) { name = symbol_name(elf, symdata->d_buf, strdata->d_buf, strdata->d_size, i); if (name == NULL) { free(table); return -1; } if (*name != '\0') { table[i].name = name; table[i].hash = elf_hash((unsigned char*)name); hash = table[i].hash % PRIME; table[i].next = first[hash]; first[hash] = i; } } /* * Lookup symbols, one by one. */ for (np = nl; (name = np->n_name) && *name; np++) { hash = elf_hash((unsigned char*)name); for (i = first[hash % PRIME]; i; i = table[i].next) { if (table[i].hash == hash && !strcmp(table[i].name, name)) { break; } } if (i) { copy_symbol(elf, np, symdata->d_buf, i); } else { np->n_value = 0; np->n_scnum = 0; np->n_type = 0; np->n_sclass = 0; np->n_numaux = 0; } } free(table); return 0; } int nlist(const char *filename, struct nlist *nl) { int result = -1; unsigned oldver; Elf *elf; int fd; if ((oldver = elf_version(EV_CURRENT)) != EV_NONE) { if ((fd = open(filename, FILE_OPEN_MODE)) != -1) { if ((elf = elf_begin(fd, ELF_C_READ, NULL))) { result = _elf_nlist(elf, nl); elf_end(elf); } close(fd); } elf_version(oldver); } if (result) { while (nl->n_name && *nl->n_name) { nl->n_value = 0; nl++; } } return result; } libelf-0.8.13.orig/lib/verdef_32_tom.c0000644000000000000000000000306211015476447016057 0ustar rootroot/* verdef_32_tom.c - copy 32-bit versioning information. Copyright (C) 2001 Michael Riepe This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #if __LIBELF_SYMBOL_VERSIONS #ifndef lint static const char rcsid[] = "@(#) $Id: verdef_32_tom.c,v 1.5 2008/05/23 08:15:35 michael Exp $"; #endif /* lint */ typedef Elf32_Verdaux verdaux_mtype; typedef Elf32_Verdef verdef_mtype; typedef Elf32_Vernaux vernaux_mtype; typedef Elf32_Verneed verneed_mtype; typedef Elf32_Word align_mtype; typedef __ext_Elf32_Verdaux verdaux_ftype; typedef __ext_Elf32_Verdef verdef_ftype; typedef __ext_Elf32_Vernaux vernaux_ftype; typedef __ext_Elf32_Verneed verneed_ftype; typedef __ext_Elf32_Word align_ftype; #define class_suffix 32 #undef TOFILE #define TOFILE 0 /* * Include shared code */ #include "verdef.h" #include "verneed.h" #endif /* __LIBELF_SYMBOL_VERSIONS */ libelf-0.8.13.orig/stamp-h.in0000644000000000000000000000001211015476702014372 0ustar rootroottimestamp libelf-0.8.13.orig/mkinstalldirs0000755000000000000000000000115310243651646015312 0ustar rootroot#!/bin/sh # Make directory hierarchy. # Written by Noah Friedman # Public domain. defaultIFS=' ' IFS="${IFS-${defaultIFS}}" errstatus=0 for file in ${1+"$@"} ; do oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${file} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' for d in ${1+"$@"} ; do pathcomp="${pathcomp}${d}" if test ! -d "${pathcomp}"; then echo "mkdir $pathcomp" 1>&2 mkdir "${pathcomp}" || errstatus=$? fi pathcomp="${pathcomp}/" done done exit $errstatus # eof libelf-0.8.13.orig/ChangeLog0000644000000000000000000010511611273304177014260 0ustar rootrootSun Nov 1 14:08:47 CET 2009, Michael Riepe * README: * VERSION: update for 0.8.13 release. * libelf.pc.in: add -I${includedir}. * lib/begin.c: * lib/private.h: move archive related declarations. * lib/elf_repl.h: disable Elf64_Cap for 32-bit build. * lib/getaroff.c: new file. * lib/Makefile.in: * lib/Makefile.w32: add getaroff.c. Tue Jul 7 19:45:12 CEST 2009, Michael Riepe * README: * VERSION: update for 0.8.12 release. * lib/libelf.h: * lib/x.elfext.c: add new and deprecate old functions. Fri May 22 19:17:14 CEST 2009, Michael Riepe * README: * VERSION: update for 0.8.11 release. * lib/libelf.h: add ELF_F_LAYOUT_OVERLAP flag. * lib/rawfile.c: fix re-read zero size bug. * lib/update.c: honor ELF_F_LAYOUT_OVERLAP flag. Fri Sep 7 14:04:20 CEST 2007, Michael Riepe * acconfig.h: add ENABLE_SANITY_CHECKS. * aclocal.m4: fix --enable-gnu-names. * configure.in: add --enable-sanity-checks. fix --enable-extended-format. * lib/data.c: add _elf_sanity_checks variable. * lib/private.h: declare _elf_sanity_checks and constants. * lib/strptr.c: enable/disable sanity check. * lib/version.c: set _elf_sanity_checks from $LIBELF_SANITY_CHECKS. Fri Jun 29 23:27:15 CEST 2007, Michael Riepe * lib/Makefile.in: improved make -jX patch. Wed Jun 20 08:04:30 CEST 2007, Michael Riepe * lib/Makefile.in: add "make -jX install" patch by Joel Martin. Tue Nov 21 21:21:12 CET 2006, Michael Riepe * lib/Makefile.w32: fix Windows compilation bug. Thu Sep 7 17:55:42 CEST 2006, Michael Riepe * acconfig.h: * aclocal.m4: * configure.in: * lib/config.h.w32: * lib/gelf.h: * lib/private.h: * lib/sys_elf.h.in: * lib/sys_elf.h.w32: port to QNX Neutrino, thanks to darkelf. Fri Aug 25 14:46:34 CEST 2006, Michael Riepe * Makefile.in: add trackinstall target. Mon Aug 21 20:26:47 CEST 2006, Michael Riepe * Makefile.in: drop w32 from DISTSUBDIRS. * lib/Makefile.in: add new files to DISTFILES. * lib/Makefile.w32: * lib/build.bat: * lib/config.h.w32: * lib/libelf.def: * lib/sys_elf.h.w32: adopted from w32 subdirectory. Fri Aug 18 02:04:58 CEST 2006, Michael Riepe * lib/begin.c: let getnum return a size_t. * lib/libelf.h: replace __value because it's a reserved word in VC++ 2005. * lib/nlist.c: don't declare open() on W32. * lib/private.h: use on W32. * w32/Makefile.w32: fix W32 DLL build. * w32/build.bat: add more examples for vcvars32.bat location. Fri Jul 28 00:56:00 CEST 2006, Michael Riepe * lib/32.xlatetof.c: * lib/64.xlatetof.c: check for dsize == -1. * lib/verdef.h: * lib/verneed.h: improve section translators. Tue Jul 11 18:53:00 CEST 2006, Michael Riepe * w32/libelf.def: add missing functions. Sat Jul 8 00:50:00 CEST 2006, Michael Riepe * VERSION: bump up to 0.8.9. Sat Jul 8 00:17:00 CEST 2006, Michael Riepe * lib/32.newehdr.c: make return value compatible with Solaris. * lib/32.newphdr.c: handle 65535+ segments. make return value compatible with Solaris. * lib/cook.c: handle 65535+ segments. * lib/elf_repl.h: add new definitions. * lib/libelf.h: add/rename functions. * lib/newscn.c: fix section creation (was broken in 0.8.7). * lib/private.h: add SHN_XINDEX and PN_XNUM in case they're missing. centrally define LIBELF_SUCCESS and LIBELF_FAILURE. * lib/update.c: handle 65535+ segments. use elf->e_phnum internally. * lib/x.elfext.c: add elf_getphnum(). rename elfx_get_shnum() and elfx_get_shstrndx(). make return values compatible with Solaris. Fri Jul 7 19:01:04 CEST 2006, Michael Riepe * VERSION: bump up to 0.8.8. Fri Jul 7 18:27:25 CEST 2006, Michael Riepe * lib/Makefile.in: add lib/x.elfext.c. * lib/libelf.h: add functions from lib/x.elfext.c. * lib/newscn.c: simplify _elf_update_shnum(). Tue Apr 25 16:26:39 CEST 2006, Michael Riepe * lib/gelf.h: * lib/libelf.h: * lib/nlist.h: * lib/private.h: add workaround for broken compilers. Mon Apr 24 16:24:32 CEST 2006, Michael Riepe * po/de.po: update. Fri Apr 21 19:17:46 CEST 2006, Michael Riepe * acconfig.h: * configure.in: add --enable-extended-format. * aclocal.m4: search for msgmerge. * lib/cook.c: change _elf_item buffering. handle extended format (with unusual entsize). * lib/errors.h: add ERROR_EHDR_SHENTSIZE and ERROR_EHDR_PHENTSIZE. * po/Makefile.in: use msgmerge instead of tupdate. Thu Oct 20 21:08:02 CEST 2005, Michael Riepe * lib/input.c: * lib/update.c: handle partial reads and writes. Tue Aug 16 01:48:17 CEST 2005, Michael Riepe * lib/begin.c: add workaround for archive member misalignment. * VERSION: bump up to 0.8.7 Tue Jul 19 11:56:26 CEST 2005, Michael Riepe * README: * w32/build.bat: update. * w32/libelf.def: fix syntax. Tue Jun 28 00:31:24 CEST 2005, Michael Riepe * Makefile.in: remove superfluous slash. Tue Jun 21 03:58:47 CEST 2005, Michael Riepe * lib/Makefile.in: get rid of lib/pic subdir. Sat May 21 17:39:28 CEST 2005, Michael Riepe * (global): remove my e-mail address from all copyright clauses. Sun May 15 23:08:30 CEST 2005, Michael Riepe * configure.in: check if $CC can copile . * lib/private.h: #include before (fixes glibc bug). Sun May 8 23:40:35 CEST 2005, Michael Riepe * Makefile.in: add instroot variable. install libelf.pc. * configure.in: create libelf.pc. Sun Mar 20 15:41:22 CET 2005, Michael Riepe * (global): change my e-mail address. Fri Jan 28 23:09:57 CET 2005, Michael Riepe * po/Makefile.in: use modified gmo2msg. * po/gmo2msg.c: make gmo2msg output more portable. Thu Oct 7 11:37:09 CEST 2004, Michael Riepe * lib/cook.c: only use Elf64_Shdr if __LIBELF64 is true. Fri Sep 17 02:55:47 CEST 2004, Michael Riepe * lib/elf_repl.h: add some ABI and architecture definitions. * w32/config.h: manual update. Sat Jul 10 17:33:15 CEST 2004, Michael Riepe * acconfig.h: * aclocal.m4: * lib/errmsg.c: check for dgettext, not for gettext. * configure.in: check for -lintl. * po/Makefile.in: use -lintl when building gmo2msg. Sun Jul 4 23:57:21 CEST 2004, Michael Riepe * Makefile.in: add w32 subdir. * README: update for 0.8.6. * configure.in: create w32/Makefile. Sat Jul 3 20:42:00 CEST 2004, Michael Riepe * lib/32.xlatetof.c: * lib/64.xlatetof.c: * lib/Makefile.in: give up on . * lib/getarsym.c: Wed Jun 23 01:07:46 CEST 2004, Michael Riepe * config.guess: * config.sub: update from FSF. Tue May 4 22:02:01 CEST 2004, Michael Riepe * config.guess: * config.sub: update from FSF. Tue Mar 30 15:09:00 CEST 2004, Michael Riepe * lib/32.xlatetof.c: * lib/64.xlatetof.c: * lib/Makefile.in: use to work around W32 compiler problems. Mon Feb 16 06:19:11 CET 2004, Michael Riepe * Makefile.in: generate old-format tar file. Sat Jan 24 03:42:39 CET 2004, Michael Riepe * lib/32.xlatetof.c: * lib/64.xlatetof.c: replace NULL with 0 -- some compilers don't like (void*). * lib/getarsym.c: * lib/nlist.c: add cast to suppress compiler warning. Fri Jan 23 05:11:46 CET 2004, Michael Riepe * lib/update.c: #undef max before #define. Wed Jan 21 18:15:50 CET 2004, Michael Riepe * lib/begin.c: better support for Cygwin .lib archive files. Mon Jan 19 15:36:21 CET 2004, Michael Riepe * lib/libelf.h: * lib/memset.c: include unconditionally. Fri Jan 16 23:13:25 CET 2004, Michael Riepe * aclocal.m4: support Intel C Compiler. * lib/32.newehdr.c: * lib/32.newphdr.c: remove elf->e_free_ehdr and elf->e_free_phdr. * lib/cook.c: always allocate ehdr and phdr. * lib/end.c: always deallocate ehdr and phdr. * lib/private.h: remove elf->e_free_ehdr and elf->e_free_phdr. change valid_type to suppress compiler warning. * lib/update.c: not necessary to update elf->e_ehdr and elf->e_phdr. Thu Jan 15 22:43:00 CET 2004, Michael Riepe * VERSION: bump up to 0.8.6. * configure.in: check for __int64. * lib/32.xlatetof.c: * lib/64.xlatetof.c: * lib/gelf.h: * lib/nlist.h: test _WIN32 macro. * lib/begin.c: add (off_t) cast to suppress compiler warning. * lib/libelf.h: * lib/memset.c: conditionally include for size_t. * lib/nlist.c: declare open() on W32 systems. Tue Dec 16 20:02:30 CET 2003, Michael Riepe * Makefile.in: let disttest target make dist again. Sat Dec 13 16:14:31 CET 2003, Michael Riepe * lib/update.c: call lseek before ftruncate. Fri Dec 5 16:25:16 CET 2003, Michael Riepe * aclocal.m4: add explanation for --enable-maintainer-mode * lib/Makefile.in: * po/Makefile.in: add instroot make variable * README: add hint how to use it Thu Nov 6 17:35:00 CET 2003, Michael Riepe * Makefile.in: * lib/Makefile.in: * po/Makefile.in: add check targets add MANIFEST to distribution * aclocal.m4: add mr_PACKAGE macro * configure.in: use mr_PACKAGE macro Sat Oct 25 15:22:59 CEST 2003, Michael Riepe * lib/elf_repl.h: add EM_SPARC64 Thu Oct 9 23:08:56 CEST 2003, Michael Riepe * lib/x.movscn.c: * lib/x.remscn.c: verify that file is really an ELF file Wed Oct 8 17:10:09 CEST 2003, Michael Riepe * config.guess: * config.sub: latest versions from FSF Sat May 24 18:55:14 CEST 2003, Michael Riepe * config.guess: latest version from FSF * lib/Makefile.in: * lib/libelf.h: * lib/x.movscn.c: * lib/x.remscn.c: add elfx_movscn() and elfx_remscn() * lib/newscn.c: update e_shnum properly * lib/private.h: declare _elf_update_shnum() Fri May 23 18:25:48 CEST 2003, Michael Riepe * aclocal.m4: provide name suffixes only * lib/Makefile.in: use name suffixes Fri May 23 01:24:26 CEST 2003, Michael Riepe * README: update for 0.8.5 add section about LFS * config.guess: latest version from FSF * configure.in: * lib/Makefile.in: use local pic object directory * lib/checksum.c: detect d_buf == NULL Sun May 18 16:49:10 CEST 2003, Michael Riepe * VERSION: bump up to 0.8.5 * lib/strptr.c: make elf_strptr() work safely with fragmented string tables * lib/errors.h: new error code and message for elf_strptr() * po/de.po: * po/libelf.po: regenerated Mon May 12 15:29:12 CEST 2003, Michael Riepe * lib/update.c: improved fix for elf_update `null buffer' bug Mon May 12 00:34:44 CEST 2003, Michael Riepe * config.guess: * config.sub: latest versions from FSF Sun May 11 01:44:06 CEST 2003, Michael Riepe * lib/verdef.h: * lib/verneed.h: fix elf_update `null buffer' error. Thanks to Bart Trojanowski who reported the bug. Wed May 7 20:26:17 CEST 2003, Michael Riepe * configure.in: fix maintainer mode default * lib/verdef.h: * lib/verneed.h: only check d_buf if there is at least one element Mon Mar 31 17:08:04 CEST 2003, Michael Riepe * VERSION: bump up to 0.8.4 Sun Mar 23 16:06:43 CET 2003, Michael Riepe * configure.in: fix --enable-compat Thu Feb 27 14:35:12 CET 2003, Michael Riepe * Makefile.in: add `test-dist' target * lib/errors.h: new error code * po/de.po: * po/libelf.pot: regenerated Wed Feb 26 17:48:58 CET 2003, Michael Riepe * config.guess: * config.sub: latest versions from FSF Wed Jan 15 22:50:53 CET 2003, Michael Riepe * lib/begin.c: fix overflow check Sun Jan 12 04:27:31 CET 2003, Michael Riepe * configure.in: prefer int for __libelf_i32_t (if int has 32 bits) Thu Jan 2 17:40:22 CET 2003, Michael Riepe * README: update for 0.8.3 * config.guess: * config.sub: update from ftp.gnu.org * lib/cook.c: require space for one SHDR only * lib/elf_repl.h: fix DT_ENCODING value Tue Dec 31 16:27:19 CET 2002, Michael Riepe * lib/cook.c: honor ELF extensions for >= 0xff00 sections * lib/elf_repl.h: add definitions from lates ELF spec * lib/errors.h: * po/libelf.pot: * po/de.po: new error message * lib/private.h: define missing pieces * lib/update.c: handle >= 0xff00 sections Mon Dec 23 00:23:20 CET 2002, Michael Riepe * lib/Makefile.in: fix dependencies. * lib/cook.c: add quirks mode for broken 64-bit architectures. * lib/update.c: do not override sh_entsize unless it's set to 0. * lib/verdef.h: * lib/verneed.h: work around possible SEGV in translation routines. Sat Dec 14 23:33:10 CET 2002, Michael Riepe * ChangeLog: add missing entries for 0.8.2 release. * VERSION: bump up to 0.8.3. * lib/32.xlatetof.c: * lib/64.xlatetof.c: * lib/verdef.h: * lib/verneed.h: fix ISO C violations (required for MacOS X). * po/gmo2msg.c: create SUSv3 compliant .msg files. Thu Jun 11 19:00:19 CEST 2002, Michael Riepe * README: update for 0.8.2. * VERSION: bump up to 0.8.2. * lib/32.xlatetof.c: * lib/64.xlatetof.c: fix typos in for loop. * lib/nlist.c: add O_BINARY to file mode (defaults to 0 on systems that lack it). Tue Dec 25 14:42:51 CET 2001, Michael Riepe * VERSION: set version to 0.8.0. * README: update version. Tue Oct 30 17:05:03 CET 2001, Michael Riepe * Makefile.in: use uid/gid=0 when creating the distribution tar file. Mon Oct 15 23:47:10 CEST 2001, Michael Riepe * configure.in: check for and . create ./pic when configuring. * lib/Makefile.in: move .o to ../pic/$@, not ../pic. * lib/begin.c: define struct ar_hdr and friends if is missing. use lseek(..., SEEK_END). * lib/input.c: use lseek(..., SEEK_SET). * lib/nlist.c: include conditionally. define O_RDONLY if it is missing. * lib/private.h: define SEEK_{SET,CUR,END} if they're missing. * lib/update.c: explicitly pass file descriptor to _elf_output(). use lseek(..., SEEK_SET). Tue Oct 9 22:46:01 CEST 2001, Michael Riepe * aclocal.m4: remove superfluous case. Mon Oct 8 17:56:04 CEST 2001, Michael Riepe * lib/opt.delscn.c: handle versioning sections properly. Mon Oct 8 17:02:43 CEST 2001, Michael Riepe * lib/32.xlatetof.c: * lib/64.xlatetof.c: override encoding when calculating the destination buffer size for translation to a file. Sun Oct 7 21:31:01 CEST 2001, Michael Riepe * configure.in: drop OBJS64; always compile 64-bit sources. * lib/32.xlatetof.c: * lib/64.xlatetof.c: add translators for versioning structures. * lib/Makefile.in: drop OBJS64; add versioning support files. * lib/errors.h: add error codes for versioning support. * lib/gelfehdr.c: * lib/gelfphdr.c: * lib/gelfshdr.c: * lib/gelftrans.c: * lib/swap64.c: guard code with `#if __LIBELF64'. * lib/private.h: add translator declarations. * po/de.po: * po/libelf.pot: add error messages for versioning support. Sun Oct 7 16:54:15 CEST 2001, Michael Riepe * acconfig.h: * configure.in: improve auto-configuration. * lib/Makefile.in: * po/Makefile.in let users override distdir. * lib/cook.c: improved bugfix based on new auto-configuration. * lib/getdata.c: prepare src first to prevent SEGV. * lib/private.h: * lib/update.c: cosmetic changes. Sun Oct 7 05:50:19 CEST 2001, Michael Riepe * configure.in: * lib/cook.c: fix compilation problem on Linux (SHT_SUNW_ver* undefined). * lib/32.xlatetof.c: * lib/64.xlatetof.c: make translator functions calculate the destination size. add _elf32_xltsize and _elf64_xltsize entry points. * lib/private.h: declare _elf32_xltsize and _elf64_xltsize. * lib/getdata.c: * lib/update.c: use _elf32_xltsize and _elf64_xltsize. Fri Oct 5 20:35:31 CEST 2001, Michael Riepe * lib/elf_repl.h: add DT_VERSYM. * lib/ext_types.h: correct type names. * lib/libelf.h: add ELF_T_VDEF and ELF_T_VNEED. * lib/32.fsize.c: add table entries for versioning structures. * lib/cook.c: replace _elf_scn_types[] with _elf_scn_type(). * lib/private.h: likewise; also remove valid_scntype() macro. * lib/update.c: call _elf_scn_type(), but do not set sh_entsize for ELF_T_VDEF / ELF_T_VNEED. * acconfig.h: * lib/sys_elf.h.in: added __LIBELF_SYMBOL_VERSIONS. * configure.in: check for symbol versioning definitions. * lib/Makefile.in: added gelf.h dependency. Wed Oct 3 22:46:33 CEST 2001, Michael Riepe * lib/swap64.c: new file; separate 64-bit functions. * lib/64.xlatetof.c: remove 64-bit conversion functions. * lib/byteswap.h: replace casts to long / unsigned long. add prototypes for 64-bit conversion functions. * configure.in: * lib/Makefile.in: add lib/swap64.c. * lib/ext_types.h: add type definitions for versioning. * lib/elf_repl.h: * lib/gelf.h: cosmetic changes. Wed Oct 3 00:00:27 CEST 2001, Michael Riepe * lib/elf_repl.h: added lots of new definitions. * lib/gelf.h: * lib/libelf.h: * lib/sys_elf.h.in: cosmetic changes. Fri Sep 28 22:42:36 CEST 2001, Michael Riepe * lib/32.xlatetof.c: * lib/64.xlatetof.c: remove `const' when compiling with -fPIC. Fri Sep 28 20:14:42 CEST 2001, Michael Riepe * README: add pointers to documentation. * lib/64.xlatetof.c: fixed conversion thinko. (Jakub Jelinek found this - thanks!) * lib/gelf.h: * lib/32.fsize.c: add gelf_msize. * lib/libelf.h: add comment that elf{32,64}_checksum is missing. Tue Sep 11 02:43:47 CEST 2001, Michael Riepe * README: corrected typo. * lib/cook.c: * lib/private.h: * lib/update.c: replaces _ELFxx_ALIGN_xHDR with _fsize() call. Sun Sep 2 20:58:09 CEST 2001, Michael Riepe * Makefile.in: * configure.in: * lib/Makefile.in: * po/Makefile.in: add maintainer mode. Sat Sep 1 15:11:42 CEST 2001, Michael Riepe * lib/sys_elf.h.in: add more fixes for broken files. Sat Sep 1 05:01:16 CEST 2001, Michael Riepe * ChangeLog: major update. Yes, I'm back. * COPYING.LIB: updated version from FSF. * README: updated for 0.7.1. Thu Apr 20 17:09:41 CEST 2000, Michael Riepe * lib/gelftrans.c: * lib/elf_repl.h: add explicit casts to ELF64_R_SYM and ELF64_R_INFO. Thu Apr 13 20:15:45 CEST 2000, Michael Riepe * lib/update.c: better checks for overlapping sections. * lib/errors.h: * po/de.po: * po/libelf.pot: new error message. Thu Apr 6 19:15:46 CEST 2000, Michael Riepe * lib/strptr.c: rename `sd' variable. Fri Mar 31 20:11:14 CEST 2000, Michael Riepe * Makefile.in: also pass CPPFLAGS and LDFLAGS to config.status. Fri Mar 31 20:02:55 CEST 2000, Michael Riepe * aclocal.m4: add -DPIC define when building position-independent code. * lib/32.xlatetof.c: * lib/64.xlatetof.c: * lib/errmsg.c: make array members const when PIC is undefined. Fri Mar 31 14:42:32 CEST 2000, Michael Riepe * lib/32.newehdr.c: make _elf_newehdr() function private again. * lib/32.newphdr.c: make _elf_newphdr() function private again. * lib/strptr.c: add support for 64-bit ELF format. Wed Mar 29 18:49:43 CEST 2000, Michael Riepe * lib/gelfshdr.c: remove ELF class check. Mon Mar 27 01:24:50 CEST 2000, Michael Riepe * lib/gelf.h: #include when compiling libelf. Sun Mar 26 15:02:54 CEST 2000, Michael Riepe * lib/private.h: #include header file. * lib/gelfehdr.c: move gelf_newehdr() function to lib/32.newehdr.c. * lib/gelfphdr.c: move gelf_newphdr() function to lib/32.newphdr.c. * lib/32.newehdr.c: add gelf_newehdr() function. * lib/32.newphdr.c: add gelf_newphdr() function. * lib/gelfshdr.c: * lib/gelftrans.c: remove explicit include. Sun Mar 26 06:22:20 CEST 2000, Michael Riepe * acconfig.h: * configure.in: * lib/private.h: * lib/sys_elf.h.in: rename NEED_LINK_H to __LIBELF_NEED_LINK_H. * lib/32.newehdr.c: make _elf_newehdr() function public. * lib/32.newphdr.c: make _elf_newphdr() function public. * lib/gelf.h: include if needed. choke if 64-bit is not supported. add generic versions of ELF32_* and ELF64_* macros. * lib/gelftrans.c: define ELF32_R_* and ELF64_R_* macros (missing on some systems). Sun Mar 26 05:27:15 CEST 2000, Michael Riepe * configure.in: add check for existing header. build new source files when 64-bit is enabled. * lib/Makefile.in: add new source files. make install-compat if --enable-compat was given. * po/de.po: * po/libelf.pot: new error messages. Sun Mar 26 05:00:20 CEST 2000, Michael Riepe * Makefile.in: * lib/Makefile.in: * po/Makefile.in: remove Makefile last in `make distclean'. * aclocal.m4: explicitly state the default in --enable-* help texts. * configure.in: set ALL_LINGUAS automatically. add `--enable-compat' option. * lib/private.h: add sd_scn member to struct Scn_Data. * lib/cook.c: * lib/end.c: * lib/getdata.c: * lib/newdata.c: * lib/opt.delscn.c: * lib/rawdata.c: * lib/update.c: handle new sd_scn member. * lib/gelf.h: new public header file. * lib/gelfehdr.c: new file, implements the gelf_getehdr(), gelf_update_ehdr() and gelf_newehdr() functions. * lib/gelfphdr.c: new file, implements the gelf_getphdr(), gelf_update_phdr() and gelf_newphdr() functions. * lib/gelfshdr.c: new file, implements the gelf_getshdr() and gelf_update_shdr() functions. * lib/gelftrans.c: new file, implements the gelf_getsym(), gelf_update_sym(), gelf_getdyn(), gelf_update_dyn(), gelf_getrela(), gelf_update_rela(), gelf_getrel() and gelf_update_rel() functions. * lib/begin.c: add gelf_getclass() function. * lib/32.fsize.c: add gelf_fsize() function. * lib/32.getphdr.c: make _elf_getphdr() function public. * lib/64.xlatetof.c: add gelf_xlatetom() and gelf_xlatetof() functions. remove `const' from array members. * lib/errors.h: add GElf error messages. * po/de.po: * po/libelf.pot: new error message. Thu Nov 4 21:17:34 CET 1999, Michael Riepe * lib/32.xlatetof.c: * lib/errmsg.c: * po/gmo2msg.c: remove `const' from array members. Thu Nov 4 20:16:36 CET 1999, Michael Riepe * lib/Makefile.in: add assert.c; remove stamp-h in `make distclean'. * lib/assert.c: new file, implements the __elf_assert() function. * lib/private.h: use __elf_assert() in elf_assert() macro. Wed Mar 17 16:21:02 CET 1999, Michael Riepe * configure.in: add "de" to ALL_LINGUAS. * lib/elf_repl.h: lots of new #defines. * lib/hash.c: * lib/libelf.h: elf_hash() takes an `const unsigned char *'. * po/gmo2msg.c: copy comments from .gmo file. Fri Mar 5 16:28:08 CET 1999, Michael Riepe * VERSION: set version to 0.7.1. * po/de.po: new file. Fri Nov 27 22:24:00 MET 1998, Michael Riepe * lib/memset.c: rename and rewrite. * lib/private.h: rename __memset. Tue Aug 25 17:17:18 MEST 1998, Michael Riepe * aclocal.m4: remove superfluous #include. * lib/32.xlatetof.c: * lib/64.xlatetof.c: fix for picky instances of cpp(1). Sun Aug 23 18:26:53 MEST 1998, Michael Riepe * aclocal.m4: * lib/Makefile.in: add DEPSHLIBS, set to -lc for Linux. * README: add DEPSHLIBS description. Sat Aug 22 15:50:41 MEST 1998, Michael Riepe * lib/begin.c: add workaround for broken ar(1) & friends. * lib/32.getshdr.c: fix typo. Thu Aug 6 18:11:52 MEST 1998, Michael Riepe * lib/getdata.c: fixed SEGV bug. * lib/cook.c: * lib/getdata.c: * lib/newdata.c: * lib/rawdata.c: * lib/private.h: removed sd_scn and (Elf_Data*) casts. Fri Jun 12 21:24:50 MEST 1998, Michael Riepe * lib/*.c: move rcsid[] after . * lib/32.xlatetof.c: * lib/64.xlatetof.c: replace broken Exn() macro with Cat2(). * lib/64.xlatetof.c: change `char*' to `unsigned char*'. * lib/private.h: add `extern char *realloc();'. * aclocal.m4: * configure.in: remove leading spaces in cpp directives. Sun Jun 7 16:02:31 MEST 1998, Michael Riepe * README: update for 0.7.0 release. Sun Jun 4 15:26:49 MEST 1998, Michael Riepe * acconfig.h: add __libelf64* and __libelf_*_t. * configure.in: clean up, add checks for 64-bit support. * lib/64.xlatetof.c: new file, based on lib/32.xlatetof.c. * lib/Makefile.in: add target for 64.xlatetof.o. * lib/cook.c: check for 32-bit overflow. * lib/elf_repl.h: * lib/ext_types.h: add 64-bit data types. * lib/private.h: add 64-bit definitions. * lib/sys_elf.h.in: add __LIBELF64* and __libelf_*_t. * lib/update.c: add full 64-bit support. Mon Jun 1 16:29:07 MEST 1998, Michael Riepe * VERSION: change version to 0.7.0. * configure.in: add lib/sys_elf.h to AC_CONFIG_HEADER. new option --disable-elf64. * Makefile.in: add target for lib/sys_elf.h. * acconfig.h: add __LIBELF_HEADER_ELF_H. * lib/Makefile.in: add sys_elf.h(.in). * lib/32.fsize.c: * lib/32.getehdr.c: * lib/32.getphdr.c: * lib/32.getshdr.c: * lib/32.newehdr.c: * lib/32.newphdr.c: * lib/cook.c: * lib/getdata.c: * lib/libelf.h: * lib/newscn.c: * lib/nlist.c: * lib/opt.delscn.c: * lib/private.h: * lib/update.c: merged with 64bit code. * lib/begin.c: * lib/input.c: bug fixes. Fri Aug 1 19:33:33 MEST 1997, Michael Riepe * VERSION: change version to 0.6.5. * lib/libelf.h: add declaration for elf_memory. * lib/private.h: add e_memory flag. * lib/begin.c: add elf_memory, change archive freezing logic. * lib/end.c: do not free e_data if e_memory is set. Tue Oct 22 21:31:56 MEST 1996, Michael Riepe * (all files): add RCS Id, import to CVS. * Makefile.in: pass $(CC) to config.status. * README: change for upcoming 0.6.5 release. * aclocal.m4 (mr_ENABLE_NLS): add --enable-gnu-names option * configure.in: change search order for . * lib/begin.c (_elf_arhdr): add check for truncated archive member. * lib/cook.c (_elf32_cook): add checks for misaligned tables. * lib/errors.h: fix wrong error message (ERROR_WRONLY). add error messages for misaligned tables. * lib/private.h: add constants for table alignments. * po/Makefile.in: do not run mkinstalldirs directly, use $(SHELL). * po/libelf.pot: rebuild. Tue Jul 30 17:22:41 MET DST 1996, Michael Riepe * VERSION: change version to 0.6.4. * Makefile.in: add DISTSUBDIRS. add po/Makefile target. * po/Makefile.in: * po/gmo2msg.c: * po/libelf.pot: * po/stamp-po: new files. * aclocal.m4 (mr_ENABLE_NLS): add MSGFILES. set GMOFILES, MSGFILES and POFILES even if NLS is disabled. * configure.in: add ALL_LINGUAS. * lib/nlist.c: call elf_errno() to clear pending error. Tue Jul 28 23:53:44 MET DST 1996, Michael Riepe * VERSION: change version to 0.6.3. * configure.in: fix creation of sys_elf.h. * lib/Makefile.in: move elf_repl.h to PRIVHDRS. do not depend on HDRS and AUXHDRS. Sat Jul 27 18:27:09 MET DST 1996, Michael Riepe * VERSION: change version to 0.6.2. * Makefile.in: remove support from SUBDIRS. remove subdirs/Makefile target. * acconfig.h: add ENABLE_DEBUG. remove HAVE_NLS. * aclocal.m4: add mr_ENABLE_DEBUG. * configure.in: use mr_ENABLE_DEBUG. * lib/Makefile.in: add LD variable. add elf_repl.h to DISTFILES. * lib/libelf.h: add check for __LIBELF_INTERNAL__. * lib/private.h: #define __LIBELF_INTERNAL__. use ENABLE_DEBUG. * support/elf.h: move to lib/elf_repl.h. * support/Makefile.in: remove. Sat Jul 27 06:25:23 MET DST 1996, Michael Riepe * VERSION: change version to 0.6.1. * aclocal.m4: add shared library support for sparc-sun-solaris2. * lib/libelf.h.in: remove. * lib/libelf.h: new file. * configure.in: remove broken check for existing installation. remove @install_headers@ and @elf_h@. do not build libelf.h from libelf.h.in. create lib/sys_elf.h. * lib/Makefile.in: remove libelf.h and $(AUXHDRS) targets. remove libelf.h.in from DISTFILES. add libelf.h to DISTFILES. add dummy_shlib target for broken make. Sat Jul 27 01:01:45 MET DST 1996, Michael Riepe * VERSION: change version to 0.6.0. * lib: new directory. * config.sub: * config.guess: new files. * shared: * shared/Makefile.in: remove. * aclocal.m4: * configure.in: add shared library check. * Makefile.in: * lib/Makefile.in: change for new directory structure. integrate shared library support. * Makefile.in: remove libelf.lsm from DISTFILES. * libelf.lsm: remove. Thu Jul 25 19:35:05 MET DST 1996, Michael Riepe * VERSION: change version to 0.5.9. * aclocal.m4: rewrite NLS check. Tue Jul 23 18:59:05 MET DST 1996, Michael Riepe * Makefile.in: add install-compat and uninstall-compat targets. * configure.in: * aclocal.m4: fix check for NLS support. * acconfig.h: add HAVE_CATGETS and HAVE_GETTEXT. * errmsg.c (elf_errmsg): use HAVE_GETTEXT. Sun Jul 21 22:52:02 MET DST 1996, Michael Riepe * VERSION: change version to 0.5.8. * private.h: * 32.getshdr.c: * cook.c: * end.c: * newscn.c: * opt.delscn.c: * update.c: change allocation of section headers. * errors.h: fix speeling error. Sat Jul 13 22:51:16 MET DST 1996, Michael Riepe * VERSION: change version to 0.5.7. * private.h: add e_dsize member to struct Elf. * begin.c (elf_begin): set e_dsize. * update.c (_elf32_update_pointers): never let e_data become shorter than e_dsize bytes. use correct base pointer. Sat Jun 15 16:28:50 MET DST 1996, Michael Riepe * 32.xlatetof.c: change `char' to `unsigned char'. Tue May 28 19:00:30 MET DST 1996, Michael Riepe * Makefile.in: HP-UX make wants non-empty target, change it. add targets for TAGS and libelf.po. * errors.h: mark strings for GNU gettext. * mkmsgs: recognize new errors.h format. * errmsg.c (elf_errmsg): add gettext support. Mon May 27 20:30:30 MET DST 1996, Michael Riepe * VERSION: change version to 0.5.6. * aclocal.m4: * configure.in: use new AC_CACHE_CHECK macro. * Makefile.in: * shared/Makefile.in: use @...dir@. * Makefile.in: pass $(SRCS) and $(OBJS) to shared/Makefile. Sat May 25 01:00:15 MET DST 1996, Michael Riepe * update.c (elf_update): assert e_data is malloc'ed. * begin.c (elf_begin): mmap e_data if possible. * end.c (elf_end): munmap e_data if necessary. * input.c (_elf_mmap): new function. * private.h: add _elf_mmap and e_unmap_data. * errmsg.c: make pointer array constant. Thu May 23 19:24:47 MET DST 1996, Michael Riepe * update.c (elf_update): mmap(MAP_SHARED) wants non-empty file. Tue May 21 15:33:07 MET DST 1996, Michael Riepe * begin.c (elf_begin): re-read memory image of archive members. * cook.c (_elf32_item): * getdata.c (_elf32_cook_scn): always use memory image. * update.c (_elf_update): use mmap if possible. * configure.in: check for mmap. Mon May 20 18:15:54 MET DST 1996, Michael Riepe * nlist.c (_elf_nlist): fix broken st_name range check. * update.c (_elf32_write): check status of elf_getdata. * cook.c (_elf32_item): * getdata.c (_elf32_cook_scn): use memory image when file is not an archive member. * rawdata.c (elf_rawdata): copy raw image rather than referencing it. Wed May 15 20:04:39 MET DST 1996, Michael Riepe * rawdata.c (elf_rawdata): use raw image if it is present. * cntl.c (elf_cntl): fix archive handling, ignore ELF_C_FDREAD for non-ELF files. Fri May 10 17:16:44 MET DST 1996, Michael Riepe * begin.c (_elf_arhdr): fix handling of long archive member names. * configure.in: move version information to external file. * Makefile.in: add VERSION to DISTFILES. * VERSION: new file. Sat May 4 20:56:43 MET DST 1996, Michael Riepe * configure.in: change version to 0.5.5. * Makefile.in: add libelf.lsm and ChangeLog to DISTFILES. * rawdata.c: reorder cases to avoid unnecessary malloc/free. * all files: update copyright phrase. * ChangeLog: * libelf.lsm: new files. Sun Oct 29 19:34:00 MET 1995, Michael Riepe * configure.in: change version to 0.5.3. * Makefile.in: * shared/Makefile.in: add opt.delscn.c. * libelf.h.in: add declaration for elf_delscn. * opt.delscn.c: new file. libelf-0.8.13.orig/libelf.pc.in0000644000000000000000000000037611232422350014663 0ustar rootrootprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: @PACKAGE@ Description: ELF object file access library Version: @VERSION@ Requires: Conflicts: Libs: -L${libdir} -lelf Cflags: -I${includedir}/libelf -I${includedir} libelf-0.8.13.orig/Makefile.in0000644000000000000000000001342411015476664014560 0ustar rootroot# Makefile for libelf. # Copyright (C) 1995 - 2005 Michael Riepe # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # @(#) $Id: Makefile.in,v 1.30 2008/05/23 08:17:56 michael Exp $ instroot = prefix = @prefix@ exec_prefix = @exec_prefix@ libdir = @libdir@ pkgdir = $(libdir)/pkgconfig MV = mv -f RM = rm -f LN_S = @LN_S@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ CC = @CC@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ # no user serviceable parts below PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ VPATH = @srcdir@ SUBDIRS = lib @POSUB@ DISTSUBDIRS = lib po DISTFILES = \ acconfig.h aclocal.m4 ChangeLog config.guess config.h.in \ config.sub configure configure.in COPYING.LIB INSTALL install-sh \ Makefile.in mkinstalldirs README stamp-h.in VERSION libelf.pc.in all: all-recursive all-local check: check-recursive check-local install: install-recursive install-local uninstall: uninstall-recursive uninstall-local mostlyclean: mostlyclean-recursive mostlyclean-local clean: clean-recursive clean-local distclean: distclean-recursive distclean-local maintainer-clean: maintainer-clean-recursive maintainer-clean-local install-compat uninstall-compat: cd lib && $(MAKE) $@ all-recursive check-recursive install-recursive uninstall-recursive \ clean-recursive distclean-recursive mostlyclean-recursive \ maintainer-clean-recursive: @subdirs="$(SUBDIRS)"; for subdir in $$subdirs; do \ target=`echo $@|sed 's,-recursive,,'`; \ echo making $$target in $$subdir; \ (cd $$subdir && $(MAKE) $$target) || exit 1; \ done all-local: check-local: install-local: $(srcdir)/mkinstalldirs libelf.pc $(SHELL) $(srcdir)/mkinstalldirs $(instroot)$(pkgdir) $(INSTALL_DATA) libelf.pc $(instroot)$(pkgdir) uninstall-local: $(RM) $(instroot)$(pkgdir)/libelf.pc mostlyclean-local: $(RM) *~ core errlist clean-local: mostlyclean-local distclean-local: clean-local $(RM) config.cache config.h config.log config.status stamp-h $(RM) Makefile $(RM) libelf.pc maintainer-clean-local: distclean-local @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." $(RM) config.h.in configure stamp-dist $(RM) -r $(distdir) # maintainer only MAINT = @MAINT@ distdir = $(PACKAGE)-$(VERSION) DISTPERMS = --owner=root --group=root --numeric-owner $(MAINT)dist: ./stamp-dist $(MAINT)./stamp-dist: $(DISTFILES) $(RM) -r $(distdir) mkdir $(distdir) files="$(DISTFILES)"; for file in $$files; do \ ln $(srcdir)/$$file $(distdir) || \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ done subdirs="$(DISTSUBDIRS)"; for subdir in $$subdirs; do \ (cd $$subdir && $(MAKE) dist) || exit 1; \ done cd $(distdir) && \ find . -type f ! -name MANIFEST -exec wc -c {} \; | \ sed 's, \./, ,' | sort -k2 >MANIFEST -$(RM) $(distdir).tar.gz.bak $(PACKAGE).tar.gz -$(MV) $(distdir).tar.gz $(distdir).tar.gz.bak tar cvohfz $(distdir).tar.gz $(DISTPERMS) $(distdir) $(LN_S) $(distdir).tar.gz $(PACKAGE).tar.gz $(RM) stamp-dist && echo timestamp > stamp-dist $(MAINT)check-dist: $(RM) -r disttest mkdir disttest @echo 'unset CC CFLAGS CPPFLAGS LDFLAGS LIBS' >disttest/config.site cd disttest && CONFIG_SITE=config.site ../$(distdir)/configure $(MAKE) -C disttest $(MAKE) -C disttest check $(MAKE) -C disttest dist .PHONY: tags tags: rm -f tags ctags lib/*.c lib/*.h TRACKFS = trackfs trackinstall: $(TRACKFS) -l install.log -b backup.cpio $(MAKE) install # For the justification of the following Makefile rules, see node # `Automatic Remaking' in GNU Autoconf documentation. $(MAINT)$(srcdir)/configure: $(srcdir)/configure.in $(srcdir)/aclocal.m4 $(RM) $(srcdir)/configure cd $(srcdir) && autoconf $(MAINT)$(srcdir)/config.h.in: $(srcdir)/stamp-h.in $(MAINT)$(srcdir)/stamp-h.in: $(srcdir)/configure.in $(srcdir)/acconfig.h $(RM) $(srcdir)/config.h.in cd $(srcdir) && autoheader cd $(srcdir) && $(RM) stamp-h.in && echo timestamp > stamp-h.in $(MAINT)config.h: stamp-h $(MAINT)stamp-h: config.h.in config.status CONFIG_FILES= CONFIG_HEADERS=config.h ./config.status $(RM) stamp-h && echo timestamp > stamp-h $(MAINT)Makefile: Makefile.in config.status CONFIG_FILES=$@ CONFIG_HEADERS= ./config.status $(MAINT)lib/Makefile: lib/Makefile.in config.status CONFIG_FILES=$@ CONFIG_HEADERS= ./config.status $(MAINT)lib/sys_elf.h: lib/stamp-h $(MAINT)lib/stamp-h: lib/sys_elf.h.in config.status CONFIG_FILES= CONFIG_HEADERS=lib/sys_elf.h ./config.status $(RM) lib/stamp-h && echo timestamp > lib/stamp-h $(MAINT)po/Makefile: po/Makefile.in config.status CONFIG_FILES=$@ CONFIG_HEADERS= ./config.status $(MAINT)libelf.pc: libelf.pc.in config.status CONFIG_FILES=$@ CONFIG_HEADERS= ./config.status RECHECK_FLAGS = CC='$(CC)' CPPFLAGS='$(CPPFLAGS)' \ CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS)' LIBS='$(LIBS)' $(MAINT)config.status: configure config.h.in VERSION $(RECHECK_FLAGS) ./config.status --recheck $(MAINT)reconfig: $(RM) config.cache $(RECHECK_FLAGS) ./config.status --recheck # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libelf-0.8.13.orig/COPYING.LIB0000644000000000000000000006127310243651645014154 0ustar rootroot GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libelf-0.8.13.orig/config.guess0000755000000000000000000012513310243651645015030 0ustar rootroot#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2004-06-11' # This file 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; either version 2 of the License, or # (at your option) any later version. # # This program 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 this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amd64:OpenBSD:*:*) echo x86_64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; cats:OpenBSD:*:*) echo arm-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; luna88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit 0 ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha*:OpenVMS:*:*) echo alpha-hp-vms exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; *:OS400:*:*) echo powerpc-ibm-os400 exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) # Determine whether the default compiler uses glibc. eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #if __GLIBC__ >= 2 LIBC=gnu #else LIBC= #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` # GNU/KFreeBSD systems have a "k" prefix to indicate we are using # FreeBSD's kernel, but not the complete OS. case ${LIBC} in gnu) kernel_only='k' ;; esac echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) case `uname -p` in *86) UNAME_PROCESSOR=i686 ;; powerpc) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libelf-0.8.13.orig/configure0000755000000000000000000033024111015476673014421 0ustar rootroot#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Defaults: ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: ac_help="$ac_help --enable-maintainer-mode enable maintainer-specific make rules (default: auto)" ac_help="$ac_help --enable-compat install , and (default: auto)" ac_help="$ac_help --enable-elf64 compile in 64-bit support (default: auto)" ac_help="$ac_help --enable-versioning compile in versioning support (default: auto)" ac_help="$ac_help --enable-nls use Native Language Support (default: yes)" ac_help="$ac_help --enable-shared build shared library (default: yes)" ac_help="$ac_help --enable-gnu-names use GNU library naming conventions (default: no)" ac_help="$ac_help --enable-extended-format support extended file formats (default: no)" ac_help="$ac_help --enable-sanity-checks enable sanity checks by default (default: yes)" ac_help="$ac_help --enable-debug include extra debugging code (default: no)" # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi case "$ac_option" in -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ac_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir="$ac_optarg" ;; -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he) # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat << EOF Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names EOF cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR EOF if test -n "$ac_help"; then echo "--enable and --with options recognized:$ac_help" fi exit 0 ;; -host | --host | --hos | --ho) ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers) echo "configure generated by autoconf version 2.13" exit 0 ;; -with-* | --with-*) ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries="$ac_optarg" ;; -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi if test "x$nonopt" != xNONE; then { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } fi nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=VERSION # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross ac_exeext= ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi PACKAGE=libelf VERSION=`cat $srcdir/VERSION` # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" mr_enable_maintainer_mode="$enableval" else case :${I_AM_THE_MAINTAINER_OF}: in *:libelf:*) mr_enable_maintainer_mode=yes;; *) mr_enable_maintainer_mode=no;; esac fi if test x"$mr_enable_maintainer_mode" = x"yes"; then MAINT= else MAINT='maintainer-only-' fi ALL_LINGUAS=`cd $srcdir/po && echo *.po | sed 's/\.po//g'` set `echo $VERSION | sed 's/\./ /g'` MAJOR=${1-1} MINOR=${2-0} PATCH=${3-0} echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:582: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:611: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:641: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then case "`uname -s`" in *win32* | *WIN32*) # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:692: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ;; esac fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:724: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF #line 735 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:766: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:771: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes else GCC= fi ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:799: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:831: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # This must be in double quotes, not single quotes, because CPP may get # substituted into the Makefile and "${CC-cc}" will confuse make. CPP="${CC-cc} -E" # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:886: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP=/lib/cpp fi rm -f conftest* fi rm -f conftest* fi rm -f conftest* ac_cv_prog_CPP="$CPP" fi CPP="$ac_cv_prog_CPP" else ac_cv_prog_CPP="$CPP" fi echo "$ac_t""$CPP" 1>&6 ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break fi done if test -z "$ac_aux_dir"; then { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:941: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:996: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_RANLIB="ranlib" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" fi fi RANLIB="$ac_cv_prog_RANLIB" if test -n "$RANLIB"; then echo "$ac_t""$RANLIB" 1>&6 else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 echo "configure:1024: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftestdata if ln -s X conftestdata 2>/dev/null then rm -f conftestdata ac_cv_prog_LN_S="ln -s" else ac_cv_prog_LN_S=ln fi fi LN_S="$ac_cv_prog_LN_S" if test "$ac_cv_prog_LN_S" = "ln -s"; then echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:1047: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1060: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:1127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi for ac_hdr in unistd.h stdint.h fcntl.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:1154: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1164: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done for ac_hdr in elf.h sys/elf.h link.h sys/link.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:1194: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1204: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done echo $ac_n "checking if ${CC} can compile elf.h""... $ac_c" 1>&6 echo "configure:1231: checking if ${CC} can compile elf.h" >&5 if eval "test \"`echo '$''{'libelf_cv_elf_h_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #elif HAVE_SYS_ELF_H #include #endif int main() { Elf32_Ehdr dummy ; return 0; } EOF if { (eval echo configure:1248: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_elf_h_works=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* libelf_cv_elf_h_works=no fi rm -f conftest* fi echo "$ac_t""$libelf_cv_elf_h_works" 1>&6 if test "$libelf_cv_elf_h_works" = no; then ac_cv_header_elf_h=no ac_cv_header_sys_elf_h=no fi if test "$ac_cv_header_elf_h" = yes; then cat >> confdefs.h <<\EOF #define __LIBELF_HEADER_ELF_H EOF elif test "$ac_cv_header_sys_elf_h" = yes; then cat >> confdefs.h <<\EOF #define __LIBELF_HEADER_ELF_H EOF fi for ac_hdr in ar.h libelf.h nlist.h gelf.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:1282: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1292: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done echo $ac_n "checking whether to install , and ""... $ac_c" 1>&6 echo "configure:1319: checking whether to install , and " >&5 # Check whether --enable-compat or --disable-compat was given. if test "${enable_compat+set}" = set; then enableval="$enable_compat" DO_COMPAT="$enableval" else if test "$ac_cv_header_libelf_h$ac_cv_header_nlist_h$ac_cv_header_gelf_h" = yesyesyes then DO_COMPAT=no else DO_COMPAT=yes fi fi echo "$ac_t""$DO_COMPAT" 1>&6 echo $ac_n "checking for working const""... $ac_c" 1>&6 echo "configure:1335: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } ; return 0; } EOF if { (eval echo configure:1389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_const=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_c_const" 1>&6 if test $ac_cv_c_const = no; then cat >> confdefs.h <<\EOF #define const EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 echo "configure:1410: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_off_t=yes else rm -rf conftest* ac_cv_type_off_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_off_t" 1>&6 if test $ac_cv_type_off_t = no; then cat >> confdefs.h <<\EOF #define off_t long EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 echo "configure:1443: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else rm -rf conftest* ac_cv_type_size_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_size_t" 1>&6 if test $ac_cv_type_size_t = no; then cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking size of short""... $ac_c" 1>&6 echo "configure:1477: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_short=2 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(short)); exit(0); } EOF if { (eval echo configure:1496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_short=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_short" 1>&6 cat >> confdefs.h <&6 echo "configure:1516: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_int=4 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); exit(0); } EOF if { (eval echo configure:1535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_int=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_int" 1>&6 cat >> confdefs.h <&6 echo "configure:1555: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_long=4 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); exit(0); } EOF if { (eval echo configure:1574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long" 1>&6 cat >> confdefs.h <&6 echo "configure:1594: checking size of long long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof_long_long=0 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(long long)); exit(0); } EOF if { (eval echo configure:1613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof_long_long=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long_long" 1>&6 cat >> confdefs.h <&6 echo "configure:1634: checking size of __int64" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof___int64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_sizeof___int64=0 else cat > conftest.$ac_ext < main() { FILE *f=fopen("conftestval", "w"); if (!f) exit(1); fprintf(f, "%d\n", sizeof(__int64)); exit(0); } EOF if { (eval echo configure:1653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof___int64=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_sizeof___int64=0 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof___int64" 1>&6 cat >> confdefs.h <. # QNX declares Elf32_Dyn in . echo $ac_n "checking for struct Elf32_Dyn""... $ac_c" 1>&6 echo "configure:1679: checking for struct Elf32_Dyn" >&5 if eval "test \"`echo '$''{'libelf_cv_struct_elf32_dyn'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_struct_elf32_dyn=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat > conftest.$ac_ext < int main() { Elf32_Dyn x ; return 0; } EOF if { (eval echo configure:1707: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_struct_elf32_dyn=link.h else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat > conftest.$ac_ext < int main() { Elf32_Dyn x ; return 0; } EOF if { (eval echo configure:1722: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_struct_elf32_dyn=sys/link.h else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* libelf_cv_struct_elf32_dyn=no fi rm -f conftest* fi rm -f conftest* fi rm -f conftest* fi echo "$ac_t""$libelf_cv_struct_elf32_dyn" 1>&6 if test "$libelf_cv_struct_elf32_dyn" = link.h; then cat >> confdefs.h <<\EOF #define __LIBELF_NEED_LINK_H 1 EOF elif test "$libelf_cv_struct_elf32_dyn" = sys/link.h; then cat >> confdefs.h <<\EOF #define __LIBELF_NEED_SYS_LINK_H 1 EOF elif test "$libelf_cv_struct_elf32_dyn" = no; then { echo "configure: error: no declaration for Elf32_Dyn" 1>&2; exit 1; } fi # Linux declares struct nlist in . echo $ac_n "checking for struct nlist in elf.h""... $ac_c" 1>&6 echo "configure:1755: checking for struct nlist in elf.h" >&5 if eval "test \"`echo '$''{'libelf_cv_struct_nlist'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_struct_nlist=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* libelf_cv_struct_nlist=no fi rm -f conftest* fi echo "$ac_t""$libelf_cv_struct_nlist" 1>&6 if test "$libelf_cv_struct_nlist" = yes; then cat >> confdefs.h <<\EOF #define HAVE_STRUCT_NLIST_DECLARATION 1 EOF fi # Check for 64-bit data types. echo $ac_n "checking for struct Elf64_Ehdr""... $ac_c" 1>&6 echo "configure:1790: checking for struct Elf64_Ehdr" >&5 if eval "test \"`echo '$''{'libelf_cv_struct_elf64_ehdr'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_struct_elf64_ehdr=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* libelf_cv_struct_elf64_ehdr=no fi rm -f conftest* fi echo "$ac_t""$libelf_cv_struct_elf64_ehdr" 1>&6 # Linux lacks typedefs for scalar ELF64_* types. echo $ac_n "checking for Elf64_Addr""... $ac_c" 1>&6 echo "configure:1818: checking for Elf64_Addr" >&5 if eval "test \"`echo '$''{'libelf_cv_type_elf64_addr'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_type_elf64_addr=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* libelf_cv_type_elf64_addr=no fi rm -f conftest* fi echo "$ac_t""$libelf_cv_type_elf64_addr" 1>&6 # IRIX' struct Elf64_Rel is slightly different. Ugh. echo $ac_n "checking for struct Elf64_Rel""... $ac_c" 1>&6 echo "configure:1846: checking for struct Elf64_Rel" >&5 if eval "test \"`echo '$''{'libelf_cv_struct_elf64_rel'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_struct_elf64_rel=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_struct_elf64_rel=irix else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* libelf_cv_struct_elf64_rel=no fi rm -f conftest* fi rm -f conftest* fi echo "$ac_t""$libelf_cv_struct_elf64_rel" 1>&6 case "$libelf_cv_struct_elf64_ehdr:\ $libelf_cv_type_elf64_addr:\ $libelf_cv_struct_elf64_rel" in yes:yes:yes) libelf_64bit=yes;; yes:yes:irix) cat >> confdefs.h <<\EOF #define __LIBELF64_IRIX 1 EOF libelf_64bit=yes;; yes:no:yes) cat >> confdefs.h <<\EOF #define __LIBELF64_LINUX 1 EOF libelf_64bit=yes;; *) libelf_64bit=no;; esac # Check for symbol versioning definitions echo $ac_n "checking for Elf32_Verdef""... $ac_c" 1>&6 echo "configure:1912: checking for Elf32_Verdef" >&5 if eval "test \"`echo '$''{'libelf_cv_verdef32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Solaris wants this */ #endif int main() { struct { Elf32_Verdef vd; Elf32_Verdaux vda; Elf32_Verneed vn; Elf32_Vernaux vna; } x ; return 0; } EOF if { (eval echo configure:1932: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_verdef32=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* libelf_cv_verdef32=no fi rm -f conftest* fi echo "$ac_t""$libelf_cv_verdef32" 1>&6 echo $ac_n "checking for Elf64_Verdef""... $ac_c" 1>&6 echo "configure:1947: checking for Elf64_Verdef" >&5 if eval "test \"`echo '$''{'libelf_cv_verdef64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Solaris wants this */ #endif int main() { struct { Elf64_Verdef vd; Elf64_Verdaux vda; Elf64_Verneed vn; Elf64_Vernaux vna; } x ; return 0; } EOF if { (eval echo configure:1967: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_verdef64=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* libelf_cv_verdef64=no fi rm -f conftest* fi echo "$ac_t""$libelf_cv_verdef64" 1>&6 echo $ac_n "checking for SHT_SUNW_verdef""... $ac_c" 1>&6 echo "configure:1982: checking for SHT_SUNW_verdef" >&5 if eval "test \"`echo '$''{'libelf_cv_sun_verdef'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_sun_verdef=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* libelf_cv_sun_verdef=no fi rm -f conftest* fi echo "$ac_t""$libelf_cv_sun_verdef" 1>&6 echo $ac_n "checking for SHT_GNU_verdef""... $ac_c" 1>&6 echo "configure:2009: checking for SHT_GNU_verdef" >&5 if eval "test \"`echo '$''{'libelf_cv_gnu_verdef'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libelf_cv_gnu_verdef=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* libelf_cv_gnu_verdef=no fi rm -f conftest* fi echo "$ac_t""$libelf_cv_gnu_verdef" 1>&6 else # lib/elf_repl.h supports 64-bit libelf_64bit=yes # lib/elf_repl.h supports symbol versioning libelf_cv_verdef32=yes libelf_cv_verdef64=yes libelf_cv_sun_verdef=yes libelf_cv_gnu_verdef=yes fi echo $ac_n "checking for 64-bit integer""... $ac_c" 1>&6 echo "configure:2046: checking for 64-bit integer" >&5 if eval "test \"`echo '$''{'libelf_cv_int64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$ac_cv_sizeof_long" = 8; then libelf_cv_int64='long' elif test "$ac_cv_sizeof___int64" = 8; then libelf_cv_int64='__int64' elif test "$ac_cv_sizeof_long_long" = 8; then libelf_cv_int64='long long' else libelf_cv_int64=no fi fi echo "$ac_t""$libelf_cv_int64" 1>&6 if test "$libelf_cv_int64" = no; then libelf_64bit=no else cat >> confdefs.h <> confdefs.h <&6 echo "configure:2077: checking for 32-bit integer" >&5 if eval "test \"`echo '$''{'libelf_cv_int32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$ac_cv_sizeof_int" = 4; then libelf_cv_int32='int' elif test "$ac_cv_sizeof_long" = 4; then libelf_cv_int32='long' else libelf_cv_int32=no fi fi echo "$ac_t""$libelf_cv_int32" 1>&6 if test "$libelf_cv_int32" = no; then { echo "configure: error: neither int nor long is 32-bit" 1>&2; exit 1; } else cat >> confdefs.h <> confdefs.h <&6 echo "configure:2106: checking for 16-bit integer" >&5 if eval "test \"`echo '$''{'libelf_cv_int16'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$ac_cv_sizeof_short" = 2; then libelf_cv_int16='short' elif test "$ac_cv_sizeof_int" = 2; then libelf_cv_int16='int' else libelf_cv_int16=no fi fi echo "$ac_t""$libelf_cv_int16" 1>&6 if test "$libelf_cv_int16" = no; then { echo "configure: error: neither short nor int is 16-bit" 1>&2; exit 1; } else cat >> confdefs.h <> confdefs.h <&6 echo "configure:2138: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2148: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done for ac_func in getpagesize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:2177: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:2205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 echo "configure:2230: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_func_mmap_fixed_mapped=no else cat > conftest.$ac_ext < #include #include /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef HAVE_UNISTD_H # include # endif /* Assume that all systems that can run configure have sys/param.h. */ # ifndef HAVE_SYS_PARAM_H # define HAVE_SYS_PARAM_H 1 # endif # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ #ifdef __cplusplus extern "C" { void *malloc(unsigned); } #else char *malloc(); #endif int main() { char *data, *data2, *data3; int i, pagesize; int fd; pagesize = getpagesize(); /* * First, make a file with some known garbage in it. */ data = malloc(pagesize); if (!data) exit(1); for (i = 0; i < pagesize; ++i) *(data + i) = rand(); umask(0); fd = creat("conftestmmap", 0600); if (fd < 0) exit(1); if (write(fd, data, pagesize) != pagesize) exit(1); close(fd); /* * Next, try to mmap the file at a fixed address which * already has something else allocated at it. If we can, * also make sure that we see the same garbage. */ fd = open("conftestmmap", O_RDWR); if (fd < 0) exit(1); data2 = malloc(2 * pagesize); if (!data2) exit(1); data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) exit(1); for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) exit(1); /* * Finally, make sure that changes to the mapped area * do not percolate back to the file as seen by read(). * (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = malloc(pagesize); if (!data3) exit(1); if (read(fd, data3, pagesize) != pagesize) exit(1); for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) exit(1); close(fd); unlink("conftestmmap"); exit(0); } EOF if { (eval echo configure:2378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_func_mmap_fixed_mapped=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6 if test $ac_cv_func_mmap_fixed_mapped = yes; then cat >> confdefs.h <<\EOF #define HAVE_MMAP 1 EOF fi for ac_func in ftruncate memcmp memcpy memmove do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:2403: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:2431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done for ac_func in memset do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:2458: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:2486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}" fi done if test "$ac_cv_func_memset" = yes; then cat >> confdefs.h <<\EOF #define HAVE_MEMSET 1 EOF fi echo $ac_n "checking whether overlapping arrays are copied correctly""... $ac_c" 1>&6 echo "configure:2520: checking whether overlapping arrays are copied correctly" >&5 if eval "test \"`echo '$''{'libelf_cv_working_memmove'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then libelf_cv_working_memmove='maybe not' else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then libelf_cv_working_memmove=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* libelf_cv_working_memmove=no fi rm -fr conftest* fi fi echo "$ac_t""$libelf_cv_working_memmove" 1>&6 if test "$libelf_cv_working_memmove" != yes; then cat >> confdefs.h <<\EOF #define HAVE_BROKEN_MEMMOVE 1 EOF fi echo $ac_n "checking the coffee machine""... $ac_c" 1>&6 echo "configure:2568: checking the coffee machine" >&5 if eval "test \"`echo '$''{'mr_cv_coffee_machine'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else mr_cv_coffee_machine='empty - operator may not work as expected' fi echo "$ac_t""$mr_cv_coffee_machine" 1>&6 echo $ac_n "checking whether 64-bit ELF support is sufficient""... $ac_c" 1>&6 echo "configure:2578: checking whether 64-bit ELF support is sufficient" >&5 echo "$ac_t""$libelf_64bit" 1>&6 echo $ac_n "checking whether to include 64-bit support""... $ac_c" 1>&6 echo "configure:2581: checking whether to include 64-bit support" >&5 if test "$libelf_64bit" = no; then libelf_enable_64bit=no else # Check whether --enable-elf64 or --disable-elf64 was given. if test "${enable_elf64+set}" = set; then enableval="$enable_elf64" libelf_enable_64bit="$enableval" else libelf_enable_64bit=yes fi fi echo "$ac_t""$libelf_enable_64bit" 1>&6 if test "$libelf_enable_64bit" = yes; then cat >> confdefs.h <<\EOF #define __LIBELF64 1 EOF fi echo $ac_n "checking whether versioning support is sufficient""... $ac_c" 1>&6 echo "configure:2603: checking whether versioning support is sufficient" >&5 libelf_versioning=no case "$libelf_enable_64bit:$libelf_cv_verdef32:$libelf_cv_verdef64" in no:yes:* | yes:yes:yes) if test "$libelf_cv_sun_verdef" = yes; then cat >> confdefs.h <<\EOF #define __LIBELF_SUN_SYMBOL_VERSIONS 1 EOF libelf_versioning=yes elif test "$libelf_cv_gnu_verdef" = yes; then cat >> confdefs.h <<\EOF #define __LIBELF_GNU_SYMBOL_VERSIONS 1 EOF libelf_versioning=yes fi;; esac echo "$ac_t""$libelf_versioning" 1>&6 echo $ac_n "checking whether to include versioning support""... $ac_c" 1>&6 echo "configure:2623: checking whether to include versioning support" >&5 if test "$libelf_versioning" = no; then libelf_enable_versioning=no else # Check whether --enable-versioning or --disable-versioning was given. if test "${enable_versioning+set}" = set; then enableval="$enable_versioning" libelf_enable_versioning="$enableval" else libelf_enable_versioning=yes fi fi echo "$ac_t""$libelf_enable_versioning" 1>&6 if test "$libelf_enable_versioning" = yes; then cat >> confdefs.h <<\EOF #define __LIBELF_SYMBOL_VERSIONS 1 EOF fi # Needed for `make dist' even if NLS is disabled. GMOFILES= MSGFILES= POFILES= for mr_lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $mr_lang.gmo" MSGFILES="$MSGFILES $mr_lang.msg" POFILES="$POFILES $mr_lang.po" done echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 echo "configure:2661: checking whether NLS is requested" >&5 # Check whether --enable-nls or --disable-nls was given. if test "${enable_nls+set}" = set; then enableval="$enable_nls" mr_enable_nls="$enableval" else mr_enable_nls=yes fi echo "$ac_t""$mr_enable_nls" 1>&6 CATOBJEXT= INSTOBJEXT= localedir= if test "$mr_enable_nls" = yes; then mr_PATH=`echo ":$PATH" | sed -e 's,:^:*openwin^:*,,g' -e 's,^:,,'` echo $ac_n "checking for dgettext""... $ac_c" 1>&6 echo "configure:2678: checking for dgettext" >&5 if eval "test \"`echo '$''{'mr_cv_func_dgettext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *s = dgettext("", ""); return 0 ; return 0; } EOF if { (eval echo configure:2691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* mr_cv_func_dgettext=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mr_cv_func_dgettext=no fi rm -f conftest* fi echo "$ac_t""$mr_cv_func_dgettext" 1>&6 if test "$mr_cv_func_dgettext" = yes; then # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2709: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$mr_PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test -n "$MSGFMT"; then echo "$ac_t""$MSGFMT" 1>&6 else echo "$ac_t""no" 1>&6 fi if test "$MSGFMT" != no; then # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2746: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$GMSGFMT" in /*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$mr_PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_GMSGFMT="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT="$ac_cv_path_GMSGFMT" if test -n "$GMSGFMT"; then echo "$ac_t""$GMSGFMT" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2782: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$mr_PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT="xgettext" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test -n "$XGETTEXT"; then echo "$ac_t""$XGETTEXT" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2818: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGMERGE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$MSGMERGE" in /*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$mr_PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE="msgmerge" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test -n "$MSGMERGE"; then echo "$ac_t""$MSGMERGE" 1>&6 else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for GNU gettext""... $ac_c" 1>&6 echo "configure:2852: checking for GNU gettext" >&5 if eval "test \"`echo '$''{'mr_cv_gnu_gettext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* mr_cv_gnu_gettext=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mr_cv_gnu_gettext=no fi rm -f conftest* fi echo "$ac_t""$mr_cv_gnu_gettext" 1>&6 if test "$mr_cv_gnu_gettext" = yes; then echo $ac_n "checking for losing catgets-based GNU gettext""... $ac_c" 1>&6 echo "configure:2881: checking for losing catgets-based GNU gettext" >&5 if eval "test \"`echo '$''{'mr_cv_catgets_based_gettext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* mr_cv_catgets_based_gettext=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mr_cv_catgets_based_gettext=no fi rm -f conftest* fi echo "$ac_t""$mr_cv_catgets_based_gettext" 1>&6 if test "$mr_cv_catgets_based_gettext" = yes; then # This loses completely. Turn it off and use catgets. LIBS=`echo $LIBS | sed 's,-lintl,,g'` mr_cv_func_dgettext=no else # Is there a better test for this case? echo $ac_n "checking for pure GNU gettext""... $ac_c" 1>&6 echo "configure:2915: checking for pure GNU gettext" >&5 if eval "test \"`echo '$''{'mr_cv_pure_gnu_gettext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* mr_cv_pure_gnu_gettext=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mr_cv_pure_gnu_gettext=no fi rm -f conftest* fi echo "$ac_t""$mr_cv_pure_gnu_gettext" 1>&6 if test "$mr_cv_pure_gnu_gettext" = yes; then CATOBJEXT=.gmo localedir='$(prefix)/share/locale' else CATOBJEXT=.mo localedir='$(prefix)/lib/locale' fi INSTOBJEXT=.mo fi else # System provided gettext CATOBJEXT=.mo INSTOBJEXT=.mo localedir='$(prefix)/lib/locale' fi else # Gettext but no msgfmt. Try catgets. mr_cv_func_dgettext=no fi fi if test "$mr_cv_func_dgettext" = yes; then cat >> confdefs.h <<\EOF #define HAVE_DGETTEXT 1 EOF else echo $ac_n "checking for catgets""... $ac_c" 1>&6 echo "configure:2969: checking for catgets" >&5 if eval "test \"`echo '$''{'mr_cv_func_catgets'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { catgets(catopen("",0),0,0,"");return 0; ; return 0; } EOF if { (eval echo configure:2982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* mr_cv_func_catgets=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* mr_cv_func_catgets=no fi rm -f conftest* fi echo "$ac_t""$mr_cv_func_catgets" 1>&6 if test "$mr_cv_func_catgets" = yes; then # Extract the first word of "gencat", so it can be a program name with args. set dummy gencat; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:3000: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GENCAT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$GENCAT" in /*) ac_cv_path_GENCAT="$GENCAT" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_GENCAT="$GENCAT" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$mr_PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_GENCAT="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_GENCAT" && ac_cv_path_GENCAT="no" ;; esac fi GENCAT="$ac_cv_path_GENCAT" if test -n "$GENCAT"; then echo "$ac_t""$GENCAT" 1>&6 else echo "$ac_t""no" 1>&6 fi if test "$GENCAT" != no; then cat >> confdefs.h <<\EOF #define HAVE_CATGETS 1 EOF # Extract the first word of "gmsgfmt msgfmt", so it can be a program name with args. set dummy gmsgfmt msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:3041: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$GMSGFMT" in /*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$mr_PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_GMSGFMT="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="msgfmt" ;; esac fi GMSGFMT="$ac_cv_path_GMSGFMT" if test -n "$GMSGFMT"; then echo "$ac_t""$GMSGFMT" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:3077: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$mr_PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT="xgettext" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test -n "$XGETTEXT"; then echo "$ac_t""$XGETTEXT" 1>&6 else echo "$ac_t""no" 1>&6 fi CATOBJEXT=.cat INSTOBJEXT=.cat localedir='$(prefix)/lib/locale' fi else echo "configure: warning: no NLS support, disabled" 1>&2 mr_enable_nls=no fi fi fi POSUB= CATALOGS= if test "$mr_enable_nls" = yes; then echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6 echo "configure:3128: checking for catalogs to be installed" >&5 mr_linguas= for mr_lang in ${LINGUAS=$ALL_LINGUAS}; do case " $ALL_LINGUAS " in *" $mr_lang "*) mr_linguas="$mr_linguas$mr_lang " CATALOGS="$CATALOGS $mr_lang$CATOBJEXT" ;; esac done echo "$ac_t""$mr_linguas" 1>&6 POSUB=po fi LIBINTL= echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6 echo "configure:3146: checking for gettext in -lintl" >&5 ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 LIBINTL=-lintl else echo "$ac_t""no" 1>&6 fi # Make sure we can run config.sub. if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 echo "configure:3194: checking host system type" >&5 host_alias=$host case "$host_alias" in NONE) case $nonopt in NONE) if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } fi ;; *) host_alias=$nonopt ;; esac ;; esac host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 PICFLAGS= SHLIB_SFX= SHLINK_SFX= SONAME_SFX= LINK_SHLIB= INSTALL_SHLIB= DEPSHLIBS= echo $ac_n "checking whether to build a shared library""... $ac_c" 1>&6 echo "configure:3224: checking whether to build a shared library" >&5 # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" mr_enable_shared="$enableval" else mr_enable_shared=yes fi echo "$ac_t""$mr_enable_shared" 1>&6 if test "$mr_enable_shared" = yes; then echo $ac_n "checking whether GNU naming conventions are requested""... $ac_c" 1>&6 echo "configure:3236: checking whether GNU naming conventions are requested" >&5 # Check whether --enable-gnu-names or --disable-gnu-names was given. if test "${enable_gnu_names+set}" = set; then enableval="$enable_gnu_names" mr_enable_gnu_names="$enableval" else mr_enable_gnu_names=no fi echo "$ac_t""$mr_enable_gnu_names" 1>&6 # Extract the first word of "ld", so it can be a program name with args. set dummy ld; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:3251: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$LD" in /*) ac_cv_path_LD="$LD" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_LD="$LD" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_LD="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_LD" && ac_cv_path_LD="ld" ;; esac fi LD="$ac_cv_path_LD" if test -n "$LD"; then echo "$ac_t""$LD" 1>&6 else echo "$ac_t""no" 1>&6 fi case "$host" in *-linux*|*-gnu*) if test "$GCC" = yes; then echo $ac_n "checking for native ELF system""... $ac_c" 1>&6 echo "configure:3290: checking for native ELF system" >&5 if eval "test \"`echo '$''{'mr_cv_target_elf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then mr_cv_target_elf=no else cat > conftest.$ac_ext < int main(int argc, char **argv) { char buf[BUFSIZ]; FILE *fp; int n; if ((fp = fopen(*argv, "r")) == NULL) { exit(1); } n = fread(buf, 1, sizeof(buf), fp); if (n >= 52 && buf[0] == '\177' && buf[1] == 'E' && buf[2] == 'L' && buf[3] == 'F') { exit(0); } exit(1); } EOF if { (eval echo configure:3321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then mr_cv_target_elf=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* mr_cv_target_elf=no fi rm -fr conftest* fi fi echo "$ac_t""$mr_cv_target_elf" 1>&6 if test "$mr_cv_target_elf" = yes; then PICFLAGS='-fPIC -DPIC' if test "$mr_enable_gnu_names" = yes then SHLIB_SFX='-$(VERSION).so' else SHLIB_SFX='.so.$(VERSION)' fi SHLINK_SFX='.so' SONAME_SFX='.so.$(MAJOR)' LINK_SHLIB='$(CC) -shared -Wl,-soname,$(SONAME)' INSTALL_SHLIB='$(INSTALL_PROGRAM)' DEPSHLIBS='-lc' else echo "configure: warning: shared libraries not supported for $host" 1>&2 mr_enable_shared=no fi elif ${CC} -V 2>&1 | grep 'Intel(R) C++ Compiler' >/dev/null 2>&1; then echo "configure: warning: Use --disable-shared if $CC fails to build the shared library" 1>&2 PICFLAGS='-fPIC -DPIC' if test "$mr_enable_gnu_names" = yes then SHLIB_SFX='-$(VERSION).so' else SHLIB_SFX='.so.$(VERSION)' fi SHLINK_SFX='.so' SONAME_SFX='.so.$(MAJOR)' LINK_SHLIB='$(CC) -shared -Wl,-soname,$(SONAME)' INSTALL_SHLIB='$(INSTALL_PROGRAM)' DEPSHLIBS='-lc' else echo "configure: warning: GNU CC required for building shared libraries" 1>&2 mr_enable_shared=no fi ;; i386-pc-nto-qnx*) echo $ac_n "checking for native ELF system""... $ac_c" 1>&6 echo "configure:3372: checking for native ELF system" >&5 if eval "test \"`echo '$''{'mr_cv_target_elf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then mr_cv_target_elf=no else cat > conftest.$ac_ext < int main(int argc, char **argv) { char buf[BUFSIZ]; FILE *fp; int n; if ((fp = fopen(*argv, "r")) == NULL) { exit(1); } n = fread(buf, 1, sizeof(buf), fp); if (n >= 52 && buf[0] == '\177' && buf[1] == 'E' && buf[2] == 'L' && buf[3] == 'F') { exit(0); } exit(1); } EOF if { (eval echo configure:3403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then mr_cv_target_elf=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* mr_cv_target_elf=no fi rm -fr conftest* fi fi echo "$ac_t""$mr_cv_target_elf" 1>&6 if test "$mr_cv_target_elf" = yes; then PICFLAGS='-fPIC -DPIC' if test "$mr_enable_gnu_names" = yes then SHLIB_SFX='-$(VERSION).so' else SHLIB_SFX='.so.$(VERSION)' fi SHLINK_SFX='.so' SONAME_SFX='.so.$(MAJOR)' LINK_SHLIB='$(CC) -shared -Wl,-soname,$(SONAME)' INSTALL_SHLIB='$(INSTALL_PROGRAM)' DEPSHLIBS='-lc' else echo "configure: warning: shared libraries not supported for $host" 1>&2 mr_enable_shared=no fi ;; sparc-sun-solaris2*) if test "$GCC" = yes; then PICFLAGS='-fPIC -DPIC' else PICFLAGS='-K PIC -DPIC' fi if test "$mr_enable_gnu_names" = yes then SHLIB_SFX='-$(MAJOR).so' else SHLIB_SFX='.so.$(MAJOR)' fi SONAME_SFX='.so.$(MAJOR)' SHLINK_SFX='.so' LINK_SHLIB='$(LD) -G -z text -h $(SONAME)' INSTALL_SHLIB='$(INSTALL_PROGRAM)' ;; *) echo "configure: warning: shared libraries not supported for $host" 1>&2 mr_enable_shared=no ;; esac else mr_enable_shared=no fi DO_SHLIB="$mr_enable_shared" # Check whether --enable-extended-format or --disable-extended-format was given. if test "${enable_extended_format+set}" = set; then enableval="$enable_extended_format" mr_enable_extended_format="$enableval" else mr_enable_extended_format=no fi if test "$mr_enable_extended_format" = yes; then cat >> confdefs.h <<\EOF #define ENABLE_EXTENDED_FORMAT 1 EOF fi # Check whether --enable-sanity-checks or --disable-sanity-checks was given. if test "${enable_sanity_checks+set}" = set; then enableval="$enable_sanity_checks" mr_enable_sanity_checks="$enableval" else mr_enable_sanity_checks=yes fi if test "$mr_enable_sanity_checks" = yes; then cat >> confdefs.h <<\EOF #define ENABLE_SANITY_CHECKS 1 EOF fi # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" mr_enable_debug="$enableval" else mr_enable_debug=no fi if test "$mr_enable_debug" = yes; then cat >> confdefs.h <<\EOF #define ENABLE_DEBUG 1 EOF fi trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 DEFS=-DHAVE_CONFIG_H # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS </dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "Makefile lib/Makefile po/Makefile libelf.pc config.h lib/sys_elf.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@PACKAGE@%$PACKAGE%g s%@VERSION@%$VERSION%g s%@MAINT@%$MAINT%g s%@MAJOR@%$MAJOR%g s%@SET_MAKE@%$SET_MAKE%g s%@CC@%$CC%g s%@CPP@%$CPP%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@RANLIB@%$RANLIB%g s%@LN_S@%$LN_S%g s%@DO_COMPAT@%$DO_COMPAT%g s%@LIBOBJS@%$LIBOBJS%g s%@GMOFILES@%$GMOFILES%g s%@MSGFILES@%$MSGFILES%g s%@POFILES@%$POFILES%g s%@MSGFMT@%$MSGFMT%g s%@GMSGFMT@%$GMSGFMT%g s%@XGETTEXT@%$XGETTEXT%g s%@MSGMERGE@%$MSGMERGE%g s%@GENCAT@%$GENCAT%g s%@CATOBJEXT@%$CATOBJEXT%g s%@INSTOBJEXT@%$INSTOBJEXT%g s%@localedir@%$localedir%g s%@CATALOGS@%$CATALOGS%g s%@POSUB@%$POSUB%g s%@LIBINTL@%$LIBINTL%g s%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g s%@host_vendor@%$host_vendor%g s%@host_os@%$host_os%g s%@LD@%$LD%g s%@PICFLAGS@%$PICFLAGS%g s%@SHLIB_SFX@%$SHLIB_SFX%g s%@SHLINK_SFX@%$SHLINK_SFX%g s%@SONAME_SFX@%$SONAME_SFX%g s%@LINK_SHLIB@%$LINK_SHLIB%g s%@INSTALL_SHLIB@%$INSTALL_SHLIB%g s%@DEPSHLIBS@%$DEPSHLIBS%g s%@DO_SHLIB@%$DO_SHLIB%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' ac_dC='\3' ac_dD='%g' # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='\([ ]\)%\1#\2define\3' ac_uC=' ' ac_uD='\4%g' # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_eB='$%\1#\2define\3' ac_eC=' ' ac_eD='%g' if test "${CONFIG_HEADERS+set}" != set; then EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF fi for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac echo creating $ac_file rm -f conftest.frag conftest.in conftest.out ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` cat $ac_file_inputs > conftest.in EOF # Transform confdefs.h into a sed script conftest.vals that substitutes # the proper values into config.h.in to produce config.h. And first: # Protect against being on the right side of a sed subst in config.status. # Protect against being in an unquoted here document in config.status. rm -f conftest.vals cat > conftest.hdr <<\EOF s/[\\&%]/\\&/g s%[\\$`]%\\&%g s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp s%ac_d%ac_u%gp s%ac_u%ac_e%gp EOF sed -n -f conftest.hdr confdefs.h > conftest.vals rm -f conftest.hdr # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >> conftest.vals <<\EOF s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% EOF # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail while : do ac_lines=`grep -c . conftest.vals` # grep -c gives empty output for an empty file on some AIX systems. if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi # Write a limited-size here document to conftest.frag. echo ' cat > conftest.frag <> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS echo 'CEOF sed -f conftest.frag conftest.in > conftest.out rm -f conftest.in mv conftest.out conftest.in ' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals cat >> $CONFIG_STATUS <<\EOF rm -f conftest.frag conftest.h echo "/* $ac_file. Generated automatically by configure. */" > conftest.h cat conftest.in >> conftest.h rm -f conftest.in if cmp -s $ac_file conftest.h 2>/dev/null; then echo "$ac_file is unchanged" rm -f conftest.h else # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" fi rm -f $ac_file mv conftest.h $ac_file fi fi; done EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF echo timestamp > stamp-h; echo timestamp > lib/stamp-h exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 # vi: set ts=8 sw=2 :