From: nobody <> Date: Tue, 15 Aug 2006 18:23:12 +0000 (+0000) Subject: This commit was manufactured by cvs2svn to create tag 'newlib-csl- X-Git-Tag: newlib-csl-sourcerygxx-3_4_4-25 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=01a916ceaf4426125499e5663fd798d492b25e05;p=thirdparty%2Fbinutils-gdb.git This commit was manufactured by cvs2svn to create tag 'newlib-csl- sourcerygxx-3_4_4-25'. Sprout from cr-0x5f1 2006-07-25 08:39:58 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'cr-0x5f1'.' Cherrypick from master 2006-08-15 18:23:11 UTC Thiemo Seufer ' [ ChangeLog ]': ChangeLog config.rpath config.sub texinfo/texinfo.tex Delete: include/COPYING include/ChangeLog include/ChangeLog-9103 include/MAINTAINERS include/alloca-conf.h include/ansidecl.h include/aout/ChangeLog include/aout/adobe.h include/aout/aout64.h include/aout/ar.h include/aout/dynix3.h include/aout/encap.h include/aout/host.h include/aout/hp.h include/aout/hp300hpux.h include/aout/hppa.h include/aout/ranlib.h include/aout/reloc.h include/aout/stab.def include/aout/stab_gnu.h include/aout/sun4.h include/bfdlink.h include/bin-bugs.h include/bout.h include/coff/ChangeLog include/coff/ChangeLog-9103 include/coff/alpha.h include/coff/apollo.h include/coff/arm.h include/coff/aux-coff.h include/coff/ecoff.h include/coff/external.h include/coff/go32exe.h include/coff/h8300.h include/coff/h8500.h include/coff/i386.h include/coff/i860.h include/coff/i960.h include/coff/ia64.h include/coff/internal.h include/coff/m68k.h include/coff/m88k.h include/coff/maxq.h include/coff/mcore.h include/coff/mips.h include/coff/mipspe.h include/coff/or32.h include/coff/pe.h include/coff/powerpc.h include/coff/rs6000.h include/coff/rs6k64.h include/coff/sh.h include/coff/sparc.h include/coff/sym.h include/coff/symconst.h include/coff/ti.h include/coff/tic30.h include/coff/tic4x.h include/coff/tic54x.h include/coff/tic80.h include/coff/w65.h include/coff/we32k.h include/coff/xcoff.h include/coff/z80.h include/coff/z8k.h include/demangle.h include/dis-asm.h include/dyn-string.h include/elf/ChangeLog include/elf/ChangeLog-9103 include/elf/alpha.h include/elf/arc.h include/elf/arm.h include/elf/avr.h include/elf/bfin.h include/elf/common.h include/elf/cr16c.h include/elf/cris.h include/elf/crx.h include/elf/d10v.h include/elf/d30v.h include/elf/dlx.h include/elf/dwarf.h include/elf/dwarf2.h include/elf/external.h include/elf/fr30.h include/elf/frv.h include/elf/h8.h include/elf/hppa.h include/elf/i370.h include/elf/i386.h include/elf/i860.h include/elf/i960.h include/elf/ia64.h include/elf/internal.h include/elf/ip2k.h include/elf/iq2000.h include/elf/m32c.h include/elf/m32r.h include/elf/m68hc11.h include/elf/m68k.h include/elf/mcore.h include/elf/mips.h include/elf/mmix.h include/elf/mn10200.h include/elf/mn10300.h include/elf/msp430.h include/elf/mt.h include/elf/openrisc.h include/elf/or32.h include/elf/pj.h include/elf/ppc.h include/elf/ppc64.h include/elf/reloc-macros.h include/elf/s390.h include/elf/sh.h include/elf/sparc.h include/elf/v850.h include/elf/vax.h include/elf/x86-64.h include/elf/xc16x.h include/elf/xstormy16.h include/elf/xtensa.h include/fibheap.h include/filenames.h include/floatformat.h include/fnmatch.h include/fopen-bin.h include/fopen-same.h include/fopen-vms.h include/gdb/ChangeLog include/gdb/callback.h include/gdb/fileio.h include/gdb/remote-sim.h include/gdb/signals.h include/gdb/sim-arm.h include/gdb/sim-d10v.h include/gdb/sim-frv.h include/gdb/sim-h8300.h include/gdb/sim-m32c.h include/gdb/sim-ppc.h include/gdb/sim-sh.h include/gdbm.h include/getopt.h include/hashtab.h include/hp-symtab.h include/ieee.h include/libiberty.h include/md5.h include/nlm/ChangeLog include/nlm/alpha-ext.h include/nlm/common.h include/nlm/external.h include/nlm/i386-ext.h include/nlm/internal.h include/nlm/ppc-ext.h include/nlm/sparc32-ext.h include/oasys.h include/objalloc.h include/obstack.h include/opcode/ChangeLog include/opcode/ChangeLog-9103 include/opcode/alpha.h include/opcode/arc.h include/opcode/arm.h include/opcode/avr.h include/opcode/bfin.h include/opcode/cgen-bitset.h include/opcode/cgen.h include/opcode/convex.h include/opcode/cris.h include/opcode/crx.h include/opcode/d10v.h include/opcode/d30v.h include/opcode/dlx.h include/opcode/h8300.h include/opcode/hppa.h include/opcode/i370.h include/opcode/i386.h include/opcode/i860.h include/opcode/i960.h include/opcode/ia64.h include/opcode/m68hc11.h include/opcode/m68k.h include/opcode/m88k.h include/opcode/maxq.h include/opcode/mips.h include/opcode/mmix.h include/opcode/mn10200.h include/opcode/mn10300.h include/opcode/msp430.h include/opcode/np1.h include/opcode/ns32k.h include/opcode/or32.h include/opcode/pdp11.h include/opcode/pj.h include/opcode/pn.h include/opcode/ppc.h include/opcode/pyr.h include/opcode/s390.h include/opcode/sparc.h include/opcode/tahoe.h include/opcode/tic30.h include/opcode/tic4x.h include/opcode/tic54x.h include/opcode/tic80.h include/opcode/v850.h include/opcode/vax.h include/os9k.h include/partition.h include/progress.h include/safe-ctype.h include/sort.h include/splay-tree.h include/symcat.h include/ternary.h include/xregex.h include/xregex2.h include/xtensa-config.h include/xtensa-isa-internal.h include/xtensa-isa.h libiberty/COPYING.LIB libiberty/ChangeLog libiberty/Makefile.in libiberty/README libiberty/_doprnt.c libiberty/aclocal.m4 libiberty/alloca.c libiberty/argv.c libiberty/asprintf.c libiberty/at-file.texi libiberty/atexit.c libiberty/basename.c libiberty/bcmp.c libiberty/bcopy.c libiberty/bsearch.c libiberty/bzero.c libiberty/calloc.c libiberty/choose-temp.c libiberty/clock.c libiberty/concat.c libiberty/config.h-vms libiberty/config.in libiberty/config/mh-aix libiberty/config/mh-cxux7 libiberty/config/mh-fbsd21 libiberty/config/mh-openedition libiberty/config/mh-windows libiberty/configure libiberty/configure.ac libiberty/copying-lib.texi libiberty/copysign.c libiberty/cp-demangle.c libiberty/cp-demangle.h libiberty/cp-demint.c libiberty/cplus-dem.c libiberty/dyn-string.c libiberty/fdmatch.c libiberty/ffs.c libiberty/fibheap.c libiberty/floatformat.c libiberty/fnmatch.c libiberty/fnmatch.txh libiberty/fopen_unlocked.c libiberty/functions.texi libiberty/gather-docs libiberty/getcwd.c libiberty/getopt.c libiberty/getopt1.c libiberty/getpagesize.c libiberty/getpwd.c libiberty/getruntime.c libiberty/gettimeofday.c libiberty/hashtab.c libiberty/hex.c libiberty/index.c libiberty/insque.c libiberty/lbasename.c libiberty/libiberty.texi libiberty/lrealpath.c libiberty/maint-tool libiberty/make-relative-prefix.c libiberty/make-temp-file.c libiberty/makefile.vms libiberty/md5.c libiberty/memchr.c libiberty/memcmp.c libiberty/memcpy.c libiberty/memmove.c libiberty/mempcpy.c libiberty/memset.c libiberty/mkstemps.c libiberty/msdos.c libiberty/objalloc.c libiberty/obstack.c libiberty/obstacks.texi libiberty/partition.c libiberty/pex-common.c libiberty/pex-common.h libiberty/pex-djgpp.c libiberty/pex-msdos.c libiberty/pex-one.c libiberty/pex-unix.c libiberty/pex-win32.c libiberty/pexecute.c libiberty/pexecute.txh libiberty/physmem.c libiberty/putenv.c libiberty/random.c libiberty/regex.c libiberty/rename.c libiberty/rindex.c libiberty/safe-ctype.c libiberty/setenv.c libiberty/sigsetmask.c libiberty/snprintf.c libiberty/sort.c libiberty/spaces.c libiberty/splay-tree.c libiberty/stpcpy.c libiberty/stpncpy.c libiberty/strcasecmp.c libiberty/strchr.c libiberty/strdup.c libiberty/strerror.c libiberty/strncasecmp.c libiberty/strncmp.c libiberty/strndup.c libiberty/strrchr.c libiberty/strsignal.c libiberty/strstr.c libiberty/strtod.c libiberty/strtol.c libiberty/strtoul.c libiberty/strverscmp.c libiberty/ternary.c libiberty/testsuite/Makefile.in libiberty/testsuite/demangle-expected libiberty/testsuite/test-demangle.c libiberty/testsuite/test-expandargv.c libiberty/testsuite/test-pexecute.c libiberty/tmpnam.c libiberty/unlink-if-ordinary.c libiberty/vasprintf.c libiberty/vfork.c libiberty/vfprintf.c libiberty/vmsbuild.com libiberty/vprintf.c libiberty/vsnprintf.c libiberty/vsprintf.c libiberty/waitpid.c libiberty/xatexit.c libiberty/xexit.c libiberty/xmalloc.c libiberty/xmemdup.c libiberty/xstrdup.c libiberty/xstrerror.c libiberty/xstrndup.c --- diff --git a/ChangeLog b/ChangeLog index c509360638d..ab436ff99ea 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-08-15 Thiemo Seufer + Nigel Stephens + David Ung + + * config.sub: Add support for sde as alias of mipsisa32-sde-elf. + 2006-07-25 Paolo Bonzini Sync from GCC: diff --git a/config.rpath b/config.rpath new file mode 100755 index 00000000000..937edf5ecb5 --- /dev/null +++ b/config.rpath @@ -0,0 +1,548 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2003 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This program 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + mingw* | pw32* | os2*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + newsos6) + ;; + linux*) + case $CC in + icc|ecc) + wl='-Wl,' + ;; + ccc) + wl='-Wl,' + ;; + esac + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + sco3.2v5*) + ;; + solaris*) + wl='-Wl,' + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + case "$host_os" in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can use + # them. + ld_shlibs=no + ;; + beos*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris* | sysv5*) + if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = yes; then + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + bsdi4*) + ;; + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then + hardcode_direct=no + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10* | hpux11*) + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=no + ;; + ia64*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + *) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + openbsd*) + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + sco3.2v5*) + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4.2uw2*) + hardcode_direct=yes + hardcode_minus_L=no + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + ;; + sysv5*) + hardcode_libdir_flag_spec= + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. +libname_spec='lib$name' +case "$host_os" in + aix3*) + ;; + aix4* | aix5*) + ;; + amigaos*) + ;; + beos*) + ;; + bsdi4*) + ;; + cygwin* | mingw* | pw32*) + shrext=.dll + ;; + darwin* | rhapsody*) + shrext=.dylib + ;; + dgux*) + ;; + freebsd1*) + ;; + freebsd*) + ;; + gnu*) + ;; + hpux9* | hpux10* | hpux11*) + case "$host_cpu" in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux*) + ;; + netbsd*) + ;; + newsos6) + ;; + nto-qnx) + ;; + openbsd*) + ;; + os2*) + libname_spec='$name' + shrext=.dll + ;; + osf3* | osf4* | osf5*) + ;; + sco3.2v5*) + ;; + solaris*) + ;; + sunos4*) + ;; + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + ;; + sysv4*MP*) + ;; + uts4*) + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' < - Copyright (C) - - This program 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/include/ChangeLog b/include/ChangeLog deleted file mode 100644 index 75f1ed22f05..00000000000 --- a/include/ChangeLog +++ /dev/null @@ -1,593 +0,0 @@ -2006-07-10 Jakub Jelinek - - * bfdlink.h (struct bfd_link_info): Add emit_hash and - emit_gnu_hash bitfields. - -2006-04-11 Jim Blandy - - * libiberty.h (pex_input_file, pex_input_pipe): New declarations. - -2006-04-06 H.J. Lu - - * bfdlink.h (bfd_link_info): Replace need_relax_finalize with - relax_pass. - -2006-03-25 Bernd Schmidt - - * elf/bfin.h (R_BFIN_GOT17M4, R_BFIN_GOTHI, R_BFIN_GOTLO, - R_BFIN_FUNCDESC, R_BFIN_FUNCDESC_GOT17M4, R_BFIN_FUNCDESC_GOTHI, - R_BFIN_FUNCDESC_GOTLO, R_BFIN_FUNCDESC_VALUE, - R_BFIN_FUNCDESC_GOTOFF17M4, R_BFIN_FUNCDESC_GOTOFFHI, - R_BFIN_FUNCDESC_GOTOFFLO, R_BFIN_GOTOFF17M4, R_BFIN_GOTOFFHI, - R_BFIN_GOTOFFLO): New relocs. - (EF_BFIN_PIC, EF_BFIN_FDPIC, EF_BFIN_PIC_FLAGS): New macros. - -2006-03-23 Michael Matz - - * elf/x86-64.h: Add the new relocations with their official - numbers. - -2006-02-17 Shrirang Khisti - Anil Paranjape - Shilin Shakti - - * dis-asm.h (print_insn_xc16c): New prototype. - -2006-02-06 Steve Ellcey - - * elf/ia64.h (SHF_IA_64_HP_TLS): New. - -2006-01-18 DJ Delorie - - * md5.h: Include ansidecl.h - -2006-01-17 Andreas Schwab - - PR binutils/1486 - * dis-asm.h (struct disassemble_info): Add - disassembler_needs_relocs. - -2006-01-09 Bob Wilson - - * xtensa-config.h (XCHAL_HAVE_MUL32_HIGH): Define. - -2005-12-30 Bob Wilson - - * xtensa-config.h (XCHAL_HAVE_WIDE_BRANCHES): New. - -2005-12-16 Nathan Sidwell - - Second part of ms1 to mt renaming. - * dis-asm.h (print_insn_mt): Renamed. - -2005-12-12 Nathan Sidwell - - * elf/mt.h: Renamed from ms1.h - -2005-12-10 Terry Laurenzo - - PR java/9861 - * demangle.h : Add DMGL_RET_POSTFIX define to enable alternative - output format for return types - -2005-11-07 Nathan Sidwell - - Add ms2. - * elf/ms1.h (EF_MS1_CPU_MS2): New. - -2005-11-06 John David Anglin - - * elf/hppa.h (R_PARISC_DIR64WR, R_PARISC_DIR64DR): Remove relocs. - -2005-11-03 Alan Modra - - * bfdlink.h (struct bfd_link_order): Tweak comment. - -2005-10-31 Mark Kettenis - - * floatformat.h (enum floatformat_byteorders): Add - floatformat_vax. - (floatformat_vax_aingle, floatformat_vax_double): Declare. - -2005-10-28 Dave Brolley - - Contribute the following changes: - 2003-09-29 Dave Brolley - - * dis-asm.h (disassemble_info): insn_sets now (void *) to allow for - more exotic underlying types to be used. - -2005-10-25 Arnold Metselaar - - disasm.h: Add declaration for print_insn_z80 - -2005-09-30 Catherine Moore - - * dis-asm.h (print_insn_bfin): Declare. - * opcode/bfin.h: New file. - -2005-09-26 Mark Mitchell - - * libiberty.h (expandargv): New function. - -2005-08-18 Alan Modra - - * bfdlink.h: Remove mention of a29k. - * dis-asm.h: Remove a29k support. - * aout/encap.h: Likewise. - -2005-08-17 Mark Kettenis - - * floatformat.h (struct floatformat): Change type of large - argument for is_valid member to `const void *'. - (floatformat_to_double): Change type of second argument to `const - void *'. - (floatformat_from_double): Change type of last argument to `void - *'. - (floatformat_is_valid): Change type of last argument to `const - void *'. - -2005-07-14 Jim Blandy - - * dis-asm.h (print_insn_m32c): New declaration. - -2005-07-12 Ben Elliston - - * xregex2.h (regexec): Qualify this prototype with __extension__ - when compiling with GNU C. - -2005-07-07 Kaveh R. Ghazi - - * dis-asm.h (fprintf_ftype): Add format attribute. - -2005-07-03 Steve Ellcey - - PR other/13906 - * ansidecl.h (ATTRIBUTE_ALIGNED_ALIGNOF): New. - * md5.h (md5_uintptr): New. - (md5_ctx): Align buffer field. - -2005-06-30 Daniel Berlin - - * hashtab.h (HTAB_DELETED_ENTRY): New macro. - (HTAB_EMPTY_ENTRY): New macro. - -2005-06-20 Geoffrey Keating - - * libiberty.h (strverscmp): Prototype. - -2005-06-17 Jakub Jelinek - - * elf/external.h (GRP_ENTRY_SIZE): Define. - -2005-06-08 Zack Weinberg - - * dis-asm.h (get_arm_regnames): Update prototype. - -2005-06-07 Aldy Hernandez - Michael Snyder - Stan Cox - - * dis-asm.h: Externalize print_insn_ms1. - -2005-06-06 Gabriel Dos Reis - - * libiberty.h (XOBFINISH): New. - -2005-06-03 Alan Modra - - * bfdlink.h (struct bfd_link_callbacks): Add einfo. - -2005-06-01 Kaveh R. Ghazi - - * libiberty.h (vsnprintf): Add format attribute. - -2005-05-29 Kaveh R. Ghazi - - * ansidecl.h: Add ATTRIBUTE_FPTR_PRINTF. - -2005-05-28 Eli Zaretskii - - * libiberty.h: (snprintf) [!HAVE_DECL_SNPRINTF]: Declare if - needed. - (vsnprintf) [!HAVE_DECL_VSNPRINTF]: Declare if needed. - -2005-05-25 Richard Henderson - - * demangle.h (DEMANGLE_COMPONENT_HIDDEN_ALIAS): New. - -2005-05-24 Gabriel Dos Reis - - * libiberty.h (ACONCAT): Properly cast value of alloca(). - - * ansidecl.h (ATTRIBUTE_UNUSED_LABEL): Don't define if - __cplusplus. - -2005-05-12 Steve Ellcey - - libiberty.h: Do not define empty basename prototype. - -2005-05-10 Nick Clifton - - * Update the address and phone number of the FSF organization in - the GPL notices in the following files: - COPYING, ansidecl.h, bfdlink.h, bout.h, demangle.h, dis-asm.h, - dyn-string.h, fibheap.h, filenames.h, floatformat.h, - fnmatch.h, gdbm.h, getopt.h, hashtab.h, hp-symtab.h, ieee.h, - libiberty.h, md5.h, oasys.h, objalloc.h, obstack.h, os9k.h, - partition.h, progress.h, safe-ctype.h, sort.h, splay-tree.h, - symcat.h, ternary.h, xregex2.h, xtensa-config.h, - xtensa-isa-internal.h, xtensa-isa.h - -2005-04-25 Kaveh R. Ghazi - - * libiberty.h (unlock_std_streams): New. - -2005-04-19 Kaveh R. Ghazi - - * hashtab.h, libiberty.h, objalloc.h, splay-tree.h, ternary.h: - Don't use the PTR macro. - - * sort.h: Don't use the PARAMS macro. - -2005-04-16 Kaveh R. Ghazi - - * libiberty.h (unlock_stream): New. - -2005-04-13 Kaveh R. Ghazi - - * libiberty.h (fopen_unlocked, fdopen_unlocked, freopen_unlocked): - Remove parameter names. - -2005-04-11 Kaveh R. Ghazi - - * libiberty.h (fopen_unlocked, fdopen_unlocked, freopen_unlocked): - Provide prototypes for new functions. - -2005-03-29 Ian Lance Taylor - - * libiberty.h: Fix indentation. - -2005-03-28 Ian Lance Taylor - - * libiberty.h: Include . - (PEX_RECORD_TIMES, PEX_USE_PIPES, PEX_SAVE_TEMPS): Define. - (PEX_LAST, PEX_SEARCH, PEX_SUFFIX, PEX_STDERR_TO_STDOUT): Define. - (PEX_BINARY_INPUT, PEX_BINARY_OUTPUT): Define. - (pex_init, pex_run, pex_read_output): Declare. - (pex_get_status, pex_get_times, pex_free, pex_one): Declare. - (struct pex_time): Define. - -2005-03-28 Mark Mitchell - - * libiberty.h (ffs): Declare, if necessary. - -2005-03-27 Gabriel Dos Reis - - * ternary.h: Don't use PARAMS anymore. - -2005-03-27 Gabriel Dos Reis - - * md5.h: Remove definition and uses of __P. - * dyn-string.h: Remove uses of PARAMS. - * fibheap.h: Likewise. - * floatformat.h: Likewise. - * hashtab.h: Likewise. - -2005-03-26 Gabriel Dos Reis - - * demangle.h: Remove uses of PARAMS. - - * libiberty.h (ANSI_PROTOTYPES): Remove guard since - ANSI_PROTOTYPES is always assumed. - Remove uses of PARAMS throughout. - -2005-03-24 Kaveh R. Ghazi - - * libiberty.h (xstrndup): Declare. - -2005-03-22 Kaveh R. Ghazi - - * libiberty.h (make_relative_prefix): Add ATTRIBUTE_MALLOC. - -2005-03-22 Bob Wilson - - * xtensa-isa.h: Update a comment and whitespace. - -2005-03-16 H.J. Lu - - * bfdlink.h (bfd_link_info): Add gc_sections. - -2005-03-09 Mark Mitchell - - * libiberty.h (gettimeofday): Declare. - -2005-03-01 Jan Beulich - - * libiberty.h: Declare unlink_if_ordinary. - -2005-02-21 Alan Modra - - * xtensa-isa-internal.h (xtensa_length_decode_fn): Warning fix. - * xtensa-isa.h (xtensa_insnbuf_to_chars): Likewise. - (xtensa_insnbuf_from_chars, xtensa_isa_length_from_chars): Likewise. - -2005-02-14 Paolo Bonzini - - PR bootstrap/19818 - * ansidecl.h (PARAMS): Guard from redefinition. - -2005-02-03 Alan Modra - - * bfdlink.h (struct bfd_link_hash_entry): Add u.undef.weak. - -2005-02-01 Alan Modra - - * bfdlink.h (bfd_link_repair_undef_list): Declare. - -2005-01-10 Andreas Schwab - - * dis-asm.h (struct disassemble_info): Add skip_zeroes and - skip_zeroes_at_end. - -2004-12-11 Ben Elliston - - * fibheap.h (struct fibnode): Only use unsigned long bitfields - when __GNUC__ is defined and ints are less than 32-bits wide. - -2004-11-04 Paul Brook - - * bfdlink.h (bfd_link_info): Add default_imported_symver. - -2004-11-12 Bob Wilson - - * xtensa-isa-internal.h (xtensa_interface_internal): Add class_id. - * xtensa-isa.h (xtensa_interface_class_id): New prototype. - -2004-11-08 Inderpreet Singh - Vineet Sharma - - * dis-asm.h: Add prototype for print_insn_maxq_little. - -2004-10-26 Paul Brook - - * bfdlink.h (struct bfd_link_info): Add create_default_symver. - -2004-10-21 H.J. Lu - - PR 463 - * bfdlink.h (bfd_link_callbacks): Add a pointer to struct - bfd_link_hash_entry to reloc_overflow. - -2004-10-07 Bob Wilson - - * xtensa-config.h (XSHAL_USE_ABSOLUTE_LITERALS, - XCHAL_HAVE_PREDICTED_BRANCHES, XCHAL_INST_FETCH_WIDTH): New. - (XCHAL_EXTRA_SA_SIZE, XCHAL_EXTRA_SA_ALIGN): Delete. - - * xtensa-isa-internal.h (ISA_INTERFACE_VERSION): Delete. - (config_sturct struct): Delete. - (XTENSA_OPERAND_IS_REGISTER, XTENSA_OPERAND_IS_PCRELATIVE, - XTENSA_OPERAND_IS_INVISIBLE, XTENSA_OPERAND_IS_UNKNOWN, - XTENSA_OPCODE_IS_BRANCH, XTENSA_OPCODE_IS_JUMP, - XTENSA_OPCODE_IS_LOOP, XTENSA_OPCODE_IS_CALL, - XTENSA_STATE_IS_EXPORTED, XTENSA_INTERFACE_HAS_SIDE_EFFECT): Define. - (xtensa_format_encode_fn, xtensa_get_slot_fn, xtensa_set_slot_fn): New. - (xtensa_insn_decode_fn): Rename to ... - (xtensa_opcode_decode_fn): ... this. - (xtensa_immed_decode_fn, xtensa_immed_encode_fn, xtensa_do_reloc_fn, - xtensa_undo_reloc_fn): Update. - (xtensa_encoding_template_fn): Delete. - (xtensa_opcode_encode_fn, xtensa_format_decode_fn, - xtensa_length_decode_fn): New. - (xtensa_format_internal, xtensa_slot_internal): New types. - (xtensa_operand_internal): Delete operand_kind, inout, isPCRelative, - get_field, and set_field fields. Add name, field_id, regfile, - num_regs, and flags fields. - (xtensa_arg_internal): New type. - (xtensa_iclass_internal): Change operands field to array of - xtensa_arg_internal. Add num_stateOperands, stateOperands, - num_interfaceOperands, and interfaceOperands fields. - (xtensa_opcode_internal): Delete length, template, and iclass fields. - Add iclass_id, flags, encode_fns, num_funcUnit_uses, and funcUnit_uses. - (opname_lookup_entry): Delete. - (xtensa_regfile_internal, xtensa_interface_internal, - xtensa_funcUnit_internal, xtensa_state_internal, - xtensa_sysreg_internal, xtensa_lookup_entry): New. - (xtensa_isa_internal): Replace opcode_table field with opcodes field. - Change type of opname_lookup_table. Delete num_modules, - module_opcode_base, module_decode_fn, config, and has_density fields. - Add num_formats, formats, format_decode_fn, length_decode_fn, - num_slots, slots, num_fields, num_operands, operands, num_iclasses, - iclasses, num_regfiles, regfiles, num_states, states, - state_lookup_table, num_sysregs, sysregs, sysreg_lookup_table, - max_sysreg_num, sysreg_table, num_interfaces, interfaces, - interface_lookup_table, num_funcUnits, funcUnits and - funcUnit_lookup_table fields. - (xtensa_isa_module, xtensa_isa_modules): Delete. - (xtensa_isa_name_compare): New prototype. - (xtisa_errno, xtisa_error_msg): New. - * xtensa-isa.h (XTENSA_ISA_VERSION): Define. - (xtensa_isa): Change type. - (xtensa_operand): Delete. - (xtensa_format, xtensa_regfile, xtensa_state, xtensa_sysreg, - xtensa_interface, xtensa_funcUnit, xtensa_isa_status, - xtensa_funcUnit_use): New types. - (libisa_module_specifier): Delete. - (xtensa_isa_errno, xtensa_isa_error_msg): New prototypes. - (xtensa_insnbuf_free, xtensa_insnbuf_to_chars, - xtensa_insnbuf_from_chars): Update prototypes. - (xtensa_load_isa, xtensa_extend_isa, xtensa_default_isa, - xtensa_insn_maxlength, xtensa_num_opcodes, xtensa_decode_insn, - xtensa_encode_insn, xtensa_insn_length, - xtensa_insn_length_from_first_byte, xtensa_num_operands, - xtensa_operand_kind, xtensa_encode_result, - xtensa_operand_isPCRelative): Delete. - (xtensa_isa_init, xtensa_operand_inout, xtensa_operand_get_field, - xtensa_operand_set_field, xtensa_operand_encode, - xtensa_operand_decode, xtensa_operand_do_reloc, - xtensa_operand_undo_reloc): Update prototypes. - (xtensa_isa_maxlength, xtensa_isa_length_from_chars, - xtensa_isa_num_pipe_stages, xtensa_isa_num_formats, - xtensa_isa_num_opcodes, xtensa_isa_num_regfiles, xtensa_isa_num_states, - xtensa_isa_num_sysregs, xtensa_isa_num_interfaces, - xtensa_isa_num_funcUnits, xtensa_format_name, xtensa_format_lookup, - xtensa_format_decode, xtensa_format_encode, xtensa_format_length, - xtensa_format_num_slots, xtensa_format_slot_nop_opcode, - xtensa_format_get_slot, xtensa_format_set_slot, xtensa_opcode_decode, - xtensa_opcode_encode, xtensa_opcode_is_branch, xtensa_opcode_is_jump, - xtensa_opcode_is_loop, xtensa_opcode_is_call, - xtensa_opcode_num_operands, xtensa_opcode_num_stateOperands, - xtensa_opcode_num_interfaceOperands, xtensa_opcode_num_funcUnit_uses, - xtensa_opcode_funcUnit_use, xtensa_operand_name, - xtensa_operand_is_visible, xtensa_operand_is_register, - xtensa_operand_regfile, xtensa_operand_num_regs, - xtensa_operand_is_known_reg, xtensa_operand_is_PCrelative, - xtensa_stateOperand_state, xtensa_stateOperand_inout, - xtensa_interfaceOperand_interface, xtensa_regfile_lookup, - xtensa_regfile_lookup_shortname, xtensa_regfile_name, - xtensa_regfile_shortname, xtensa_regfile_view_parent, - xtensa_regfile_num_bits, xtensa_regfile_num_entries, - xtensa_state_lookup, xtensa_state_name, xtensa_state_num_bits, - xtensa_state_is_exported, xtensa_sysreg_lookup, - xtensa_sysreg_lookup_name, xtensa_sysreg_name, xtensa_sysreg_number, - xtensa_sysreg_is_user, xtensa_interface_lookup, xtensa_interface_name, - xtensa_interface_num_bits, xtensa_interface_inout, - xtensa_interface_has_side_effect, xtensa_funcUnit_lookup, - xtensa_funcUnit_name, xtensa_funcUnit_num_copies): New prototypes. -2004-10-07 Jeff Baker - - * bfdlink.h (bfd_link_info): Add bitfield: warn_shared_textrel. - -2004-09-17 Alan Modra - - * bfdlink.h (struct bfd_link_hash_entry): Move und_next into elements - of union. - -2004-09-13 Aaron W. LaFramboise - - * libiberty.h (basename): Prototype for __MINGW32__. - -2004-09-04 Kaveh R. Ghazi - - * ansidecl.h (ATTRIBUTE_SENTINEL): Define. - * libiberty.h (concat, reconcat, concat_length, concat_copy, - concat_copy2): Use ATTRIBUTE_SENTINEL. - -2004-08-13 Alan Modra - - * bfdlink.h (struct bfd_link_callbacks): Remove "error_handler". - (LD_DEFINITION_IN_DISCARDED_SECTION): Delete. - -2004-08-02 Gabriel Dos Reis - - * libiberty.h (XDELETE, XDELETEVEC, XRESIZEVEC): Remove any - const-qualification before disposal. - -2004-07-24 Bernardo Innocenti - - * ansidecl.h (ARG_UNUSED): New Macro. - -2004-07-23 H.J. Lu - - * bin-bugs.h (REPORT_BUGS_TO): Set to - "". - -2004-07-21 Paolo Bonzini - - * ansidecl.h (ATTRIBUTE_PURE): New. - -2004-07-13 Bernardo Innocenti - - * libiberty.h (XNEW, XCNEW, XNEWVEC, XCNEWVEC, XOBNEW): Move here from - libcpp/internal.h. - (XDELETE, XRESIZEVEC, XDELETEVEC, XNEWVAR, XCNEWVAR, XRESIZEVAR): New - macros. - -2004-07-13 Bernardo Innocenti - - * libiberty.h (ASTRDUP): Add casts required for stricter - type conversion rules of C++. - * obstack.h (obstack_free): Likewise. - -2004-07-07 Tomer Levi - - * dis-asm.h (print_insn_crx): Declare. - -2004-06-24 Alan Modra - - * bfdlink.h (struct bfd_link_order): Update comment. - -2004-05-11 Jakub Jelinek - - * bfdlink.h (struct bfd_link_info): Add relro, relro_start and - relro_end fields. - -2004-05-04 Andreas Jaeger - - * demangle.h: Do not use C++ reserved keyword typename as - parameter for cplus_demangle_fill_builtin_type. - -2004-04-22 Richard Henderson - - * hashtab.h (struct htab): Add size_prime_index. - -2004-04-13 Jeff Law - - * hashtab.h (htab_remove_elt_with_hash): Prototype new function. - -2004-03-30 Zack Weinberg - - * hashtab.h, splay-tree.h: Use new shorter form of GTY markers. - -2004-03-25 Stan Shebs - - * mpw/: Remove subdirectory and everything in it. - -2004-03-23 Alan Modra - - PR 51. - * bfdlink.h (struct bfd_link_info): Add wrap_char. - -2004-03-20 H.J. Lu - - * bfdlink.h (bfd_link_info): Correct comments for the - unresolved_syms_in_objects field. - -2004-02-24 Ian Lance Taylor - - * dyn-string.h: Update copyright date. - -2004-02-23 Ian Lance Taylor - - * dyn-string.h: Remove test of IN_LIBGCC2 and IN_GLIBCPP_V3 and - the associated #defines. - -2004-01-12 Ian Lance Taylor - - * demangle.h: Instead of checking ANSI_PROTOTYPES, just include - "libiberty.h". - - * demangle.h: If ANSI_PROTOTYPES is defined, include . - - * demangle.h (enum demangle_component_type): Define. - (struct demangle_operator_info): Declare. - (struct demangle_builtin_type_info): Declare. - (struct demangle_component): Define. - (cplus_demangle_fill_component): Declare. - (cplus_demangle_fill_name): Declare. - (cplus_demangle_fill_builtin_type): Declare. - (cplus_demangle_fill_operator): Declare. - (cplus_demangle_fill_extended_operator): Declare. - (cplus_demangle_fill_ctor, cplus_demangle_fill_dtor): Declare. - (cplus_demangle_v3_components): Declare. - (cplus_demangle_print): Declare. - -For older changes see ChangeLog-9103 - -Local Variables: -mode: change-log -left-margin: 8 -fill-column: 74 -version-control: never -End: diff --git a/include/ChangeLog-9103 b/include/ChangeLog-9103 deleted file mode 100644 index f4f7aa1a5e1..00000000000 --- a/include/ChangeLog-9103 +++ /dev/null @@ -1,2682 +0,0 @@ -2003-12-19 Andreas Tobler - - * include/fibheap.h (fibnode): Use __extension__ for - bit-fields mark and degree if __GNUC__. - -2003-12-18 Kazu Hirata - - * include/fibheap.h (fibnode): Use unsigned long int for - bit-fields if __GNUC__ is defined. - -2003-12-19 Andreas Tobler - - * fibheap.h (fibnode): Use __extension__ for - bit-fields mark and degree if __GNUC__. - -2003-12-18 Kazu Hirata - - * fibheap.h (fibnode): Use unsigned long int for - bit-fields if __GNUC__ is defined. - -2003-12-04 H.J. Lu - - * bfdlink.h (bfd_link_info): Change relax_finalizing to - need_relax_finalize. - -2003-12-03 Alan Modra - - * bfdlink.h (struct bfd_link_hash_entry): Rename "next" to "und_next". - -2003-12-02 Alan Modra - - * bfdlink.h (struct bfd_link_info): Remove mpc860c0 field. - -2003-11-14 Nick Clifton - - * dis-asm.h (struct disassemble_info): Add new field - 'symbol_is_valid' which is a function which can tell the - disassembler to skip certain symbols as they should not be - displayed to the user. - (arm_symbol_is_valid): New prototype. This is the ARM - specific function for the symbol_is_valid field. - (generic_symbol_is_valid): New prototype. This is the default - function pointed to by the symbol_is_valid field. - -2003-11-06 Bruno Rohee - - * hp-symtab.h: Fix "the the" typo. - -2003-10-24 H.J. Lu - - * bfdlink.h (bfd_elf_version_expr): Add "symbol" and remove - "wildcard". - -2003-10-22 Joseph S. Myers - - * obstack.h: Merge the following change from gnulib: - 2003-10-21 Paul Eggert - * obstack.h (obstack_1grow_fast): Properly parenthesize arg. - (obstack_ptr_grow_fast, obstack_int_grow_fast): - Don't use lvalue casts, as GCC plans to remove support for them - in GCC 3.5. Reported by Joseph S. Myers. This bug - was also present in the non-GCC version, indicating that this - code had always been buggy and had never been widely used. - (obstack_1grow, obstack_ptr_grow, obstack_int_grow, obstack_blank): - Use the fast variant of each macro, rather than copying the - definiens of the fast variant; that way, we'll be more likely to - catch future bugs in the fast variants. - -2003-10-22 Jakub Jelinek - - * bfdlink.h (struct bfd_elf_version_expr): Remove match field. - Add wildcard and mask fields. - (BFD_ELF_VERSION_C_TYPE): Define. - (BFD_ELF_VERSION_CXX_TYPE): Likewise. - (BFD_ELF_VERSION_JAVA_TYPE): Likewise. - (struct bfd_elf_version_expr_head): New. - (struct bfd_elf_version_tree): Add match field. - Change type of globals and locals fields - to struct bfd_elf_version_expr_head. - -2003-09-22 Andrew Cagney - - * floatformat.h (struct floatformat): Add field "is_valid". - -2003-09-15 Andrew Cagney - - * floatformat.h (floatformat_to_double): Make input buffer constant. - (floatformat_from_double, floatformat_is_valid): Ditto. - -2003-09-15 Andrew Cagney - - * floatformat.h (struct floatformat): Make "exp_bias" signed. - -2003-09-15 Daniel Jacobowitz - - * floatformat.h (floatformat_is_valid): Add prototype. - -2003-08-27 Andrew Cagney - - * dis-asm.h (init_disassemble_info): Declare. - (INIT_DISASSEMBLE_INFO): Redefine as a call to - init_disassemble_info. - (INIT_DISASSEMBLE_INFO_NO_ARCH): Ditto. - -2003-08-20 Nick Clifton - - * bfdlink.h (enum report_method): New enum. Describes how to - report something. - (struct bfd_link_info): Delete fields 'no_undefined' and - 'allow_shlib_undefined'. Replace with - 'unresolved_symbols_in_objects' and - 'unresolved_symbols_in_shared_libs'. - -2003-08-07 Alan Modra - - * bfdlink.h: Remove PARAMS macro. Replace PTR with void *. - * dis-asm.h: Likewise. - -2003-07-09 Bob Wilson - - * xtensa-config.h: Undef all macros before defining them. - -2003-07-06 H.J. Lu - - * demangle.h: Support C++. - -2003-07-01 Zack Weinberg - - * filenames.h: New file imported from binutils. - -2003-06-30 Bob Wilson - - * xtensa-config.h: New file imported from binutils. - -2003-06-30 Bob Wilson - - * xtensa-config.h (XCHAL_HAVE_CONST16, XCHAL_HAVE_ABS, - XCHAL_HAVE_ADDX, XCHAL_HAVE_L32R): Define. - -2003-06-25 Alan Modra - - * bfdlink.h: Correct spelling of "relocatable". - -2003-06-22 Zack Weinberg - - * safe-ctype.h (HC_UNKNOWN, HC_ASCII, HC_EBCDIC): Rename to - HOST_CHARSET_UNKNOWN, HOST_CHARSET_ASCII, HOST_CHARSET_EBCDIC - respectively. - -2003-06-21 Zack Weinberg - - * safe-ctype.h (HC_UNKNOWN, HC_ASCII, HC_EBCDIC, HOST_CHARSET): - New #defines. - -2003-06-17 Kaveh R. Ghazi - - * ansidecl.h: Delete HAVE_LONG_DOUBLE GCC bootstrap support. - -2003-05-23 Jakub Jelinek - - * bfdlink.h (struct bfd_link_info): Add execstack and noexecstack. - -2003-06-03 H.J. Lu - - * bfdlink.h (LD_DEFINITION_IN_DISCARDED_SECTION): New. - -2003-05-30 Ulrich Drepper - Jakub Jelinek - - * bfdlink.h (struct bfd_link_info): Add pie and executable - bits. - -2003-05-21 Nick Clifton - - * bfdlink.h (struct bfd_link_hash_table): Fix typo in comment. - -2003-05-15 Jim Blandy - - * libiberty.h (hex_value): Make the value an unsigned int, to - avoid unexpected sign-extension when cast to unsigned types larger - than int --- like bfd_vma, on some platforms. - (_hex_value): Update declaration. - -2003-05-09 Alan Modra - - * xtensa-isa-internal.h (xtensa_isa_module_struct): Remove const on - gen_num_opcodes_fn return type. - -2003-05-07 Jason Merrill - - * hashtab.h (iterative_hash): Prototype. - (iterative_hash_object): New macro. - -2003-04-28 H.J. Lu - - * bfdlink.h (bfd_link_info): Add relax_finalizing. - -2003-04-23 H.J. Lu - - * bfdlink.h (bfd_link_callbacks): Add error_handler. - -2003-04-02 Bob Wilson - - * xtensa-config.h: Remove comment indicating that this is a - generated file. - -2003-04-01 Bob Wilson - - * dis-asm.h (print_insn_xtensa): Declare. - * xtensa-config.h: New file. - * xtensa-isa-internal.h: Likewise. - * xtensa-isa.h: Likewise. - -2003-03-17 Kaveh R. Ghazi - - * ansidecl.h (ATTRIBUTE_NONNULL, ATTRIBUTE_NULL_PRINTF, - ATTRIBUTE_NULL_PRINTF_1, ATTRIBUTE_NULL_PRINTF_2, - ATTRIBUTE_NULL_PRINTF_3, ATTRIBUTE_NULL_PRINTF_4, - ATTRIBUTE_NULL_PRINTF_5): New. - (ATTRIBUTE_PRINTF): Add ATTRIBUTE_NONNULL. - -2003-03-17 Jan Hubicka - - * hashtab.h (htab_traverse_noresize): Declare. - -2003-02-27 Kaveh R. Ghazi - - * libiberty.h: Document return value of physmem routines. - -2003-02-20 Kaveh R. Ghazi - - * libiberty.h (physmem_total, physmem_available): Prototype. - -2003-02-20 Daniel Jacobowitz - - * libiberty.h (lrealpath): Add declaration. - -2003-01-31 Grant Grundler - - * hppa.h (ldwa, ldda): Add ordered opcodes. - -2003-01-26 Daniel Jacobowitz - - * hashtab.h (htab_alloc_with_arg, htab_free_with_arg): Add new types. - (struct htab): Add alloc_arg, alloc_with_arg_f, free_with_arg_f. - (htab_create_alloc_ex): New prototype. - (htab_set_functions_ex): New prototype. - -2002-07-17 Geoffrey Keating - - * splay-tree.h (GTY): Define if undefined. - (splay_tree_allocate_fn): Return PTR for compatibility, not void *. - (struct splay_tree_node_s): Support gengtype. - (struct splay_tree_s): Likewise. Make allocate_data a PTR, - not a void *. - -2002-01-02 Ben Elliston - - * dis-asm.h (print_insn_iq2000): Declare. - -2002-12-24 Dmitry Diky - - * dis-asm.h: Add msp430 disassembler prototype. - -2002-12-27 Chris Demetriou - - * dis-asm.h (print_mips_disassembler_options): Prototype. - -2002-12-23 Alan Modra - - * bfdlink.h (struct bfd_link_info): Add "strip_discarded". - -2002-12-20 Alan Modra - - * bfdlink.h (struct bfd_link_info): Replace bfd_boolean fields with - bit-fields. Rearrange to put all like types together. - -2002-11-30 Alan Modra - - * bfdlink.h: Replace boolean with bfd_boolean. Formatting. - -2002-11-23 Simon Burge - - * libiberty.h (basename): Add NetBSD to the list. - -2002-11-22 Daniel Jacobowitz - - * libiberty.h (make_relative_prefix): Add prototype. - -2002-11-14 Egor Duda - - * bfdlink.h (struct bfd_link_info): Add new boolean - field pei386_runtime_pseudo_reloc. - -2002-10-26 Roger Sayle - - * partition.h: Close the extern "C" scope when compiling with C++. - -2002-10-26 Roger Sayle - DJ Delorie - - PR bootstrap/8351 - * getopt.h: Avoid prototyping getopt with no arguments in C++. - -2002-10-24 Nathan Tallent - - * ansidecl.h (__STDC__): Add (__alpha && __cplusplus) to the - list of platform compilers that may look, smell and act - like __STDC__ but that may not define it. - -2002-10-11 David O'Brien - - * getopt.h: getopt is in unistd.h (based on SUSv2). - -2002-09-26 Andrew Cagney - - * regs/: Delete directory. - -2002-09-19 Alexandre Oliva - - * libiberty.h (asprintf, vasprintf): Don't declare them if the - corresponding HAVE_DECL_ macro is 1. - -2002-09-19 Nathan Tallent - - * dis-asm.h: Remove (errant) trailing semicolon (;) from the - extern "C" { } declaration. - -2002-09-04 Nick Clifton - - * dis-asm.h (print_ppc_disassembler_options): Prototype. - -2002-08-28 Michael Hayes - - * dis-asm.h: Add standard disassembler for tic4x. - -2002-08-07 H.J. Lu - - * bfdlink.h (bfd_link_info): Add allow_undefined_version. - (bfd_elf_version_expr): Add symver and script. - -2002-07-31 Ian Dall - - * bfdlink.h (bfd_link_common_skip_ar_symbols): New enum. - (struct bfd_link_info): Add new field 'common_skip_ar_symbols'. - -2002-07-19 Denis Chertykov - Matthew Green - - * dis-asm.h (print_insn_ip2k): Declare. - -2002-07-01 Alan Modra - - * bfdlink.h (struct bfd_sym_chain): Declare. - (struct bfd_link_info): Add gc_sym_list. Formatting fixes. - -2002-06-25 Alan Modra - - * demangle.h: #include "ansidecl.h" rather than #include . - * fibheap.h: Likewise. - * hashtab.h: Likewise. - * partition.h: Likewise. - * sort.h: Likewise. - * splay-tree.h: Likewise. - -2002-06-24 Alan Modra - - * libiberty.h (basename): Don't declare if HAVE_DECL_BASENAME. - * getopt.h (getopt): Don't declare if HAVE_DECL_GETOPT. - -2002-06-18 Dave Brolley - - From Catherine Moore: - * dis-asm.h (print_insn_frv): New prototype. - -2002-06-09 Andrew Cagney - - * remote-sim.h: Move to directory gdb/. - * callback.h: Move to directory gdb/. - -2002-06-07 Charles Wilson - - * bfdlink.h (struct bfd_link_info): Change type of - pei386_auto_import field to int so that -1 can mean enabled by - default and 1 can mean enabled by command line switch. - -2002-06-06 DJ Delorie - - * hashtab.h (htab): Rearrange new members for backward - compatibility. - (htab_create): Don't use a macro that requires other headers. - -2002-06-05 Geoffrey Keating - - * hashtab.h (htab_create): Restore prototype for backward - compatibility. - (htab_try_create): Likewise. - -2002-05-22 Geoffrey Keating - - * hashtab.h (struct htab): Update for change to length specifier. - -2002-05-10 Geoffrey Keating - - * hashtab.h (GTY): Define if undefined. - (htab_alloc): New typedef. - (htab_free): New typedef. - (struct htab): Support gengtype; allow user-specified memory - allocation. - (htab_create_alloc): New. - (htab_create): Replace with #define. - (htab_try_create): Delete. - -2002-05-28 Kuang Hwa Lin - - * dis-asm.h: Prototype print_insn_dlx. - -2002-05-23 Andrew Cagney - - * sim-d10v.h: Delete file. Moved to include/gdb/. - -2002-05-21 H.J. Lu (hjl@gnu.org) - - * bfdlink.h (bfd_link_info): Add allow_multiple_definition. - -2002-05-17 J"orn Rennecke - - * dis-asm.h (print_insn_shl, print_insn_sh64l): Remove prototype. - -2002-04-16 David S. Miller - - * xregex2.h (__restrict_arr): Define to __restrict on GCC - 3.1 and later. Do not redefine. - -2002-04-01 Phil Edwards - - * dyn-string.h: Also allow IN_GLIBCPP_V3 to redefine names. - -2002-03-10 Daniel Jacobowitz - - * gdb: New directory. - -2002-03-06 Andrew Cagney - - * floatformat.h (floatformat_arm_ext): Delete declaration. - -2002-02-21 Jim Blandy - - Allow the user to specify functions for allocating memory for - splay tree roots and nodes. - * splay-tree.h (splay_tree_allocate_fn, splay_tree_deallocate_fn): - New types. - (splay_tree): New fields: `allocate', `deallocate', and - `allocate_data'. - (splay_tree_new_with_allocator): New function declaration. - -2002-02-15 Alan Modra - - Support arbitrary length fill patterns. - * bfdlink.h (enum bfd_link_order_type): Remove bfd_fill_link_order. - (struct bfd_link_order): Remove fill. Add data.size. - -2002-02-08 Alexandre Oliva - - Contribute sh64-elf. - 2000-11-25 Hans-Peter Nilsson - * dis-asm.h (print_insn_sh64): New prototype. - (print_insn_sh64l): New prototype. - (print_insn_sh64x_media): New prototype. - -2002-02-05 Frank Ch. Eigler - - * dis-asm.h (disassemble_info): New field `insn_sets'. - (INIT_DISASSEMBLE_INFO): Clear it. - -2002-02-05 Jason Merrill - - * demangle.h (cplus_demangle_v3): Add "options" parm. - (cplus_demangle_v3_type): Remove prototype. - (DMGL_VERBOSE): New macro. - (DMGL_TYPES): New macro. - -2002-02-02 H.J. Lu (hjl@gnu.org) - - * demangle.h (cplus_demangle_v3_type): New prototype. - -2002-01-31 Ivan Guzvinec - - * dis-asm.h : Add support for or32 targets - -2002-01-28 Kaveh R. Ghazi - - * libiberty.h (C_alloca): Add ATTRIBUTE_MALLOC. - -2002-01-27 David O'Brien - - * cgen.h (BFD_VERSION): Use BFD_VERSION_DATE instead. - -2001-12-14 Nick Clifton - - * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialise the - disassembler_options field (to NULL). - -2001-12-13 Jakub Jelinek - - * bfdlink.h (struct bfd_link_info): Add eh_frame_hdr field. - -2001-12-07 Geoffrey Keating - - * dis-asm.h (print_insn_xstormy16): Declare. - -2001-12-06 Richard Henderson - - * demangle.h (no_demangling): New. - (NO_DEMANGLING_STYLE_STRING): New. - -2001-11-14 Alan Modra - - * dis-asm.h (print_insn_i386): Declare. - -2001-11-11 Timothy Wall - - * dis-asm.h: Fix comment to refer to octets rather than bytes. - -2001-10-30 Hans-Peter Nilsson - - * dis-asm.h (print_insn_mmix): Add prototype. - -2001-10-24 Neil Booth - - * safe-ctype.h (_sch_isbasic, IS_ISOBASIC): New. - -2001-10-22 Kaveh R. Ghazi - - * libiberty.h (hex_init): Revert delete. - - * libiberty.h (_hex_value): Const-ify. - (hex_init): Delete. - -2001-10-16 Christopher Faylor - - * filenames.h: Add cygwin to the list of dosish style path systems. - -2001-10-07 Kaveh R. Ghazi - - * demangle.h (demangler_engine): Const-ify. - * libiberty.h (buildargv): Likewise. - -2001-10-03 Vassili Karpov - - * bfdlink.h (struct bfd_link_info): Add nocopyreloc field. - -2001-09-24 Kaveh R. Ghazi - - * libiberty.h (reconcat): New function. - -2001-09-18 Kaveh R. Ghazi - - * libiberty.h (concat, concat_length, concat_copy, concat_copy2, - ACONCAT): Improve comments. - -2001-09-18 Alan Modra - - * objalloc.h (OBJALLOC_ALIGN): Define using offsetof. - -2001-09-17 Kaveh R. Ghazi - - * libiberty.h (concat_length, concat_copy, concat_copy2, - libiberty_concat_ptr, ACONCAT): New. - - * libiberty.h (ASTRDUP): New macro. - libiberty_optr, libiberty_nptr, libiberty_len): Declare. - -2001-08-29 Kaveh R. Ghazi - - * ansidecl.h: Update comments reflecting previous change. - -2001-08-27 Kaveh R. Ghazi - - * ansidecl.h (VA_OPEN, VA_CLOSE): Allow multiple uses. - -2001-08-25 Nick Clifton - - * bfdlink.h (struct bfd_link_info): Change 'spare_dynamic_tags' to - unsigned to remove a compile time warning message. - -2001-08-24 H.J. Lu - - * bfdlink.h (bfd_link_hash_table_type): New. The linker hash - table type, bfd_link_generic_hash_table and - bfd_link_elf_hash_table. - (bfd_link_hash_table): Add a new field, type, for the linker - hash table type. - -2001-08-23 Jakub Jelinek - - * bfdlink.h (struct bfd_link_info): Add combreloc and - spare_dynamic_tags fields. - -2001-08-23 Lars Brinkhoff - - * dyn-string.h, fibheap.h, partition.h, sort.h, splay-tree.h: - replace "GNU CC" with "GCC". - -2001-08-21 Richard Henderson - - * fibheap.h: Tidy formatting. - (fibnode_t): Limit degree to 31 bits to avoid warning. - -2001-08-20 Daniel Berlin - - * fibheap.h: New file. Fibonacci heap. - -2001-08-20 Andrew Cagney - - * floatformat.h (floatformat_arm_ext): Document as deprecated. - (floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword) - (floatformat_ia64_spill_little, floatformat_ia64_quad_little) - (floatformat_ia64_spill_big, floatformat_ia64_quad_big) - (floatformat_m88110_harris_ext): Declare. - -2001-08-18 Zack Weinberg - - * ansidecl.h: Reorganize for readability, remove documentation - of obsolete macros, document PARAMS and VPARAMS. Add new - macros VA_OPEN, VA_CLOSE, and VA_FIXEDARG for nicer variadic - function implementation. - -2001-08-16 Richard Henderson - - * hashtab.h (htab_hash_string): Declare. - -2001-08-10 Andrew Cagney - - * libiberty.h (lbasename): Change function declaration to return a - const char pointer. - -2001-08-02 Mark Kettenis - - * xregex.h (_REGEX_RE_COMP): Define. - (re_comp): Define to xre_comp. - (re_exec): Define to xre_exec. - -2001-08-02 Charles Wilson - - * bfdlink.h (struct bfd_link_info): add new boolean - field pei386_auto_import. - -2001-07-18 Andreas Jaeger - - * xregex2.h: Place under LGPL version 2.1. - -2001-07-10 Jeff Johnston - - * xregex.h: New file to support libiberty regex. - * xregex2.h: Ditto. - -2001-06-15 Hans-Peter Nilsson - - * bfdlink.h (struct bfd_link_info): New member export_dynamic. - -2001-05-16 Matt Kraai - - * partition.h: Fix misspelling of `implementation'. - -2001-05-10 Kaveh R. Ghazi - - * ansidecl.h (NULL_PTR): Delete. - -2001-05-07 Zack Weinberg - - * demangle.h: Use PARAMS for all prototypes. - * ternary.h: Use PARAMS for all prototypes. Use PTR, not void *. - Make arguments constant where possible. - -2001-05-07 Mark Mitchell - - * splay-tree.h (splay_tree_max): New function. - (splay_tree_min): Likewise. - -2001-04-27 Johan Rydberg - - * dis-asm.h (print_insn_openrisc): Add prototype. - -2001-04-15 Daniel Berlin - - * ternary.h: New file - Ternary search tree header. - -2001-04-13 Jakub Jelinek - - * bfdlink.h (bfd_link_discard): Add discard_sec_merge. - -2001-04-03 Zack Weinberg - - * ansidecl.h: All logic from gcc/gansidecl.h moved here. - -2001-03-31 Kaveh R. Ghazi - - * libiberty.h (alloca): Handle setting C_ALLOCA. - -2001-03-20 Jim Blandy - - * demangle.h (enum gnu_v3_constructor_kinds, - is_gnu_v3_mangled_ctor, enum gnu_v3_destructor_kinds, - is_gnu_v3_mangled_dtor): New declarations. - -2001-03-14 Nick Clifton - - * ansidecl.h: Fix copyright dates. - * demangle.h: Fix copyright dates. - * floatformat.h: Fix copyright dates. - * fnmatch.h: Fix copyright dates. - * getopt.h: Fix copyright dates. - * libiberty.h: Add FSF copyright notice. - * md5.h: Fix copyright dates. - * obstack.h: Fix copyright dates. - * splay-tree.h: Fix copyright dates. - -2001-03-10 Neil Booth - John David Anglin - - * libiberty.h: Add lbasename. - -2001-03-06 Zack Weinberg - - * libiberty.h: Prototype C_alloca; define alloca to either - __builtin_alloca or C_alloca as appropriate. - -2001-03-01 John David Anglin - - * safe-ctype.h (_sch_test): Cast enum bit to unsigned short int for pcc - compatibility. - -2001-02-18 lars brinkhoff - - * dis-asm.h: Add PDP-11 target. - -2001-02-09 Martin Schwidefsky - - * dis-asm.h: Add linux target for S/390. - -2001-01-11 Peter Targett - - * dis-asm.h (arc_get_disassembler): Correct declaration. - -2001-01-09 Philip Blundell - - * bin-bugs.h (REPORT_BUGS_TO): Set to `bug-binutils@gnu.org'. - -2000-12-18 Joseph S. Myers - - * COPYING: Update to current - ftp://ftp.gnu.org/pub/gnu/Licenses/COPYING-2.0 (fixes references - to 19yy as example year in copyright notice). - -2000-12-19 Hans-Peter Nilsson - - * dis-asm.h (struct disassemble_info): New member "section". - (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize private_data member. - Initialize section member. - -2000-12-16 Herman A.J. ten Brugge - - * safe-ctype.h: Make code work on all targets and not just on - targets where a char is 8 bits. - -2000-12-10 Fred Fish - - * bfdlink.h (struct bfd_link_info): Add new allow_shlib_undefined - member to struct for systems where it is normal to have undefined - symbols in shared libraries at runtime and the runtime linker - takes care of redirecting them. - -2000-12-07 Zack Weinberg - - * safe-ctype.h: New file. - -2000-12-06 Rodney Brown - - * getopt.h obstack.h: Standarize copyright statement. - -2000-12-04 Richard Henderson - - * demangle.h: Change "new_abi" to "v3" everywhere. - -2000-11-22 Zack Weinberg - - * libiberty.h: Move #includes to top. Prototype xmalloc_failed. - -2000-11-15 Kenneth Block - - * demangle.h: Add gnat and java demangle styles. - -2000-11-04 Hans-Peter Nilsson - - * hashtab.h (struct htab): Add member return_allocation_failure. - (htab_try_create): New prototype. Mention which functions may - return NULL when this is used. - -2000-11-03 Hans-Peter Nilsson - - * hashtab.h: Change void * to PTR where necessary. - -2000-10-11 Mark Mitchell - - * splay-tree.h (splay_tree_predecessor): Declare. - -2000-09-29 Hans-Peter Nilsson - - * dis-asm.h: Declare cris_get_disassembler, not print_insn_cris. - Fix typo in comment. - -2000-09-28 John David Anglin - - * alloca-conf.h: New file (copied from libiberty). - -2000-09-05 John David Anglin - - * md5.h (md5_uint32): Choose via INT_MAX instead of UINT_MAX. - -2000-09-04 Alex Samuel - - * dyn-string.h: Adjust formatting. - (dyn_string_insert_char): New macro. New declaration. - -2000-08-28 Jason Merrill - - * md5.h: New file. - -2000-08-24 Greg McGary - - * libiberty.h (ARRAY_SIZE): New macro. - -2000-07-29 Nick Clifton - - * os9k.h: Add copyright notice. - Fix formatting. - -2000-07-22 Jason Eckhardt - - * dis-asm.h (print_insn_i860): Add prototype. - -2000-07-20 H.J. Lu - - * bfdlink.h (bfd_link_info): Add new_dtags. - -2000-07-20 Hans-Peter Nilsson - - * dis-asm.h (print_insn_cris): Declare. - -2000-07-19 H.J. Lu (hjl@gnu.org) - - * bfdlink.h (bfd_link_info): Add flags and flags_1. - -2000-06-05 DJ Delorie - - * MAINTAINERS: new - -2000-06-21 Alex Samuel - - * dyn-string.h (dyn_string_init, dyn_string_new, - dyn_string_delete, dyn_string_release, dyn_string_resize, - dyn_string_clear, dyn_string_copy, dyn_string_copy_cstr, - dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert, - dyn_string_insert_cstr, dyn_string_append, dyn_string_append_cstr, - dyn_string_append_char, dyn_string_substring_dyn_string_eq): - Define as same name with __cxa_ prepended, if IN_LIBGCC2. - (dyn_string_init, dyn_string_copy, dyn_string_copy_cstr, - dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert, - dyn_string_insert_cstr, dyn_string_append, dyn_string_append_cstr, - dyn_string_append_char, dyn_string_substring): Change return type - to int. - -2000-06-18 Stephane Carrez - - * dis-asm.h (print_insn_m68hc12): Define. - (print_insn_m68hc11): Likewise. - -2000-06-18 Nick Clifton - - * os9k.h: Change values of MODSYNC and CRCCON due to bug report - from Russ Magee . - -2000-06-07 Kaveh R. Ghazi - - * demangle.h (demangling_styles): Remove trailing comma in enum. - - * dyn-string.h (dyn_string_append_char): Change parameter from - char to int. - -2000-06-04 Alex Samuel - - * dyn-string.h: Move here from gcc/dyn-string.h. Add new functions. - - * demangle.h (DMGL_GNU_NEW_ABI): New macro. - (DMGL_STYLE_MASK): Or in DMGL_GNU_NEW_ABI. - (current_demangling_style): Add gnu_new_abi_demangling. - (GNU_NEW_ABI_DEMANGLING_STYLE_STRING): New macro. - (GNU_NEW_ABI_DEMANGLING): Likewise. - (cplus_demangle_new_abi): New declaration. - -Tue May 30 16:53:34 2000 Andrew Cagney - - * floatformat.h (struct floatformat): Add field name. - -2000-05-26 Eli Zaretskii - - * filenames.h: New file. - (HAVE_DOS_BASED_FILE_SYSTEM, IS_DIR_SEPARATOR) - (IS_ABSOLUTE_PATH, FILENAME_CMP): New macros. - -2000-05-23 Kaveh R. Ghazi - - * getopt.h (getopt): Also check HAVE_DECL_* when prototyping. - - * libiberty.h (basename): Likewise. - -2000-05-17 S. Bharadwaj Yadavalli - Rick Gorton - - * bfdlink.h (struct bfd_link_info): Add emitrelocations flag. - -2000-05-08 Alan Modra - - * dis-asm.h (print_insn_tic54x): Declare. - -2000-05-06 Zack Weinberg - - * ansidecl.h: #define __extension__ to nothing if - GCC_VERSION < 2008. - -2000-05-04 Kaveh R. Ghazi - - * demangle.h (demangler_engine): Constify. - -Thu May 4 17:15:26 2000 Philippe De Muyter - - * sort.h (sys/types.h): File included unconditionnaly. - (stddef.h): File include only #ifdef __STDC__. - -2000-05-03 Zack Weinberg - - * symcat.h: Remove #endif label. - -2000-04-28 Kenneth Block - Jason Merrill - - * demangle.h (libiberty_demanglers): new table for different styles. - (cplus_demangle_set_style): New function for setting style. - (cplus_demangle_name_to_style): New function to translate name. - -2000-04-24 Mark Mitchell - - * hashtab.h (hash_pointer): Declare. - (eq_pointer): Likewise. - -2000-04-23 Mark Mitchell - - * sort.h: New file. - -Fri Apr 21 13:20:53 2000 Richard Henderson - David Mosberger - - * dis-asm.h (print_insn_ia64): Declare. - -Tue Apr 18 16:22:30 2000 Richard Kenner - - * hashtab.h (enum insert_option): New type. - (htab_find_slot, htab_find_slot_with_hash): Use it. - -2000-04-17 Kaveh R. Ghazi - - * symcat.h: Honor autoconf macro HAVE_STRINGIZE. Add - comments/caveats with regard to traditional C behavior. - -2000-04-05 Richard Henderson - - * splay-tree.h (splay_tree_remove): Declare. - -2000-04-04 Alan Modra - - * bin-bugs.h (REPORT_BUGS_TO): Remove translated part. - -2000-04-03 Alan Modra - - * bin-bugs.h: New file. - -2000-03-30 Mark Mitchell - - * hashtab.h (hashval_t): New type. - (htab_find_with_hash): Use it as an argument. - (htab_find_slot_with_hash): Likewise. - -2000-03-27 Denis Chertykov - - * dis-asm.h (print_insn_avr): Declare. - -2000-03-14 Bernd Schmidt - - * hashtab.h (htab_trav): Modify type so that first arg is of type - void **. - (htab_find_with_hash, htab_find_slot_with_hash): Declare new - functions. - -2000-03-09 Alex Samuel - - * partition.h: New file. - -2000-03-09 Zack Weinberg - - * hashtab.h (struct htab): Add del_f. - (htab_del): New type. - (htab_create): Add fourth argument. - -2000-03-08 Zack Weinberg - - * hashtab.h (hash_table_t): Rename to htab_t. - (struct hash_table): Rename to struct htab. Shorten element - names. Reorder elements by size. - (htab_hash, htab_eq, htab_trav): New typedefs for the callback - function pointers. - (hash_table_entry_t): Discard; just use void * for element - type. - -2000-03-01 H.J. Lu - - * bfdlink.h (bfd_link_callbacks): Add a boolean arg to - the undefined_symbol callback. - -2000-02-23 Linas Vepstas - - * dis-asm.h (print_insn_i370): Declare. - -Tue Feb 22 15:19:54 2000 Andrew Cagney - - * remote-sim.h (sim_trace): Document return values. - (sim_set_trace): Declare. Deprecate. - -2000-02-21 Alan Modra - - * dis-asm.h (struct disassemble_info): Change `length' param of - read_memory_func to unsigned. Change type of `buffer_length' and - `octets_per_byte' to unsigned. - (buffer_read_memory): Change `length' param to unsigned. - -2000-02-16 Nick Clifton - - * dis-asm.h: Add prototypes for ARM register name functions. - -Wed Feb 9 18:45:49 2000 Andrew Cagney - - * wait.h: Delete. No longer used by GDB. - -Tue Feb 8 17:01:13 2000 Andrew Cagney - - * remote-sim.h (sim_resume): Clarify use of SIGGNAL. - (sim_stop_reason): Clarify meaning of sim_signalled. - -2000-02-03 Timothy Wall - - * dis-asm.h (struct disassemble_info): Added octets_per_byte - field and initialize it to one (1). - -2000-01-27 Nick Clifton - - * dis-asm.h: Add prototype for disassembler_usage(). - Add prototype for arm_disassembler_options(). - Remove prototype for arm_toggle_regnames(). - Add prototype for parse_arm_disassembler_option(). - -Sat Jan 1 19:06:52 2000 Hans-Peter Nilsson - - * symcat.h (STRINGX) [!__STDC__ || ALMOST_STDC]: Change "?" to "s" - to stringify argument s. - -Wed Dec 15 11:22:56 1999 Jeffrey A Law (law@cygnus.com) - - * hp-symtab.h (HP_LANGUAGE_FORTRAN): New enumeration constant. - (HP_LANGUAGE_F77): Define using HP_LANGUAGE_FORTRAN. - -1999-12-15 Doug Evans - - * dis-asm.h: Enclose in extern "C" ifdef __cplusplus. - -1999-12-05 Mark Mitchell - - * splay-tree.h (struct splay_tree_node): Rename to ... - (struct splay_tree_node_s): ... this. - (struct splay_tree): Rename to ... - (struct splay_tree_s): ... this. - -1999-11-30 Kaveh R. Ghazi - - * ansidecl.h (ATTRIBUTE_MALLOC): New macro. - - * libiberty.h (buildargv, dupargv, concat, choose_temp_base, - make_temp_file, xmalloc, xcalloc, xstrdup, xmemdup): Add - ATTRIBUTE_MALLOC. - (xatexit): Remove __GNUC__ check, add ATTRIBUTE_NORETURN. - -1999-11-28 Kaveh R. Ghazi - - * libiberty.h: Include stdarg.h when ANSI_PROTOTYPES is defined. - (asprintf, vasprintf): Provide declarations. - -Wed Nov 10 12:43:21 1999 Philippe De Muyter - Kaveh R. Ghazi - - * ansidecl.h: Define and test `GCC_VERSION', not `HAVE_GCC_VERSION'. - -1999-11-04 Jimmy Guo - - * hp-symtab.h (dntt_type_fparam): Add doc_ranges, misc_kind - fields, change location type to CORE_ADDR from int. - (dntt_type_const): Name the 5th field location_type. - -Sun Oct 24 19:11:32 1999 Andrew Cagney - - * sim-d10v.h (SIM_D10V_TS2_DMAP_REGNUM): Define. - -1999-10-23 08:51 -0700 Zack Weinberg - - * hashtab.h: Give hash_table_t a struct tag. Add prototypes - for clear_hash_table_slot and traverse_hash_table. Correct - prototype of all_hash_table_collisions. - -Sat Oct 23 19:00:13 1999 Andrew Cagney - - * sim-d10v.h: New file. - -Fri Oct 15 01:47:51 1999 Vladimir Makarov - - * hashtab.h: New file. - -1999-10-10 Kaveh R. Ghazi - - * ansidecl.h (HAVE_GCC_VERSION): New macro. Use it instead of - explicitly testing __GNUC__ and __GNUC_MINOR__. - - (ATTRIBUTE_PRINTF): Use `__format__', not `format'. - -1999-09-25 Kaveh R. Ghazi - - * libiberty.h (make_temp_file): Add a prototype. - -Tue Sep 14 00:35:02 1999 Marc Espie - - * libiberty.h (basename): OpenBSD has a correct prototype. - (xrealloc): Remove outdated comment. - -1999-09-07 Jeff Garzik - - * libiberty.h (xmemdup): Add prototype for new function. - -1999-09-04 Steve Chamberlain - - * dis-asm.h (print_insn_pj): Declare. - -1999-09-01 Kaveh R. Ghazi - - * obstack.h (obstack_grow, obstack_grow0): Move (char*) casts - in calls to `_obstack_memcpy' from here ... - - (_obstack_memcpy): ... to here, except in the __STDC__ case which - doesn't need it. - -1999-08-30 Kaveh R. Ghazi - - * libiberty.h (getpwd): Prototype. - -1999-08-01 Mark Mitchell - - * splay-tree.h (splay_tree_insert): Return the new node. - -1999-07-11 Ian Lance Taylor - - * ansidecl.h: Copy attribute support macros from egcs. - -1999-06-22 Mark Mitchell - - * bfdlink.h (struct bfd_link_hash_entry): Add init_function and - fini_function. - -1999-06-20 Mark Mitchell - - * mips.h (Elf32_Internal_Msym): New structure. - (Elf32_External_Msym): Likewise. - (ELF32_MS_REL_INDEX): New macro. - (ELF32_MS_FLAGS): Likewise. - (ELF32_MS_INFO): Likewise. - -1999-06-14 Nick Clifton - - * dis-asm.h (arm_toggle_regnames): New prototype. - (struct diassemble_info): New field: disassembler_options. - -1999-04-11 Richard Henderson - - * bfdlink.h (bfd_elf_version_expr): Rename `match' to `pattern'. - Add `match' callback function. - -1999-04-10 Richard Henderson - - * bfdlink.h (bfd_link_info): Add no_undefined. - -1999-04-08 Nick Clifton - - * dis-asm.h: Add prototype for print_insn_mcore. - -1999-04-02 Mark Mitchell - - * splay-tree.h (splay_tree_compare_pointers): Declare. - -1999-03-30 Mark Mitchell - - * splay-tree.h (splay_tree_compare_ints): Declare. - -Wed Mar 24 12:46:29 1999 Andrew Cagney - - * libiberty.h (basename): Cygwin{,32} should have the prototype. - -1999-02-22 Jim Lemke - - * bfdlink.h (bfd_link_info): add field "mpc860c0". - -Mon Feb 1 21:05:46 1999 Catherine Moore - - * dis-asm.h (print_insn_i386_att): Declare. - (print_insn_i386_intel): Declare. - -1998-12-30 Michael Meissner - - * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Cast STREAM and - FPRINTF_FUNC to avoid compiler warnings. - -Wed Dec 30 16:07:14 1998 David Taylor - - * dis-asm.h: change void * to PTR (two places). - -Mon Dec 14 09:53:31 1998 Kaveh R. Ghazi - - * demangle.h: Don't check IN_GCC anymore. - * splay-tree.h: Likewise. - -Tue Dec 8 00:30:31 1998 Elena Zannoni - - The following changes were made by Elena Zannoni - and Edith Epstein - as part of a project to merge in - changes made by HP; HP did not create ChangeLog entries. - - * dis-asm.h (struct disassemble_info): change the type of stream - from FILE* to void*, for use with gdb's new type GDB_FILE. - (fprintf_ftype): change FILE* parameter type to void*. - - * demangle.h: (DMGL_EDG): new macro for Kuck and Associates - (DMGL_STYLE_MASK): modify to include Kuck and Assoc style - (demangling_styles): add new edg_demangling style - (EDG_DEMANGLING_STYLE_STRING): new macro - (EDG_DEMANGLING): new macro - (DMGL_HP): new macro, for HP/aCC compiler. - (DMGL_STYLE_MASK): modify to include new HP's style. - (demangling_styles): add new hp_demangling value. - (HP_DEMANGLING_STYLE_STRING): new macro. - (ARM_DEMANGLING): coerce to int. - (HP_DEMANGLING): new macro. - - * hp-symtab.h: rewritten, from HP. - (quick_procedure): change type of language field to unsigned int - (quick_module): change type of language field to unsigned int - (struct dntt_type_svar): add field thread_specific. - (hp_language): add languages modcal and dmpascal. - -Fri Nov 20 13:14:00 1998 Andrew Cagney - - * libiberty.h (basename): Add prototype for FreeBSD. - -Fri Nov 13 19:19:11 1998 Kaveh R. Ghazi - - * libiberty.h: Prototype xcalloc. - -Sun Nov 8 17:42:25 1998 Kaveh R. Ghazi - - * ansidecl.h: Wrap problematic macros with !IN_GCC. - - * demangle.h: Never define PARAMS(). - * splay-tree.h: Likewise. - -Sat Nov 7 18:30:20 1998 Peter Schauer - - * dis-asm.h (print_insn_vax): Declare. - -Sat Nov 7 16:04:03 1998 Kaveh R. Ghazi - - * demangle.h: Don't include gansidecl.h. - * splay-tree.h: Likewise. - -1998-10-26 16:03 Ulrich Drepper - - * bfdlink.h (struct bfd_link_info): Add new field optimize. - -Thu Oct 22 19:58:00 1998 Kaveh R. Ghazi - - * splay-tree.h: Wrap function pointer parameter declarations in - PARAMS() macro. - -1998-10-21 Mark Mitchell - - * splay-tree.h: New file. - -Fri Oct 9 00:02:03 1998 Jeffrey A Law (law@cygnus.com) - - * Merge devo and egcs include directories. - -Sat Sep 5 12:16:33 1998 Jeffrey A Law (law@cygnus.com) - - * getopt.h, obstack.h: Updated from gcc. - -1998-08-03 Jason Molenda (jsm@bugshack.cygnus.com) - - * libiberty.h (xexit): Change decl to use modern GCC attribute - to indicate exit does not return. - -Mon Jun 1 13:48:32 1998 Jason Molenda (crash@bugshack.cygnus.com) - - * obstack.h: Update to latest FSF version. - -Tue Feb 24 13:05:02 1998 Doug Evans - - * dis-asm.h (disassemble_info): Member `symbol' renamed to `symbols' - and made an "asymbol **". New member num_symbols. - (INIT_DISASSEMBLE_INFO_NO_ARCH): Update. - -Tue Feb 17 12:32:18 1998 Andrew Cagney - - * remote-sim.h (sim_fetch_register, sim_store_register): Add - register length parameter. Functions return actual length of - register. - -Thu Feb 12 16:29:01 1998 Ian Lance Taylor - - * getopt.h: Update to latest FSF version. - -Wed Feb 11 16:56:06 1998 Doug Evans - - * symcat.h: New file. - -Mon Feb 2 17:13:31 1998 Steve Haworth - - * dis-asm.h (print_insn_tic30): Declare. - -Thu Jan 22 16:23:59 1998 Fred Fish - - * dis-asm.h: Add flag INSN_HAS_RELOC to tell disassembly - function there is a reloc on this line. - -Mon Dec 8 11:22:23 1997 Nick Clifton - - * dis-asm.h: Remove prototype of disasm_symaddr() as this function - no longer exists. - -Tue Dec 2 10:20:53 1997 Nick Clifton - - * dis-asm.h (disasm_symaddr): New prototype. - -Mon Dec 1 11:29:35 1997 Doug Evans - - * callback.h (CB_SYSCALL): Comment out arg names in prototypes. - -Wed Nov 26 16:47:58 1997 Michael Meissner - - * callback.h (CB_SYSCALL): Consistantly use names for prototype - arguments. - -Wed Nov 26 11:39:30 1997 Doug Evans - - * callback.h (CB_SYSCALL): Change byte count arguments to - {read,write}_mem to `int'. New member `magic'. - (CB_SYSCALL_MAGIC,CB_SYSCALL_INIT): New macros. - -Tue Nov 25 01:35:52 1997 Doug Evans - - * callback.h (struct stat): Move forward decl up. - (host_callback): Pass stat struct pointer to stat,fstat. - (CB_SYS_nnn): Reorganize. - (CB_SYSCALL): New members p1,p2. - (cb_host_to_target_stat): Delete fourth arg. - -Sat Nov 22 23:34:15 1997 Andrew Cagney - - * remote-sim.h (sim_stop_reason): Clarify sim_signalled SIGRC - argument. - -Mon Nov 17 14:00:51 1997 Doug Evans - - * callback.h (CB_TARGET_DEFS_MAP): Renamed from target_defs_map. - (host_callback): Add stat, fstat, syscall_map, errno_map, open_map, - signal_map, stat_map. - (errn_map,open_map): Renamed to cb_init_foo_map. - (cb_host_to_target_errno,cb_target_to_host_open): Renamed from - host_to_target_errno,target_to_host_open. - (cb_read_target_syscall_maps): Add prototype. - (cb_target_to_host_syscall): Likewise. - (cb_host_to_target_stat): Likewise. - (cb_syscall): Likewise. - (CB_SYS_{exit,open,close,read,write,lseek,unlink,getpid,kill,fstat, - argvlen,argv,chdir,stat,chmod,utime,time}): Define. - (CB_SYSCALL): New type. - (CB_RC): New enum. - -Fri Nov 7 10:34:09 1997 Rob Savoye - - * libiberty.h: Add extern "C" { so it can be used with C++ - programs. - * remote-sim.h: Add extern "C" { so it can be used with C++ - programs. - -Tue Oct 14 16:07:51 1997 Nick Clifton - - * dis-asm.h (struct disassemble_info): New field - 'symbol_at_address_func'. - (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialise new field with - generic_symbol_at_address. - -Mon Oct 13 10:17:15 1997 Andrew Cagney - - * remote-sim.h: Clarify sim_read, sim_write MEM argument. - -Wed Sep 24 18:03:10 1997 Stu Grossman - - * remote-sim.h (SIM_RC): Add a bunch of new return codes for - breakpoint stuff. - * Add functions to tell the simulator to set/clear/enable/disable - intrinsic breakpoints. - -Thu Aug 28 19:41:42 1997 Andrew Cagney - - * libiberty.h (dupargv): Add prototype. - -Tue Aug 26 12:25:49 1997 Andrew Cagney - - * remote-sim.h (sim_create_inferior): Add ABFD arg. Document. - -Mon Aug 25 10:50:51 1997 Andrew Cagney - - * remote-sim.h (sim_open): Add ABFD arg. Document. - -Fri Aug 8 16:43:56 1997 Doug Evans - - * dis-asm.h (arc_get_disassembler): Declare. - -Wed Jul 30 11:39:50 1997 Per Bothner - - * demangle.h (DMGL_JAVA): New option to request Java demangling. - -Tue Jul 22 17:59:54 1997 Ian Lance Taylor - - * libiberty.h (PEXECUTE_*): Define. - (pexecute, pwait): Declare. - -Fri Jun 6 13:02:33 1997 Andrew Cagney - - * remote-sim.h (sim_kill): Mark as depreciated. - -Fri May 23 13:43:41 1997 Fred Fish - - * bfdlink.h (struct bfd_link_info): Add task_link member. - -Thu May 22 11:32:49 1997 Andrew Cagney - - * remote-sim.h: Review documentation. Clarify restrictions on - when functions can be called. - -Wed May 21 16:47:53 1997 Andrew Cagney - - * remote-sim.h (sim_set_profile_size): Add prototype, document as - depreciated. - -Tue May 20 09:32:22 1997 Andrew Cagney - - * remote-sim.h (sim_open): Add callback struct. - (sim_set_callbacks): Drop SIM_DESC argument. Document. - (sim_size): Remove recently added SIM_DESC argument. Document. - -Mon May 19 19:14:44 1997 Andrew Cagney - - * remote-sim.h: Pass SD into sim_size. - -Thu May 15 01:24:16 1997 Mark Alexander - - * obstack.h (obstack_specify_allocation_with_arg, obstack_chunkfun, - obstack_freefun): Eliminate compile warnings in gdb. - -Tue Apr 22 10:24:34 1997 Fred Fish - - * floatformat.h (floatformat_byteorders): Add comments for previous - formats and add floatformat_littlebyte_bigword, primarily for ARM. - Add declaration for floatformat_ieee_double_littlebyte_bigword. - -Fri Apr 18 13:04:49 1997 Andrew Cagney - - * remote-sim.h (sim_stop): New interface - asynchronous - notification of a request to stop / suspend the running - simulation. - - * remote-sim.h (enum sim_stop): Add sim_running and sim_polling as - states for use internal to simulators. - - * callback.h (struct host_callback_strut): Put a magic number at - the end of the struct to allow basic checking. - (struct host_callback_struct ): Add poll_quit - so - that the console etc can be polled at regular intervals. - -Thu Apr 17 02:17:12 1997 Doug Evans - - * remote-sim.h (struct _bfd): Declare. - (sim_load): Return SIM_RC. New arg `abfd'. - (sim_create_inferior): Return SIM_RC. Delete arg `start_address'. - -Wed Apr 2 17:09:12 1997 Andrew Cagney - - * remote-sim.h (sim_trace, sim_size): Make these global. They - will go away shortly. - -Wed Apr 2 15:23:49 1997 Doug Evans - - * remote-sim.h (SIM_OPEN_KIND, SIM_RC): New enums. - (sim_open): New argument `kind'. - -Wed Apr 2 14:45:51 1997 Ian Lance Taylor - - * COPYING: Update FSF address. - -Fri Mar 28 15:29:54 1997 Mike Meissner - - * callback.h (top level): Include stdarg.h or varargs.h if - va_start is not defined. - (host_callback_struct): Make {,e}vprintf_filtered take a va_list - instead of void *, since va_list might be an array or structure - type. - -Fri Mar 28 15:44:41 1997 H.J. Lu - - * libiberty.h (basename): Add prototype for glibc and linux. - -Mon Mar 17 19:22:12 1997 Ian Lance Taylor - - * objalloc.h: New file. - -Mon Mar 17 14:57:55 1997 Andrew Cagney - - * remote-sim.h: New file, copied in from gdb/remote-sim.h. One - day this will be placed in a directory of its own. - -Sat Mar 15 19:00:14 1997 Ian Lance Taylor - - * obstack.h: Update to current FSF version. - -Thu Mar 6 15:46:59 1997 Andrew Cagney - - * callback.h (struct host_callback_struct): Add callbacks - - flush_stdout, write_stderr, flush_stderr, vprintf_filtered, - evprintf_filtered. Delete redundant callbacks - printf_filtered. - -Thu Feb 27 23:18:27 1997 Ian Lance Taylor - - * bfdlink.h (struct bfd_link_info): Remove lprefix and lprefix_len - fields. - -Tue Feb 25 00:10:49 1997 Ian Lance Taylor - - * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize - bytes_per_chunk and display_endian. - -Mon Feb 24 17:47:02 1997 Ian Lance Taylor - - From Eric Youngdale : - * bfdlink.h (struct bfd_elf_version_expr): Define. - (struct bfd_elf_version_deps): Define. - (struct bfd_elf_version_tree): Define. - -Thu Feb 6 14:20:01 1997 Martin M. Hunt - - * dis-asm.h: (disassemble_info): Add new fields - bytes_per_chunk and display_endian to control the - display of raw instructions. - -Fri Dec 27 22:17:37 1996 Fred Fish - - * dis-asm.h (print_insn_tic80): Declare. - -Sun Dec 8 17:11:12 1996 Doug Evans - - * callback.h (host_callback): New member `error'. - -Wed Nov 20 00:40:23 1996 Doug Evans - - * callback.h: New file, moved here from gdb. - -Mon Nov 18 16:34:00 1996 Dawn Perchik - - * libiberty.h: Checkin again; last checkin failed due to sticky tag. - -Wed Nov 13 08:22:00 1996 Dawn Perchik - - * libiberty.h: Revert last commit due to conflicts with hpux - system headers. - -Tue Nov 12 16:31:00 1996 Dawn Perchik - - * libiberty.h: Move prototypes from argv.c here. - -Thu Oct 31 14:56:18 1996 Doug Evans - - * ansidecl.h (VPARAMS,VA_START): Define. - -Fri Oct 25 12:08:04 1996 Ian Lance Taylor - - * dis-asm.h (disassemble_info): Add bytes_per_line field. - (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize bytes_per_line field. - -Thu Oct 24 17:10:01 1996 Ian Lance Taylor - - * dis-asm.h (disassemble_info): Add symbol field. - (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize symbol field. - -Thu Oct 17 11:17:40 1996 Doug Evans - - * dis-asm.h (print_insn_m32r): Declare. - -Mon Oct 14 23:56:52 1996 Ian Lance Taylor - - * libiberty.h: Declare parameter types for xmalloc and xrealloc. - -Thu Oct 3 13:45:27 1996 Ian Lance Taylor - - * fnmatch.h: New file. - -Thu Oct 3 10:33:14 1996 Jeffrey A Law (law@cygnus.com) - - * dis-asm.h (print_insn_mn10x00): Delete declaration. - (print_insn_mn10200, print_insn_mn10300): Declare. - -Wed Oct 2 21:24:43 1996 Jeffrey A Law (law@cygnus.com) - - * dis-asm.h (print_insn_mn10x00): Declare. - -Mon Sep 30 13:56:11 1996 Fred Fish - - * libiberty.h: Remove #ifndef PRIVATE_XMALLOC. - -Sat Aug 31 13:27:06 1996 Jeffrey A Law (law@cygnus.com) - - * dis-asm.h (print_insn_v850): Declare. - -Tue Aug 13 16:10:30 1996 Stu Grossman (grossman@critters.cygnus.com) - - * obstack.h: Change bcopy to memcpy. Works better on Posix - systems, which generally lack bcopy. - -Mon Aug 12 17:03:18 1996 Stu Grossman (grossman@critters.cygnus.com) - - * ansidecl.h: Change WIN32 to _WIN32. - -Fri Jul 26 13:58:18 1996 Ian Lance Taylor - - * dis-asm.h: Add flavour field. - (print_insn_alpha): Declare. - (print_insn_alpha_osf, print_insn_alpha_vms): Don't declare. - (INIT_DISASSEMBLE_INFO): Initialize flavour field. - -Tue Jul 23 17:37:58 1996 Fred Fish - - * libiberty.h (PRIVATE_XMALLOC): Enclose xmalloc/xrealloc - definitions inside #ifndef so that programs that want to - can define PRIVATE_XMALLOC and then define xmalloc and - xrealloc anyway they want. - (basename): Document in source that we can't declare the - parameter type because it is declared inconsistently across - different systems. - -Mon Jul 22 13:16:13 1996 Richard Henderson - - * dis-asm.h (print_insn_alpha): Don't declare. - (print_insn_alpha_osf, print_insn_alpha_vms): Declare. - -Wed Jul 17 14:45:12 1996 Martin M. Hunt - - * dis-asm.h: (print_insn_d10v): Declare. - -Mon Jul 15 16:55:38 1996 Stu Grossman (grossman@critters.cygnus.com) - - * dis-asm.h: Get rid of decls for print_insn_i8086, - print_insn_sparc64 and print_insn_sparclite. - * (INIT_DISASSEMBLE_INFO): Split into two pieces. One, - INIT_DISASSEMBLE_INFO_NO_ARCH inits everything except for endian, - mach, and arch. - -Fri Jul 12 10:19:27 1996 Stu Grossman (grossman@critters.cygnus.com) - - * dis-asm.h (print_insn_i8086): Declare. - -Wed Jul 3 16:02:39 1996 Stu Grossman (grossman@critters.cygnus.com) - - * dis-asm.h (print_insn_sparclite): Declare. - -Tue Jun 18 16:02:46 1996 Jeffrey A. Law - - * dis-asm.h (print_insn_h8300s): Declare. - -Tue Jun 18 15:11:33 1996 Klaus Kaempf - - * fopen-vms.h: New file. - -Tue Jun 4 18:58:16 1996 Ian Lance Taylor - - * bfdlink.h (struct bfd_link_info): Add notice_all field. - -Fri Apr 26 10:33:12 1996 Doug Evans - - * demangle.h (#ifdef IN_GCC): #include "gansidecl.h". - (PROTO,PTR,const): Delete. - -Mon Apr 22 17:27:42 1996 Ian Lance Taylor - - * bfdlink.h (struct bfd_link_info): Add traditional_format field. - -Mon Apr 15 15:16:56 1996 Doug Evans - - * libiberty.h (choose_temp_base): Add prototype. - -Tue Mar 12 17:29:46 1996 Ian Lance Taylor - - * bfdlink.h (bfd_wrapped_link_hash_lookup): Declare. - (struct bfd_link_info): Add wrap_hash field. - -Wed Feb 14 16:49:17 1996 Martin Anantharaman - - * ieee.h (ieee_record_enum_type): Define - ieee_external_reference_info_enum. - -Fri Feb 2 17:09:25 1996 Doug Evans - - * dis-asm.h (DISASM_RAW_INSN): Delete. - -Tue Jan 23 09:21:47 1996 Doug Evans - - * dis-asm.h (INIT_DISASSEMBLE_INFO): Set endian to BFD_ENDIAN_UNKNOWN. - New argument FPRINTF_FUNC. - -Mon Jan 22 16:37:59 1996 Doug Evans - - * dis-asm.h (disassemble_info): New members arch, mach, endian. - (INIT_DISASSEMBLE_INFO): Initialize them. - (DISASM_RAW_INSN{,FLAG}): Define. - -Thu Jan 18 11:32:38 1996 Ian Lance Taylor - - * demangle.h (cplus_demangle_opname): Change opname parameter to - const char *. - (cplus_mangle_opname): Change return type and opname parameter to - const char *. - -Fri Jan 5 00:01:22 1996 Ian Lance Taylor - - * ieee.h (enum ieee_record): Add ieee_asn_record_enum, - ieee_at_record_enum, ieee_ty_record_enum, ieee_atn_record_enum, - ieee_bb_record_enum, and ieee_be_record_enum. - -Wed Jan 3 13:12:09 1996 Fred Fish - - * obstack.h: Update copyright to 1996. - (_obstack_memory_used): Declare. - (obstack_memory_used): Define macro. - -Thu Dec 28 11:42:12 1995 Ian Lance Taylor - - * libiberty.h (xstrdup): Declare. - -Thu Dec 21 14:47:17 1995 Michael Meissner - - * wait.h: Protect all macros with #ifndef. - -Tue Oct 24 21:45:40 1995 Ian Lance Taylor - - * bfdlink.h (struct bfd_link_info): Add static_link field. - -Tue Sep 12 16:28:04 1995 Ian Lance Taylor - - * bfdlink.h (struct bfd_link_callbacks): Add symbol parameter to - warning callback. - -Fri Sep 1 13:11:51 1995 Ian Lance Taylor - - * bfdlink.h (struct bfd_link_callbacks): Change warning callback - to take BFD, section, and address arguments. - -Thu Aug 31 16:45:12 1995 steve chamberlain - - * bfdlink.h (struct bfd_link_info): Remove PE stuff. - -Tue Aug 22 03:18:23 1995 Ken Raeburn - - * libiberty.h: Declare xstrerror. From Pat Rankin. - -Mon Aug 21 18:11:36 1995 steve chamberlain - - * bfdlink.h (struct bfd_link_info): Remove PE stuff. - -Wed Aug 2 08:14:12 1995 Doug Evans - - * dis-asm.h (print_insn_sparc64): Declare. - -Mon Jul 10 13:26:49 1995 Eric Youngdale - - * bfdlink.h (struct bfd_link_info): Add new field symbolic. - -Sun Jul 2 17:48:40 1995 Ian Lance Taylor - - * bfdlink.h (struct bfd_link_info): Change type of base_file to - PTR. - -Thu Jun 29 00:02:45 1995 Steve Chamberlain - - * bfdlink.h (struct bfd_link_info): Added base_file member. - -Tue Jun 20 16:40:04 1995 Steve Chamberlain - - * ansidecl.h: win32s is ANSI enough. - -Thu May 18 04:25:50 1995 Ken Raeburn - - Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk) - - * dis-asm.h (print_insn_arm): Delete declaration. - (print_insn_{little,big}_arm): New declarations. - - * floatformat.h (floatformat_arm_ext): Declare. - -Sat May 13 10:14:08 1995 Steve Chamberlain - - * bfdlink.h (subsytem, stack_heap_parameters): New. - -Thu May 4 14:36:42 1995 Jason Merrill - - * demangle.h: Don't include ansidecl.h if IN_GCC. - -Tue Feb 21 00:37:28 1995 Jeff Law (law@snake.cs.utah.edu) - - * hp-symtab.h: Don't use bitfield enumerations, the HP C compiler - does not handle them correctly. - -Thu Feb 9 14:20:27 1995 Ian Lance Taylor - - * libiberty.h (basename): Don't declare parameter type; some - systems have this in their header files. - -Wed Feb 8 17:35:38 1995 Ian Lance Taylor - - * bfdlink.h (struct bfd_link_hash_entry): Change format of common - symbol information, to remove restrictions on maximum size and - alignment power, by using a pointer to a structure instead. - -Mon Feb 6 14:55:32 1995 Ian Lance Taylor - - * bfdlink.h (enum bfd_link_hash_type): Rename bfd_link_hash_weak - to bfd_link_hash_undefweak. Add bfd_link_hash_defweak. - -Mon Jan 16 21:00:23 1995 Stan Shebs - - * dis-asm.h (GDB_INIT_DISASSEMBLE_INFO, etc): Remove all - GDB-specific definitions. - -Sun Jan 15 18:39:35 1995 Steve Chamberlain - - * dis-asm.h (print_insn_w65): Declare. - -Thu Jan 12 17:51:17 1995 Ken Raeburn - - * libiberty.h (hex_p): Fix sense of test. - -Wed Jan 11 22:36:40 1995 Ken Raeburn - - * libiberty.h (_hex_array_size, _hex_bad, _hex_value, hex_init, - hex_p, hex_value): New macros and declarations, for hex.c. - -Fri Jan 6 17:44:14 1995 Ian Lance Taylor - - * dis-asm.h: Make idempotent. - -Wed Dec 14 13:08:43 1994 Stan Shebs - - * progress.h: New file, empty definitions for progress macros. - -Fri Nov 25 00:14:05 1994 Jeff Law (law@snake.cs.utah.edu) - - * hp-symtab.h: New file describing the debug symbols emitted - by the HP C compilers. - -Fri Nov 11 15:48:37 1994 Ian Lance Taylor - - * bfdlink.h (struct bfd_link_hash_entry): Change u.c.size from 24 - to 26 bits, and change u.c.alignment_power from 8 to 6 bits. 6 - bit in the alignment power is enough for a 64 bit address space. - -Mon Oct 31 13:02:51 1994 Stan Shebs (shebs@andros.cygnus.com) - - * demangle.h (cplus_mangle_opname): Declare. - -Tue Oct 25 11:38:02 1994 Ian Lance Taylor - - * bfdlink.h (struct bfd_link_callbacks): Fix comments for - multiple_common field. - -Sun Sep 04 17:58:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org) - - * dis-asm.h: Add support for the ARM. - -Wed Aug 10 12:51:41 1994 Doug Evans (dje@canuck.cygnus.com) - - * libiberty.h (strsignal): Document its existence even if we - can't declare it. - -Tue Aug 2 14:40:03 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * os9k.h: Remove u_int16, u_int32, and owner_id typedefs and - expand their uses. Those names conflict with Mach headers. - -Fri Jul 22 14:17:12 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * bfdlink.h (struct bfd_link_hash_entry): Change u.c.size into a - bitfield. Add field u.c.alignment_power. - -Sun Jul 10 00:26:39 1994 Ian Dall (dall@hfrd.dsto.gov.au) - - * dis-asm.h: Add print_insn_ns32k declaration. - -Mon Jun 20 17:13:29 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * bfdlink.h (bfd_link_hash_table): Make creator a const pointer. - -Sat Jun 18 16:09:32 1994 Stan Shebs (shebs@andros.cygnus.com) - - * demangle.h (cplus_demangle_opname): Declare. - -Thu Jun 16 15:19:03 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * bfdlink.h (struct bfd_link_info): Add new field shared. - -Mon Jun 6 14:39:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * bfdlink.h (struct bfd_link_hash_entry): Remove written field: - not needed for all backends. - -Thu Apr 28 19:06:50 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * dis-asm.h (disassembler): Declare. - -Fri Apr 1 00:38:17 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu) - - * obstack.h: Delete use of IN_GCC to control whether - stddef.h or gstddef.h is included. - -Tue Mar 22 13:06:02 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * bfdlink.h (enum bfd_link_order_type): Add bfd_data_link_order. - (struct bfd_link_order): Add data field to union. - -Mon Mar 21 18:45:26 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * bfdlink.h (struct bfd_link_callbacks): Change bitsize argument - to add_to_set to reloc. Remove bitsize argument from constructor. - Comment that reloc_overflow, reloc_dangerous and unattached_reloc - must handle NULL pointers for reloc location. - (enum bfd_link_order_type): Add bfd_section_reloc_link_order and - bfd_symbol_reloc_link_order. - (struct bfd_link_order): Add reloc field to union. - (struct bfd_link_order_reloc): Define. - -Mon Mar 14 12:27:50 1994 Ian Lance Taylor (ian@cygnus.com) - - * ieee-float.h: Removed; no longer used. - -Tue Mar 1 18:10:49 1994 Kung Hsu (kung@mexican.cygnus.com) - - * os9k.h: os9000 target specific header file, the header of the - object file is used now. - -Sun Feb 27 21:52:26 1994 Jim Kingdon (kingdon@deneb.cygnus.com) - - * floatformat.h: New file, intended to replace ieee-float.h. - -Sun Feb 20 17:15:42 1994 Ian Lance Taylor (ian@lisa.cygnus.com) - - * ansidecl.h (ANSI_PROTOTYPES): Define if using ANSI prototypes. - -Wed Feb 16 01:07:12 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * libiberty.h: Don't declare strsignal, to avoid conflicts with - Solaris system header files. - -Sat Feb 12 22:11:32 1994 Jeffrey A. Law (law@snake.cs.utah.edu) - - * libiberty.h (xexit): Use __volatile__ to avoid losing if - compiling with gcc -traditional. - -Thu Feb 10 14:05:41 1994 Ian Lance Taylor (ian@cygnus.com) - - * libiberty.h: New file. Declares functions provided by - libiberty. - -Tue Feb 8 05:19:52 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - Handle obstack_chunk_alloc returning NULL. This allows - obstacks to be used by libraries, without forcing them - to call exit or longjmp. - * obstack.h (struct obstack): Add alloc_failed flag. - _obstack_begin, _obstack_begin_1): Declare to return int, not void. - (obstack_finish): If alloc_failed, return NULL. - (obstack_base, obstack_next_free, objstack_object_size): - If alloc_failed, return 0. - (obstack_grow, obstack_grow0, obstack_1grow, obstack_ptr_grow, - obstack_int_grow, obstack_blank): If alloc_failed, do nothing that - could corrupt the obstack. - -Mon Jan 24 15:06:05 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * bfdlink.h (struct bfd_link_callbacks): Add name, reloc_name and - addend argments to reloc_overflow callback. - -Fri Jan 21 19:13:12 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * dis-asm.h (print_insn_big_powerpc, print_insn_little_powerpc, - print_insn_rs6000): Declare. - -Thu Jan 6 14:15:55 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * bfdlink.h (struct bfd_link_callbacks): Add bitsize argument to - add_to_set field. Add new callback named constructor. - -Thu Dec 30 10:44:06 1993 Ian Lance Taylor (ian@rtl.cygnus.com) - - * bfdlink.h: New file for new BFD linker backend routines. - -Mon Nov 29 10:43:57 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * dis-asm.h (enum dis_insn_tyupe): Remove non-ANSI trailing comma. - -Sat Oct 2 20:42:26 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * dis-asm.h: Move comment to right place. - -Mon Aug 9 19:03:35 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * obstack.h (obstack_chunkfun, obstack_freefun): Add defns from - previous version. Are these Cygnus local changes? - -Fri Aug 6 17:05:47 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * getopt.h, obstack.h: Update to latest FSF version. - -Mon Aug 2 14:45:29 1993 John Gilmore (gnu@cygnus.com) - - * dis-asm.h: Move enum outside of struct defn to avoid warnings. - -Mon Aug 2 08:49:30 1993 Stu Grossman (grossman at cygnus.com) - - * wait.h (WEXITSTATUS, WSTOPSIG): Mask down to 8 bits. This is - for systems that store stuff into the high 16 bits of a wait - status. - -Fri Jul 30 18:38:02 1993 John Gilmore (gnu@cygnus.com) - - * dis-asm.h: Add new fields insn_info_valid, branch_delay_insns, - data_size, insn_type, target, target2. These are used to return - information from the instruction decoders back to the calling - program. Add comments, make more readable. - -Mon Jul 19 22:14:14 1993 Fred Fish (fnf@deneb.cygnus.com) - - * nlm: New directory containing NLM/NetWare includes. - -Thu Jul 15 12:10:04 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * dis-asm.h (struct disassemble_info): New field application_data. - -Thu Jul 15 12:41:15 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * dis-asm.h: Added declaration of print_insn_m88k. - -Fri Jul 2 10:31:59 1993 Ian Lance Taylor (ian@cygnus.com) - - * ansidecl.h: Use ANSI macros if __mips and _SYSTYPE_SVR4 are - defined, since RISC/OS cc handles ANSI declarations in SVR4 mode - but does not define __STDC__. - -Sun Jun 20 18:27:52 1993 Ken Raeburn (raeburn@poseidon.cygnus.com) - - * dis-asm.h: Don't need to include ansidecl.h any more. - -Fri Jun 18 03:22:10 1993 John Gilmore (gnu@cygnus.com) - - * oasys.h: Eliminate "int8_type", "int16_type", "int32_type", and - their variants. These changes are coordinated with corresponding - changes in ../bfd/oasys.c. - -Wed Jun 16 10:43:08 1993 Fred Fish (fnf@cygnus.com) - - * bfd.h: Note that it has been removed. - -Tue Jun 8 12:16:03 1993 Steve Chamberlain (sac@phydeaux.cygnus.com) - - Support for H8/300-H - * dis-asm.h (print_insn_h8300, print_insn_h8300h): Declare it. - -Tue Jun 1 07:35:03 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com) - - * ansidecl.h (const): Don't define it if it's already defined. - -Thu May 27 18:19:51 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * dis-asm.h (print_insn_hppa): Declare it. - - * bfd.h: Moved to bfd directory. Small stub here includes it - without requiring "-I../bfd". - -Thu Apr 29 12:06:13 1993 Ken Raeburn (raeburn@deneb.cygnus.com) - - * bfd.h: Updated with BSF_FUNCTION. - -Mon Apr 26 18:15:50 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * bfd.h, dis-asm.h: Updated with Hitachi SH. - -Fri Apr 23 18:41:38 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * bfd.h: Updated with alpha changes. - * dis-asm.h: Added alpha. - -Fri Apr 16 17:35:30 1993 Jim Kingdon (kingdon@cygnus.com) - - * bfd.h: Update for signed bfd_*get_*. - -Thu Apr 15 09:24:21 1993 Jim Kingdon (kingdon@cygnus.com) - - * bfd.h: Updated for file_truncated error. - -Thu Apr 8 10:53:47 1993 Ian Lance Taylor (ian@cygnus.com) - - * ansidecl.h: If no ANSI, define const to be empty. - -Thu Apr 1 09:00:10 1993 Jim Kingdon (kingdon@cygnus.com) - - * dis-asm.h: Declare a29k and i960 print_insn_*. - - * dis-asm.h: Add print_address_func and related stuff. - - * dis-asm.h (dis_asm_read_memory): Fix prototype. - -Wed Mar 31 17:40:16 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * dis-asm.h: Add print_insn_sparc. - -Wed Mar 31 17:51:42 1993 Ian Lance Taylor (ian@cygnus.com) - - * bfd.h: Updated for BFD_RELOC_MIPS_GPREL and bfd_[gs]et_gp_size - prototypes. - -Wed Mar 31 16:35:12 1993 Stu Grossman (grossman@cygnus.com) - - * dis-asm.h: (disassemble_info): Fix typo in prototype of - dis_asm_memory_error(). - -Tue Mar 30 19:09:23 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * dis-asm.h (disassembler_info): Add read_memory_func, - memory_error_func, buffer, and length. - ({GDB_,}INIT_DISASSEMBLE_INFO): Set them. - print_insn_*: Remove second argument. - -Tue Mar 30 14:48:55 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * bfd.h: Update for lma field of section. - -Tue Mar 30 12:22:55 1993 Jim Kingdon (kingdon@cygnus.com) - - * ansidecl.h: Use ANSI versions on AIX regardless of __STDC__. - -Fri Mar 19 14:49:49 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * dis-asm.h: Add h8500. - -Thu Mar 18 13:49:09 1993 Per Bothner (bothner@rtl.cygnus.com) - - * ieee-float.h: Moved from ../gdb. - * dis-asm.h: New file. Interface to dis-assembler. - -Thu Mar 11 10:52:57 1993 Fred Fish (fnf@cygnus.com) - - * demangle.h (DMGL_NO_OPTS): Add define (set to 0) to use - in place of bare 0, for readability reasons. - -Tue Mar 2 17:50:11 1993 Fred Fish (fnf@cygnus.com) - - * demangle.h: Replace all references to cfront with ARM. - -Tue Feb 23 12:21:14 1993 Ian Lance Taylor (ian@cygnus.com) - - * bfd.h: Update for new elements in JUMP_TABLE. - -Tue Feb 16 00:51:30 1993 John Gilmore (gnu@cygnus.com) - - * bfd.h: Update for BFD_VERSION 2.1. - -Tue Jan 26 11:49:20 1993 Ian Lance Taylor (ian@cygnus.com) - - * bfd.h: Update for SEC_IS_COMMON flag. - -Tue Jan 19 12:25:12 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * bfd.h: Update for bfd_asymbol_value bug fix. - -Fri Jan 8 16:37:18 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * bfd.h: Update to include ECOFF tdata and target_flavour. - -Sun Dec 27 17:52:30 1992 Fred Fish (fnf@cygnus.com) - - * bfd.h: Add declaration for bfd_get_size(). - -Tue Dec 22 22:42:46 1992 Fred Fish (fnf@cygnus.com) - - * demangle.h: Protect file from multiple inclusions with - #if !defined(DEMANGLE_H)...#define DEMANGLE_H...#endif. - -Mon Dec 21 21:25:50 1992 Stu Grossman (grossman at cygnus.com) - - * bfd.h: Update to get hppa_core_struct from bfd.c. - -Thu Dec 17 00:42:35 1992 John Gilmore (gnu@cygnus.com) - - * bfd.h: Update to get tekhex tdata name change from bfd. - -Mon Nov 9 23:55:42 1992 John Gilmore (gnu@cygnus.com) - - * ansidecl.h: Update comments to discourage use of EXFUN. - -Thu Nov 5 16:35:44 1992 Ian Lance Taylor (ian@cygnus.com) - - * bfd.h: Update to bring in SEC_SHARED_LIBRARY. - -Thu Nov 5 03:21:32 1992 John Gilmore (gnu@cygnus.com) - - * bfd.h: Update to match EXFUN, bfd_seclet_struct, and SDEF - cleanups in bfd. - -Wed Nov 4 07:28:05 1992 Ken Raeburn (raeburn@cygnus.com) - - * bout.h (N_CALLNAME, N_BALNAME): Define as char-type values, so - widening works consistently. - -Fri Oct 16 03:17:08 1992 John Gilmore (gnu@cygnus.com) - - * getopt.h: Update to Revised Standard FSF Version. - -Thu Oct 15 21:43:22 1992 K. Richard Pixley (rich@sendai.cygnus.com) - - * getopt.h (struct option): use the provided enum for has_arg. - - * demangle.h (AUTO_DEMANGLING, GNU_DEMANGLING, - LUCID_DEMANGLING): ultrix compilers require enums to be - enums and ints to be ints and casts where they meet. cast some - enums into ints. - -Thu Oct 15 04:35:51 1992 John Gilmore (gnu@cygnus.com) - - * bfd.h: Update after comment changes. - -Thu Oct 8 09:03:02 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * bfd.h (bfd_get_symbol_leading_char): new macro for getting in xvec - -Thu Sep 3 09:10:50 1992 Stu Grossman (grossman at cygnus.com) - - * bfd.h (struct reloc_howto_struct): size needs to be signed if - it's going to hold negative values. - -Sun Aug 30 17:50:27 1992 Per Bothner (bothner@rtl.cygnus.com) - - * demangle.h: New file, moved from ../gdb. Made independent - of gdb. Allow demangling style option to be passed as a - parameter to cplus_demangle(), but using the - current_demangling_style global as the default. - -Sat Aug 29 10:07:55 1992 Fred Fish (fnf@cygnus.com) - - * obstack.h: Merge comment change from current FSF version. - -Thu Aug 27 12:59:29 1992 Brendan Kehoe (brendan@cygnus.com) - - * bfd.h: add we32k - -Tue Aug 25 15:07:47 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * bfd.h: new after Z8000 stuff - -Mon Aug 17 09:01:23 1992 Ken Raeburn (raeburn@cygnus.com) - - * bfd.h: Regenerated after page/segment size changes. - -Sat Aug 1 13:46:31 1992 Fred Fish (fnf@cygnus.com) - - * obstack.h: Merge changes from current FSF version. - -Mon Jul 20 21:06:23 1992 Fred Fish (fnf@cygnus.com) - - * obstack.h (area_id, flags): Remove, replace with extra_arg, - use_extra_arg, and maybe_empty_object. - * obstack.h (OBSTACK_MAYBE_EMPTY_OBJECT, OBSTACK_MMALLOC_LIKE): - Remove, replaced by maybe_empty_object and use_extra_arg bitfields. - * obstack.h (obstack_full_begin, _obstack_begin): Remove area_id - and flags arguments. - * obstack.h (obstack_alloc_arg): New macro to set extra_arg. - -Thu Jul 16 08:12:44 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * bfd.h: new after adding BFD_IS_RELAXABLE - -Sat Jul 4 03:22:23 1992 John Gilmore (gnu at cygnus.com) - - * bfd.h: Regen after adding BSF_FILE. - -Mon Jun 29 14:18:36 1992 Fred Fish (fnf at sunfish) - - * obstack.h: Convert bcopy() use to memcpy(), which is more - portable, more standard, and can take advantage of gcc's builtin - functions for increased performance. - -Thu Jun 25 04:46:08 1992 John Gilmore (gnu at cygnus.com) - - * ansidecl.h (PARAMS): Incorporate this macro from gdb's defs.h. - It's a cleaner way to forward-declare function prototypes. - -Fri Jun 19 15:46:32 1992 Stu Grossman (grossman at cygnus.com) - - * bfd.h: HPPA merge. - -Tue Jun 16 21:30:56 1992 K. Richard Pixley (rich@cygnus.com) - - * getopt.h: gratuitous white space changes merged from other prep - releases. - -Thu Jun 11 01:10:55 1992 John Gilmore (gnu at cygnus.com) - - * bfd.h: Regen'd from bfd.c after removing elf_core_tdata_struct. - -Mon May 18 17:29:03 1992 K. Richard Pixley (rich@cygnus.com) - - * getopt.h: merged changes from make-3.62.11. - - * getopt.h: merged changes from grep-1.6 (alpha). - -Fri May 8 14:53:32 1992 K. Richard Pixley (rich@cygnus.com) - - * getopt.h: merged changes from bison-1.18. - -Sat Mar 14 17:25:20 1992 Fred Fish (fnf@cygnus.com) - - * obstack.h: Add "area_id" and "flags" members to obstack - structure. Add obstack_chunkfun() and obstack_freefun() to - set functions explicitly. Convert maybe_empty_object to - a bit in "flags". - -Thu Feb 27 22:01:02 1992 Per Bothner (bothner@cygnus.com) - - * wait.h (WIFSTOPPED): Add IBM rs6000-specific version. - -Fri Feb 21 20:49:20 1992 John Gilmore (gnu at cygnus.com) - - * obstack.h: Add obstack_full_begin. - * bfd.h, obstack.h: Protolint. - -Thu Jan 30 01:18:42 1992 John Gilmore (gnu at cygnus.com) - - * bfd.h: Remove comma from enum declaration. - -Mon Jan 27 22:01:13 1992 Steve Chamberlain (sac at cygnus.com) - - * bfd.h : new target entr, bfd_relax_section - -Wed Dec 18 17:19:44 1991 Stu Grossman (grossman at cygnus.com) - - * bfd.h, ieee.h: ANSIfy enums. - -Thu Dec 12 20:59:56 1991 John Gilmore (gnu at cygnus.com) - - * fopen-same.h, fopen-bin.h: New files for configuring - whether fopen distinguishes binary files or not. For use - by host-dependent config files. - -Sat Nov 30 20:46:43 1991 Steve Chamberlain (sac at rtl.cygnus.com) - - * bfd.h: change the documentation format. - - * created coff, elf and opcode and aout directories. Moved: - - aout64.h ==> aout/aout64.h - ar.h ==> aout/ar.h - a.out.encap.h ==> aout/encap.h - a.out.host.h ==> aout/host.h - a.out.hp.h ==> aout/hp.h - a.out.sun4.h ==> aout/sun4.h - ranlib.h ==> aout/ranlib.h - reloc.h ==> aout/reloc.h - stab.def ==> aout/stab.def - stab.gnu.h ==> aout/stab_gnu.h - - coff-a29k.h ==> coff/a29k.h - coff-h8300.h ==> coff/h8300.h - coff-i386.h ==> coff/i386.h - coff-i960.h ==> coff/i960.h - internalcoff.h ==> coff/internal.h - coff-m68k.h ==> coff/m68k.h - coff-m88k.h ==> coff/m88k.h - coff-mips.h ==> coff/mips.h - coff-rs6000.h ==> coff/rs6000.h - - elf-common.h ==> elf/common.h - dwarf.h ==> elf/dwarf.h - elf-external.h ==> elf/external.h - elf-internal.h ==> elf/internal.h - - a29k-opcode.h ==> opcode/a29k.h - arm-opcode.h ==> opcode/arm.h - h8300-opcode.h ==> opcode/h8300.h - i386-opcode.h ==> opcode/i386.h - i860-opcode.h ==> opcode/i860.h - i960-opcode.h ==> opcode/i960.h - m68k-opcode.h ==> opcode/m68k.h - m88k-opcode.h ==> opcode/m88k.h - mips-opcode.h ==> opcode/mips.h - np1-opcode.h ==> opcode/np1.h - ns32k-opcode.h ==> opcode/ns32k.h - pn-opcode.h ==> opcode/pn.h - pyr-opcode.h ==> opcode/pyr.h - sparc-opcode.h ==> opcode/sparc.h - tahoe-opcode.h ==> opcode/tahoe.h - vax-opcode.h ==> opcode/vax.h - - - -Wed Nov 27 10:38:31 1991 Steve Chamberlain (sac at rtl.cygnus.com) - - * internalcoff.h: (internal_scnhdr) took out #def dependency, now - s_nreloc and s_nlnno are always long. (internal_reloc): allways - has an offset field now. - -Fri Nov 22 08:12:58 1991 John Gilmore (gnu at cygnus.com) - - * coff-rs6000.h: Lint; use unsigned chars for external fields. - * internalcoff.h: Lint; cast storage classes to signed char. - -Thu Nov 21 21:01:05 1991 Per Bothner (bothner at cygnus.com) - - * stab.def: Remove the GNU extended type codes (e.g. N_SETT). - * aout64.h: The heuristic for distinguishing between - sunos-style and bsd-style ZMAGIC files (wrt. where the - text segment starts) is moved into (the default definition of) - the macro N_HEADER_IN_TEXT. This definition is only used - if no other definition is used - e.g. bfd/newsos3.c defines - N_HEADER_IN_TEXT(x) to be always 0 (as before). - -Thu Nov 21 11:53:03 1991 John Gilmore (gnu at cygnus.com) - - * aout64.h (N_TXTADDR, N_TXTOFF, N_TXTSIZE): New definitions - that should handle all uses. LOGICAL_ versions deleted. - Eliminate N_HEADER_IN_TEXT, using a_entry to determine which - kind of zmagic a.out file we are looking at. - * coff-rs6000.h: Typo. - -Tue Nov 19 18:43:37 1991 Per Bothner (bothner at cygnus.com) - - (Note: This is a revised entry, as was aout64.h.) - * aout64.h: Some cleanups of N_TXTADDR and N_TXTOFF: - Will now work for both old- and new-style ZMAGIC files, - depending on N_HEADER_IN_TEXT macro. - Add LOGICAL_TXTADDR, LOICAL_TXTOFF and LOGICAL_TXTSIZE - that don't count the exec header as part - of the text segment, to be consistent with bfd. - * a.out.sun4.h: Simplified/fixed for previous change. - -Mon Nov 18 00:02:06 1991 Fred Fish (fnf at cygnus.com) - - * dwarf.h: Update to DWARF draft 5 version from gcc2. - -Thu Nov 14 19:44:59 1991 Per Bothner (bothner at cygnus.com) - - * stab.def: Added defs for extended GNU symbol types, - such as N_SETT. These are normally ifdef'd out (because - of conflicts with a.out.gnu.h), but are used by bfb_stab_name(). - -Thu Nov 14 19:17:03 1991 Fred Fish (fnf at cygnus.com) - - * elf-common.h: Add defines to support ELF symbol table code. - -Mon Nov 11 19:01:06 1991 Fred Fish (fnf at cygnus.com) - - * elf-internal.h, elf-external.h, elf-common.h: Add support for - note sections, which are used in ELF core files to hold copies - of various /proc structures. - -Thu Nov 7 08:58:26 1991 Steve Chamberlain (sac at cygnus.com) - - * internalcoff.h: took out the M88 dependency in the lineno - struct. - * coff-m88k.h: defines GET_LINENO_LNNO and PUT_LINENO_LNNO to use - 32bit linno entries. - * a29k-opcode.h: fixed encoding of mtacc - -Sun Nov 3 11:54:22 1991 Per Bothner (bothner at cygnus.com) - - * bfd.h: Updated from ../bfd/bfd-in.h (q.v). - -Fri Nov 1 11:13:53 1991 John Gilmore (gnu at cygnus.com) - - * internalcoff.h: Add x_csect defines. - -Fri Oct 25 03:18:20 1991 John Gilmore (gnu at cygnus.com) - - * Rename COFF-related files in `coff-ARCH.h' form. - coff-a29k.h, coff-i386.h, coff-i960.h, coff-m68k.h, coff-m88k.h, - coff-mips.h, coff-rs6000.h to be exact. - -Thu Oct 24 22:11:11 1991 John Gilmore (gnu at cygnus.com) - - RS/6000 support, by Metin G. Ozisik, Mimi Phûông-Thåo Võ, and - John Gilmore. - - * a.out.gnu.h: Update slightly. - * bfd.h: Add new error code, fix doc, add bfd_arch_rs6000. - * internalcoff.h: Add more F_ codes for filehdr. Add - rs/6000-dependent fields to aouthdr. Add storage classes - to syments. Add 6000-specific auxent. Add r_size in reloc. - * rs6000coff.c: New file. - -Thu Oct 24 04:13:20 1991 Fred Fish (fnf at cygnus.com) - - * dwarf.h: New file for dwarf support. Copied from gcc2 - distribution. - -Wed Oct 16 13:31:45 1991 John Gilmore (gnu at cygnus.com) - - * aout64.h: Remove PAGE_SIZE defines; they are target-dependent. - Add N_FN_SEQ for N_FN symbol type used on Sequent machines. - * stab.def: Include N_FN_SEQ in table. - * bout.h: External formats of structures use unsigned chars. - -Fri Oct 11 12:40:43 1991 Steve Chamberlain (steve at cygnus.com) - - * bfd.h:upgrade from bfd.c - * internalcoff.h: add n_name, n_zeroes and n_offset macros - * amdcoff.h: Define OMAGIC and AOUTHDRSZ. - -Fri Oct 11 10:58:06 1991 Per Bothner (bothner at cygnus.com) - - * a.out.host.h: Change SEGMENT_SIZE to 0x1000 for Sony. - * bfd.h (align_power): Add (actually move) comment. - -Tue Oct 8 15:29:32 1991 Per Bothner (bothner at cygnus.com) - - * sys/h-rtbsd.h: Define MISSING_VFPRINT (for binutils/bucomm.c). - -Sun Oct 6 19:24:39 1991 John Gilmore (gnu at cygnus.com) - - * aout64.h: Move struct internal_exec to ../bfd/libaout.h so - it can be shared by all `a.out-family' code. Rename - EXTERNAL_LIST_SIZE to EXTERNAL_NLIST_SIZE. Use basic types - for nlist members, and make strx integral rather than pointer. - More commentary on n_type values. - * bout.h: Provide a struct external_exec rather than an - internal_exec. - * m68kcoff.h: Remove `tagentries' which snuck in from the i960 - COFF port. - -Fri Oct 4 01:25:59 1991 John Gilmore (gnu at cygnus.com) - - * h8300-opcode.h: Remove `_enum' from the typedef for an enum. - * bfd.h: Update to match bfd changes. - - * sys/h-i386mach.h, sysdep.h: Add 386 Mach host support. - -Tue Oct 1 04:58:42 1991 John Gilmore (gnu at cygnus.com) - - * bfd.h, elf-common.h, elf-external.h, elf-internal.h: - Add preliminary ELF support, sufficient for GDB, from Fred Fish. - * sysdep.h, sys/h-amix.h: Support Amiga SVR4. - - * sys/h-vaxult.h: Make it work. (David Taylor ) - * a.out.vax.h: Remove unused and confusing file. - -Mon Sep 30 12:52:35 1991 Per Bothner (bothner at cygnus.com) - - * sysdep.h: Define NEWSOS3_SYS, and use it. - -Fri Sep 20 13:38:21 1991 John Gilmore (gnu at cygnus.com) - - * a.out.gnu.h (N_FN): Its value *really is* 0x1F. - Fix it, and add comments warning about or-ing N_EXT with it - and/or N_WARNING. - * aout64.h (N_FN): Fix value, add comments about N_EXT. - * stab.def (table at end): Update to show all the type - values <0x20, including low order bits. Move N_FN to - its rightful place. - -Tue Sep 17 17:41:37 1991 Stu Grossman (grossman at cygnus.com) - - * sys/h-irix3.h: sgi/irix support. - -Tue Sep 17 07:52:59 1991 John Gilmore (gnu at cygint.cygnus.com) - - * stab.def (N_DEFD): Add GNU Modula-2 debug stab, from Andrew - Beers. - -Thu Sep 12 14:12:59 1991 John Gilmore (gnu at cygint.cygnus.com) - - * internalcoff.h (SYMNMLEN, FILNMLEN, DIMNUM): Define these - for internalcoff, separately from the various external coff's. - * amdcoff.h, bcs88kcoff.h, i386coff.h, intel-coff.h, m68kcoff.h, - m88k-bcs.h: Prefix SYMNMLEN, FILNMLEN, and DIMNUM with E_'s for - the external struct definitions. - * ecoff.h: Remove these #define's, kludge no longer needed. - - * sys/h-ultra3.h: Add new Ultracomputer host. - * sysdep.h: Add ULTRA3_SYM1_SYS and use it. - -Tue Sep 10 10:11:46 1991 John Gilmore (gnu at cygint.cygnus.com) - - * i386coff.h (LINESZ): Always 6, not based on sizeof(). - (Fix from Peter Schauer .) - -Wed Sep 4 08:58:37 1991 John Gilmore (gnu at cygint.cygnus.com) - - * a.out.gnu.h, aout64.h: Add N_WARNING. Change N_FN to 0x0E, - to match SunOS and BSD. Add N_COMM as 0x12 for SunOS shared lib - support. - * stab.def: Add N_COMM to table, fix overlap comment. - -Tue Sep 3 06:29:20 1991 John Gilmore (gnu at cygint.cygnus.com) - - Merge with latest FSF versions of these files. - - * stab.gnu.h: Add LAST_UNUSED_STAB_CODE. - * stab.def: Update to GPL2. Move N_WARNING out, since not a - debug symbol. Change comments, and reorder table to numeric - order. Update final table comment. - (N_DSLINE, N_BSLINE): Renumber from 0x66 and 0x68, to 0x46 and 0x48. - - * obstack.h: GPL2. Merge. - -Fri Aug 23 01:54:23 1991 John Gilmore (gnu at cygint.cygnus.com) - - * a.out.gnu.h, a.out.sun4.h: Make SEGMENT_SIZE able to depend - on the particular a.out being examined. - * a.out.sun4.h: Define segment sizes for Sun-3's and Sun-4's. - * FIXME: a.out.gnu.h is almost obsolete. - * FIXME: a.out.sun4.h should be renamed a.out.sun.h now. - -Wed Aug 21 20:32:13 1991 John Gilmore (gnu at cygint.cygnus.com) - - * Start a ChangeLog for the includes directory. - - * a.out.gnu.h (N_FN): Fix value -- was 15, should be 0x1E. - * stab.def: Update allocation table in comments at end, - to reflect reality as I know it. - - -Local Variables: -mode: change-log -left-margin: 8 -fill-column: 74 -version-control: never -End: diff --git a/include/MAINTAINERS b/include/MAINTAINERS deleted file mode 100644 index d59a3bd7f88..00000000000 --- a/include/MAINTAINERS +++ /dev/null @@ -1 +0,0 @@ -See ../binutils/MAINTAINERS diff --git a/include/alloca-conf.h b/include/alloca-conf.h deleted file mode 100644 index 9c3eea396c1..00000000000 --- a/include/alloca-conf.h +++ /dev/null @@ -1,24 +0,0 @@ -#include "config.h" - -#if defined(__GNUC__) && !defined(C_ALLOCA) -# ifndef alloca -# define alloca __builtin_alloca -# endif -#else /* ! defined (__GNUC__) */ -# ifdef _AIX - #pragma alloca -# else -# if defined(HAVE_ALLOCA_H) && !defined(C_ALLOCA) -# include -# else /* ! defined (HAVE_ALLOCA_H) */ -# ifdef __STDC__ -extern PTR alloca (size_t); -# else /* ! defined (__STDC__) */ -extern PTR alloca (); -# endif /* ! defined (__STDC__) */ -# endif /* ! defined (HAVE_ALLOCA_H) */ -# ifdef _WIN32 -# include -# endif -# endif /* ! defined (_AIX) */ -#endif /* ! defined (__GNUC__) */ diff --git a/include/ansidecl.h b/include/ansidecl.h deleted file mode 100644 index a1a765d63f3..00000000000 --- a/include/ansidecl.h +++ /dev/null @@ -1,371 +0,0 @@ -/* ANSI and traditional C compatability macros - Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* ANSI and traditional C compatibility macros - - ANSI C is assumed if __STDC__ is #defined. - - Macro ANSI C definition Traditional C definition - ----- ---- - ---------- ----------- - ---------- - ANSI_PROTOTYPES 1 not defined - PTR `void *' `char *' - PTRCONST `void *const' `char *' - LONG_DOUBLE `long double' `double' - const not defined `' - volatile not defined `' - signed not defined `' - VA_START(ap, var) va_start(ap, var) va_start(ap) - - Note that it is safe to write "void foo();" indicating a function - with no return value, in all K+R compilers we have been able to test. - - For declaring functions with prototypes, we also provide these: - - PARAMS ((prototype)) - -- for functions which take a fixed number of arguments. Use this - when declaring the function. When defining the function, write a - K+R style argument list. For example: - - char *strcpy PARAMS ((char *dest, char *source)); - ... - char * - strcpy (dest, source) - char *dest; - char *source; - { ... } - - - VPARAMS ((prototype, ...)) - -- for functions which take a variable number of arguments. Use - PARAMS to declare the function, VPARAMS to define it. For example: - - int printf PARAMS ((const char *format, ...)); - ... - int - printf VPARAMS ((const char *format, ...)) - { - ... - } - - For writing functions which take variable numbers of arguments, we - also provide the VA_OPEN, VA_CLOSE, and VA_FIXEDARG macros. These - hide the differences between K+R and C89 more - thoroughly than the simple VA_START() macro mentioned above. - - VA_OPEN and VA_CLOSE are used *instead of* va_start and va_end. - Immediately after VA_OPEN, put a sequence of VA_FIXEDARG calls - corresponding to the list of fixed arguments. Then use va_arg - normally to get the variable arguments, or pass your va_list object - around. You do not declare the va_list yourself; VA_OPEN does it - for you. - - Here is a complete example: - - int - printf VPARAMS ((const char *format, ...)) - { - int result; - - VA_OPEN (ap, format); - VA_FIXEDARG (ap, const char *, format); - - result = vfprintf (stdout, format, ap); - VA_CLOSE (ap); - - return result; - } - - - You can declare variables either before or after the VA_OPEN, - VA_FIXEDARG sequence. Also, VA_OPEN and VA_CLOSE are the beginning - and end of a block. They must appear at the same nesting level, - and any variables declared after VA_OPEN go out of scope at - VA_CLOSE. Unfortunately, with a K+R compiler, that includes the - argument list. You can have multiple instances of VA_OPEN/VA_CLOSE - pairs in a single function in case you need to traverse the - argument list more than once. - - For ease of writing code which uses GCC extensions but needs to be - portable to other compilers, we provide the GCC_VERSION macro that - simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various - wrappers around __attribute__. Also, __extension__ will be #defined - to nothing if it doesn't work. See below. - - This header also defines a lot of obsolete macros: - CONST, VOLATILE, SIGNED, PROTO, EXFUN, DEFUN, DEFUN_VOID, - AND, DOTS, NOARGS. Don't use them. */ - -#ifndef _ANSIDECL_H -#define _ANSIDECL_H 1 - -/* Every source file includes this file, - so they will all get the switch for lint. */ -/* LINTLIBRARY */ - -/* Using MACRO(x,y) in cpp #if conditionals does not work with some - older preprocessors. Thus we can't define something like this: - -#define HAVE_GCC_VERSION(MAJOR, MINOR) \ - (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR))) - -and then test "#if HAVE_GCC_VERSION(2,7)". - -So instead we use the macro below and test it against specific values. */ - -/* This macro simplifies testing whether we are using gcc, and if it - is of a particular minimum version. (Both major & minor numbers are - significant.) This macro will evaluate to 0 if we are not using - gcc at all. */ -#ifndef GCC_VERSION -#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) -#endif /* GCC_VERSION */ - -#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32) || (defined(__alpha) && defined(__cplusplus)) -/* All known AIX compilers implement these things (but don't always - define __STDC__). The RISC/OS MIPS compiler defines these things - in SVR4 mode, but does not define __STDC__. */ -/* eraxxon@alumni.rice.edu: The Compaq C++ compiler, unlike many other - C++ compilers, does not define __STDC__, though it acts as if this - was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */ - -#define ANSI_PROTOTYPES 1 -#define PTR void * -#define PTRCONST void *const -#define LONG_DOUBLE long double - -/* PARAMS is often defined elsewhere (e.g. by libintl.h), so wrap it in - a #ifndef. */ -#ifndef PARAMS -#define PARAMS(ARGS) ARGS -#endif - -#define VPARAMS(ARGS) ARGS -#define VA_START(VA_LIST, VAR) va_start(VA_LIST, VAR) - -/* variadic function helper macros */ -/* "struct Qdmy" swallows the semicolon after VA_OPEN/VA_FIXEDARG's - use without inhibiting further decls and without declaring an - actual variable. */ -#define VA_OPEN(AP, VAR) { va_list AP; va_start(AP, VAR); { struct Qdmy -#define VA_CLOSE(AP) } va_end(AP); } -#define VA_FIXEDARG(AP, T, N) struct Qdmy - -#undef const -#undef volatile -#undef signed - -/* inline requires special treatment; it's in C99, and GCC >=2.7 supports - it too, but it's not in C89. */ -#undef inline -#if __STDC_VERSION__ > 199901L -/* it's a keyword */ -#else -# if GCC_VERSION >= 2007 -# define inline __inline__ /* __inline__ prevents -pedantic warnings */ -# else -# define inline /* nothing */ -# endif -#endif - -/* These are obsolete. Do not use. */ -#ifndef IN_GCC -#define CONST const -#define VOLATILE volatile -#define SIGNED signed - -#define PROTO(type, name, arglist) type name arglist -#define EXFUN(name, proto) name proto -#define DEFUN(name, arglist, args) name(args) -#define DEFUN_VOID(name) name(void) -#define AND , -#define DOTS , ... -#define NOARGS void -#endif /* ! IN_GCC */ - -#else /* Not ANSI C. */ - -#undef ANSI_PROTOTYPES -#define PTR char * -#define PTRCONST PTR -#define LONG_DOUBLE double - -#define PARAMS(args) () -#define VPARAMS(args) (va_alist) va_dcl -#define VA_START(va_list, var) va_start(va_list) - -#define VA_OPEN(AP, VAR) { va_list AP; va_start(AP); { struct Qdmy -#define VA_CLOSE(AP) } va_end(AP); } -#define VA_FIXEDARG(AP, TYPE, NAME) TYPE NAME = va_arg(AP, TYPE) - -/* some systems define these in header files for non-ansi mode */ -#undef const -#undef volatile -#undef signed -#undef inline -#define const -#define volatile -#define signed -#define inline - -#ifndef IN_GCC -#define CONST -#define VOLATILE -#define SIGNED - -#define PROTO(type, name, arglist) type name () -#define EXFUN(name, proto) name() -#define DEFUN(name, arglist, args) name arglist args; -#define DEFUN_VOID(name) name() -#define AND ; -#define DOTS -#define NOARGS -#endif /* ! IN_GCC */ - -#endif /* ANSI C. */ - -/* Define macros for some gcc attributes. This permits us to use the - macros freely, and know that they will come into play for the - version of gcc in which they are supported. */ - -#if (GCC_VERSION < 2007) -# define __attribute__(x) -#endif - -/* Attribute __malloc__ on functions was valid as of gcc 2.96. */ -#ifndef ATTRIBUTE_MALLOC -# if (GCC_VERSION >= 2096) -# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) -# else -# define ATTRIBUTE_MALLOC -# endif /* GNUC >= 2.96 */ -#endif /* ATTRIBUTE_MALLOC */ - -/* Attributes on labels were valid as of gcc 2.93. */ -#ifndef ATTRIBUTE_UNUSED_LABEL -# if (!defined (__cplusplus) && GCC_VERSION >= 2093) -# define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED -# else -# define ATTRIBUTE_UNUSED_LABEL -# endif /* !__cplusplus && GNUC >= 2.93 */ -#endif /* ATTRIBUTE_UNUSED_LABEL */ - -#ifndef ATTRIBUTE_UNUSED -#define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) -#endif /* ATTRIBUTE_UNUSED */ - -/* Before GCC 3.4, the C++ frontend couldn't parse attributes placed after the - identifier name. */ -#if ! defined(__cplusplus) || (GCC_VERSION >= 3004) -# define ARG_UNUSED(NAME) NAME ATTRIBUTE_UNUSED -#else /* !__cplusplus || GNUC >= 3.4 */ -# define ARG_UNUSED(NAME) NAME -#endif /* !__cplusplus || GNUC >= 3.4 */ - -#ifndef ATTRIBUTE_NORETURN -#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) -#endif /* ATTRIBUTE_NORETURN */ - -/* Attribute `nonnull' was valid as of gcc 3.3. */ -#ifndef ATTRIBUTE_NONNULL -# if (GCC_VERSION >= 3003) -# define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m))) -# else -# define ATTRIBUTE_NONNULL(m) -# endif /* GNUC >= 3.3 */ -#endif /* ATTRIBUTE_NONNULL */ - -/* Attribute `pure' was valid as of gcc 3.0. */ -#ifndef ATTRIBUTE_PURE -# if (GCC_VERSION >= 3000) -# define ATTRIBUTE_PURE __attribute__ ((__pure__)) -# else -# define ATTRIBUTE_PURE -# endif /* GNUC >= 3.0 */ -#endif /* ATTRIBUTE_PURE */ - -/* Use ATTRIBUTE_PRINTF when the format specifier must not be NULL. - This was the case for the `printf' format attribute by itself - before GCC 3.3, but as of 3.3 we need to add the `nonnull' - attribute to retain this behavior. */ -#ifndef ATTRIBUTE_PRINTF -#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) ATTRIBUTE_NONNULL(m) -#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2) -#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3) -#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4) -#define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5) -#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6) -#endif /* ATTRIBUTE_PRINTF */ - -/* Use ATTRIBUTE_FPTR_PRINTF when the format attribute is to be set on - a function pointer. Format attributes were allowed on function - pointers as of gcc 3.1. */ -#ifndef ATTRIBUTE_FPTR_PRINTF -# if (GCC_VERSION >= 3001) -# define ATTRIBUTE_FPTR_PRINTF(m, n) ATTRIBUTE_PRINTF(m, n) -# else -# define ATTRIBUTE_FPTR_PRINTF(m, n) -# endif /* GNUC >= 3.1 */ -# define ATTRIBUTE_FPTR_PRINTF_1 ATTRIBUTE_FPTR_PRINTF(1, 2) -# define ATTRIBUTE_FPTR_PRINTF_2 ATTRIBUTE_FPTR_PRINTF(2, 3) -# define ATTRIBUTE_FPTR_PRINTF_3 ATTRIBUTE_FPTR_PRINTF(3, 4) -# define ATTRIBUTE_FPTR_PRINTF_4 ATTRIBUTE_FPTR_PRINTF(4, 5) -# define ATTRIBUTE_FPTR_PRINTF_5 ATTRIBUTE_FPTR_PRINTF(5, 6) -#endif /* ATTRIBUTE_FPTR_PRINTF */ - -/* Use ATTRIBUTE_NULL_PRINTF when the format specifier may be NULL. A - NULL format specifier was allowed as of gcc 3.3. */ -#ifndef ATTRIBUTE_NULL_PRINTF -# if (GCC_VERSION >= 3003) -# define ATTRIBUTE_NULL_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) -# else -# define ATTRIBUTE_NULL_PRINTF(m, n) -# endif /* GNUC >= 3.3 */ -# define ATTRIBUTE_NULL_PRINTF_1 ATTRIBUTE_NULL_PRINTF(1, 2) -# define ATTRIBUTE_NULL_PRINTF_2 ATTRIBUTE_NULL_PRINTF(2, 3) -# define ATTRIBUTE_NULL_PRINTF_3 ATTRIBUTE_NULL_PRINTF(3, 4) -# define ATTRIBUTE_NULL_PRINTF_4 ATTRIBUTE_NULL_PRINTF(4, 5) -# define ATTRIBUTE_NULL_PRINTF_5 ATTRIBUTE_NULL_PRINTF(5, 6) -#endif /* ATTRIBUTE_NULL_PRINTF */ - -/* Attribute `sentinel' was valid as of gcc 3.5. */ -#ifndef ATTRIBUTE_SENTINEL -# if (GCC_VERSION >= 3005) -# define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__)) -# else -# define ATTRIBUTE_SENTINEL -# endif /* GNUC >= 3.5 */ -#endif /* ATTRIBUTE_SENTINEL */ - - -#ifndef ATTRIBUTE_ALIGNED_ALIGNOF -# if (GCC_VERSION >= 3000) -# define ATTRIBUTE_ALIGNED_ALIGNOF(m) __attribute__ ((__aligned__ (__alignof__ (m)))) -# else -# define ATTRIBUTE_ALIGNED_ALIGNOF(m) -# endif /* GNUC >= 3.0 */ -#endif /* ATTRIBUTE_ALIGNED_ALIGNOF */ - -/* We use __extension__ in some places to suppress -pedantic warnings - about GCC extensions. This feature didn't work properly before - gcc 2.8. */ -#if GCC_VERSION < 2008 -#define __extension__ -#endif - -#endif /* ansidecl.h */ diff --git a/include/aout/ChangeLog b/include/aout/ChangeLog deleted file mode 100644 index e00c698c3cc..00000000000 --- a/include/aout/ChangeLog +++ /dev/null @@ -1,219 +0,0 @@ -2005-05-10 Nick Clifton - - * Update the address and phone number of the FSF organization in - the GPL notices in the following files: - adobe.h, aout64.h, ar.h, dynix3.h, encap.h, host.h, hp.h, - ranlib.h, reloc.h, stab.def, stab_gnu.h, sun4.h - -2004-01-06 Mark Kettenis - - * stab.def: Add N_PATCH to DO definition. - -2003-03-06 Elias Athanasopoulos - - * aout64.h (BYTES_IN_WORD): Define if necessary. - -2001-09-18 Alan Modra - - * aout64.h: Formatting fixes. - (N_TXTADDR): Evaluate to a bfd_vma. - (N_DATADDR): Avoid negative unsigned warning. - * hp300hpux.h: Formatting fixes. - (N_DATADDR): Avoid negative unsigned warning. - -2000-04-03 Hans-Peter Nilsson - - * aout64.h (RELOC_EXT_BITS_EXTERN_BIG): Wrap definition in #ifndef. - (RELOC_EXT_BITS_EXTERN_LITTLE): Ditto. - (RELOC_EXT_BITS_TYPE_BIG): Ditto. - (RELOC_EXT_BITS_TYPE_SH_BIG): Ditto. - (RELOC_EXT_BITS_TYPE_LITTLE): Ditto. - (RELOC_EXT_BITS_TYPE_SH_LITTLE): Ditto. - -1999-07-12 Ian Lance Taylor - - * aout64.h (N_SHARED_LIB): Define as 0 if TEXT_START_ADDR is - defined as 0. - -1998-06-28 Peter Schauer - - * stab.def: Add N_ALIAS from SunPro F77. - -1996-03-11 Ian Lance Taylor - - * stab.def: Use __define_stab_duplicate rather than __define_stab - for duplicate entries N_BROWS and N_MOD2. - * stab_gnu.h (__define_stab_duplicate): Define before including - stab.def. - -1995-10-27 Niklas Hallqvist - - * aout64.h, host.h, hp300hpux.h, sun4.h: Changed PAGE_SIZE to - TARGET_PAGE_SIZE. - -1995-09-12 Ian Lance Taylor - - * sun4.h (struct internal_sun4_dynamic_link): Change all fields - from long to unsigned long. - -1995-07-12 Ken Raeburn - - * sun4.h (PAGE_SIZE): Undefine before defining. - -1994-09-04 Richard Earnshaw (rwe@pegasus.esprit.ec.org) - - * aout64.h: Only define QMAGIC if it isn't already defined. - -1994-06-16 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * aout64.h (BMAGIC): Define. - -1994-06-11 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - Add weak symbols as an extension to a.out. - * aout64.h (N_WEAKU, N_WEAKA, N_WEAKT, N_WEAKD, N_WEAKB): Define. - * stab.def: Update symbol value table. - -1994-06-02 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * sun4.h (EXTERNAL_SUN4_DYNAMIC_DEBUGGER_SIZE): Correct from 28 to - 24. Fix up ld_got comment. - -1994-03-30 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * dynix3.h: Cleanup, adapt to current bfd version. - -1994-02-26 Ian Lance Taylor (ian@cygnus.com) - - * aout64.h: Add casts to avoid warnings from SVR4 cc. - -1994-02-11 Stan Shebs (shebs@andros.cygnus.com) - - * ar.h (ARMAG, ARMAGB, ARFMAG): Change '\n' to '\012', for greater - portability. - -1994-01-21 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * sun4.h: Added information about SunOS shared libraries. - -1994-01-07 Jim Kingdon (kingdon@deneb.cygnus.com) - - * aout64.h (N_TXTADDR): Add comment regarding OMAGIC and NMAGIC. - -1993-12-25 Jim Kingdon (kingdon@lioth.cygnus.com) - - * aout64.h (N_DATOFF): Don't pad (revert change of 8 Jul 1993). - -1993-11-16 Jim Kingdon (kingdon@lioth.cygnus.com) - - * aout64.h: New macros ZMAGIC_DISK_BLOCK_SIZE and N_DISK_BLOCK_SIZE - for Linux ZMAGIC. - (N_TXTOFF, N_DATOFF): Use them. - -1993-11-04 Ken Raeburn (raeburn@kr-pc.cygnus.com) - - * aout64.h (RELOC_STD_BITS_RELATIVE_LITTLE): Fixed value to match - sun3 system; used to overlap other fields. - (RELOC_STD_BITS_JMPTABLE_LITTLE): Likewise. - -1993-11-03 David J. Mackenzie (djm@thepub.cygnus.com) - - * aout64.h (RELOC_STD_BITS_BASEREL_LITTLE): Make it 0x10 (Ken's - suggestion) to avoid conflict with RELOC_STD_BITS_EXTERN_LITTLE. - -1993-10-29 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * hp300hpux.h (N_SHARED_LIB): Define to be 0. - -1993-09-13 John Gilmore (gnu@cygnus.com) - - * ar.h (ARMAP_TIME_OFFSET): Add and describe. - -Mon Aug 23 Sean Fagan (sef@cygnus.com) - - * aout64.h [ARCH_SIZE != 64]: Allow N_BADMAG to be overridden. - -1993-08-16 Jim Kingdon (kingdon@lioth.cygnus.com) - - * stab_gnu.h: Include aout/stab.def not just stab.def. - -1993-07-18 Jim Kingdon (kingdon@rtl.cygnus.com) - - * dynix3.h: New, for symmetry running dynix. - -1993-07-08 Jim Kingdon (kingdon@lioth.cygnus.com) - - * aout64.h (N_BADMAG): Recognize QMAGIC. - N_TXTOFF, N_TXTADDR, N_TXTSIZE: Special code for QMAGIC. - N_DATOFF: Pad text size if we need to. - -1993-06-18 Jim Kingdon (kingdon@lioth.cygnus.com) - - * stab.def (N_ECOML): Fix comment. - -1993-05-31 Jim Kingdon (kingdon@cygnus.com) - - * stab.def: Remove Solaris information on N_FUN stabstring grammar; - I've transferred it to gdb/doc/stabs.texinfo, where it belongs. - -1993-05-10 Ken Raeburn (raeburn@kr-pc.cygnus.com) - - * hp300hpux.h: Patch from Glenn Engel for linker problem and - compatibility fix: - (OMAGIC, NMAGIC): New definitions. - (SHAREMAGIC): Deleted. - (HPUX_DOT_O_MAGIC): New macro. - (_N_BADMAG): Adjusted. - (N_HEADER_IN_TEXT, N_DATADDR): New macros. - -1993-04-29 Ken Raeburn (raeburn@deneb.cygnus.com) - - * hp300hpux.h: New file from Glenn Engel, glenne@lsid.hp.com. - -1993-04-27 Ken Raeburn (raeburn@kr-pc.cygnus.com) - - * aout64.h (struct external_exec, *MAGIC, N_BADMAG): Don't define - if `external_exec' is already defined as a macro. - (N_DATOFF, N_TRELOFF, N_DRELOFF, N_SYMOFF, N_STROFF): Don't define - if already defined. - (struct external_nlist, EXTERNAL_NLIST_SIZE): Don't define if - `external_nlist' is already defined as a macro. - -1992-08-15 John Gilmore (gnu@cygnus.com) - - * adobe.h: Add description of a.out.adobe format. - -1992-07-03 John Gilmore (gnu at cygnus.com) - - * stab.def: Update more Solaris definitions. - * stab_gnu.h: Add N_SO language types, and Solaris basic float types. - -1992-06-14 John Gilmore (gnu at cygnus.com) - - * stab.def: Update descriptions of Solaris-2 stabs; add N_UNDF. - -1992-06-11 John Gilmore (gnu at cygnus.com) - - * stab.def: Add N_OBJ and N_OPT from Solaris-2. - -1992-01-30 John Gilmore (gnu at cygnus.com) - - * aout64.h: N_TXTSIZE needs some more parentheses. - I don't trust C precedence. - -1991-12-18 Per Bothner (bothner at cygnus.com) - - * aout64.h: Move common sunos-specific test - to recognize shared libraries into new macro N_SHARED_LIB. - Use it to simplify & reformat N_TXTADDR, N_TXTOFF, N_TXTSIZE. - -1991-11-30 Steve Chamberlain (sac at rtl.cygnus.com) - - * aout64.h, ar.h, encap.h, host.h, hp.h, ranlib.h, reloc.h, - stab.def, stab_gnu.h, sun4.h: All moved from the devo/include - directory. - - -Local Variables: -version-control: never -End: diff --git a/include/aout/adobe.h b/include/aout/adobe.h deleted file mode 100644 index 2e81240bf45..00000000000 --- a/include/aout/adobe.h +++ /dev/null @@ -1,313 +0,0 @@ -/* `a.out.adobe' differences from standard a.out files - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef __A_OUT_ADOBE_H__ -#define __A_OUT_ADOBE_H__ - -#define BYTES_IN_WORD 4 - -/* Struct external_exec is the same. */ - -/* This is the layout on disk of the 32-bit or 64-bit exec header. */ - -struct external_exec -{ - bfd_byte e_info[4]; /* magic number and stuff */ - bfd_byte e_text[BYTES_IN_WORD]; /* length of text section in bytes */ - bfd_byte e_data[BYTES_IN_WORD]; /* length of data section in bytes */ - bfd_byte e_bss[BYTES_IN_WORD]; /* length of bss area in bytes */ - bfd_byte e_syms[BYTES_IN_WORD]; /* length of symbol table in bytes */ - bfd_byte e_entry[BYTES_IN_WORD]; /* start address */ - bfd_byte e_trsize[BYTES_IN_WORD]; /* length of text relocation info */ - bfd_byte e_drsize[BYTES_IN_WORD]; /* length of data relocation info */ -}; - -#define EXEC_BYTES_SIZE (4 + BYTES_IN_WORD * 7) - -/* Magic numbers for a.out files */ - -#undef ZMAGIC -#define ZMAGIC 0xAD0BE /* Cute, eh? */ -#undef OMAGIC -#undef NMAGIC - -#define N_BADMAG(x) ((x).a_info != ZMAGIC) - -/* By default, segment size is constant. But some machines override this - to be a function of the a.out header (e.g. machine type). */ -#ifndef N_SEGSIZE -#define N_SEGSIZE(x) SEGMENT_SIZE -#endif -#undef N_SEGSIZE /* FIXMEXXXX */ - -/* Segment information for the a.out.Adobe format is specified after the - file header. It contains N segment descriptors, followed by one with - a type of zero. - - The actual text of the segments starts at N_TXTOFF in the file, - regardless of how many or how few segment headers there are. */ - -struct external_segdesc { - unsigned char e_type[1]; - unsigned char e_size[3]; - unsigned char e_virtbase[4]; - unsigned char e_filebase[4]; -}; - -struct internal_segdesc { - unsigned int a_type:8; /* Segment type N_TEXT, N_DATA, 0 */ - unsigned int a_size:24; /* Segment size */ - bfd_vma a_virtbase; /* Virtual address */ - unsigned int a_filebase; /* Base address in object file */ -}; - -#define N_TXTADDR(x) \ - -/* This is documented to be at 1024, but appears to really be at 2048. - FIXME?! */ -#define N_TXTOFF(x) 2048 - -#define N_TXTSIZE(x) ((x).a_text) - -#define N_DATADDR(x) - -#define N_BSSADDR(x) - -/* Offsets of the various portions of the file after the text segment. */ - -#define N_DATOFF(x) ( N_TXTOFF(x) + N_TXTSIZE(x) ) -#define N_TRELOFF(x) ( N_DATOFF(x) + (x).a_data ) -#define N_DRELOFF(x) ( N_TRELOFF(x) + (x).a_trsize ) -#define N_SYMOFF(x) ( N_DRELOFF(x) + (x).a_drsize ) -#define N_STROFF(x) ( N_SYMOFF(x) + (x).a_syms ) - -/* Symbols */ -struct external_nlist { - bfd_byte e_strx[BYTES_IN_WORD]; /* index into string table of name */ - bfd_byte e_type[1]; /* type of symbol */ - bfd_byte e_other[1]; /* misc info (usually empty) */ - bfd_byte e_desc[2]; /* description field */ - bfd_byte e_value[BYTES_IN_WORD]; /* value of symbol */ -}; - -#define EXTERNAL_NLIST_SIZE (BYTES_IN_WORD+4+BYTES_IN_WORD) - -struct internal_nlist { - unsigned long n_strx; /* index into string table of name */ - unsigned char n_type; /* type of symbol */ - unsigned char n_other; /* misc info (usually empty) */ - unsigned short n_desc; /* description field */ - bfd_vma n_value; /* value of symbol */ -}; - -/* The n_type field is the symbol type, containing: */ - -#define N_UNDF 0 /* Undefined symbol */ -#define N_ABS 2 /* Absolute symbol -- defined at particular addr */ -#define N_TEXT 4 /* Text sym -- defined at offset in text seg */ -#define N_DATA 6 /* Data sym -- defined at offset in data seg */ -#define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg */ -#define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink) */ -#define N_FN 0x1f /* File name of .o file */ -#define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh) */ -/* Note: N_EXT can only be usefully OR-ed with N_UNDF, N_ABS, N_TEXT, - N_DATA, or N_BSS. When the low-order bit of other types is set, - (e.g. N_WARNING versus N_FN), they are two different types. */ -#define N_EXT 1 /* External symbol (as opposed to local-to-this-file) */ -#define N_TYPE 0x1e -#define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol */ - -#define N_INDR 0x0a - -/* The following symbols refer to set elements. - All the N_SET[ATDB] symbols with the same name form one set. - Space is allocated for the set in the text section, and each set - elements value is stored into one word of the space. - The first word of the space is the length of the set (number of elements). - - The address of the set is made into an N_SETV symbol - whose name is the same as the name of the set. - This symbol acts like a N_DATA global symbol - in that it can satisfy undefined external references. */ - -/* These appear as input to LD, in a .o file. */ -#define N_SETA 0x14 /* Absolute set element symbol */ -#define N_SETT 0x16 /* Text set element symbol */ -#define N_SETD 0x18 /* Data set element symbol */ -#define N_SETB 0x1A /* Bss set element symbol */ - -/* This is output from LD. */ -#define N_SETV 0x1C /* Pointer to set vector in data area. */ - -/* Warning symbol. The text gives a warning message, the next symbol - in the table will be undefined. When the symbol is referenced, the - message is printed. */ - -#define N_WARNING 0x1e - -/* Relocations - - There are two types of relocation flavours for a.out systems, - standard and extended. The standard form is used on systems where the - instruction has room for all the bits of an offset to the operand, whilst - the extended form is used when an address operand has to be split over n - instructions. Eg, on the 68k, each move instruction can reference - the target with a displacement of 16 or 32 bits. On the sparc, move - instructions use an offset of 14 bits, so the offset is stored in - the reloc field, and the data in the section is ignored. -*/ - -/* This structure describes a single relocation to be performed. - The text-relocation section of the file is a vector of these structures, - all of which apply to the text section. - Likewise, the data-relocation section applies to the data section. */ - -struct reloc_std_external { - bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */ - bfd_byte r_index[3]; /* symbol table index of symbol */ - bfd_byte r_type[1]; /* relocation type */ -}; - -#define RELOC_STD_BITS_PCREL_BIG 0x80 -#define RELOC_STD_BITS_PCREL_LITTLE 0x01 - -#define RELOC_STD_BITS_LENGTH_BIG 0x60 -#define RELOC_STD_BITS_LENGTH_SH_BIG 5 /* To shift to units place */ -#define RELOC_STD_BITS_LENGTH_LITTLE 0x06 -#define RELOC_STD_BITS_LENGTH_SH_LITTLE 1 - -#define RELOC_STD_BITS_EXTERN_BIG 0x10 -#define RELOC_STD_BITS_EXTERN_LITTLE 0x08 - -#define RELOC_STD_BITS_BASEREL_BIG 0x08 -#define RELOC_STD_BITS_BASEREL_LITTLE 0x08 - -#define RELOC_STD_BITS_JMPTABLE_BIG 0x04 -#define RELOC_STD_BITS_JMPTABLE_LITTLE 0x04 - -#define RELOC_STD_BITS_RELATIVE_BIG 0x02 -#define RELOC_STD_BITS_RELATIVE_LITTLE 0x02 - -#define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry */ - -struct reloc_std_internal -{ - bfd_vma r_address; /* Address (within segment) to be relocated. */ - /* The meaning of r_symbolnum depends on r_extern. */ - unsigned int r_symbolnum:24; - /* Nonzero means value is a pc-relative offset - and it should be relocated for changes in its own address - as well as for changes in the symbol or section specified. */ - unsigned int r_pcrel:1; - /* Length (as exponent of 2) of the field to be relocated. - Thus, a value of 2 indicates 1<<2 bytes. */ - unsigned int r_length:2; - /* 1 => relocate with value of symbol. - r_symbolnum is the index of the symbol - in files the symbol table. - 0 => relocate with the address of a segment. - r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS - (the N_EXT bit may be set also, but signifies nothing). */ - unsigned int r_extern:1; - /* The next three bits are for SunOS shared libraries, and seem to - be undocumented. */ - unsigned int r_baserel:1; /* Linkage table relative */ - unsigned int r_jmptable:1; /* pc-relative to jump table */ - unsigned int r_relative:1; /* "relative relocation" */ - /* unused */ - unsigned int r_pad:1; /* Padding -- set to zero */ -}; - - -/* EXTENDED RELOCS */ - -struct reloc_ext_external { - bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */ - bfd_byte r_index[3]; /* symbol table index of symbol */ - bfd_byte r_type[1]; /* relocation type */ - bfd_byte r_addend[BYTES_IN_WORD]; /* datum addend */ -}; - -#define RELOC_EXT_BITS_EXTERN_BIG 0x80 -#define RELOC_EXT_BITS_EXTERN_LITTLE 0x01 - -#define RELOC_EXT_BITS_TYPE_BIG 0x1F -#define RELOC_EXT_BITS_TYPE_SH_BIG 0 -#define RELOC_EXT_BITS_TYPE_LITTLE 0xF8 -#define RELOC_EXT_BITS_TYPE_SH_LITTLE 3 - -/* Bytes per relocation entry */ -#define RELOC_EXT_SIZE (BYTES_IN_WORD + 3 + 1 + BYTES_IN_WORD) - -enum reloc_type -{ - /* simple relocations */ - RELOC_8, /* data[0:7] = addend + sv */ - RELOC_16, /* data[0:15] = addend + sv */ - RELOC_32, /* data[0:31] = addend + sv */ - /* pc-rel displacement */ - RELOC_DISP8, /* data[0:7] = addend - pc + sv */ - RELOC_DISP16, /* data[0:15] = addend - pc + sv */ - RELOC_DISP32, /* data[0:31] = addend - pc + sv */ - /* Special */ - RELOC_WDISP30, /* data[0:29] = (addend + sv - pc)>>2 */ - RELOC_WDISP22, /* data[0:21] = (addend + sv - pc)>>2 */ - RELOC_HI22, /* data[0:21] = (addend + sv)>>10 */ - RELOC_22, /* data[0:21] = (addend + sv) */ - RELOC_13, /* data[0:12] = (addend + sv) */ - RELOC_LO10, /* data[0:9] = (addend + sv) */ - RELOC_SFA_BASE, - RELOC_SFA_OFF13, - /* P.I.C. (base-relative) */ - RELOC_BASE10, /* Not sure - maybe we can do this the */ - RELOC_BASE13, /* right way now */ - RELOC_BASE22, - /* for some sort of pc-rel P.I.C. (?) */ - RELOC_PC10, - RELOC_PC22, - /* P.I.C. jump table */ - RELOC_JMP_TBL, - /* reputedly for shared libraries somehow */ - RELOC_SEGOFF16, - RELOC_GLOB_DAT, - RELOC_JMP_SLOT, - RELOC_RELATIVE, - - RELOC_11, - RELOC_WDISP2_14, - RELOC_WDISP19, - RELOC_HHI22, /* data[0:21] = (addend + sv) >> 42 */ - RELOC_HLO10, /* data[0:9] = (addend + sv) >> 32 */ - - /* 29K relocation types */ - RELOC_JUMPTARG, - RELOC_CONST, - RELOC_CONSTH, - - NO_RELOC - }; - - -struct reloc_internal { - bfd_vma r_address; /* offset of of data to relocate */ - long r_index; /* symbol table index of symbol */ - enum reloc_type r_type; /* relocation type */ - bfd_vma r_addend; /* datum addend */ -}; - -#endif /* __A_OUT_ADOBE_H__ */ diff --git a/include/aout/aout64.h b/include/aout/aout64.h deleted file mode 100644 index 2e289b3925d..00000000000 --- a/include/aout/aout64.h +++ /dev/null @@ -1,519 +0,0 @@ -/* `a.out' object-file definitions, including extensions to 64-bit fields - - Copyright 1999, 2000, 2001, 2003 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef __A_OUT_64_H__ -#define __A_OUT_64_H__ - -#ifndef BYTES_IN_WORD -#define BYTES_IN_WORD 4 -#endif - -/* This is the layout on disk of the 32-bit or 64-bit exec header. */ - -#ifndef external_exec -struct external_exec -{ - bfd_byte e_info[4]; /* Magic number and stuff. */ - bfd_byte e_text[BYTES_IN_WORD]; /* Length of text section in bytes. */ - bfd_byte e_data[BYTES_IN_WORD]; /* Length of data section in bytes. */ - bfd_byte e_bss[BYTES_IN_WORD]; /* Length of bss area in bytes. */ - bfd_byte e_syms[BYTES_IN_WORD]; /* Length of symbol table in bytes. */ - bfd_byte e_entry[BYTES_IN_WORD]; /* Start address. */ - bfd_byte e_trsize[BYTES_IN_WORD]; /* Length of text relocation info. */ - bfd_byte e_drsize[BYTES_IN_WORD]; /* Length of data relocation info. */ -}; - -#define EXEC_BYTES_SIZE (4 + BYTES_IN_WORD * 7) - -/* Magic numbers for a.out files. */ - -#if ARCH_SIZE==64 -#define OMAGIC 0x1001 /* Code indicating object file. */ -#define ZMAGIC 0x1002 /* Code indicating demand-paged executable. */ -#define NMAGIC 0x1003 /* Code indicating pure executable. */ - -/* There is no 64-bit QMAGIC as far as I know. */ - -#define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \ - && N_MAGIC(x) != NMAGIC \ - && N_MAGIC(x) != ZMAGIC) -#else -#define OMAGIC 0407 /* Object file or impure executable. */ -#define NMAGIC 0410 /* Code indicating pure executable. */ -#define ZMAGIC 0413 /* Code indicating demand-paged executable. */ -#define BMAGIC 0415 /* Used by a b.out object. */ - -/* This indicates a demand-paged executable with the header in the text. - It is used by 386BSD (and variants) and Linux, at least. */ -#ifndef QMAGIC -#define QMAGIC 0314 -#endif -# ifndef N_BADMAG -# define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \ - && N_MAGIC(x) != NMAGIC \ - && N_MAGIC(x) != ZMAGIC \ - && N_MAGIC(x) != QMAGIC) -# endif /* N_BADMAG */ -#endif - -#endif - -#ifdef QMAGIC -#define N_IS_QMAGIC(x) (N_MAGIC (x) == QMAGIC) -#else -#define N_IS_QMAGIC(x) (0) -#endif - -/* The difference between TARGET_PAGE_SIZE and N_SEGSIZE is that TARGET_PAGE_SIZE is - the finest granularity at which you can page something, thus it - controls the padding (if any) before the text segment of a ZMAGIC - file. N_SEGSIZE is the resolution at which things can be marked as - read-only versus read/write, so it controls the padding between the - text segment and the data segment (in memory; on disk the padding - between them is TARGET_PAGE_SIZE). TARGET_PAGE_SIZE and N_SEGSIZE are the same - for most machines, but different for sun3. */ - -/* By default, segment size is constant. But some machines override this - to be a function of the a.out header (e.g. machine type). */ - -#ifndef N_SEGSIZE -#define N_SEGSIZE(x) SEGMENT_SIZE -#endif - -/* Virtual memory address of the text section. - This is getting very complicated. A good reason to discard a.out format - for something that specifies these fields explicitly. But til then... - - * OMAGIC and NMAGIC files: - (object files: text for "relocatable addr 0" right after the header) - start at 0, offset is EXEC_BYTES_SIZE, size as stated. - * The text address, offset, and size of ZMAGIC files depend - on the entry point of the file: - * entry point below TEXT_START_ADDR: - (hack for SunOS shared libraries) - start at 0, offset is 0, size as stated. - * If N_HEADER_IN_TEXT(x) is true (which defaults to being the - case when the entry point is EXEC_BYTES_SIZE or further into a page): - no padding is needed; text can start after exec header. Sun - considers the text segment of such files to include the exec header; - for BFD's purposes, we don't, which makes more work for us. - start at TEXT_START_ADDR + EXEC_BYTES_SIZE, offset is EXEC_BYTES_SIZE, - size as stated minus EXEC_BYTES_SIZE. - * If N_HEADER_IN_TEXT(x) is false (which defaults to being the case when - the entry point is less than EXEC_BYTES_SIZE into a page (e.g. page - aligned)): (padding is needed so that text can start at a page boundary) - start at TEXT_START_ADDR, offset TARGET_PAGE_SIZE, size as stated. - - Specific configurations may want to hardwire N_HEADER_IN_TEXT, - for efficiency or to allow people to play games with the entry point. - In that case, you would #define N_HEADER_IN_TEXT(x) as 1 for sunos, - and as 0 for most other hosts (Sony News, Vax Ultrix, etc). - (Do this in the appropriate bfd target file.) - (The default is a heuristic that will break if people try changing - the entry point, perhaps with the ld -e flag.) - - * QMAGIC is always like a ZMAGIC for which N_HEADER_IN_TEXT is true, - and for which the starting address is TARGET_PAGE_SIZE (or should this be - SEGMENT_SIZE?) (TEXT_START_ADDR only applies to ZMAGIC, not to QMAGIC). */ - -/* This macro is only relevant for ZMAGIC files; QMAGIC always has the header - in the text. */ -#ifndef N_HEADER_IN_TEXT -#define N_HEADER_IN_TEXT(x) \ - (((x).a_entry & (TARGET_PAGE_SIZE-1)) >= EXEC_BYTES_SIZE) -#endif - -/* Sun shared libraries, not linux. This macro is only relevant for ZMAGIC - files. */ -#ifndef N_SHARED_LIB -#if defined (TEXT_START_ADDR) && TEXT_START_ADDR == 0 -#define N_SHARED_LIB(x) (0) -#else -#define N_SHARED_LIB(x) ((x).a_entry < TEXT_START_ADDR) -#endif -#endif - -/* Returning 0 not TEXT_START_ADDR for OMAGIC and NMAGIC is based on - the assumption that we are dealing with a .o file, not an - executable. This is necessary for OMAGIC (but means we don't work - right on the output from ld -N); more questionable for NMAGIC. */ - -#ifndef N_TXTADDR -#define N_TXTADDR(x) \ - (/* The address of a QMAGIC file is always one page in, \ - with the header in the text. */ \ - N_IS_QMAGIC (x) \ - ? (bfd_vma) TARGET_PAGE_SIZE + EXEC_BYTES_SIZE \ - : (N_MAGIC (x) != ZMAGIC \ - ? (bfd_vma) 0 /* Object file or NMAGIC. */ \ - : (N_SHARED_LIB (x) \ - ? (bfd_vma) 0 \ - : (N_HEADER_IN_TEXT (x) \ - ? (bfd_vma) TEXT_START_ADDR + EXEC_BYTES_SIZE \ - : (bfd_vma) TEXT_START_ADDR)))) -#endif - -/* If N_HEADER_IN_TEXT is not true for ZMAGIC, there is some padding - to make the text segment start at a certain boundary. For most - systems, this boundary is TARGET_PAGE_SIZE. But for Linux, in the - time-honored tradition of crazy ZMAGIC hacks, it is 1024 which is - not what TARGET_PAGE_SIZE needs to be for QMAGIC. */ - -#ifndef ZMAGIC_DISK_BLOCK_SIZE -#define ZMAGIC_DISK_BLOCK_SIZE TARGET_PAGE_SIZE -#endif - -#define N_DISK_BLOCK_SIZE(x) \ - (N_MAGIC(x) == ZMAGIC ? ZMAGIC_DISK_BLOCK_SIZE : TARGET_PAGE_SIZE) - -/* Offset in an a.out of the start of the text section. */ -#ifndef N_TXTOFF -#define N_TXTOFF(x) \ - (/* For {O,N,Q}MAGIC, no padding. */ \ - N_MAGIC (x) != ZMAGIC \ - ? EXEC_BYTES_SIZE \ - : (N_SHARED_LIB (x) \ - ? 0 \ - : (N_HEADER_IN_TEXT (x) \ - ? EXEC_BYTES_SIZE /* No padding. */ \ - : ZMAGIC_DISK_BLOCK_SIZE /* A page of padding. */))) -#endif -/* Size of the text section. It's always as stated, except that we - offset it to `undo' the adjustment to N_TXTADDR and N_TXTOFF - for ZMAGIC files that nominally include the exec header - as part of the first page of text. (BFD doesn't consider the - exec header to be part of the text segment.) */ -#ifndef N_TXTSIZE -#define N_TXTSIZE(x) \ - (/* For QMAGIC, we don't consider the header part of the text section. */\ - N_IS_QMAGIC (x) \ - ? (x).a_text - EXEC_BYTES_SIZE \ - : ((N_MAGIC (x) != ZMAGIC || N_SHARED_LIB (x)) \ - ? (x).a_text \ - : (N_HEADER_IN_TEXT (x) \ - ? (x).a_text - EXEC_BYTES_SIZE /* No padding. */ \ - : (x).a_text /* A page of padding. */ ))) -#endif -/* The address of the data segment in virtual memory. - It is the text segment address, plus text segment size, rounded - up to a N_SEGSIZE boundary for pure or pageable files. */ -#ifndef N_DATADDR -#define N_DATADDR(x) \ - (N_MAGIC (x) == OMAGIC \ - ? (N_TXTADDR (x) + N_TXTSIZE (x)) \ - : (N_SEGSIZE (x) + ((N_TXTADDR (x) + N_TXTSIZE (x) - 1) \ - & ~ (bfd_vma) (N_SEGSIZE (x) - 1)))) -#endif -/* The address of the BSS segment -- immediately after the data segment. */ - -#define N_BSSADDR(x) (N_DATADDR (x) + (x).a_data) - -/* Offsets of the various portions of the file after the text segment. */ - -/* For {Q,Z}MAGIC, there is padding to make the data segment start on - a page boundary. Most of the time the a_text field (and thus - N_TXTSIZE) already contains this padding. It is possible that for - BSDI and/or 386BSD it sometimes doesn't contain the padding, and - perhaps we should be adding it here. But this seems kind of - questionable and probably should be BSDI/386BSD-specific if we do - do it. - - For NMAGIC (at least for hp300 BSD, probably others), there is - padding in memory only, not on disk, so we must *not* ever pad here - for NMAGIC. */ - -#ifndef N_DATOFF -#define N_DATOFF(x) (N_TXTOFF (x) + N_TXTSIZE (x)) -#endif -#ifndef N_TRELOFF -#define N_TRELOFF(x) (N_DATOFF (x) + (x).a_data) -#endif -#ifndef N_DRELOFF -#define N_DRELOFF(x) (N_TRELOFF (x) + (x).a_trsize) -#endif -#ifndef N_SYMOFF -#define N_SYMOFF(x) (N_DRELOFF (x) + (x).a_drsize) -#endif -#ifndef N_STROFF -#define N_STROFF(x) (N_SYMOFF (x) + (x).a_syms) -#endif - -/* Symbols */ -#ifndef external_nlist -struct external_nlist -{ - bfd_byte e_strx[BYTES_IN_WORD]; /* Index into string table of name. */ - bfd_byte e_type[1]; /* Type of symbol. */ - bfd_byte e_other[1]; /* Misc info (usually empty). */ - bfd_byte e_desc[2]; /* Description field. */ - bfd_byte e_value[BYTES_IN_WORD]; /* Value of symbol. */ -}; -#define EXTERNAL_NLIST_SIZE (BYTES_IN_WORD+4+BYTES_IN_WORD) -#endif - -struct internal_nlist -{ - unsigned long n_strx; /* Index into string table of name. */ - unsigned char n_type; /* Type of symbol. */ - unsigned char n_other; /* Misc info (usually empty). */ - unsigned short n_desc; /* Description field. */ - bfd_vma n_value; /* Value of symbol. */ -}; - -/* The n_type field is the symbol type, containing: */ - -#define N_UNDF 0 /* Undefined symbol. */ -#define N_ABS 2 /* Absolute symbol -- defined at particular addr. */ -#define N_TEXT 4 /* Text sym -- defined at offset in text seg. */ -#define N_DATA 6 /* Data sym -- defined at offset in data seg. */ -#define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg. */ -#define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink). */ -#define N_FN 0x1f /* File name of .o file. */ -#define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh). */ -/* Note: N_EXT can only be usefully OR-ed with N_UNDF, N_ABS, N_TEXT, - N_DATA, or N_BSS. When the low-order bit of other types is set, - (e.g. N_WARNING versus N_FN), they are two different types. */ -#define N_EXT 1 /* External symbol (as opposed to local-to-this-file). */ -#define N_TYPE 0x1e -#define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol. */ - -#define N_INDR 0x0a - -/* The following symbols refer to set elements. - All the N_SET[ATDB] symbols with the same name form one set. - Space is allocated for the set in the text section, and each set - elements value is stored into one word of the space. - The first word of the space is the length of the set (number of elements). - - The address of the set is made into an N_SETV symbol - whose name is the same as the name of the set. - This symbol acts like a N_DATA global symbol - in that it can satisfy undefined external references. */ - -/* These appear as input to LD, in a .o file. */ -#define N_SETA 0x14 /* Absolute set element symbol. */ -#define N_SETT 0x16 /* Text set element symbol. */ -#define N_SETD 0x18 /* Data set element symbol. */ -#define N_SETB 0x1A /* Bss set element symbol. */ - -/* This is output from LD. */ -#define N_SETV 0x1C /* Pointer to set vector in data area. */ - -/* Warning symbol. The text gives a warning message, the next symbol - in the table will be undefined. When the symbol is referenced, the - message is printed. */ - -#define N_WARNING 0x1e - -/* Weak symbols. These are a GNU extension to the a.out format. The - semantics are those of ELF weak symbols. Weak symbols are always - externally visible. The N_WEAK? values are squeezed into the - available slots. The value of a N_WEAKU symbol is 0. The values - of the other types are the definitions. */ -#define N_WEAKU 0x0d /* Weak undefined symbol. */ -#define N_WEAKA 0x0e /* Weak absolute symbol. */ -#define N_WEAKT 0x0f /* Weak text symbol. */ -#define N_WEAKD 0x10 /* Weak data symbol. */ -#define N_WEAKB 0x11 /* Weak bss symbol. */ - -/* Relocations - - There are two types of relocation flavours for a.out systems, - standard and extended. The standard form is used on systems where the - instruction has room for all the bits of an offset to the operand, whilst - the extended form is used when an address operand has to be split over n - instructions. Eg, on the 68k, each move instruction can reference - the target with a displacement of 16 or 32 bits. On the sparc, move - instructions use an offset of 14 bits, so the offset is stored in - the reloc field, and the data in the section is ignored. */ - -/* This structure describes a single relocation to be performed. - The text-relocation section of the file is a vector of these structures, - all of which apply to the text section. - Likewise, the data-relocation section applies to the data section. */ - -struct reloc_std_external -{ - bfd_byte r_address[BYTES_IN_WORD]; /* Offset of of data to relocate. */ - bfd_byte r_index[3]; /* Symbol table index of symbol. */ - bfd_byte r_type[1]; /* Relocation type. */ -}; - -#define RELOC_STD_BITS_PCREL_BIG ((unsigned int) 0x80) -#define RELOC_STD_BITS_PCREL_LITTLE ((unsigned int) 0x01) - -#define RELOC_STD_BITS_LENGTH_BIG ((unsigned int) 0x60) -#define RELOC_STD_BITS_LENGTH_SH_BIG 5 -#define RELOC_STD_BITS_LENGTH_LITTLE ((unsigned int) 0x06) -#define RELOC_STD_BITS_LENGTH_SH_LITTLE 1 - -#define RELOC_STD_BITS_EXTERN_BIG ((unsigned int) 0x10) -#define RELOC_STD_BITS_EXTERN_LITTLE ((unsigned int) 0x08) - -#define RELOC_STD_BITS_BASEREL_BIG ((unsigned int) 0x08) -#define RELOC_STD_BITS_BASEREL_LITTLE ((unsigned int) 0x10) - -#define RELOC_STD_BITS_JMPTABLE_BIG ((unsigned int) 0x04) -#define RELOC_STD_BITS_JMPTABLE_LITTLE ((unsigned int) 0x20) - -#define RELOC_STD_BITS_RELATIVE_BIG ((unsigned int) 0x02) -#define RELOC_STD_BITS_RELATIVE_LITTLE ((unsigned int) 0x40) - -#define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry. */ - -struct reloc_std_internal -{ - bfd_vma r_address; /* Address (within segment) to be relocated. */ - /* The meaning of r_symbolnum depends on r_extern. */ - unsigned int r_symbolnum:24; - /* Nonzero means value is a pc-relative offset - and it should be relocated for changes in its own address - as well as for changes in the symbol or section specified. */ - unsigned int r_pcrel:1; - /* Length (as exponent of 2) of the field to be relocated. - Thus, a value of 2 indicates 1<<2 bytes. */ - unsigned int r_length:2; - /* 1 => relocate with value of symbol. - r_symbolnum is the index of the symbol - in files the symbol table. - 0 => relocate with the address of a segment. - r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS - (the N_EXT bit may be set also, but signifies nothing). */ - unsigned int r_extern:1; - /* The next three bits are for SunOS shared libraries, and seem to - be undocumented. */ - unsigned int r_baserel:1; /* Linkage table relative. */ - unsigned int r_jmptable:1; /* pc-relative to jump table. */ - unsigned int r_relative:1; /* "relative relocation". */ - /* unused */ - unsigned int r_pad:1; /* Padding -- set to zero. */ -}; - - -/* EXTENDED RELOCS. */ - -struct reloc_ext_external -{ - bfd_byte r_address[BYTES_IN_WORD]; /* Offset of of data to relocate. */ - bfd_byte r_index[3]; /* Symbol table index of symbol. */ - bfd_byte r_type[1]; /* Relocation type. */ - bfd_byte r_addend[BYTES_IN_WORD]; /* Datum addend. */ -}; - -#ifndef RELOC_EXT_BITS_EXTERN_BIG -#define RELOC_EXT_BITS_EXTERN_BIG ((unsigned int) 0x80) -#endif - -#ifndef RELOC_EXT_BITS_EXTERN_LITTLE -#define RELOC_EXT_BITS_EXTERN_LITTLE ((unsigned int) 0x01) -#endif - -#ifndef RELOC_EXT_BITS_TYPE_BIG -#define RELOC_EXT_BITS_TYPE_BIG ((unsigned int) 0x1F) -#endif - -#ifndef RELOC_EXT_BITS_TYPE_SH_BIG -#define RELOC_EXT_BITS_TYPE_SH_BIG 0 -#endif - -#ifndef RELOC_EXT_BITS_TYPE_LITTLE -#define RELOC_EXT_BITS_TYPE_LITTLE ((unsigned int) 0xF8) -#endif - -#ifndef RELOC_EXT_BITS_TYPE_SH_LITTLE -#define RELOC_EXT_BITS_TYPE_SH_LITTLE 3 -#endif - -/* Bytes per relocation entry. */ -#define RELOC_EXT_SIZE (BYTES_IN_WORD + 3 + 1 + BYTES_IN_WORD) - -enum reloc_type -{ - /* Simple relocations. */ - RELOC_8, /* data[0:7] = addend + sv */ - RELOC_16, /* data[0:15] = addend + sv */ - RELOC_32, /* data[0:31] = addend + sv */ - /* PC-rel displacement. */ - RELOC_DISP8, /* data[0:7] = addend - pc + sv */ - RELOC_DISP16, /* data[0:15] = addend - pc + sv */ - RELOC_DISP32, /* data[0:31] = addend - pc + sv */ - /* Special. */ - RELOC_WDISP30, /* data[0:29] = (addend + sv - pc)>>2 */ - RELOC_WDISP22, /* data[0:21] = (addend + sv - pc)>>2 */ - RELOC_HI22, /* data[0:21] = (addend + sv)>>10 */ - RELOC_22, /* data[0:21] = (addend + sv) */ - RELOC_13, /* data[0:12] = (addend + sv) */ - RELOC_LO10, /* data[0:9] = (addend + sv) */ - RELOC_SFA_BASE, - RELOC_SFA_OFF13, - /* P.I.C. (base-relative). */ - RELOC_BASE10, /* Not sure - maybe we can do this the */ - RELOC_BASE13, /* right way now */ - RELOC_BASE22, - /* For some sort of pc-rel P.I.C. (?) */ - RELOC_PC10, - RELOC_PC22, - /* P.I.C. jump table. */ - RELOC_JMP_TBL, - /* Reputedly for shared libraries somehow. */ - RELOC_SEGOFF16, - RELOC_GLOB_DAT, - RELOC_JMP_SLOT, - RELOC_RELATIVE, - - RELOC_11, - RELOC_WDISP2_14, - RELOC_WDISP19, - RELOC_HHI22, /* data[0:21] = (addend + sv) >> 42 */ - RELOC_HLO10, /* data[0:9] = (addend + sv) >> 32 */ - - /* 29K relocation types. */ - RELOC_JUMPTARG, - RELOC_CONST, - RELOC_CONSTH, - - /* All the new ones I can think of, for sparc v9. */ - RELOC_64, /* data[0:63] = addend + sv */ - RELOC_DISP64, /* data[0:63] = addend - pc + sv */ - RELOC_WDISP21, /* data[0:20] = (addend + sv - pc)>>2 */ - RELOC_DISP21, /* data[0:20] = addend - pc + sv */ - RELOC_DISP14, /* data[0:13] = addend - pc + sv */ - /* Q . - What are the other ones, - Since this is a clean slate, can we throw away the ones we dont - understand ? Should we sort the values ? What about using a - microcode format like the 68k ? */ - NO_RELOC - }; - - -struct reloc_internal -{ - bfd_vma r_address; /* Offset of of data to relocate. */ - long r_index; /* Symbol table index of symbol. */ - enum reloc_type r_type; /* Relocation type. */ - bfd_vma r_addend; /* Datum addend. */ -}; - -/* Q. - Should the length of the string table be 4 bytes or 8 bytes ? - - Q. - What about archive indexes ? */ - -#endif /* __A_OUT_64_H__ */ diff --git a/include/aout/ar.h b/include/aout/ar.h deleted file mode 100644 index 0d0aad2d5e3..00000000000 --- a/include/aout/ar.h +++ /dev/null @@ -1,52 +0,0 @@ -/* archive file definition for GNU software - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* So far this is correct for BSDish archives. Don't forget that - files must begin on an even byte boundary. */ - -#ifndef __GNU_AR_H__ -#define __GNU_AR_H__ - -/* Note that the usual '\n' in magic strings may translate to different - characters, as allowed by ANSI. '\012' has a fixed value, and remains - compatible with existing BSDish archives. */ - -#define ARMAG "!\012" /* For COFF and a.out archives */ -#define ARMAGB "!\012" /* For b.out archives */ -#define SARMAG 8 -#define ARFMAG "`\012" - -/* The ar_date field of the armap (__.SYMDEF) member of an archive - must be greater than the modified date of the entire file, or - BSD-derived linkers complain. We originally write the ar_date with - this offset from the real file's mod-time. After finishing the - file, we rewrite ar_date if it's not still greater than the mod date. */ - -#define ARMAP_TIME_OFFSET 60 - -struct ar_hdr { - char ar_name[16]; /* name of this member */ - char ar_date[12]; /* file mtime */ - char ar_uid[6]; /* owner uid; printed as decimal */ - char ar_gid[6]; /* owner gid; printed as decimal */ - char ar_mode[8]; /* file mode, printed as octal */ - char ar_size[10]; /* file size, printed as decimal */ - char ar_fmag[2]; /* should contain ARFMAG */ -}; - -#endif /* __GNU_AR_H__ */ diff --git a/include/aout/dynix3.h b/include/aout/dynix3.h deleted file mode 100644 index e7c5110c6a6..00000000000 --- a/include/aout/dynix3.h +++ /dev/null @@ -1,86 +0,0 @@ -/* a.out specifics for Sequent Symmetry running Dynix 3.x - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef A_OUT_DYNIX3_H -#define A_OUT_DYNIX3_H - -#define external_exec dynix_external_exec - -/* struct exec for Dynix 3 - - a_gdtbl and a_bootstrap are only for standalone binaries. - Shared data fields are not supported by the kernel as of Dynix 3.1, - but are supported by Dynix compiler programs. */ -struct dynix_external_exec - { - unsigned char e_info[4]; - unsigned char e_text[4]; - unsigned char e_data[4]; - unsigned char e_bss[4]; - unsigned char e_syms[4]; - unsigned char e_entry[4]; - unsigned char e_trsize[4]; - unsigned char e_drsize[4]; - unsigned char e_g_code[8]; - unsigned char e_g_data[8]; - unsigned char e_g_desc[8]; - unsigned char e_shdata[4]; - unsigned char e_shbss[4]; - unsigned char e_shdrsize[4]; - unsigned char e_bootstrap[44]; - unsigned char e_reserved[12]; - unsigned char e_version[4]; - }; - -#define EXEC_BYTES_SIZE (128) - -/* All executables under Dynix are demand paged with read-only text, - Thus no NMAGIC. - - ZMAGIC has a page of 0s at virtual 0, - XMAGIC has an invalid page at virtual 0. */ -#define OMAGIC 0x12eb /* .o */ -#define ZMAGIC 0x22eb /* zero @ 0, demand load */ -#define XMAGIC 0x32eb /* invalid @ 0, demand load */ -#define SMAGIC 0x42eb /* standalone, not supported here */ - -#define N_BADMAG(x) ((OMAGIC != N_MAGIC(x)) && \ - (ZMAGIC != N_MAGIC(x)) && \ - (XMAGIC != N_MAGIC(x)) && \ - (SMAGIC != N_MAGIC(x))) - -#define N_ADDRADJ(x) ((ZMAGIC == N_MAGIC(x) || XMAGIC == N_MAGIC(x)) ? 0x1000 : 0) - -#define N_TXTOFF(x) (EXEC_BYTES_SIZE) -#define N_DATOFF(x) (N_TXTOFF(x) + N_TXTSIZE(x)) -#define N_SHDATOFF(x) (N_DATOFF(x) + (x).a_data) -#define N_TRELOFF(x) (N_SHDATOFF(x) + (x).a_shdata) -#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize) -#define N_SHDRELOFF(x) (N_DRELOFF(x) + (x).a_drsize) -#define N_SYMOFF(x) (N_SHDRELOFF(x) + (x).a_shdrsize) -#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms) - -#define N_TXTADDR(x) \ - (((OMAGIC == N_MAGIC(x)) || (SMAGIC == N_MAGIC(x))) ? 0 \ - : TEXT_START_ADDR + EXEC_BYTES_SIZE) - -#define N_TXTSIZE(x) \ - (((OMAGIC == N_MAGIC(x)) || (SMAGIC == N_MAGIC(x))) ? ((x).a_text) \ - : ((x).a_text - N_ADDRADJ(x) - EXEC_BYTES_SIZE)) - -#endif /* A_OUT_DYNIX3_H */ diff --git a/include/aout/encap.h b/include/aout/encap.h deleted file mode 100644 index be8e88ccd6b..00000000000 --- a/include/aout/encap.h +++ /dev/null @@ -1,134 +0,0 @@ -/* Yet Another Try at encapsulating bsd object files in coff. - Copyright 1988, 1989, 1991 Free Software Foundation, Inc. - Written by Pace Willisson 12/9/88 - - This file is obsolete. It needs to be converted to just define a bunch - of stuff that BFD can use to do coff-encapsulated files. --gnu@cygnus.com - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* - * We only use the coff headers to tell the kernel - * how to exec the file. Therefore, the only fields that need to - * be filled in are the scnptr and vaddr for the text and data - * sections, and the vaddr for the bss. As far as coff is concerned, - * there is no symbol table, relocation, or line numbers. - * - * A normal bsd header (struct exec) is placed after the coff headers, - * and before the real text. I defined a the new fields 'a_machtype' - * and a_flags. If a_machtype is M_386, and a_flags & A_ENCAP is - * true, then the bsd header is preceeded by a coff header. Macros - * like N_TXTOFF and N_TXTADDR use this field to find the bsd header. - * - * The only problem is to track down the bsd exec header. The - * macros HEADER_OFFSET, etc do this. - */ - -#define N_FLAGS_COFF_ENCAPSULATE 0x20 /* coff header precedes bsd header */ - -/* Describe the COFF header used for encapsulation. */ - -struct coffheader -{ - /* filehdr */ - unsigned short f_magic; - unsigned short f_nscns; - long f_timdat; - long f_symptr; - long f_nsyms; - unsigned short f_opthdr; - unsigned short f_flags; - /* aouthdr */ - short magic; - short vstamp; - long tsize; - long dsize; - long bsize; - long entry; - long text_start; - long data_start; - struct coffscn - { - char s_name[8]; - long s_paddr; - long s_vaddr; - long s_size; - long s_scnptr; - long s_relptr; - long s_lnnoptr; - unsigned short s_nreloc; - unsigned short s_nlnno; - long s_flags; - } scns[3]; -}; - -/* Describe some of the parameters of the encapsulation, - including how to find the encapsulated BSD header. */ - -/* FIXME, this is dumb. The same tools can't handle a.outs for different - architectures, just because COFF_MAGIC is different; so you need a - separate GNU nm for every architecture!!? Unfortunately, it needs to - be this way, since the COFF_MAGIC value is determined by the kernel - we're trying to fool here. */ - -#define COFF_MAGIC_I386 0514 /* I386MAGIC */ -#define COFF_MAGIC_M68K 0520 /* MC68MAGIC */ - -#ifdef COFF_MAGIC -short __header_offset_temp; -#define HEADER_OFFSET(f) \ - (__header_offset_temp = 0, \ - fread ((char *)&__header_offset_temp, sizeof (short), 1, (f)), \ - fseek ((f), -sizeof (short), 1), \ - __header_offset_temp==COFF_MAGIC ? sizeof(struct coffheader) : 0) -#else -#define HEADER_OFFSET(f) 0 -#endif - -#define HEADER_SEEK(f) (fseek ((f), HEADER_OFFSET((f)), 1)) - -/* Describe the characteristics of the BSD header - that appears inside the encapsulation. */ - -/* Encapsulated coff files that are linked ZMAGIC have a text segment - offset just past the header (and a matching TXTADDR), excluding - the headers from the text segment proper but keeping the physical - layout and the virtual memory layout page-aligned. - - Non-encapsulated a.out files that are linked ZMAGIC have a text - segment that starts at 0 and an N_TXTADR similarly offset to 0. - They too are page-aligned with each other, but they include the - a.out header as part of the text. - - The _N_HDROFF gets sizeof struct exec added to it, so we have - to compensate here. See . */ - -#undef _N_HDROFF -#undef N_TXTADDR -#undef N_DATADDR - -#define _N_HDROFF(x) ((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \ - sizeof (struct coffheader) : 0) - -/* Address of text segment in memory after it is loaded. */ -#define N_TXTADDR(x) \ - ((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \ - sizeof (struct coffheader) + sizeof (struct exec) : 0) -#define SEGMENT_SIZE 0x400000 - -#define N_DATADDR(x) \ - ((N_FLAGS(x) & N_FLAGS_COFF_ENCAPSULATE) ? \ - (SEGMENT_SIZE + ((N_TXTADDR(x)+(x).a_text-1) & ~(SEGMENT_SIZE-1))) : \ - (N_TXTADDR(x)+(x).a_text)) diff --git a/include/aout/host.h b/include/aout/host.h deleted file mode 100644 index 8807108d5cb..00000000000 --- a/include/aout/host.h +++ /dev/null @@ -1,42 +0,0 @@ -/* host.h - Parameters about the a.out format, based on the host system - on which the program is compiled. - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Address of data segment in memory after it is loaded. - It is up to you to define SEGMENT_SIZE on machines not listed here. */ -#ifndef SEGMENT_SIZE - -#if defined(hp300) || defined(pyr) -#define SEGMENT_SIZE page_size -#endif - -#ifdef sony -#define SEGMENT_SIZE 0x1000 -#endif /* Sony. */ - -#ifdef is68k -#define SEGMENT_SIZE 0x20000 -#endif - -#if defined(m68k) && defined(PORTAR) -#define TARGET_PAGE_SIZE 0x400 -#define SEGMENT_SIZE TARGET_PAGE_SIZE -#endif - -#endif /*!defined(SEGMENT_SIZE)*/ - diff --git a/include/aout/hp.h b/include/aout/hp.h deleted file mode 100644 index 96471c751fb..00000000000 --- a/include/aout/hp.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Special version of for use under hp-ux. - Copyright 1988, 1991 Free Software Foundation, Inc. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* THIS FILE IS OBSOLETE. It needs to be revised as a variant "external" - a.out format for use with BFD. */ - -/* The `exec' structure and overall layout must be close to HP's when - we are running on an HP system, otherwise we will not be able to - execute the resulting file. */ - -/* Allow this file to be included twice. */ -#ifndef __GNU_EXEC_MACROS__ - -struct exec -{ - unsigned short a_machtype; /* machine type */ - unsigned short a_magic; /* magic number */ - unsigned long a_spare1; - unsigned long a_spare2; - unsigned long a_text; /* length of text, in bytes */ - unsigned long a_data; /* length of data, in bytes */ - unsigned long a_bss; /* length of uninitialized data area for file, in bytes */ - unsigned long a_trsize; /* length of relocation info for text, in bytes */ - unsigned long a_drsize; /* length of relocation info for data, in bytes */ - unsigned long a_spare3; /* HP = pascal interface size */ - unsigned long a_spare4; /* HP = symbol table size */ - unsigned long a_spare5; /* HP = debug name table size */ - unsigned long a_entry; /* start address */ - unsigned long a_spare6; /* HP = source line table size */ - unsigned long a_spare7; /* HP = value table size */ - unsigned long a_syms; /* length of symbol table data in file, in bytes */ - unsigned long a_spare8; -}; - -/* Tell a.out.gnu.h not to define `struct exec'. */ -#define __STRUCT_EXEC_OVERRIDE__ - -#include "../a.out.gnu.h" - -#undef N_MAGIC -#undef N_MACHTYPE -#undef N_FLAGS -#undef N_SET_INFO -#undef N_SET_MAGIC -#undef N_SET_MACHTYPE -#undef N_SET_FLAGS - -#define N_MAGIC(exec) ((exec) . a_magic) -#define N_MACHTYPE(exec) ((exec) . a_machtype) -#define N_SET_MAGIC(exec, magic) (((exec) . a_magic) = (magic)) -#define N_SET_MACHTYPE(exec, machtype) (((exec) . a_machtype) = (machtype)) - -#undef N_BADMAG -#define N_BADMAG(x) ((_N_BADMAG (x)) || (_N_BADMACH (x))) - -#define _N_BADMACH(x) \ -(((N_MACHTYPE (x)) != HP9000S200_ID) && \ - ((N_MACHTYPE (x)) != HP98x6_ID)) - -#define HP98x6_ID 0x20A -#define HP9000S200_ID 0x20C - -#undef _N_HDROFF -#define _N_HDROFF(x) (SEGMENT_SIZE - (sizeof (struct exec))) - -#define SEGMENT_SIZE 0x1000 - -#endif /* __GNU_EXEC_MACROS__ */ diff --git a/include/aout/hp300hpux.h b/include/aout/hp300hpux.h deleted file mode 100644 index 11747613c20..00000000000 --- a/include/aout/hp300hpux.h +++ /dev/null @@ -1,119 +0,0 @@ -/* Special version of for use under hp-ux. - Copyright 1988, 1993, 1995, 2001 Free Software Foundation, Inc. */ - -struct hp300hpux_exec_bytes -{ - unsigned char e_info[4]; /* a_machtype/a_magic */ - unsigned char e_spare1[4]; - unsigned char e_spare2[4]; - unsigned char e_text[4]; /* length of text, in bytes */ - unsigned char e_data[4]; /* length of data, in bytes */ - unsigned char e_bss[4]; /* length of uninitialized data area , in bytes */ - unsigned char e_trsize[4]; /* length of relocation info for text, in bytes*/ - unsigned char e_drsize[4]; /* length of relocation info for data, in bytes*/ - unsigned char e_passize[4];/* HP = pascal interface size */ - unsigned char e_syms[4]; /* HP = symbol table size */ - unsigned char e_spare5[4]; /* HP = debug name table size */ - unsigned char e_entry[4]; /* start address */ - unsigned char e_spare6[4]; /* HP = source line table size */ - unsigned char e_supsize[4];/* HP = value table size */ - unsigned char e_drelocs[4]; - unsigned char e_extension[4]; /* file offset of extension */ -}; -#define EXEC_BYTES_SIZE 64 - -struct hp300hpux_nlist_bytes - { - unsigned char e_value[4]; - unsigned char e_type[1]; - unsigned char e_length[1]; /* length of ascii symbol name */ - unsigned char e_almod[2]; /* alignment mod */ - unsigned char e_shlib[2]; /* info about dynamic linking */ - }; -#define EXTERNAL_NLIST_SIZE 10 - -struct hp300hpux_reloc - { - unsigned char r_address[4];/* offset of of data to relocate */ - unsigned char r_index[2]; /* symbol table index of symbol */ - unsigned char r_type[1]; /* relocation type */ - unsigned char r_length[1]; /* length of item to reloc */ - }; - -struct hp300hpux_header_extension -{ - unsigned char e_syms[4]; - unsigned char unique_headers[12*4]; - unsigned char e_header[2]; /* type of header */ - unsigned char e_version[2]; /* version */ - unsigned char e_size[4]; /* bytes following*/ - unsigned char e_extension[4];/* file offset of next extension */ -}; -#define EXTERNAL_EXTENSION_HEADER_SIZE (16*4) - -/* hpux separates object files (0x106) and impure executables (0x107) */ -/* but the bfd code does not distinguish between them. Since we want to*/ -/* read hpux .o files, we add an special define and use it below in */ -/* offset and address calculations. */ - -#define HPUX_DOT_O_MAGIC 0x106 -#define OMAGIC 0x107 /* object file or impure executable. */ -#define NMAGIC 0x108 /* Code indicating pure executable. */ -#define ZMAGIC 0x10B /* demand-paged executable. */ - -#define N_HEADER_IN_TEXT(x) 0 - -#if 0 /* libaout.h only uses the lower 8 bits */ -#define HP98x6_ID 0x20A -#define HP9000S200_ID 0x20C -#endif -#define HP98x6_ID 0x0A -#define HP9000S200_ID 0x0C - -#define N_BADMAG(x) ((_N_BADMAG (x)) || (_N_BADMACH (x))) - -#define N_DATADDR(x) \ - ((N_MAGIC (x) == OMAGIC || N_MAGIC (x) == HPUX_DOT_O_MAGIC) \ - ? (N_TXTADDR (x) + N_TXTSIZE (x)) \ - : (N_SEGSIZE (x) + ((N_TXTADDR (x) + N_TXTSIZE (x) - 1) \ - & ~ (bfd_vma) (N_SEGSIZE (x) - 1)))) - -#define _N_BADMACH(x) \ - (((N_MACHTYPE (x)) != HP9000S200_ID) && ((N_MACHTYPE (x)) != HP98x6_ID)) - -#define _N_BADMAG(x) (N_MAGIC(x) != HPUX_DOT_O_MAGIC \ - && N_MAGIC(x) != OMAGIC \ - && N_MAGIC(x) != NMAGIC \ - && N_MAGIC(x) != ZMAGIC ) - -#undef _N_HDROFF -#define _N_HDROFF(x) (SEGMENT_SIZE - (sizeof (struct exec))) - -#undef N_DATOFF -#undef N_PASOFF -#undef N_SYMOFF -#undef N_SUPOFF -#undef N_TRELOFF -#undef N_DRELOFF -#undef N_STROFF - -#define N_DATOFF(x) ( N_TXTOFF(x) + N_TXTSIZE(x) ) -#define N_PASOFF(x) ( N_DATOFF(x) + (x).a_data) -#define N_SYMOFF(x) ( N_PASOFF(x) /* + (x).a_passize*/ ) -#define N_SUPOFF(x) ( N_SYMOFF(x) + (x).a_syms ) -#define N_TRELOFF(x) ( N_SUPOFF(x) /* + 0 (x).a_supsize*/ ) -#define N_DRELOFF(x) ( N_TRELOFF(x) + (x).a_trsize ) -#define N_EXTHOFF(x) ( N_DRELOFF(x) /* + 0 (x).a_drsize */) -#define N_STROFF(x) ( 0 /* no string table */ ) - -/* use these when the file has gnu symbol tables */ -#define N_GNU_TRELOFF(x) (N_DATOFF(x) + (x).a_data) -#define N_GNU_DRELOFF(x) (N_GNU_TRELOFF(x) + (x).a_trsize) -#define N_GNU_SYMOFF(x) (N_GNU_DRELOFF(x) + (x).a_drsize) - -#define TARGET_PAGE_SIZE 0x1000 -#define SEGMENT_SIZE 0x1000 -#define TEXT_START_ADDR 0 - -#undef N_SHARED_LIB -#define N_SHARED_LIB(x) ( 0 /* no shared libraries */ ) diff --git a/include/aout/hppa.h b/include/aout/hppa.h deleted file mode 100644 index 7e185de768a..00000000000 --- a/include/aout/hppa.h +++ /dev/null @@ -1,7 +0,0 @@ -#include "filehdr.h" -#include "aouthdr.h" -#include "scnhdr.h" -#include "spacehdr.h" -#include "syms.h" - - diff --git a/include/aout/ranlib.h b/include/aout/ranlib.h deleted file mode 100644 index 8695b0502df..00000000000 --- a/include/aout/ranlib.h +++ /dev/null @@ -1,62 +0,0 @@ -/* ranlib.h -- archive library index member definition for GNU. - Copyright 1990, 1991 Free Software Foundation, Inc. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* The Symdef member of an archive contains two things: - a table that maps symbol-string offsets to file offsets, - and a symbol-string table. All the symbol names are - run together (each with trailing null) in the symbol-string - table. There is a single longword bytecount on the front - of each of these tables. Thus if we have two symbols, - "foo" and "_bar", that are in archive members at offsets - 200 and 900, it would look like this: - 16 ; byte count of index table - 0 ; offset of "foo" in string table - 200 ; offset of foo-module in file - 4 ; offset of "bar" in string table - 900 ; offset of bar-module in file - 9 ; byte count of string table - "foo\0_bar\0" ; string table */ - -#define RANLIBMAG "__.SYMDEF" /* Archive file name containing index */ -#define RANLIBSKEW 3 /* Creation time offset */ - -/* Format of __.SYMDEF: - First, a longword containing the size of the 'symdef' data that follows. - Second, zero or more 'symdef' structures. - Third, a longword containing the length of symbol name strings. - Fourth, zero or more symbol name strings (each followed by a null). */ - -struct symdef - { - union - { - unsigned long string_offset; /* In the file */ - char *name; /* In memory, sometimes */ - } s; - /* this points to the front of the file header (AKA member header -- - a struct ar_hdr), not to the front of the file or into the file). - in other words it only tells you which file to read */ - unsigned long file_offset; - }; - -/* Compatability with BSD code */ - -#define ranlib symdef -#define ran_un s -#define ran_strx string_offset -#define ran_name name -#define ran_off file_offset diff --git a/include/aout/reloc.h b/include/aout/reloc.h deleted file mode 100644 index c4ce1c406ad..00000000000 --- a/include/aout/reloc.h +++ /dev/null @@ -1,66 +0,0 @@ -/* reloc.h -- Header file for relocation information. - Copyright 1989, 1990, 1991 Free Software Foundation, Inc. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Relocation types for a.out files using reloc_info_extended - (SPARC and AMD 29000). */ - -#ifndef _RELOC_H_READ_ -#define _RELOC_H_READ_ 1 - -enum reloc_type - { - RELOC_8, RELOC_16, RELOC_32, /* simple relocations */ - RELOC_DISP8, RELOC_DISP16, RELOC_DISP32, /* pc-rel displacement */ - RELOC_WDISP30, RELOC_WDISP22, - RELOC_HI22, RELOC_22, - RELOC_13, RELOC_LO10, - RELOC_SFA_BASE, RELOC_SFA_OFF13, - RELOC_BASE10, RELOC_BASE13, RELOC_BASE22, /* P.I.C. (base-relative) */ - RELOC_PC10, RELOC_PC22, /* for some sort of pc-rel P.I.C. (?) */ - RELOC_JMP_TBL, /* P.I.C. jump table */ - RELOC_SEGOFF16, /* reputedly for shared libraries somehow */ - RELOC_GLOB_DAT, RELOC_JMP_SLOT, RELOC_RELATIVE, - RELOC_11, - RELOC_WDISP2_14, - RELOC_WDISP19, - RELOC_HHI22, - RELOC_HLO10, - - /* 29K relocation types */ - RELOC_JUMPTARG, RELOC_CONST, RELOC_CONSTH, - - RELOC_WDISP14, RELOC_WDISP21, - - NO_RELOC - }; - -#define RELOC_TYPE_NAMES \ -"8", "16", "32", "DISP8", \ -"DISP16", "DISP32", "WDISP30", "WDISP22", \ -"HI22", "22", "13", "LO10", \ -"SFA_BASE", "SFAOFF13", "BASE10", "BASE13", \ -"BASE22", "PC10", "PC22", "JMP_TBL", \ -"SEGOFF16", "GLOB_DAT", "JMP_SLOT", "RELATIVE", \ -"11", "WDISP2_14", "WDISP19", "HHI22", \ -"HLO10", \ -"JUMPTARG", "CONST", "CONSTH", "WDISP14", \ -"WDISP21", \ -"NO_RELOC" - -#endif /* _RELOC_H_READ_ */ - -/* end of reloc.h */ diff --git a/include/aout/stab.def b/include/aout/stab.def deleted file mode 100644 index 04ad1f10987..00000000000 --- a/include/aout/stab.def +++ /dev/null @@ -1,271 +0,0 @@ -/* Table of DBX symbol codes for the GNU system. - Copyright 1988, 1991, 1992, 1993, 1994, 1996, 1998, 2004 - Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* New stab from Solaris 2. This uses an n_type of 0, which in a.out files - overlaps the N_UNDF used for ordinary symbols. In ELF files, the - debug information is in a different file section, so there is no conflict. - This symbol's n_value gives the size of the string section associated - with this file. The symbol's n_strx (relative to the just-updated - string section start address) gives the name of the source file, - e.g. "foo.c", without any path information. The symbol's n_desc gives - the count of upcoming symbols associated with this file (not including - this one). */ -/* __define_stab (N_UNDF, 0x00, "UNDF") */ - -/* Global variable. Only the name is significant. - To find the address, look in the corresponding external symbol. */ -__define_stab (N_GSYM, 0x20, "GSYM") - -/* Function name for BSD Fortran. Only the name is significant. - To find the address, look in the corresponding external symbol. */ -__define_stab (N_FNAME, 0x22, "FNAME") - -/* Function name or text-segment variable for C. Value is its address. - Desc is supposedly starting line number, but GCC doesn't set it - and DBX seems not to miss it. */ -__define_stab (N_FUN, 0x24, "FUN") - -/* Data-segment variable with internal linkage. Value is its address. - "Static Sym". */ -__define_stab (N_STSYM, 0x26, "STSYM") - -/* BSS-segment variable with internal linkage. Value is its address. */ -__define_stab (N_LCSYM, 0x28, "LCSYM") - -/* Name of main routine. Only the name is significant. */ -__define_stab (N_MAIN, 0x2a, "MAIN") - -/* Solaris2: Read-only data symbols. */ -__define_stab (N_ROSYM, 0x2c, "ROSYM") - -/* Global symbol in Pascal. - Supposedly the value is its line number; I'm skeptical. */ -__define_stab (N_PC, 0x30, "PC") - -/* Number of symbols: 0, files,,funcs,lines according to Ultrix V4.0. */ -__define_stab (N_NSYMS, 0x32, "NSYMS") - -/* "No DST map for sym: name, ,0,type,ignored" according to Ultrix V4.0. */ -__define_stab (N_NOMAP, 0x34, "NOMAP") - -/* New stab from Solaris 2. Like N_SO, but for the object file. Two in - a row provide the build directory and the relative path of the .o from it. - Solaris2 uses this to avoid putting the stabs info into the linked - executable; this stab goes into the ".stab.index" section, and the debugger - reads the real stabs directly from the .o files instead. */ -__define_stab (N_OBJ, 0x38, "OBJ") - -/* New stab from Solaris 2. Options for the debugger, related to the - source language for this module. E.g. whether to use ANSI - integral promotions or traditional integral promotions. */ -__define_stab (N_OPT, 0x3c, "OPT") - -/* Register variable. Value is number of register. */ -__define_stab (N_RSYM, 0x40, "RSYM") - -/* Modula-2 compilation unit. Can someone say what info it contains? */ -__define_stab (N_M2C, 0x42, "M2C") - -/* Line number in text segment. Desc is the line number; - value is corresponding address. On Solaris2, the line number is - relative to the start of the current function. */ -__define_stab (N_SLINE, 0x44, "SLINE") - -/* Similar, for data segment. */ -__define_stab (N_DSLINE, 0x46, "DSLINE") - -/* Similar, for bss segment. */ -__define_stab (N_BSLINE, 0x48, "BSLINE") - -/* Sun's source-code browser stabs. ?? Don't know what the fields are. - Supposedly the field is "path to associated .cb file". THIS VALUE - OVERLAPS WITH N_BSLINE! */ -__define_stab_duplicate (N_BROWS, 0x48, "BROWS") - -/* GNU Modula-2 definition module dependency. Value is the modification time - of the definition file. Other is non-zero if it is imported with the - GNU M2 keyword %INITIALIZE. Perhaps N_M2C can be used if there - are enough empty fields? */ -__define_stab(N_DEFD, 0x4a, "DEFD") - -/* New in Solaris2. Function start/body/end line numbers. */ -__define_stab(N_FLINE, 0x4C, "FLINE") - -/* THE FOLLOWING TWO STAB VALUES CONFLICT. Happily, one is for Modula-2 - and one is for C++. Still,... */ -/* GNU C++ exception variable. Name is variable name. */ -__define_stab (N_EHDECL, 0x50, "EHDECL") -/* Modula2 info "for imc": name,,0,0,0 according to Ultrix V4.0. */ -__define_stab_duplicate (N_MOD2, 0x50, "MOD2") - -/* GNU C++ `catch' clause. Value is its address. Desc is nonzero if - this entry is immediately followed by a CAUGHT stab saying what exception - was caught. Multiple CAUGHT stabs means that multiple exceptions - can be caught here. If Desc is 0, it means all exceptions are caught - here. */ -__define_stab (N_CATCH, 0x54, "CATCH") - -/* Structure or union element. Value is offset in the structure. */ -__define_stab (N_SSYM, 0x60, "SSYM") - -/* Solaris2: Last stab emitted for module. */ -__define_stab (N_ENDM, 0x62, "ENDM") - -/* Name of main source file. - Value is starting text address of the compilation. - If multiple N_SO's appear, the first to contain a trailing / is the - compilation directory. The first to not contain a trailing / is the - source file name, relative to the compilation directory. Others (perhaps - resulting from cfront) are ignored. - On Solaris2, value is undefined, but desc is a source-language code. */ - -__define_stab (N_SO, 0x64, "SO") - -/* SunPro F77: Name of alias. */ -__define_stab (N_ALIAS, 0x6c, "ALIAS") - -/* Automatic variable in the stack. Value is offset from frame pointer. - Also used for type descriptions. */ -__define_stab (N_LSYM, 0x80, "LSYM") - -/* Beginning of an include file. Only Sun uses this. - In an object file, only the name is significant. - The Sun linker puts data into some of the other fields. */ -__define_stab (N_BINCL, 0x82, "BINCL") - -/* Name of sub-source file (#include file). - Value is starting text address of the compilation. */ -__define_stab (N_SOL, 0x84, "SOL") - -/* Parameter variable. Value is offset from argument pointer. - (On most machines the argument pointer is the same as the frame pointer. */ -__define_stab (N_PSYM, 0xa0, "PSYM") - -/* End of an include file. No name. - This and N_BINCL act as brackets around the file's output. - In an object file, there is no significant data in this entry. - The Sun linker puts data into some of the fields. */ -__define_stab (N_EINCL, 0xa2, "EINCL") - -/* Alternate entry point. Value is its address. */ -__define_stab (N_ENTRY, 0xa4, "ENTRY") - -/* Beginning of lexical block. - The desc is the nesting level in lexical blocks. - The value is the address of the start of the text for the block. - The variables declared inside the block *precede* the N_LBRAC symbol. - On Solaris2, the value is relative to the start of the current function. */ -__define_stab (N_LBRAC, 0xc0, "LBRAC") - -/* Place holder for deleted include file. Replaces a N_BINCL and everything - up to the corresponding N_EINCL. The Sun linker generates these when - it finds multiple identical copies of the symbols from an include file. - This appears only in output from the Sun linker. */ -__define_stab (N_EXCL, 0xc2, "EXCL") - -/* Modula-2 scope information. Can someone say what info it contains? */ -__define_stab (N_SCOPE, 0xc4, "SCOPE") - -/* Solaris2: Patch Run Time Checker. */ -__define_stab (N_PATCH, 0xd0, "PATCH") - -/* End of a lexical block. Desc matches the N_LBRAC's desc. - The value is the address of the end of the text for the block. - On Solaris2, the value is relative to the start of the current function. */ -__define_stab (N_RBRAC, 0xe0, "RBRAC") - -/* Begin named common block. Only the name is significant. */ -__define_stab (N_BCOMM, 0xe2, "BCOMM") - -/* End named common block. Only the name is significant - (and it should match the N_BCOMM). */ -__define_stab (N_ECOMM, 0xe4, "ECOMM") - -/* Member of a common block; value is offset within the common block. - This should occur within a BCOMM/ECOMM pair. */ -__define_stab (N_ECOML, 0xe8, "ECOML") - -/* Solaris2: Pascal "with" statement: type,,0,0,offset */ -__define_stab (N_WITH, 0xea, "WITH") - -/* These STAB's are used on Gould systems for Non-Base register symbols - or something like that. FIXME. I have assigned the values at random - since I don't have a Gould here. Fixups from Gould folk welcome... */ -__define_stab (N_NBTEXT, 0xF0, "NBTEXT") -__define_stab (N_NBDATA, 0xF2, "NBDATA") -__define_stab (N_NBBSS, 0xF4, "NBBSS") -__define_stab (N_NBSTS, 0xF6, "NBSTS") -__define_stab (N_NBLCS, 0xF8, "NBLCS") - -/* Second symbol entry containing a length-value for the preceding entry. - The value is the length. */ -__define_stab (N_LENG, 0xfe, "LENG") - -/* The above information, in matrix format. - - STAB MATRIX - _________________________________________________ - | 00 - 1F are not dbx stab symbols | - | In most cases, the low bit is the EXTernal bit| - - | 00 UNDEF | 02 ABS | 04 TEXT | 06 DATA | - | 01 |EXT | 03 |EXT | 05 |EXT | 07 |EXT | - - | 08 BSS | 0A INDR | 0C FN_SEQ | 0E WEAKA | - | 09 |EXT | 0B | 0D WEAKU | 0F WEAKT | - - | 10 WEAKD | 12 COMM | 14 SETA | 16 SETT | - | 11 WEAKB | 13 | 15 | 17 | - - | 18 SETD | 1A SETB | 1C SETV | 1E WARNING| - | 19 | 1B | 1D | 1F FN | - - |_______________________________________________| - | Debug entries with bit 01 set are unused. | - | 20 GSYM | 22 FNAME | 24 FUN | 26 STSYM | - | 28 LCSYM | 2A MAIN | 2C ROSYM | 2E | - | 30 PC | 32 NSYMS | 34 NOMAP | 36 | - | 38 OBJ | 3A | 3C OPT | 3E | - | 40 RSYM | 42 M2C | 44 SLINE | 46 DSLINE | - | 48 BSLINE*| 4A DEFD | 4C FLINE | 4E | - | 50 EHDECL*| 52 | 54 CATCH | 56 | - | 58 | 5A | 5C | 5E | - | 60 SSYM | 62 ENDM | 64 SO | 66 | - | 68 | 6A | 6C ALIAS | 6E | - | 70 | 72 | 74 | 76 | - | 78 | 7A | 7C | 7E | - | 80 LSYM | 82 BINCL | 84 SOL | 86 | - | 88 | 8A | 8C | 8E | - | 90 | 92 | 94 | 96 | - | 98 | 9A | 9C | 9E | - | A0 PSYM | A2 EINCL | A4 ENTRY | A6 | - | A8 | AA | AC | AE | - | B0 | B2 | B4 | B6 | - | B8 | BA | BC | BE | - | C0 LBRAC | C2 EXCL | C4 SCOPE | C6 | - | C8 | CA | CC | CE | - | D0 PATCH | D2 | D4 | D6 | - | D8 | DA | DC | DE | - | E0 RBRAC | E2 BCOMM | E4 ECOMM | E6 | - | E8 ECOML | EA WITH | EC | EE | - | F0 | F2 | F4 | F6 | - | F8 | FA | FC | FE LENG | - +-----------------------------------------------+ - * 50 EHDECL is also MOD2. - * 48 BSLINE is also BROWS. - */ diff --git a/include/aout/stab_gnu.h b/include/aout/stab_gnu.h deleted file mode 100644 index 29dc99062e4..00000000000 --- a/include/aout/stab_gnu.h +++ /dev/null @@ -1,54 +0,0 @@ -/* gnu_stab.h Definitions for GNU extensions to STABS - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -#ifndef __GNU_STAB__ - -/* Indicate the GNU stab.h is in use. */ - -#define __GNU_STAB__ - -#define __define_stab(NAME, CODE, STRING) NAME=CODE, -#define __define_stab_duplicate(NAME, CODE, STRING) NAME=CODE, - -enum __stab_debug_code -{ -#include "aout/stab.def" -LAST_UNUSED_STAB_CODE -}; - -#undef __define_stab - -/* Definitions of "desc" field for N_SO stabs in Solaris2. */ - -#define N_SO_AS 1 -#define N_SO_C 2 -#define N_SO_ANSI_C 3 -#define N_SO_CC 4 /* C++ */ -#define N_SO_FORTRAN 5 -#define N_SO_PASCAL 6 - -/* Solaris2: Floating point type values in basic types. */ - -#define NF_NONE 0 -#define NF_SINGLE 1 /* IEEE 32-bit */ -#define NF_DOUBLE 2 /* IEEE 64-bit */ -#define NF_COMPLEX 3 /* Fortran complex */ -#define NF_COMPLEX16 4 /* Fortran double complex */ -#define NF_COMPLEX32 5 /* Fortran complex*16 */ -#define NF_LDOUBLE 6 /* Long double (whatever that is) */ - -#endif /* __GNU_STAB_ */ diff --git a/include/aout/sun4.h b/include/aout/sun4.h deleted file mode 100644 index 8cf05170483..00000000000 --- a/include/aout/sun4.h +++ /dev/null @@ -1,235 +0,0 @@ -/* SPARC-specific values for a.out files - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Some systems, e.g., AIX, may have defined this in header files already - included. */ -#undef TARGET_PAGE_SIZE -#define TARGET_PAGE_SIZE 0x2000 /* 8K. aka NBPG in */ -/* Note that some SPARCs have 4K pages, some 8K, some others. */ - -#define SEG_SIZE_SPARC TARGET_PAGE_SIZE -#define SEG_SIZE_SUN3 0x20000 /* Resolution of r/w protection hw */ - -#define TEXT_START_ADDR TARGET_PAGE_SIZE /* Location 0 is not accessible */ -#define N_HEADER_IN_TEXT(x) 1 - -/* Non-default definitions of the accessor macros... */ - -/* Segment size varies on Sun-3 versus Sun-4. */ - -#define N_SEGSIZE(x) (N_MACHTYPE(x) == M_SPARC? SEG_SIZE_SPARC: \ - N_MACHTYPE(x) == M_68020? SEG_SIZE_SUN3: \ - /* Guess? */ TARGET_PAGE_SIZE) - -/* Virtual Address of text segment from the a.out file. For OMAGIC, - (almost always "unlinked .o's" these days), should be zero. - Sun added a kludge so that shared libraries linked ZMAGIC get - an address of zero if a_entry (!!!) is lower than the otherwise - expected text address. These kludges have gotta go! - For linked files, should reflect reality if we know it. */ - -/* This differs from the version in aout64.h (which we override by defining - it here) only for NMAGIC (we return TEXT_START_ADDR+EXEC_BYTES_SIZE; - they return 0). */ - -#define N_TXTADDR(x) \ - (N_MAGIC(x)==OMAGIC? 0 \ - : (N_MAGIC(x) == ZMAGIC && (x).a_entry < TEXT_START_ADDR)? 0 \ - : TEXT_START_ADDR+EXEC_BYTES_SIZE) - -/* When a file is linked against a shared library on SunOS 4, the - dynamic bit in the exec header is set, and the first symbol in the - symbol table is __DYNAMIC. Its value is the address of the - following structure. */ - -struct external_sun4_dynamic -{ - /* The version number of the structure. SunOS 4.1.x creates files - with version number 3, which is what this structure is based on. - According to gdb, version 2 is similar. I believe that version 2 - used a different type of procedure linkage table, and there may - have been other differences. */ - bfd_byte ld_version[4]; - /* The virtual address of a 28 byte structure used in debugging. - The contents are filled in at run time by ld.so. */ - bfd_byte ldd[4]; - /* The virtual address of another structure with information about - how to relocate the executable at run time. */ - bfd_byte ld[4]; -}; - -/* The size of the debugging structure pointed to by the debugger - field of __DYNAMIC. */ -#define EXTERNAL_SUN4_DYNAMIC_DEBUGGER_SIZE (24) - -/* The structure pointed to by the linker field of __DYNAMIC. As far - as I can tell, most of the addresses in this structure are offsets - within the file, but some are actually virtual addresses. */ - -struct internal_sun4_dynamic_link -{ - /* Linked list of loaded objects. This is filled in at runtime by - ld.so and probably by dlopen. */ - unsigned long ld_loaded; - - /* The address of the list of names of shared objects which must be - included at runtime. Each entry in the list is 16 bytes: the 4 - byte address of the string naming the object (e.g., for -lc this - is "c"); 4 bytes of flags--the high bit is whether to search for - the object using the library path; the 2 byte major version - number; the 2 byte minor version number; the 4 byte address of - the next entry in the list (zero if this is the last entry). The - version numbers seem to only be non-zero when doing library - searching. */ - unsigned long ld_need; - - /* The address of the path to search for the shared objects which - must be included. This points to a string in PATH format which - is generated from the -L arguments to the linker. According to - the man page, ld.so implicitly adds ${LD_LIBRARY_PATH} to the - beginning of this string and /lib:/usr/lib:/usr/local/lib to the - end. The string is terminated by a null byte. This field is - zero if there is no additional path. */ - unsigned long ld_rules; - - /* The address of the global offset table. This appears to be a - virtual address, not a file offset. The first entry in the - global offset table seems to be the virtual address of the - sun4_dynamic structure (the same value as the __DYNAMIC symbol). - The global offset table is used for PIC code to hold the - addresses of variables. A dynamically linked file which does not - itself contain PIC code has a four byte global offset table. */ - unsigned long ld_got; - - /* The address of the procedure linkage table. This appears to be a - virtual address, not a file offset. - - On a SPARC, the table is composed of 12 byte entries, each of - which consists of three instructions. The first entry is - sethi %hi(0),%g1 - jmp %g1 - nop - These instructions are changed by ld.so into a jump directly into - ld.so itself. Each subsequent entry is - save %sp, -96, %sp - call
- - The reloc_number is the number of the reloc to use to resolve - this entry. The reloc will be a JMP_SLOT reloc against some - symbol that is not defined in this object file but should be - defined in a shared object (if it is not, ld.so will report a - runtime error and exit). The constant 0x010000000 turns the - reloc number into a sethi of %g0, which does nothing since %g0 is - hardwired to zero. - - When one of these entries is executed, it winds up calling into - ld.so. ld.so looks at the reloc number, available via the return - address, to determine which entry this is. It then looks at the - reloc and patches up the entry in the table into a sethi and jmp - to the real address followed by a nop. This means that the reloc - lookup only has to happen once, and it also means that the - relocation only needs to be done if the function is actually - called. The relocation is expensive because ld.so must look up - the symbol by name. - - The size of the procedure linkage table is given by the ld_plt_sz - field. */ - unsigned long ld_plt; - - /* The address of the relocs. These are in the same format as - ordinary relocs. Symbol index numbers refer to the symbols - pointed to by ld_stab. I think the only way to determine the - number of relocs is to assume that all the bytes from ld_rel to - ld_hash contain reloc entries. */ - unsigned long ld_rel; - - /* The address of a hash table of symbols. The hash table has - roughly the same number of entries as there are dynamic symbols; - I think the only way to get the exact size is to assume that - every byte from ld_hash to ld_stab is devoted to the hash table. - - Each entry in the hash table is eight bytes. The first four - bytes are a symbol index into the dynamic symbols. The second - four bytes are the index of the next hash table entry in the - bucket. The ld_buckets field gives the number of buckets, say B. - The first B entries in the hash table each start a bucket which - is chained through the second four bytes of each entry. A value - of zero ends the chain. - - The hash function is simply - h = 0; - while (*string != '\0') - h = (h << 1) + *string++; - h &= 0x7fffffff; - - To look up a symbol, compute the hash value of the name. Take - the modulos of hash value and the number of buckets. Start at - that entry in the hash table. See if the symbol (from the first - four bytes of the hash table entry) has the name you are looking - for. If not, use the chain field (the second four bytes of the - hash table entry) to move on to the next entry in this bucket. - If the chain field is zero you have reached the end of the - bucket, and the symbol is not in the hash table. */ - unsigned long ld_hash; - - /* The address of the symbol table. This is a list of - external_nlist structures. The string indices are relative to - the ld_symbols field. I think the only way to determine the - number of symbols is to assume that all the bytes between ld_stab - and ld_symbols are external_nlist structures. */ - unsigned long ld_stab; - - /* I don't know what this is for. It seems to always be zero. */ - unsigned long ld_stab_hash; - - /* The number of buckets in the hash table. */ - unsigned long ld_buckets; - - /* The address of the symbol string table. The first string in this - string table need not be the empty string. */ - unsigned long ld_symbols; - - /* The size in bytes of the symbol string table. */ - unsigned long ld_symb_size; - - /* The size in bytes of the text segment. */ - unsigned long ld_text; - - /* The size in bytes of the procedure linkage table. */ - unsigned long ld_plt_sz; -}; - -/* The external form of the structure. */ - -struct external_sun4_dynamic_link -{ - bfd_byte ld_loaded[4]; - bfd_byte ld_need[4]; - bfd_byte ld_rules[4]; - bfd_byte ld_got[4]; - bfd_byte ld_plt[4]; - bfd_byte ld_rel[4]; - bfd_byte ld_hash[4]; - bfd_byte ld_stab[4]; - bfd_byte ld_stab_hash[4]; - bfd_byte ld_buckets[4]; - bfd_byte ld_symbols[4]; - bfd_byte ld_symb_size[4]; - bfd_byte ld_text[4]; - bfd_byte ld_plt_sz[4]; -}; diff --git a/include/bfdlink.h b/include/bfdlink.h deleted file mode 100644 index 761bd0513e3..00000000000 --- a/include/bfdlink.h +++ /dev/null @@ -1,724 +0,0 @@ -/* bfdlink.h -- header file for BFD link routines - Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005 Free Software Foundation, Inc. - Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef BFDLINK_H -#define BFDLINK_H - -/* Which symbols to strip during a link. */ -enum bfd_link_strip -{ - strip_none, /* Don't strip any symbols. */ - strip_debugger, /* Strip debugging symbols. */ - strip_some, /* keep_hash is the list of symbols to keep. */ - strip_all /* Strip all symbols. */ -}; - -/* Which local symbols to discard during a link. This is irrelevant - if strip_all is used. */ -enum bfd_link_discard -{ - discard_sec_merge, /* Discard local temporary symbols in SEC_MERGE - sections. */ - discard_none, /* Don't discard any locals. */ - discard_l, /* Discard local temporary symbols. */ - discard_all /* Discard all locals. */ -}; - -/* Describes the type of hash table entry structure being used. - Different hash table structure have different fields and so - support different linking features. */ -enum bfd_link_hash_table_type - { - bfd_link_generic_hash_table, - bfd_link_elf_hash_table - }; - -/* These are the possible types of an entry in the BFD link hash - table. */ - -enum bfd_link_hash_type -{ - bfd_link_hash_new, /* Symbol is new. */ - bfd_link_hash_undefined, /* Symbol seen before, but undefined. */ - bfd_link_hash_undefweak, /* Symbol is weak and undefined. */ - bfd_link_hash_defined, /* Symbol is defined. */ - bfd_link_hash_defweak, /* Symbol is weak and defined. */ - bfd_link_hash_common, /* Symbol is common. */ - bfd_link_hash_indirect, /* Symbol is an indirect link. */ - bfd_link_hash_warning /* Like indirect, but warn if referenced. */ -}; - -enum bfd_link_common_skip_ar_aymbols -{ - bfd_link_common_skip_none, - bfd_link_common_skip_text, - bfd_link_common_skip_data, - bfd_link_common_skip_all -}; - -/* The linking routines use a hash table which uses this structure for - its elements. */ - -struct bfd_link_hash_entry -{ - /* Base hash table entry structure. */ - struct bfd_hash_entry root; - - /* Type of this entry. */ - enum bfd_link_hash_type type; - - /* A union of information depending upon the type. */ - union - { - /* Nothing is kept for bfd_hash_new. */ - /* bfd_link_hash_undefined, bfd_link_hash_undefweak. */ - struct - { - /* Undefined and common symbols are kept in a linked list through - this field. This field is present in all of the union element - so that we don't need to remove entries from the list when we - change their type. Removing entries would either require the - list to be doubly linked, which would waste more memory, or - require a traversal. When an undefined or common symbol is - created, it should be added to this list, the head of which is in - the link hash table itself. As symbols are defined, they need - not be removed from the list; anything which reads the list must - doublecheck the symbol type. - - Weak symbols are not kept on this list. - - Defined and defweak symbols use this field as a reference marker. - If the field is not NULL, or this structure is the tail of the - undefined symbol list, the symbol has been referenced. If the - symbol is undefined and becomes defined, this field will - automatically be non-NULL since the symbol will have been on the - undefined symbol list. */ - struct bfd_link_hash_entry *next; - bfd *abfd; /* BFD symbol was found in. */ - bfd *weak; /* BFD weak symbol was found in. */ - } undef; - /* bfd_link_hash_defined, bfd_link_hash_defweak. */ - struct - { - struct bfd_link_hash_entry *next; - asection *section; /* Symbol section. */ - bfd_vma value; /* Symbol value. */ - } def; - /* bfd_link_hash_indirect, bfd_link_hash_warning. */ - struct - { - struct bfd_link_hash_entry *next; - struct bfd_link_hash_entry *link; /* Real symbol. */ - const char *warning; /* Warning (bfd_link_hash_warning only). */ - } i; - /* bfd_link_hash_common. */ - struct - { - struct bfd_link_hash_entry *next; - /* The linker needs to know three things about common - symbols: the size, the alignment, and the section in - which the symbol should be placed. We store the size - here, and we allocate a small structure to hold the - section and the alignment. The alignment is stored as a - power of two. We don't store all the information - directly because we don't want to increase the size of - the union; this structure is a major space user in the - linker. */ - struct bfd_link_hash_common_entry - { - unsigned int alignment_power; /* Alignment. */ - asection *section; /* Symbol section. */ - } *p; - bfd_size_type size; /* Common symbol size. */ - } c; - } u; -}; - -/* This is the link hash table. It is a derived class of - bfd_hash_table. */ - -struct bfd_link_hash_table -{ - /* The hash table itself. */ - struct bfd_hash_table table; - /* The back end which created this hash table. This indicates the - type of the entries in the hash table, which is sometimes - important information when linking object files of different - types together. */ - const bfd_target *creator; - /* A linked list of undefined and common symbols, linked through the - next field in the bfd_link_hash_entry structure. */ - struct bfd_link_hash_entry *undefs; - /* Entries are added to the tail of the undefs list. */ - struct bfd_link_hash_entry *undefs_tail; - /* The type of the link hash table. */ - enum bfd_link_hash_table_type type; -}; - -/* Look up an entry in a link hash table. If FOLLOW is TRUE, this - follows bfd_link_hash_indirect and bfd_link_hash_warning links to - the real symbol. */ -extern struct bfd_link_hash_entry *bfd_link_hash_lookup - (struct bfd_link_hash_table *, const char *, bfd_boolean create, - bfd_boolean copy, bfd_boolean follow); - -/* Look up an entry in the main linker hash table if the symbol might - be wrapped. This should only be used for references to an - undefined symbol, not for definitions of a symbol. */ - -extern struct bfd_link_hash_entry *bfd_wrapped_link_hash_lookup - (bfd *, struct bfd_link_info *, const char *, bfd_boolean, - bfd_boolean, bfd_boolean); - -/* Traverse a link hash table. */ -extern void bfd_link_hash_traverse - (struct bfd_link_hash_table *, - bfd_boolean (*) (struct bfd_link_hash_entry *, void *), - void *); - -/* Add an entry to the undefs list. */ -extern void bfd_link_add_undef - (struct bfd_link_hash_table *, struct bfd_link_hash_entry *); - -/* Remove symbols from the undefs list that don't belong there. */ -extern void bfd_link_repair_undef_list - (struct bfd_link_hash_table *table); - -struct bfd_sym_chain -{ - struct bfd_sym_chain *next; - const char *name; -}; - -/* How to handle unresolved symbols. - There are four possibilities which are enumerated below: */ -enum report_method -{ - /* This is the initial value when then link_info structure is created. - It allows the various stages of the linker to determine whether they - allowed to set the value. */ - RM_NOT_YET_SET = 0, - RM_IGNORE, - RM_GENERATE_WARNING, - RM_GENERATE_ERROR -}; - -/* This structure holds all the information needed to communicate - between BFD and the linker when doing a link. */ - -struct bfd_link_info -{ - /* TRUE if BFD should generate a relocatable object file. */ - unsigned int relocatable: 1; - - /* TRUE if BFD should generate relocation information in the final - executable. */ - unsigned int emitrelocations: 1; - - /* TRUE if BFD should generate a "task linked" object file, - similar to relocatable but also with globals converted to - statics. */ - unsigned int task_link: 1; - - /* TRUE if BFD should generate a shared object. */ - unsigned int shared: 1; - - /* TRUE if BFD should pre-bind symbols in a shared object. */ - unsigned int symbolic: 1; - - /* TRUE if BFD should export all symbols in the dynamic symbol table - of an executable, rather than only those used. */ - unsigned int export_dynamic: 1; - - /* TRUE if shared objects should be linked directly, not shared. */ - unsigned int static_link: 1; - - /* TRUE if the output file should be in a traditional format. This - is equivalent to the setting of the BFD_TRADITIONAL_FORMAT flag - on the output file, but may be checked when reading the input - files. */ - unsigned int traditional_format: 1; - - /* TRUE if we want to produced optimized output files. This might - need much more time and therefore must be explicitly selected. */ - unsigned int optimize: 1; - - /* TRUE if ok to have multiple definition. */ - unsigned int allow_multiple_definition: 1; - - /* TRUE if ok to have version with no definition. */ - unsigned int allow_undefined_version: 1; - - /* TRUE if a default symbol version should be created and used for - exported symbols. */ - unsigned int create_default_symver: 1; - - /* TRUE if a default symbol version should be created and used for - imported symbols. */ - unsigned int default_imported_symver: 1; - - /* TRUE if symbols should be retained in memory, FALSE if they - should be freed and reread. */ - unsigned int keep_memory: 1; - - /* TRUE if every symbol should be reported back via the notice - callback. */ - unsigned int notice_all: 1; - - /* TRUE if executable should not contain copy relocs. - Setting this true may result in a non-sharable text segment. */ - unsigned int nocopyreloc: 1; - - /* TRUE if the new ELF dynamic tags are enabled. */ - unsigned int new_dtags: 1; - - /* TRUE if non-PLT relocs should be merged into one reloc section - and sorted so that relocs against the same symbol come together. */ - unsigned int combreloc: 1; - - /* TRUE if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment - should be created. */ - unsigned int eh_frame_hdr: 1; - - /* TRUE if global symbols in discarded sections should be stripped. */ - unsigned int strip_discarded: 1; - - /* TRUE if generating a position independent executable. */ - unsigned int pie: 1; - - /* TRUE if generating an executable, position independent or not. */ - unsigned int executable : 1; - - /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W|PF_X - flags. */ - unsigned int execstack: 1; - - /* TRUE if PT_GNU_STACK segment should be created with PF_R|PF_W - flags. */ - unsigned int noexecstack: 1; - - /* TRUE if PT_GNU_RELRO segment should be created. */ - unsigned int relro: 1; - - /* TRUE if we should warn when adding a DT_TEXTREL to a shared object. */ - unsigned int warn_shared_textrel: 1; - - /* TRUE if unreferenced sections should be removed. */ - unsigned int gc_sections: 1; - - /* TRUE if .hash section should be created. */ - unsigned int emit_hash: 1; - - /* TRUE if .gnu.hash section should be created. */ - unsigned int emit_gnu_hash: 1; - - /* What to do with unresolved symbols in an object file. - When producing executables the default is GENERATE_ERROR. - When producing shared libraries the default is IGNORE. The - assumption with shared libraries is that the reference will be - resolved at load/execution time. */ - enum report_method unresolved_syms_in_objects; - - /* What to do with unresolved symbols in a shared library. - The same defaults apply. */ - enum report_method unresolved_syms_in_shared_libs; - - /* Which symbols to strip. */ - enum bfd_link_strip strip; - - /* Which local symbols to discard. */ - enum bfd_link_discard discard; - - /* Criteria for skipping symbols when detemining - whether to include an object from an archive. */ - enum bfd_link_common_skip_ar_aymbols common_skip_ar_aymbols; - - /* Char that may appear as the first char of a symbol, but should be - skipped (like symbol_leading_char) when looking up symbols in - wrap_hash. Used by PowerPC Linux for 'dot' symbols. */ - char wrap_char; - - /* Function callbacks. */ - const struct bfd_link_callbacks *callbacks; - - /* Hash table handled by BFD. */ - struct bfd_link_hash_table *hash; - - /* Hash table of symbols to keep. This is NULL unless strip is - strip_some. */ - struct bfd_hash_table *keep_hash; - - /* Hash table of symbols to report back via the notice callback. If - this is NULL, and notice_all is FALSE, then no symbols are - reported back. */ - struct bfd_hash_table *notice_hash; - - /* Hash table of symbols which are being wrapped (the --wrap linker - option). If this is NULL, no symbols are being wrapped. */ - struct bfd_hash_table *wrap_hash; - - /* The list of input BFD's involved in the link. These are chained - together via the link_next field. */ - bfd *input_bfds; - - /* If a symbol should be created for each input BFD, this is section - where those symbols should be placed. It must be a section in - the output BFD. It may be NULL, in which case no such symbols - will be created. This is to support CREATE_OBJECT_SYMBOLS in the - linker command language. */ - asection *create_object_symbols_section; - - /* List of global symbol names that are starting points for marking - sections against garbage collection. */ - struct bfd_sym_chain *gc_sym_list; - - /* If a base output file is wanted, then this points to it */ - void *base_file; - - /* The function to call when the executable or shared object is - loaded. */ - const char *init_function; - - /* The function to call when the executable or shared object is - unloaded. */ - const char *fini_function; - - /* Number of relaxation passes. Usually only one relaxation pass - is needed. But a backend can have as many relaxation passes as - necessary. During bfd_relax_section call, it is set to the - current pass, starting from 0. */ - int relax_pass; - - /* Non-zero if auto-import thunks for DATA items in pei386 DLLs - should be generated/linked against. Set to 1 if this feature - is explicitly requested by the user, -1 if enabled by default. */ - int pei386_auto_import; - - /* Non-zero if runtime relocs for DATA items with non-zero addends - in pei386 DLLs should be generated. Set to 1 if this feature - is explicitly requested by the user, -1 if enabled by default. */ - int pei386_runtime_pseudo_reloc; - - /* How many spare .dynamic DT_NULL entries should be added? */ - unsigned int spare_dynamic_tags; - - /* May be used to set DT_FLAGS for ELF. */ - bfd_vma flags; - - /* May be used to set DT_FLAGS_1 for ELF. */ - bfd_vma flags_1; - - /* Start and end of RELRO region. */ - bfd_vma relro_start, relro_end; -}; - -/* This structures holds a set of callback functions. These are - called by the BFD linker routines. Except for einfo, the first - argument to each callback function is the bfd_link_info structure - being used and each function returns a boolean value. If the - function returns FALSE, then the BFD function which called it should - return with a failure indication. */ - -struct bfd_link_callbacks -{ - /* A function which is called when an object is added from an - archive. ABFD is the archive element being added. NAME is the - name of the symbol which caused the archive element to be pulled - in. */ - bfd_boolean (*add_archive_element) - (struct bfd_link_info *, bfd *abfd, const char *name); - /* A function which is called when a symbol is found with multiple - definitions. NAME is the symbol which is defined multiple times. - OBFD is the old BFD, OSEC is the old section, OVAL is the old - value, NBFD is the new BFD, NSEC is the new section, and NVAL is - the new value. OBFD may be NULL. OSEC and NSEC may be - bfd_com_section or bfd_ind_section. */ - bfd_boolean (*multiple_definition) - (struct bfd_link_info *, const char *name, - bfd *obfd, asection *osec, bfd_vma oval, - bfd *nbfd, asection *nsec, bfd_vma nval); - /* A function which is called when a common symbol is defined - multiple times. NAME is the symbol appearing multiple times. - OBFD is the BFD of the existing symbol; it may be NULL if this is - not known. OTYPE is the type of the existing symbol, which may - be bfd_link_hash_defined, bfd_link_hash_defweak, - bfd_link_hash_common, or bfd_link_hash_indirect. If OTYPE is - bfd_link_hash_common, OSIZE is the size of the existing symbol. - NBFD is the BFD of the new symbol. NTYPE is the type of the new - symbol, one of bfd_link_hash_defined, bfd_link_hash_common, or - bfd_link_hash_indirect. If NTYPE is bfd_link_hash_common, NSIZE - is the size of the new symbol. */ - bfd_boolean (*multiple_common) - (struct bfd_link_info *, const char *name, - bfd *obfd, enum bfd_link_hash_type otype, bfd_vma osize, - bfd *nbfd, enum bfd_link_hash_type ntype, bfd_vma nsize); - /* A function which is called to add a symbol to a set. ENTRY is - the link hash table entry for the set itself (e.g., - __CTOR_LIST__). RELOC is the relocation to use for an entry in - the set when generating a relocatable file, and is also used to - get the size of the entry when generating an executable file. - ABFD, SEC and VALUE identify the value to add to the set. */ - bfd_boolean (*add_to_set) - (struct bfd_link_info *, struct bfd_link_hash_entry *entry, - bfd_reloc_code_real_type reloc, bfd *abfd, asection *sec, bfd_vma value); - /* A function which is called when the name of a g++ constructor or - destructor is found. This is only called by some object file - formats. CONSTRUCTOR is TRUE for a constructor, FALSE for a - destructor. This will use BFD_RELOC_CTOR when generating a - relocatable file. NAME is the name of the symbol found. ABFD, - SECTION and VALUE are the value of the symbol. */ - bfd_boolean (*constructor) - (struct bfd_link_info *, bfd_boolean constructor, const char *name, - bfd *abfd, asection *sec, bfd_vma value); - /* A function which is called to issue a linker warning. For - example, this is called when there is a reference to a warning - symbol. WARNING is the warning to be issued. SYMBOL is the name - of the symbol which triggered the warning; it may be NULL if - there is none. ABFD, SECTION and ADDRESS identify the location - which trigerred the warning; either ABFD or SECTION or both may - be NULL if the location is not known. */ - bfd_boolean (*warning) - (struct bfd_link_info *, const char *warning, const char *symbol, - bfd *abfd, asection *section, bfd_vma address); - /* A function which is called when a relocation is attempted against - an undefined symbol. NAME is the symbol which is undefined. - ABFD, SECTION and ADDRESS identify the location from which the - reference is made. FATAL indicates whether an undefined symbol is - a fatal error or not. In some cases SECTION may be NULL. */ - bfd_boolean (*undefined_symbol) - (struct bfd_link_info *, const char *name, bfd *abfd, - asection *section, bfd_vma address, bfd_boolean fatal); - /* A function which is called when a reloc overflow occurs. ENTRY is - the link hash table entry for the symbol the reloc is against. - NAME is the name of the local symbol or section the reloc is - against, RELOC_NAME is the name of the relocation, and ADDEND is - any addend that is used. ABFD, SECTION and ADDRESS identify the - location at which the overflow occurs; if this is the result of a - bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then - ABFD will be NULL. */ - bfd_boolean (*reloc_overflow) - (struct bfd_link_info *, struct bfd_link_hash_entry *entry, - const char *name, const char *reloc_name, bfd_vma addend, - bfd *abfd, asection *section, bfd_vma address); - /* A function which is called when a dangerous reloc is performed. - MESSAGE is an appropriate message. - ABFD, SECTION and ADDRESS identify the location at which the - problem occurred; if this is the result of a - bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then - ABFD will be NULL. */ - bfd_boolean (*reloc_dangerous) - (struct bfd_link_info *, const char *message, - bfd *abfd, asection *section, bfd_vma address); - /* A function which is called when a reloc is found to be attached - to a symbol which is not being written out. NAME is the name of - the symbol. ABFD, SECTION and ADDRESS identify the location of - the reloc; if this is the result of a - bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then - ABFD will be NULL. */ - bfd_boolean (*unattached_reloc) - (struct bfd_link_info *, const char *name, - bfd *abfd, asection *section, bfd_vma address); - /* A function which is called when a symbol in notice_hash is - defined or referenced. NAME is the symbol. ABFD, SECTION and - ADDRESS are the value of the symbol. If SECTION is - bfd_und_section, this is a reference. */ - bfd_boolean (*notice) - (struct bfd_link_info *, const char *name, - bfd *abfd, asection *section, bfd_vma address); - /* General link info message. */ - void (*einfo) - (const char *fmt, ...); -}; - -/* The linker builds link_order structures which tell the code how to - include input data in the output file. */ - -/* These are the types of link_order structures. */ - -enum bfd_link_order_type -{ - bfd_undefined_link_order, /* Undefined. */ - bfd_indirect_link_order, /* Built from a section. */ - bfd_data_link_order, /* Set to explicit data. */ - bfd_section_reloc_link_order, /* Relocate against a section. */ - bfd_symbol_reloc_link_order /* Relocate against a symbol. */ -}; - -/* This is the link_order structure itself. These form a chain - attached to the output section whose contents they are describing. */ - -struct bfd_link_order -{ - /* Next link_order in chain. */ - struct bfd_link_order *next; - /* Type of link_order. */ - enum bfd_link_order_type type; - /* Offset within output section. */ - bfd_vma offset; - /* Size within output section. */ - bfd_size_type size; - /* Type specific information. */ - union - { - struct - { - /* Section to include. If this is used, then - section->output_section must be the section the - link_order is attached to, section->output_offset must - equal the link_order offset field, and section->size - must equal the link_order size field. Maybe these - restrictions should be relaxed someday. */ - asection *section; - } indirect; - struct - { - /* Size of contents, or zero when contents size == size - within output section. - A non-zero value allows filling of the output section - with an arbitrary repeated pattern. */ - unsigned int size; - /* Data to put into file. */ - bfd_byte *contents; - } data; - struct - { - /* Description of reloc to generate. Used for - bfd_section_reloc_link_order and - bfd_symbol_reloc_link_order. */ - struct bfd_link_order_reloc *p; - } reloc; - } u; -}; - -/* A linker order of type bfd_section_reloc_link_order or - bfd_symbol_reloc_link_order means to create a reloc against a - section or symbol, respectively. This is used to implement -Ur to - generate relocs for the constructor tables. The - bfd_link_order_reloc structure describes the reloc that BFD should - create. It is similar to a arelent, but I didn't use arelent - because the linker does not know anything about most symbols, and - any asymbol structure it creates will be partially meaningless. - This information could logically be in the bfd_link_order struct, - but I didn't want to waste the space since these types of relocs - are relatively rare. */ - -struct bfd_link_order_reloc -{ - /* Reloc type. */ - bfd_reloc_code_real_type reloc; - - union - { - /* For type bfd_section_reloc_link_order, this is the section - the reloc should be against. This must be a section in the - output BFD, not any of the input BFDs. */ - asection *section; - /* For type bfd_symbol_reloc_link_order, this is the name of the - symbol the reloc should be against. */ - const char *name; - } u; - - /* Addend to use. The object file should contain zero. The BFD - backend is responsible for filling in the contents of the object - file correctly. For some object file formats (e.g., COFF) the - addend must be stored into in the object file, and for some - (e.g., SPARC a.out) it is kept in the reloc. */ - bfd_vma addend; -}; - -/* Allocate a new link_order for a section. */ -extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *); - -/* These structures are used to describe version information for the - ELF linker. These structures could be manipulated entirely inside - BFD, but it would be a pain. Instead, the regular linker sets up - these structures, and then passes them into BFD. */ - -/* Glob pattern for a version. */ - -struct bfd_elf_version_expr -{ - /* Next glob pattern for this version. */ - struct bfd_elf_version_expr *next; - /* Glob pattern. */ - const char *pattern; - /* NULL for a glob pattern, otherwise a straight symbol. */ - const char *symbol; - /* Defined by ".symver". */ - unsigned int symver : 1; - /* Defined by version script. */ - unsigned int script : 1; - /* Pattern type. */ -#define BFD_ELF_VERSION_C_TYPE 1 -#define BFD_ELF_VERSION_CXX_TYPE 2 -#define BFD_ELF_VERSION_JAVA_TYPE 4 - unsigned int mask : 3; -}; - -struct bfd_elf_version_expr_head -{ - /* List of all patterns, both wildcards and non-wildcards. */ - struct bfd_elf_version_expr *list; - /* Hash table for non-wildcards. */ - void *htab; - /* Remaining patterns. */ - struct bfd_elf_version_expr *remaining; - /* What kind of pattern types are present in list (bitmask). */ - unsigned int mask; -}; - -/* Version dependencies. */ - -struct bfd_elf_version_deps -{ - /* Next dependency for this version. */ - struct bfd_elf_version_deps *next; - /* The version which this version depends upon. */ - struct bfd_elf_version_tree *version_needed; -}; - -/* A node in the version tree. */ - -struct bfd_elf_version_tree -{ - /* Next version. */ - struct bfd_elf_version_tree *next; - /* Name of this version. */ - const char *name; - /* Version number. */ - unsigned int vernum; - /* Regular expressions for global symbols in this version. */ - struct bfd_elf_version_expr_head globals; - /* Regular expressions for local symbols in this version. */ - struct bfd_elf_version_expr_head locals; - /* List of versions which this version depends upon. */ - struct bfd_elf_version_deps *deps; - /* Index of the version name. This is used within BFD. */ - unsigned int name_indx; - /* Whether this version tree was used. This is used within BFD. */ - int used; - /* Matching hook. */ - struct bfd_elf_version_expr *(*match) - (struct bfd_elf_version_expr_head *head, - struct bfd_elf_version_expr *prev, const char *sym); -}; - -#endif diff --git a/include/bin-bugs.h b/include/bin-bugs.h deleted file mode 100644 index 63901b044f4..00000000000 --- a/include/bin-bugs.h +++ /dev/null @@ -1,3 +0,0 @@ -#ifndef REPORT_BUGS_TO -#define REPORT_BUGS_TO "" -#endif diff --git a/include/bout.h b/include/bout.h deleted file mode 100644 index 66a7bcfe91c..00000000000 --- a/include/bout.h +++ /dev/null @@ -1,191 +0,0 @@ -/* This file is a modified version of 'a.out.h'. It is to be used in all - GNU tools modified to support the i80960 (or tools that operate on - object files created by such tools). - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* All i80960 development is done in a CROSS-DEVELOPMENT environment. I.e., - object code is generated on, and executed under the direction of a symbolic - debugger running on, a host system. We do not want to be subject to the - vagaries of which host it is or whether it supports COFF or a.out format, - or anything else. We DO want to: - - o always generate the same format object files, regardless of host. - - o have an 'a.out' header that we can modify for our own purposes - (the 80960 is typically an embedded processor and may require - enhanced linker support that the normal a.out.h header can't - accommodate). - - As for byte-ordering, the following rules apply: - - o Text and data that is actually downloaded to the target is always - in i80960 (little-endian) order. - - o All other numbers (in the header, symbols, relocation directives) - are in host byte-order: object files CANNOT be lifted from a - little-end host and used on a big-endian (or vice versa) without - modification. - ==> THIS IS NO LONGER TRUE USING BFD. WE CAN GENERATE ANY BYTE ORDER - FOR THE HEADER, AND READ ANY BYTE ORDER. PREFERENCE WOULD BE TO - USE LITTLE-ENDIAN BYTE ORDER THROUGHOUT, REGARDLESS OF HOST. <== - - o The downloader ('comm960') takes care to generate a pseudo-header - with correct (i80960) byte-ordering before shipping text and data - off to the NINDY monitor in the target systems. Symbols and - relocation info are never sent to the target. */ - -#define BMAGIC 0415 -/* We don't accept the following (see N_BADMAG macro). - They're just here so GNU code will compile. */ -#define OMAGIC 0407 /* old impure format */ -#define NMAGIC 0410 /* read-only text */ -#define ZMAGIC 0413 /* demand load format */ - -/* FILE HEADER - All 'lengths' are given as a number of bytes. - All 'alignments' are for relinkable files only; an alignment of - 'n' indicates the corresponding segment must begin at an - address that is a multiple of (2**n). */ -struct external_exec - { - /* Standard stuff */ - unsigned char e_info[4]; /* Identifies this as a b.out file */ - unsigned char e_text[4]; /* Length of text */ - unsigned char e_data[4]; /* Length of data */ - unsigned char e_bss[4]; /* Length of uninitialized data area */ - unsigned char e_syms[4]; /* Length of symbol table */ - unsigned char e_entry[4]; /* Runtime start address */ - unsigned char e_trsize[4]; /* Length of text relocation info */ - unsigned char e_drsize[4]; /* Length of data relocation info */ - - /* Added for i960 */ - unsigned char e_tload[4]; /* Text runtime load address */ - unsigned char e_dload[4]; /* Data runtime load address */ - unsigned char e_talign[1]; /* Alignment of text segment */ - unsigned char e_dalign[1]; /* Alignment of data segment */ - unsigned char e_balign[1]; /* Alignment of bss segment */ - unsigned char e_relaxable[1];/* Assembled with enough info to allow linker to relax */ - }; - -#define EXEC_BYTES_SIZE (sizeof (struct external_exec)) - -/* These macros use the a_xxx field names, since they operate on the exec - structure after it's been byte-swapped and realigned on the host machine. */ -#define N_BADMAG(x) (((x).a_info)!=BMAGIC) -#define N_TXTOFF(x) EXEC_BYTES_SIZE -#define N_DATOFF(x) ( N_TXTOFF(x) + (x).a_text ) -#define N_TROFF(x) ( N_DATOFF(x) + (x).a_data ) -#define N_TRELOFF N_TROFF -#define N_DROFF(x) ( N_TROFF(x) + (x).a_trsize ) -#define N_DRELOFF N_DROFF -#define N_SYMOFF(x) ( N_DROFF(x) + (x).a_drsize ) -#define N_STROFF(x) ( N_SYMOFF(x) + (x).a_syms ) -#define N_DATADDR(x) ( (x).a_dload ) - -/* Address of text segment in memory after it is loaded. */ -#if !defined (N_TXTADDR) -#define N_TXTADDR(x) 0 -#endif - -/* A single entry in the symbol table. */ -struct nlist - { - union - { - char* n_name; - struct nlist * n_next; - long n_strx; /* Index into string table */ - } n_un; - - unsigned char n_type; /* See below */ - char n_other; /* Used in i80960 support -- see below */ - short n_desc; - unsigned long n_value; - }; - - -/* Legal values of n_type. */ -#define N_UNDF 0 /* Undefined symbol */ -#define N_ABS 2 /* Absolute symbol */ -#define N_TEXT 4 /* Text symbol */ -#define N_DATA 6 /* Data symbol */ -#define N_BSS 8 /* BSS symbol */ -#define N_FN 31 /* Filename symbol */ - -#define N_EXT 1 /* External symbol (OR'd in with one of above) */ -#define N_TYPE 036 /* Mask for all the type bits */ -#define N_STAB 0340 /* Mask for all bits used for SDB entries */ - -/* MEANING OF 'n_other' - - If non-zero, the 'n_other' fields indicates either a leaf procedure or - a system procedure, as follows: - - 1 <= n_other <= 32 : - The symbol is the entry point to a system procedure. - 'n_value' is the address of the entry, as for any other - procedure. The system procedure number (which can be used in - a 'calls' instruction) is (n_other-1). These entries come from - '.sysproc' directives. - - n_other == N_CALLNAME - the symbol is the 'call' entry point to a leaf procedure. - The *next* symbol in the symbol table must be the corresponding - 'bal' entry point to the procedure (see following). These - entries come from '.leafproc' directives in which two different - symbols are specified (the first one is represented here). - - - n_other == N_BALNAME - the symbol is the 'bal' entry point to a leaf procedure. - These entries result from '.leafproc' directives in which only - one symbol is specified, or in which the same symbol is - specified twice. - - Note that an N_CALLNAME entry *must* have a corresponding N_BALNAME entry, - but not every N_BALNAME entry must have an N_CALLNAME entry. */ -#define N_CALLNAME ((char)-1) -#define N_BALNAME ((char)-2) -#define IS_CALLNAME(x) (N_CALLNAME == (x)) -#define IS_BALNAME(x) (N_BALNAME == (x)) -#define IS_OTHER(x) ((x)>0 && (x) <=32) - -#define b_out_relocation_info relocation_info -struct relocation_info - { - int r_address; /* File address of item to be relocated. */ - unsigned -#define r_index r_symbolnum - r_symbolnum:24, /* Index of symbol on which relocation is based, - if r_extern is set. Otherwise set to - either N_TEXT, N_DATA, or N_BSS to - indicate section on which relocation is - based. */ - r_pcrel:1, /* 1 => relocate PC-relative; else absolute - On i960, pc-relative implies 24-bit - address, absolute implies 32-bit. */ - r_length:2, /* Number of bytes to relocate: - 0 => 1 byte - 1 => 2 bytes -- used for 13 bit pcrel - 2 => 4 bytes. */ - r_extern:1, - r_bsr:1, /* Something for the GNU NS32K assembler. */ - r_disp:1, /* Something for the GNU NS32K assembler. */ - r_callj:1, /* 1 if relocation target is an i960 'callj'. */ - r_relaxable:1; /* 1 if enough info is left to relax the data. */ -}; diff --git a/include/coff/ChangeLog b/include/coff/ChangeLog deleted file mode 100644 index f41c115bdad..00000000000 --- a/include/coff/ChangeLog +++ /dev/null @@ -1,70 +0,0 @@ -2006-02-05 Arnold Metselaar - - * internal.h: Add relocation number R_IMM24 for Z80. - -2005-10-25 Arnold Metselaar - - * internal.h: Add relocation number for Z80 - * z80.h: New file. - -2005-08-18 Alan Modra - - * a29k.h: Delete. - -2005-07-14 Daniel Marques - - * alpha.h (ALPHA_ECOFF_COMPRESSEDMAG): Define. - * ecoff.h (ALPHA_MAGIC_COMPRESSED): Define. - -2005-05-10 Nick Clifton - - * Update the address and phone number of the FSF organization in - the GPL notices in the following files: - a29k.h, alpha.h, apollo.h, arm.h, aux-coff.h, ecoff.h, external.h, - go32exe.h, h8300.h, h8500.h, i386.h, i860.h, i960.h, ia64.h, - internal.h, m68k.h, m88k.h, maxq.h, mcore.h, mips.h, mipspe.h, - or32.h, pe.h, powerpc.h, rs6k64.h, sh.h, sparc.h, ti.h, tic30.h, - tic4x.h, tic54x.h, tic80.h, w65.h, we32k.h, xcoff.h, z8k.h - -2005-02-21 Alan Modra - - * xcoff.h (struct xcoff_loader_info): Warning fix. - -2005-01-10 Inderpreet Singh - - * maxq.h (F_MAXQ10, F_MAXQ20): Define. - -2004-11-08 Inderpreet Singh - Vineet Sharma - - * maxq.h: New file: Defintions for the maxq port. - -2004-11-08 Aaron W. LaFramboise - - * pe.h (IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY): Define. - (IMAGE_WEAK_EXTERN_SEARCH_LIBRARY): Same. - (IMAGE_WEAK_EXTERN_SEARCH_ALIAS): Same. - -2004-08-13 Mark Kettenis - - * symconst.h (langMax): Fix typo in comment. - -2004-04-23 Chris Demetriou - - * mips.h (MIPS_R_RELHI, MIPS_R_RELLO, MIPS_R_SWITCH): Remove - (MIPS_R_PCREL16): Update comment. - * ecoff.h (struct ecoff_value_adjust): Remove structure. - (struct ecoff_debug_info): Remove 'adjust' member. - -2004-04-20 DJ Delorie - - * internal.h (R_SECREL32): Add. - -For older changes see ChangeLog-9103 - -Local Variables: -mode: change-log -left-margin: 8 -fill-column: 74 -version-control: never -End: diff --git a/include/coff/ChangeLog-9103 b/include/coff/ChangeLog-9103 deleted file mode 100644 index 98a778456fd..00000000000 --- a/include/coff/ChangeLog-9103 +++ /dev/null @@ -1,1177 +0,0 @@ -2005-04-13 H.J. Lu - - Moved from ../ChangeLog - - 2003-04-04 Svein E. Seldal - * tic4x.h: Namespace cleanup. Replace s/c4x/tic4x - and s/c3x/tic3x/ - - 2003-01-20 Svein E. Seldal - * tic4x.h (TICOFF_TARGET_MACHINE_GET): Fixed define bug - * ti.h (TICOFF_TARGET_MACHINE_GET): Added macros - - 2002-08-28 Michael Hayes - * internal.h: Add new relocation types. - * ti.h: Add file-header flags for tic4x code. - * tic4x.h: New file - -2003-12-02 Graham Reed - - * internal.h (C_WEAKEXT): Add alternative value for AIX 5.2 - based targets. - -2003-08-23 Jason Eckhardt - - * coff/i860.h (COFF860_R_PAIR, COFF860_R_LOW0, COFF860_R_LOW1, - COFF860_R_LOW2, COFF860_R_LOW3, COFF860_R_LOW4, COFF860_R_SPLIT0, - COFF860_R_SPLIT1, COFF860_R_SPLIT2, COFF860_R_HIGHADJ, - COFF860_R_BRADDR): Define new relocation constants and document. - Minor formatting adjustments. - -2003-08-07 Alan Modra - - * ti.h (GET_SCNHDR_NRELOC): Rename PTR param to LOC. - (PUT_SCNHDR_NRELOC, GET_SCNHDR_NLNNO, PUT_SCNHDR_NLNNO): Likewise. - (GET_SCNHDR_FLAGS, PUT_SCNHDR_FLAGS): Likewise. - (GET_SCNHDR_PAGE, PUT_SCNHDR_PAGE): Likewise. - -2003-07-17 Jeff Muizelaar - - * pe.h: (IMAGE_FILE_NET_RUN_FROM_SWAP): Define. - (IMAGE_FILE_MACHINE_WCEMIPSV2): Define. - (IMAGE_FILE_MACHINE_SH3DSP): Define. - (IMAGE_FILE_MACHINE_SH3E): Define. - (IMAGE_FILE_MACHINE_SH5): Define. - (IMAGE_FILE_MACHINE_AM33): Define. - (IMAGE_FILE_MACHINE_POWERPCFP): Define. - (IMAGE_FILE_MACHINE_AXP64): Define. - (IMAGE_FILE_MACHINE_TRICORE): Define. - (IMAGE_FILE_MACHINE_CEF): Define. - (IMAGE_FILE_MACHINE_EBC): Define. - (IMAGE_FILE_MACHINE_AMD64): Define. - (IMAGE_FILE_MACHINE_M32R): Define. - (IMAGE_FILE_MACHINE_CEE): Define. - -2003-07-14 Christian Groessler - - * i860.h (AOUTSZ): Define for i860 coff. - -2003-06-29 Andreas Jaeger - - * xcoff.h (struct __rtinit ): Convert to ISO C90 prototypes. - - * ecoff.h: Convert to ISO C90 prototypes. Replace PTR by void *. - -2003-04-24 Dhananjay Deshpande - - * coff/h8300.h (H8300HNMAGIC, H8300SNMAGIC): New. - (H8300HNBADMAG, H8300SNBADMAG): New. - -2003-04-15 Rohit Kumar Srivastava - - * sh.h: Replace occurrances of 'Hitachi' with 'Renesas'. - * h8300.h: Likewise. - * h8500.h: Likewise. - -2003-03-25 Stan Cox - Nick Clifton - - Contribute support for Intel's iWMMXt chip - an ARM variant: - - * arm.h (ARM_NOTE_SECTION): Define. - -2002-11-30 Alan Modra - - * ecoff.h: Replace boolean with bfd_boolean. - * xcoff.h: Likewise. - -2002-03-18 Tom Rix - - * rs6k64.h: Add U64_TOCMAGIC, AIX 5 64 bit magic number. - -2002-02-01 Tom Rix - - * xcoff.h: Conditionally support for pre AIX 4.3. - -2002-01-31 Ivan Guzvinec - - * or32.h: New file. - -2001-12-24 Tom Rix - - * xcoff.h (xcoff_big_format_p): Make the default archive - format. - (XCOFFARMAG_ELEMENT_SIZE, XCOFFARMAGBIG_ELEMENT_SIZE): Define for - archive header ascii elements. - -2001-12-17 Tom Rix - - * xcoff.h : Add .except and .typchk section string and styp flags. - Fix xcoff_big_format_p macro. - -2001-12-16 Tom Rix - - * xcoff.h : Clean up formatting. - -2002-01-15 Richard Earnshaw - - * arm.h (F_VFP_FLOAT): Define. - -2001-11-11 Timothy Wall - - * ti.h: Move arch-specific stuff from here... - (COFF_ADJUST_SYM_IN/OUT): Optionally put page flag into symbol - value. - * tic54x.h: ...to here. - -2001-10-26 Christian Groessler - - * external.h (GET_LINENO_LNNO): Fix usage of H_GET_32/16. - (PUT_LINENO_LNNO): Likewise with H_PUT_32/16. - -2001-09-21 Nick Clifton - - * ti.h (GET_SCNHDR_PAGE): Fix compile time warning. - -2001-09-18 Alan Modra - - * external.h (GET_LINENO_LNNO): Use H_GET_32/16. - (PUT_LINENO_LNNO): Use H_PUT_32/16. - * m88k.h (GET_LNSZ_SIZE, GET_LNSZ_LNNO, GET_SCN_NRELOC, - GET_SCN_NLINNO): Use H_GET_32. - (PUT_LNSZ_LNNO, PUT_LNSZ_SIZE, PUT_SCN_NRELOC, PUT_SCN_NLINNO): - Use H_PUT_32. - * ti.h: Formatting fixes. Make use of H_GET_* and H_PUT_* throughout. - * xcoff.h: White space changes. - -2001-09-05 Tom Rix - - * xcoff.h : Add XCOFF_SYSCALL32 and XCOFF_SYSCALL64 hash table flags. - -2001-08-27 Andreas Jaeger - - * xcoff.h (struct __rtinit): Make proper prototype for rtl. - -Fri Aug 24 01:18:51 2001 J"orn Rennecke - - * internal.h (R_JMP2, R_JMPL2, R_MOVL2): Comment spelling fix. - -2001-04-05 Tom Rix - - * rs6000.h : move xcoff32 external structures from xcofflink. - * rs6k64.h : move xcoff64 external structures from xcofflink. - * internal.h : promote 32 bit structure elements to 64 bit - for xcoff64 support - * xcoff.h : New file. - -2001-03-23 Nick Clifton - - * a29k.h: Fix compile time warning. - * external.h: Fix compile time warning. - * m88k.h: Fix compile time warning. - -2001-03-13 Nick Clifton - - * external.h: New file. Common structure definitions found in - other COFF header files. - - * a29k.h: Use external.h. - * apollo.h: Use external.h. - * arm.h: Use external.h. - * h8300.h: Use external.h. - * h8500.h: Use external.h. - * i386.h: Use external.h. - * i860.h: Use external.h. - * ia64.h: Use external.h. - * m68k.h: Use external.h. - * m88k.h: Use external.h. - * mcore.h: Use external.h. - * mips.h: Use external.h. - * mipspe.h: Use external.h. - * powerpc.h: Use external.h. - * rs6000.h: Use external.h. - * rs6k64.h: Use external.h. - * sh.h: Use external.h. - * sparc.h: Use external.h. - * tic30.h: Use external.h. - * tic80.h: Use external.h. - * w65.h: Use external.h. - * we32k.h: Use external.h. - * z8k.h: Use external.h. - -2001-02-09 David Mosberger - - * pe.h (PEPAOUTSZ): Rename from PEP64AOUTSZ. - Rename from PEPAOUTHDR. - -2001-01-23 H.J. Lu - - * pe.h (struct external_PEI_DOS_hdr): New. - (struct external_PEI_IMAGE_hdr): New. - -2000-12-11 Alan Modra - - * ti.h (OCTETS_PER_BYTE_POWER): Change #warning to #error. - -2000-12-08 Alan Modra - - * ti.h (OCTETS_PER_BYTE_POWER): Change #warn to #warning. - -2000-06-30 DJ Delorie - - * pe.h: Clarify a comment. - -2000-05-05 Clinton Popetz - - * rs6k64.h (U802TOC64MAGIC): Change to U803XTOCMAGIC. - -2000-04-24 Clinton Popetz - - * rs6k64.h: New file. - -2000-04-17 Timothy Wall - - * ti.h: Load page cleanup. - * intental.h: Add load page field. - -Mon Apr 17 16:44:01 2000 David Mosberger - - * pe.h (PEP64AOUTHDR): New header for PE+. - (PEP64AOUTSZ): New macro. - (IMAGE_SUBSYSTEM_UNKNOWN): New macro. - (IMAGE_SUBSYSTEM_NATIVE): Ditto. - (IMAGE_SUBSYSTEM_WINDOWS_GUI): Ditto. - (IMAGE_SUBSYSTEM_WINDOWS_CUI): Ditto. - (IMAGE_SUBSYSTEM_POSIX_CUI): Ditto. - (IMAGE_SUBSYSTEM_WINDOWS_CE_GUI): Ditto. - (IMAGE_SUBSYSTEM_EFI_APPLICATION): Ditto. - (IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER): Ditto. - (IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER): Ditto. - * internal.h (PE_DEF_FILE_ALIGNMENT): Define only if not defined - already. - * ia64.h: New file. - -2000-04-13 Alan Modra - - * ti.h (ADDR_MASK): Don't use ul suffix on constants. - (PG_MASK): Ditto. - -2000-04-11 Timothy Wall - - * ti.h: Remove load page references until load pages are - reimplemented. - * tic54x.h: Ditto. - -2000-04-07 Timothy Wall - - * internal.h: Fix some comments related to TI COFF (instead of tic80). - * ti.h: New. - * tic54x.h: New. - -Wed Apr 5 22:08:41 2000 J"orn Rennecke - - * sh.h (R_SH_LOOP_START, R_SH_LOOP_END): Define. - -2000-03-15 Kazu Hirata - - * internal.h: Fix a typo in the comment for R_MOVL2. - -2000-02-28 Nick Clifton - - * mipspe.h (MIPS_PE_MAGIC): Define. - * sh.h (SH_PE_MAGIC): Define. - -2000-02-22 Nick Clifton DJ Delorie - - * sh.h: Add Windows CE definitions. - * arm.h: Add Windows CE definitions. - * mipspe.h: New file: Windows CE definitions for MIPS. - * pe.h: Add constants for ILF support. - -2000-01-05 Nick Clifton - - * pe.h: Fix formatting of comments. - (IMAGE_FILE_AGGRESSIVE_WS_TRIM): Define. - (IMAGE_FILE_LARGE_ADDRESS_AWARE): Define. - (IMAGE_FILE_16BIT_MACHINE): Define. - (IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP): Define. - (IMAGE_FILE_UP_SYSTEM_ONLY): Define. - (IMAGE_FILE_MACHINE_UNKNOWN): Define. - (IMAGE_FILE_MACHINE_ALPHA): Define. - (IMAGE_FILE_MACHINE_ALPHA64): Define. - (IMAGE_FILE_MACHINE_I386): Define. - (IMAGE_FILE_MACHINE_IA64): Define. - (IMAGE_FILE_MACHINE_M68K): Define. - (IMAGE_FILE_MACHINE_MIPS16): Define. - (IMAGE_FILE_MACHINE_MIPSFPU): Define. - (IMAGE_FILE_MACHINE_MIPSFPU16): Define. - (IMAGE_FILE_MACHINE_POWERPC): Define. - (IMAGE_FILE_MACHINE_R3000): Define. - (IMAGE_FILE_MACHINE_R4000): Define. - (IMAGE_FILE_MACHINE_R10000): Define. - (IMAGE_FILE_MACHINE_SH3): Define. - (IMAGE_FILE_MACHINE_SH4): Define. - (IMAGE_FILE_MACHINE_THUMB): Define. - -1999-09-20 Alan Modra - - * internal.h: Delete bogus R_PCLONG, duplicate R_RELBYTE and - R_RELWORD, and rewrite some R_* as decimal. - -1999-09-06 Donn Terry - - * internal.h (DTYPE): Define. - * pe.h (struct external_PEI_filehdr): Rename from - external_PE_filehdr. Define even if COFF_IMAGE_WITH_PE is not - defined. - -1999-07-17 Nick Clifton - - * arm.h (F_SOFT_FLOAT): Rename from F_SOFTFLOAT. - -1999-06-21 Philip Blundell - - * arm.h (F_SOFTFLOAT): Define. - -1999-07-05 Nick Clifton - - * arm.h (F_ARM_5): Define. - -Wed Jun 2 18:08:18 1999 Richard Henderson - - * internal.h (BEOS_EXE_IMAGE_BASE, BEOS_DLL_IMAGE_BASE): New. - -Mon May 17 13:35:35 1999 Stan Cox - - * arm.h (F_PIC, F_ARM_2, F_ARM_2a, F_ARM_3, F_ARM_3M, - F_ARM_4, F_ARM_4T, F_APCS26): Changed values to distinguish - F_ARM_2a, F_ARM_3M, F_ARM_4T. - -1999-05-15 Nick Clifton - - * mcore.h (IMAGE_REL_MCORE_RVA): Define. - -1999-04-21 Nick Clifton - - * mcore.h (GET_LINENO_LNNO): New macro. - (PUT_LINENO_LNNO): New macro. - -1999-04-08 Nick Clifton - - * mcore.h: New header file. Defines for Motorola's MCore - processor. - -Sun Dec 6 21:36:37 1998 Mark Elbrecht - - * internal.h (C_WEAKEXT): Define. - -Wed Jan 27 13:35:35 1999 Stan Cox - - * arm.h (F_PIC_INT, F_ARM_2, F_ARM_3, F_ARM_4, F_APCS26): - Changed values to avoid clashing with IMAGE_FILE_* coff header - flag values. - -Wed Apr 1 16:06:15 1998 Nick Clifton - - * internal.h: Document numbers associated with Thumb symbol - types. - -Fri Mar 27 17:16:57 1998 Ian Lance Taylor - - * internal.h (ISPTR, ISFCN, ISARY): Add casts to unsigned long. - -Mon Feb 2 17:10:38 1998 Steve Haworth - - * tic30.h: New file. - -Fri Dec 12 11:49:07 1997 Fred Fish - - * tic80.h (R_MPPCR15W): New relocation type, for 15 bit PC relative - offsets. - -Tue Dec 2 10:21:40 1997 Nick Clifton - - * arm.h (COFFARM): New define. - -Mon Dec 1 20:24:18 1997 J"orn Rennecke - - * sh.h (R_SH_SWITCH8): New. - -Sat Nov 22 15:10:14 1997 Nick Clifton - - * internal.h (C_THUMBEXTFUNC, C_THUMBSTATFUNC): Constants to - define static and external functions. - - * arm.h: Add bits to support PIC and APCS-FLOAT type binaries, - when implemented. - -Fri Oct 3 14:25:17 1997 Fred Fish - - * tic80.h (R_PPL16B): Make constant uppercase for consistency. - -Tue Jul 22 18:18:58 1997 Robert Hoehne - - * go32exe.h: New file. - -Tue Jul 8 12:23:55 1997 Fred Fish - - * tic80.h (TIC80_TARGET_ID): Add define. - * internal.h (struct internal_filehdr): Add f_target_id field. - -Tue Jun 3 16:44:18 1997 Nick Clifton - - * internal.h: Add storage classes for Thumb symbols - -Mon May 26 14:07:55 1997 Ian Lance Taylor - - * tic80.h (R_PPL16B): Correct value. - -Tue May 13 10:21:14 1997 Nick Clifton - - * arm.h (constants): Added new flag bits F_APCS_26 and - F_APCS_SET for the f_flags field of the filehdr structure. Added new - flags: F_APCS26, F_ARM_2, F_ARM_3, F_ARM_7, F_ARM_7T to store - information in the flags field of the internal_f structure used by BFD - routines. - -Sat May 3 08:24:59 1997 Fred Fish - - * internal.h (C_UEXT, C_STATLAB, C_EXTLAB, C_SYSTEM): - New storage classes for TIc80. - -Fri Apr 18 11:52:55 1997 Niklas Hallqvist - - * alpha.h (ALPHA_ECOFF_BADMAG): Recognize *BSD/alpha magic too. - (ALPHA_R_LITERALSLEAZY): Define. - * ecoff.h (ALPHA_MAGIC_BSD): Define. - -Wed Jan 29 11:31:51 1997 Ian Lance Taylor - - * i960.h (R_IPR13, R_ALIGN): Define. - -Mon Jan 27 13:34:30 1997 Ian Lance Taylor - - * internal.h (R_IPRMED, R_OPTCALL, R_OPTCALLX): Move definitions - from here... - * i960.h (R_IPRMED, R_OPTCALL, R_OPTCALLX): ...to here. - -Wed Jan 22 20:10:47 1997 Fred Fish - - * tic80.h (TIC80MAGIC): Renamed to TIC80_AOUTHDR_MAGIC. - -Fri Dec 27 22:05:45 1996 Fred Fish - - * tic80.h: New file for TIc80 support. - -Thu Dec 19 16:18:11 1996 Ian Lance Taylor - - * arm.h (_LIT): Define. - -Fri Jun 28 12:54:38 1996 Ian Lance Taylor - - * pe.h (FILHSZ): Define. - -Wed Jun 26 16:24:26 1996 Ian Lance Taylor - - * All files: Define FILHSZ, AOUTSZ, AOUTHDRSZ, SCNHSZ, SYMESZ, - AUXESZ, LINESZ, RELSZ as numeric constants rather than uses of - sizeof. Define AOUTHDRSZ in all files. - * pe.h (AOUTSZ): Define by adding to AOUTHDRSZ. - -Fri Jun 21 11:17:46 1996 Richard Henderson - - * alpha.h: Add declarations for relocation types added for Alpha - OSF/1 3.0. - -Tue Jun 18 16:04:29 1996 Jeffrey A. Law - - * h8300.h (H8300SMAGIC): Define. - (H8300SBADMAG): Define. - -Mon Jun 10 11:53:28 1996 Jeffrey A Law (law@cygnus.com) - - * internal.h (R_BCC_INV, R_JMP_DEL): New relocations for - relaxing in the H8/300 series. - -Thu May 16 15:49:22 1996 Ian Lance Taylor - - * sh.h (R_SH_CODE, R_SH_DATA, R_SH_LABEL): Define. - -Tue May 7 00:36:39 1996 Jeffrey A Law (law@cygnus.com) - - * internal.h (R_JMPL2): Renamed from R_JMPL_B8 to be - consistent with other similar relocs. - - * internal.h (H8/300 specific relocs): Add comments better - explaining what each reloc is used for. - (R_MOV16B1, R_MOV16B2): Renamed from R_MOVB1 and R_MOVB2. - (R_MOV24B1, R_MOV24B2): Renamed from R_MOVLB1 and R_MOVLB2. - (R_MOVL1, R_MOVL2): New relocs. - -Fri May 3 13:01:12 1996 Jeffrey A Law (law@cygnus.com) - - * internal.h (R_PCRWORD_B): Define for the h8300 relaxing - linker. - -Wed May 1 19:21:03 1996 Ian Lance Taylor - - * internal.h (SCNNMLEN): Define. - (struct internal_scnhdr): Use SCNNMLEN for s_name field. - -Fri Mar 29 13:41:25 1996 Ian Lance Taylor - - * pe.h: Define IMAGE_COMDAT codes. - -Wed Mar 27 17:29:42 1996 Ian Lance Taylor - - * arm.h (union external_auxent): Add x_checksum, x_associated, and - x_comdat fields to x_scn struct. - * i386.h (union external_auxent): Likewise. - * powerpc.h (union external_auxent): Likewise. - * internal.h (union internal_auxent): Likewise. - -Thu Mar 21 16:25:57 1996 David Mosberger-Tang - - * ecoff.h (struct ecoff_find_line): Add caching fields. - -Thu Mar 14 15:22:44 1996 Jeffrey A Law (law@cygnus.com) - - * internal.h (R_MEM_INDIRECT): New reloc for the h8300. - -Fri Feb 9 10:44:11 1996 Ian Lance Taylor - - * aux-coff.h: Rename from aux.h, to avoid problems on hapless DOS - systems which think that aux is a com port. - -Mon Feb 5 18:35:00 1996 Ian Lance Taylor - - * i960.h (F_I960HX): Define. - -Wed Jan 31 13:11:54 1996 Richard Henderson - - * aux.h: New file. - * internal.h, m68k.h: Protect against multiple inclusion. - -Wed Nov 22 13:48:39 1995 Ian Lance Taylor - - * ecoff.h (_RCONST, STYP_RCONST, RELOC_SECTION_RCONST): Define. - (NUM_RELOC_SECTIONS): Update. - * symconst.h (scRConst): Define. - -Tue Nov 14 18:54:29 1995 Ian Lance Taylor - - * internal.h (C_NT_WEAK): Define. - -Thu Nov 9 14:08:30 1995 Ian Lance Taylor - - * rs6000.h (STYP_OVRFLO): Define. - -Tue Nov 7 14:38:45 1995 Kim Knuttila - - * powerpc.h (IMAGE_NT_OPTIONAL_HDR_MAGIC): Added define. - * pe.h: Added defines for file level flags - -Mon Nov 6 17:28:01 1995 Harry Dolan - - * i860.h: New file, based on i386.h. - -Wed Nov 1 15:25:18 1995 Manfred Hollstein KS/EF4A 60/1F/110 #40283 - - * m68k.h (PAGEMAGICEXECSWAPPED): Define. - (PAGEMAGICPEXECSWAPPED): Define. - (PAGEMAGICPEXECTSHLIB): Define. - (PAGEMAGICPEXECPAGED): Define. - (_COMMENT): DEFINE. - * m88k.h (_COMMENT): Define. - -Wed Oct 18 18:36:19 1995 Geoffrey Noer - - * sym.h: #if 0'd out runtime_pdr struct because it chokes - Visual C++ and there aren't any references to it elsewhere in gdb. - -Mon Oct 16 11:12:24 1995 Ian Lance Taylor - - * rs6000.h (SMALL_AOUTSZ): Define. - - * internal.h (XMC_TD): Define. - -Tue Oct 10 18:41:03 1995 Ian Lance Taylor - - * internal.h (struct internal_aouthdr): Add o_cputype field. - * rs6000.h (AOUTHDR): Rename o_resv1 to o_cputype. - -Mon Oct 9 14:45:46 1995 Ian Lance Taylor - - * rs6000.h (AOUTHDR): Add o_maxdata field. Add comments. - (_PAD, _LOADER): Define. - (STYP_LOADER): Define. - * internal.h (struct internal_aouthdr): Add o_maxdata field. - -Thu Oct 5 10:02:57 1995 Ian Lance Taylor - - * ecoff.h: Define section name macros and STYP macros for various - Alpha sections: .got, .hash, .dynsym, .dynstr, .rel.dyn, .conflic, - .comment, .liblist, .dynamic. - -Wed Oct 4 10:56:35 1995 Kim Knuttila - - * pe.h: Moved DOSMAGIC and NT_SIGNATURE defines here - * powerpc.h: removed DOSMAGIC, NT_SIGNATURE, and DEFAULT_* defines - Also removed other unused defines (various MAGIC ones) - * i386.h: removed DOSMAGIC, NT_SIGNATURE, and DEFAULT_* defines - * arm.h: removed DOSMAGIC, NT_SIGNATURE, and DEFAULT_* defines - * apollo.h: removed unused DEFAULT_* defines - * alpha.h: removed unused DEFAULT_* defines - * h8500.h: removed unused DEFAULT_* defines - * h8300.h: removed unused DEFAULT_* defines - * i960.h: removed unused DEFAULT_* defines - * m88k.h: removed unused DEFAULT_* defines - * we32k.h: removed unused DEFAULT_* defines - * rs6000.h: removed unused DEFAULT_* defines - * mips.h: removed unused DEFAULT_* defines - * m68k.h: removed unused DEFAULT_* defines - * z8k.h: removed unused DEFAULT_* defines - * w65.h: removed unused DEFAULT_* defines - * sparc.h: removed unused DEFAULT_* defines - * sh.h: removed unused DEFAULT_* defines - -Fri Sep 29 08:40:08 1995 Kim Knuttila - - * powerpc.h: Reformatted to GNU coding conventions. - -Wed Sep 27 06:50:50 1995 Kim Knuttila - - * pe.h: added defines for more section characteristics - * powerpc.h (new file): base coff definitions for ppc PE - -Tue Sep 12 12:08:20 1995 Ian Lance Taylor - - * internal.h (struct internal_syment): Change n_numaux field from - char to unsigned char. - -Fri Sep 1 15:39:36 1995 Kazumoto Kojima - - * mips.h (struct rpdr_ext): Define. - -Thu Aug 31 16:51:50 1995 steve chamberlain - - * internal.h (internal_aouthdr, internal_filehdr): - don't indirect the pe stuff. - -Tue Aug 29 14:16:07 1995 steve chamberlain - - * i386.h (NT_DEF_RESERVE, NT_DEF_COMMIT): Make the same - as 'the other' compiler. - * internal.h (NT_IMAGE_BASE): Deleted. - (NT_EXE_IMAGE_BASE, NT_DLL_IMAGE_BASE): New. - (PE_DEF_SECTION_ALIGNMENT, PE_DEF_FILE_ALIGNMENT): New. - (R_IMAGEBASE): New. - -Mon Aug 21 18:12:19 1995 steve chamberlain - - * internal.h: (internal_filehdr): Moved PE stuff into - internal_extra_pe_filehdr. - (internal_aouthdr): Moved PE stuff into - interanl_extra_pe_aouthdr. - -Mon Jul 24 14:05:39 1995 Ian Lance Taylor - - * internal.h: Move R_SH_* relocs from here... - * sh.h: ...to here. - (R_SH_SWITCH16, R_SH_SWITCH32): Define. - (R_SH_USES, R_SH_COUNT, R_SH_ALIGN): Define. - -Thu Jun 29 00:04:25 1995 Steve Chamberlain - - * internal.h (NT_DEF_RESERVE, NT_DEF_COMMIT): Increase a lot. - -Tue May 16 15:08:20 1995 Ken Raeburn - - * internal.h (NT_subsystem, NT_stack_heap): Delete - -Tue May 16 15:08:20 1995 Ken Raeburn - - * internal.h (NT_subsystem, NT_stack_heap): Now extern. - -Sat May 13 10:14:08 1995 Steve Chamberlain - - * pe.h: New file. - * i386.h (NT_SECTION_ALIGNMENT, NT_FILE_ALIGNMENT, - NT_DEF_RESERVE, NT_DEF_COMMIT): New. - * internal.h (internal_filehdr): New fields for PE. - (IMAGE_DATA_DIRECTORY): New. - (internal_aouthdr): New fields for PE. - -Tue Feb 14 17:59:37 1995 Ian Lance Taylor - - * ecoff.h (struct ecoff_fdrtab_entry): Define. - (struct ecoff_find_line): Define. - -Sat Feb 4 14:38:03 1995 David Mosberger-Tang - - * sym.h (struct pdr): field "prof" added. - - * alpha.h (PDR_BITS1_PROF_*): added, macros for PDR_BITS*_RESERVED_* - updated accordingly. - -Sun Jan 15 18:38:33 1995 Steve Chamberlain - - * w65.h: New file. - -Wed Nov 23 22:43:38 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * sh.h (SH_ARCH_MAGIC_BIG, SH_ARCH_MAGIC_LITTLE): New. - (SHBADMAG): Changed to suit. - -Tue Jul 26 17:46:08 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * i960.h (F_I960JX): New macro. - -Wed Jul 6 00:48:57 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * alpha.h: Add definitions for alpha file header flags, encoding - the object type of the file. - -Mon Jun 20 13:47:01 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * ecoff.h (ecoff_swap_tir_in): Remove declaration. - (ecoff_swap_tir_out): Likewise. - (ecoff_swap_rndx_in, ecoff_swap_rndx_out): Likewise. - (struct ecoff_debug_swap): Add new fields: swap_tir_in, - swap_rndx_in, swap_tir_out, swap_rndx_out, read_debug_info. - -Sun Jun 12 03:51:52 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * symconst.h: Pick up SGI define for stIndirect. - -Fri Apr 22 13:05:28 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff.h (REGINFO): Don't define. - (struct ecoff_reginfo): Don't define. - - * sh.h (SH_ARCH_MAGIC): Rename from SHMAGIC. SHMAGIC is used by - several targets to mean a shared library. - (SHBADMAG): Corresponding change. - -Thu Apr 14 13:00:53 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h (RELOC_BITS3_TYPE_BIG): Changed from 0x1e to 0x3e. - (RELOC_BITS3_TYPEHI_LITTLE): Define. - (RELOC_BITS3_TYPEHI_SH_LITTLE): Define. - (MIPS_R_PCREL16): Change value from 8 to 12 to match Irix 4. - (MIPS_R_RELHI): Define. - (MIPS_R_RELLO): Define. - (MIPS_R_SWITCH): Change value from 9 to 22. - -Thu Apr 7 14:19:35 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h (MIPS_R_SWITCH): Define. - -Thu Mar 31 19:28:33 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * internal.h (internal_aouthdr): Added comments for Apollo fields. - -Thu Mar 31 16:28:02 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff.h (STYP_ECOFF_LIB): Define as used on Irix 4. - -Fri Mar 25 17:16:55 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff.h (struct ecoff_debug_info): Add adjust field. - (struct ecoff_value_adjust): Define. - -Tue Mar 22 13:22:47 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h (MIPS_R_PCREL16): Define. - -Sat Feb 26 10:26:38 1994 Ian Lance Taylor (ian@cygnus.com) - - * ecoff.h: Add casts to avoid warnings from SVR4 cc. - -Mon Feb 21 09:48:46 1994 Ian Lance Taylor (ian@lisa.cygnus.com) - - * sym.h (struct runtime_pdr): Make field adr bfd_vma, not unsigned - long. - (SYMR): Make field value bfd_vma, not long. - -Fri Feb 4 23:35:53 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * rs6000.h (STYP_DEBUG): Define. - -Wed Feb 2 14:31:37 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * internal.h (union internal_auxent): Change x_csect.x_scnlen into - a union of a long and a pointer to a symbol. XCOFF sometimes uses - this field as a symbol index. - -Mon Jan 10 23:54:25 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff.h (ecoff_debug_info): Remove fields line_end, - external_dnr_end, external_pdr_end, external_sym_end, - external_opt_end, external_aux_end, ss_end, external_fdr_end. - Replace ifdbase with ifdmap. - -Wed Jan 5 17:05:36 1994 Ken Raeburn (raeburn@deneb.cygnus.com) - - * ecoff.h (STYP_EXTENDESC, STYP_COMMENT, STYP_XDATA, STYP_PDATA): - Define. - -Wed Jan 5 16:58:24 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff.h (NUM_RELOC_SECTIONS): Define. - -Tue Dec 21 09:24:56 1993 Ken Raeburn (raeburn@rtl.cygnus.com) - - * sparc.h (struct external_reloc): Rename field r_addend to - r_offset. - -Sat Dec 11 16:12:32 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * internal.h (R_DISP7, R_SH_IMM16): New reloc types. - -Tue Nov 23 14:23:19 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff.h (struct ecoff_debug_swap): Added *_end fields for all - the symbolic information pointers. - - * sym.h: Named the EXTR structure ecoff_extr. - -Fri Nov 19 08:21:18 1993 Ken Raeburn (raeburn@rover.cygnus.com) - - * sparc.h (RELSZ): Use correct size. - -Wed Nov 17 17:18:16 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h (struct ecoff_debug_info): Define. - -Tue Nov 2 17:56:57 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff.h (struct ecoff_debug_swap): Define. - -Thu Oct 28 17:07:50 1993 Stan Shebs (shebs@rtl.cygnus.com) - - * i386.h (I386LYNXMAGIC): Rename to LYNXCOFFMAGIC. - * m68k.h (LYNXCOFFMAGIC): Define. - * sparc.h: New file. - -Tue Oct 19 15:34:50 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * alpha.h (external_aouthdr): Split four byte padding field into - two byte bldrev field and two byte padding field. - - * ecoff.h (_LITA, _PDATA, _XDATA, STYP_LITA): Defined. - -Wed Oct 13 15:52:34 1993 Ken Raeburn (raeburn@cygnus.com) - - Sun Oct 10 17:27:10 1993 Troy Rollo (troy@cbme.unsw.edu.au) - - * internal.h: Added o_sri, o_inlib and o_vid for Apollos as well - as R_DIR16. - - * apollo.h: New file - -Mon Oct 11 17:16:48 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff.h (REGINFO, struct ecoff_reginfo): Define. - -Tue Oct 5 10:52:53 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * rs6000.h: Change non-ASCII characters in comment to octal - escapes. - -Tue Sep 28 03:27:04 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * ecoff.h (_FINI, STYP_ECOFF_FINI): Add to support .fini section. - -Fri Sep 24 11:53:53 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h (BADMAG): Recognize MIPS_MAGIC_LITTLE3 and MIPS_MAGIC_BIG3. - * ecoff.h: Define MIPS_MAGIC_LITTLE3 and MIPS_MAGIC_BIG3. - -Thu Sep 23 21:07:14 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * mips.h (BADMAG): Recognize MIPS_MAGIC_LITTLE2 and MIPS_MAGIC_BIG2. - * ecoff.h: Define MIPS_MAGIC_LITTLE2 and MIPS_MAGIC_BIG2. - -Thu Sep 16 20:27:21 1993 Jim Kingdon (kingdon@cirdan.cygnus.com) - - * sym.h, symconst.h: Add comment stating these files are not part - of GDB, GAS, etc. In 1991, when we asked rms whether we could - include these files in GDB (although they are copyrighted by - someone besides the FSF), he said it was OK if they were not - considered part of GDB. - -Fri Sep 10 17:40:35 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff.h (AUX_PUT_ANY): Cast val argument to bfd_vma. - - * alpha.c (external_aouthdr): Need four bytes of padding between - vstamp and tsize. - -Tue Sep 7 14:20:43 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff.h (AUX_GET_ANY, AUX_PUT_ANY): Changed to reflect further - change in bfd swapping routine names. - -Tue Sep 7 10:15:17 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * ecoff.h (AUX_GET_ANY): Change name of _do_getb32 to reflect bfd - changes. - -Fri Aug 13 14:30:32 1993 Ian Lance Taylor (ian@cygnus.com) - - * ecoff.h (RELOC_SECTION_NONE): Define. - -Thu Aug 12 11:24:42 1993 Ian Lance Taylor (ian@cygnus.com) - - * alpha.h (struct external_reloc): Add r_symndx field. - (RELSZ): Correct. - (RELOC_BITS*): Correct. - (ALPHA_R_*): Define. - * ecoff.h (RELOC_SECTION_{XDATA,PDATA,FINI,LITA,ABS}): Define. - (r_extern): Undefine. - * internal.h (struct internal_reloc): Make r_vaddr bfd_vma rather - than long. Add r_extern field. - - * alpha.h (PDR_BITS*): Define. - * sym.h (PDR): Give correct names to new fields. - - * ecoff.h: Moved MIPS reloc definitions from here... - * mips.h: to here. - -Mon Aug 2 16:37:14 1993 Stu Grossman (grossman at cygnus.com) - - * i386.h: Add Lynx magic number. - -Tue Aug 3 11:17:53 1993 Ian Lance Taylor (ian@cygnus.com) - - * alpha.h: Corrected external symbolic debugging structures to - match actual usage. - * internal.h (internal_filehdr, internal_aouthdr, - internal_scnhdr): Changed type of some fields to bfd_vma so they - can hold 64 bits. - * sym.h (HDRR, FDR, PDR, EXTR): Likewise. - (PDR): Added new fields found on Alpha. - * symconst.h (magicSym2): Define; new value found on Alpha. - - * ecoff.h: New file. - * alpha.h, mips.h: Moved common information into ecoff.h. Moved - external structure definitions in from ecoff-ext.h. - * ecoff-ext.h: Removed; information now in alpha.h and mips.h. - -Sun Jul 18 21:43:59 1993 Jim Kingdon (kingdon@rtl.cygnus.com) - - * i386.h: Recognize I386PTXMAGIC. - -Fri Jul 16 09:54:35 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.h (MIPS_AOUT_{OZ}MAGIC): Renamed from {OZ}MAGIC. - -Thu Jul 15 12:23:55 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * m88k.h (union external_auxent): Move x_fcn back inside x_fcnary. - ({GET,PUT}_FCN_{LNNOPTR,ENDNDX}): Adjust accordingly. - -Sun Jul 11 18:00:18 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * m68k.h: Define MC68KBCSMAGIC. - -Thu Jun 10 11:46:28 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.h (_INIT, STYP_MIPS_INIT): Define (used on Irix4). - (STYP_OTHER_LOAD): Define as STYP_MIPS_INIT. - -Wed Jun 9 15:09:09 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.h (OMAGIC): Define. - -Tue Jun 8 12:16:03 1993 Steve Chamberlain (sac@phydeaux.cygnus.com) - - Support for H8/300-H - * h8300.h: New magic number. - * internal.h: New relocations. - -Mon Apr 26 18:04:47 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * internal.h, sh.h: Support for SH. - -Sat Apr 24 21:34:59 1993 Jim Kingdon (kingdon@cygnus.com) - - * a29k.h: Define _LIT. - -Fri Apr 23 18:41:23 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * alpha.h: New file. - -Thu Apr 8 12:36:34 1993 Ian Lance Taylor (ian@cygnus.com) - - * internal.h (C_SHADOW, C_VERSION): Copied in from m88k.h. - * m88k.h, i386.h, we32k.h: Don't define all the storage classes; - they're already in internal.h. - -Wed Apr 7 11:51:24 1993 Jim Kingdon (kingdon@cygnus.com) - - * internal.h: Change n_sclass to unsigned char. - Change C_EFCN to 0xff, change RS/6000 dbx symbols - to no longer be signed. - -Fri Mar 19 14:52:56 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * internal.h: Add H8/500 reloc types. - -Wed Mar 17 09:46:03 1993 Ian Lance Taylor (ian@cygnus.com) - - * ecoff-ext.h (AUX_PUT_ANY): Don't use void values in branches of - conditional expression. - -Thu Mar 4 14:12:06 1993 Ian Lance Taylor (ian@cygnus.com) - - * ecoff-ext.h (AUX_GET_*): Rewrote to use new macro AUX_GET_ANY. - (AUX_PUT_*): New macros corresponding to the AUX_GET macros. - (ecoff_swap_tir_out): Added prototype. - - * mips.h (N_BTMASK, N_TMASK, N_BTSHFT, N_TSHIFT): Define; these - are needed to interpret gcc debugging output. - -Tue Feb 9 07:43:27 1993 Ian Lance Taylor (ian@cygnus.com) - - * we32k.h (BTYPE, ISPTR, ISFCN, ISARY, DECREF): Removed - more definitions duplicated in internal.h. - -Wed Feb 3 09:18:24 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.h (RELOC_BITS3_TYPE_*): Correct for big endian machines. - -Mon Jan 25 11:35:51 1993 Ian Lance Taylor (ian@cygnus.com) - - * internal.h (internal_aouthdr): Added additional fields used only - by MIPS ECOFF. - -Thu Jan 21 10:28:38 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.h (AOUTHDR): Added additional fields used by ECOFF. - -Tue Jan 19 12:21:19 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * i386.h, we32k.h (N_*, T_*, DT_*): Removed still more definitions - duplicated in internal.h. - - * mips.h (RELOC_SECTION_*, ECOFF_R_*): Defined constants for ECOFF - relocs. - -Fri Jan 15 18:17:00 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff-ext.h: Added prototypes for new ECOFF swapping functions. - (opt_ext): New structure. - * mips.h (ZMAGIC): Defined to be 0413. - (_LIB): Defined to be ".lib" - (external_reloc): MIPS ECOFF relocs are only 8 bytes. Added - macros to aid in swapping. - -Fri Jan 8 16:19:26 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ecoff-ext.h: Added prototypes for ECOFF swapping functions. - * internal.h (internal_scnhdr): Always provide s_align field, not - just on i960. - (internal_reloc): Always provide r_size field, not just on - RS/6000. - * mips.h (_RDATA, _SDATA, _SBSS, _LIT4, _LIT8, STYP_RDATA, - STYP_SDATA, STYP_SBSS, STYP_LIT4, STYP_LIT8): Defined. - (CODE_MASK, MIPS_IS_STAB, MIPS_MARK_STAB, MIPS_UNMARK_STAB, - STABS_SYMBOL): Moved in from gdb/mipsread.c. - -Wed Jan 6 14:01:46 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * i386.h, we32k.h: removed STYP_* defines, since they duplicated - those in internal.h. - -Tue Dec 29 15:40:07 1992 Ian Lance Taylor (ian@cygnus.com) - - * i386.h: define I386AIXMAGIC for Danbury AIX PS/2 compiler. - -Sat Dec 12 16:07:57 1992 Ian Lance Taylor (ian@cygnus.com) - - * i386.h: don't define BTYPE, ISPTR, ISFCN, ISARY, DECREF: they - are defined in internal.h. - -Thu Nov 12 09:52:01 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * internal.h: (internal_reloc): r_offset is now a long. - * z8k.h: slight comment enhancement - -Wed Sep 30 07:46:08 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * internal.h: changed z8k reloc types - -Fri Aug 28 10:16:31 1992 Brendan Kehoe (brendan@cygnus.com) - - * we32k.h: new file - -Thu Aug 27 13:00:01 1992 Brendan Kehoe (brendan@cygnus.com) - - * symconst.h: comment out cruft at the end of #endif - -Tue Aug 25 15:06:49 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * internal.h: added #define for STYP_LIT, removed from a29k and - h8300. - - * z8k.h: added z8000 support - -Thu Jul 16 16:32:00 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * internal.h: added R_RELLONG_NEG reloc type - -Fri Jun 12 20:11:04 1992 John Gilmore (gnu at cygnus.com) - - * symconst.h: Fix unterminated comment. - -Wed Jun 10 07:57:49 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * i386.h: a.out magic numbers from - mohring@informatik.tu-muenchen.de - -Mon Jun 8 20:13:33 1992 John Gilmore (gnu at cygnus.com) - - * ecoff-ext.h, mips.h: Use unsigned chars everywhere. - (Suggested by Antti Miettinen.) - -Tue Apr 14 15:18:44 1992 John Gilmore (gnu at cygnus.com) - - * sym.h: Add comments. - * symconst.h: Merge with Fred's changes. - -Tue Apr 14 14:30:05 1992 Fred Fish (fnf@cygnus.com) - - * symconst.h: Pick up SGI defines for stStruct, stUnion, stEnum, - langCplusplus, and langCplusplusV2. - -Thu Apr 2 19:47:43 1992 John Gilmore (gnu at cygnus.com) - - * sym.h, symconst.h: MIPS has provided redistributable versions - of these files. Thanks! - * ecoff-ext.h: Add weakext bit to match new sym.h. - -Fri Mar 6 00:10:46 1992 John Gilmore (gnu at cygnus.com) - - * ecoff-ext.h: Add relative file descriptors. - -Thu Feb 27 11:53:04 1992 John Gilmore (gnu at cygnus.com) - - * ecoff-ext.h: New file for external (in-file) form of ecoff - symbol structures. - -Thu Feb 6 11:33:32 1992 Steve Chamberlain (sac at rtl.cygnus.com) - - * h8300.h: made the external_lineno l_lnno field 4 bytes wide. - andded GET/PUT_LINENO_LNNO macros - -Sat Nov 30 20:38:35 1991 Steve Chamberlain (sac at rtl.cygnus.com) - - * a29k.h, h8300.h, i386.h, i960.h, internal.h, m68k.h, m88k.h, - mips.h, rs6000.h: Move from above coff-.h. - - -Local Variables: -version-control: never -End: diff --git a/include/coff/alpha.h b/include/coff/alpha.h deleted file mode 100644 index 7433938d5d1..00000000000 --- a/include/coff/alpha.h +++ /dev/null @@ -1,385 +0,0 @@ -/* ECOFF support on Alpha machines. - coff/ecoff.h must be included before this file. - - Copyright 2001, 2005 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/********************** FILE HEADER **********************/ - -struct external_filehdr -{ - unsigned char f_magic[2]; /* magic number */ - unsigned char f_nscns[2]; /* number of sections */ - unsigned char f_timdat[4]; /* time & date stamp */ - unsigned char f_symptr[8]; /* file pointer to symtab */ - unsigned char f_nsyms[4]; /* number of symtab entries */ - unsigned char f_opthdr[2]; /* sizeof(optional hdr) */ - unsigned char f_flags[2]; /* flags */ -}; - -/* Magic numbers are defined in coff/ecoff.h. */ -#define ALPHA_ECOFF_BADMAG(x) \ - ((x).f_magic != ALPHA_MAGIC && (x).f_magic != ALPHA_MAGIC_BSD) - -#define ALPHA_ECOFF_COMPRESSEDMAG(x) \ - ((x).f_magic == ALPHA_MAGIC_COMPRESSED) - -/* The object type is encoded in the f_flags. */ -#define F_ALPHA_OBJECT_TYPE_MASK 0x3000 -#define F_ALPHA_NO_SHARED 0x1000 -#define F_ALPHA_SHARABLE 0x2000 -#define F_ALPHA_CALL_SHARED 0x3000 - -#define FILHDR struct external_filehdr -#define FILHSZ 24 - -/********************** AOUT "OPTIONAL HEADER" **********************/ - -typedef struct external_aouthdr -{ - unsigned char magic[2]; /* type of file */ - unsigned char vstamp[2]; /* version stamp */ - unsigned char bldrev[2]; /* ?? */ - unsigned char padding[2]; /* pad to quadword boundary */ - unsigned char tsize[8]; /* text size in bytes */ - unsigned char dsize[8]; /* initialized data " " */ - unsigned char bsize[8]; /* uninitialized data " " */ - unsigned char entry[8]; /* entry pt. */ - unsigned char text_start[8]; /* base of text used for this file */ - unsigned char data_start[8]; /* base of data used for this file */ - unsigned char bss_start[8]; /* base of bss used for this file */ - unsigned char gprmask[4]; /* bitmask of general registers used */ - unsigned char fprmask[4]; /* bitmask of floating point registers used */ - unsigned char gp_value[8]; /* value for gp register */ -} AOUTHDR; - -/* compute size of a header */ - -#define AOUTSZ 80 -#define AOUTHDRSZ 80 - -/********************** SECTION HEADER **********************/ - -struct external_scnhdr -{ - unsigned char s_name[8]; /* section name */ - unsigned char s_paddr[8]; /* physical address, aliased s_nlib */ - unsigned char s_vaddr[8]; /* virtual address */ - unsigned char s_size[8]; /* section size */ - unsigned char s_scnptr[8]; /* file ptr to raw data for section */ - unsigned char s_relptr[8]; /* file ptr to relocation */ - unsigned char s_lnnoptr[8]; /* file ptr to line numbers */ - unsigned char s_nreloc[2]; /* number of relocation entries */ - unsigned char s_nlnno[2]; /* number of line number entries*/ - unsigned char s_flags[4]; /* flags */ -}; - -#define SCNHDR struct external_scnhdr -#define SCNHSZ 64 - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - unsigned char r_vaddr[8]; - unsigned char r_symndx[4]; - unsigned char r_bits[4]; -}; - -#define RELOC struct external_reloc -#define RELSZ 16 - -/* Constants to unpack the r_bits field. The Alpha seems to always be - little endian, so I haven't bothered to define big endian variants - of these. */ - -#define RELOC_BITS0_TYPE_LITTLE 0xff -#define RELOC_BITS0_TYPE_SH_LITTLE 0 - -#define RELOC_BITS1_EXTERN_LITTLE 0x01 - -#define RELOC_BITS1_OFFSET_LITTLE 0x7e -#define RELOC_BITS1_OFFSET_SH_LITTLE 1 - -#define RELOC_BITS1_RESERVED_LITTLE 0x80 -#define RELOC_BITS1_RESERVED_SH_LITTLE 7 -#define RELOC_BITS2_RESERVED_LITTLE 0xff -#define RELOC_BITS2_RESERVED_SH_LEFT_LITTLE 1 -#define RELOC_BITS3_RESERVED_LITTLE 0x03 -#define RELOC_BITS3_RESERVED_SH_LEFT_LITTLE 9 - -#define RELOC_BITS3_SIZE_LITTLE 0xfc -#define RELOC_BITS3_SIZE_SH_LITTLE 2 - -/* The r_type field in a reloc is one of the following values. */ -#define ALPHA_R_IGNORE 0 -#define ALPHA_R_REFLONG 1 -#define ALPHA_R_REFQUAD 2 -#define ALPHA_R_GPREL32 3 -#define ALPHA_R_LITERAL 4 -#define ALPHA_R_LITUSE 5 -#define ALPHA_R_GPDISP 6 -#define ALPHA_R_BRADDR 7 -#define ALPHA_R_HINT 8 -#define ALPHA_R_SREL16 9 -#define ALPHA_R_SREL32 10 -#define ALPHA_R_SREL64 11 -#define ALPHA_R_OP_PUSH 12 -#define ALPHA_R_OP_STORE 13 -#define ALPHA_R_OP_PSUB 14 -#define ALPHA_R_OP_PRSHIFT 15 -#define ALPHA_R_GPVALUE 16 -#define ALPHA_R_GPRELHIGH 17 -#define ALPHA_R_GPRELLOW 18 -#define ALPHA_R_IMMED 19 - -/* Overloaded reloc value used by Net- and OpenBSD. */ -#define ALPHA_R_LITERALSLEAZY 17 - -/* With ALPHA_R_LITUSE, the r_size field is one of the following values. */ -#define ALPHA_R_LU_BASE 1 -#define ALPHA_R_LU_BYTOFF 2 -#define ALPHA_R_LU_JSR 3 - -/* With ALPHA_R_IMMED, the r_size field is one of the following values. */ -#define ALPHA_R_IMMED_GP_16 1 -#define ALPHA_R_IMMED_GP_HI32 2 -#define ALPHA_R_IMMED_SCN_HI32 3 -#define ALPHA_R_IMMED_BR_HI32 4 -#define ALPHA_R_IMMED_LO32 5 - -/********************** SYMBOLIC INFORMATION **********************/ - -/* Written by John Gilmore. */ - -/* ECOFF uses COFF-like section structures, but its own symbol format. - This file defines the symbol format in fields whose size and alignment - will not vary on different host systems. */ - -/* File header as a set of bytes */ - -struct hdr_ext -{ - unsigned char h_magic[2]; - unsigned char h_vstamp[2]; - unsigned char h_ilineMax[4]; - unsigned char h_idnMax[4]; - unsigned char h_ipdMax[4]; - unsigned char h_isymMax[4]; - unsigned char h_ioptMax[4]; - unsigned char h_iauxMax[4]; - unsigned char h_issMax[4]; - unsigned char h_issExtMax[4]; - unsigned char h_ifdMax[4]; - unsigned char h_crfd[4]; - unsigned char h_iextMax[4]; - unsigned char h_cbLine[8]; - unsigned char h_cbLineOffset[8]; - unsigned char h_cbDnOffset[8]; - unsigned char h_cbPdOffset[8]; - unsigned char h_cbSymOffset[8]; - unsigned char h_cbOptOffset[8]; - unsigned char h_cbAuxOffset[8]; - unsigned char h_cbSsOffset[8]; - unsigned char h_cbSsExtOffset[8]; - unsigned char h_cbFdOffset[8]; - unsigned char h_cbRfdOffset[8]; - unsigned char h_cbExtOffset[8]; -}; - -/* File descriptor external record */ - -struct fdr_ext -{ - unsigned char f_adr[8]; - unsigned char f_cbLineOffset[8]; - unsigned char f_cbLine[8]; - unsigned char f_cbSs[8]; - unsigned char f_rss[4]; - unsigned char f_issBase[4]; - unsigned char f_isymBase[4]; - unsigned char f_csym[4]; - unsigned char f_ilineBase[4]; - unsigned char f_cline[4]; - unsigned char f_ioptBase[4]; - unsigned char f_copt[4]; - unsigned char f_ipdFirst[4]; - unsigned char f_cpd[4]; - unsigned char f_iauxBase[4]; - unsigned char f_caux[4]; - unsigned char f_rfdBase[4]; - unsigned char f_crfd[4]; - unsigned char f_bits1[1]; - unsigned char f_bits2[3]; - unsigned char f_padding[4]; -}; - -#define FDR_BITS1_LANG_BIG 0xF8 -#define FDR_BITS1_LANG_SH_BIG 3 -#define FDR_BITS1_LANG_LITTLE 0x1F -#define FDR_BITS1_LANG_SH_LITTLE 0 - -#define FDR_BITS1_FMERGE_BIG 0x04 -#define FDR_BITS1_FMERGE_LITTLE 0x20 - -#define FDR_BITS1_FREADIN_BIG 0x02 -#define FDR_BITS1_FREADIN_LITTLE 0x40 - -#define FDR_BITS1_FBIGENDIAN_BIG 0x01 -#define FDR_BITS1_FBIGENDIAN_LITTLE 0x80 - -#define FDR_BITS2_GLEVEL_BIG 0xC0 -#define FDR_BITS2_GLEVEL_SH_BIG 6 -#define FDR_BITS2_GLEVEL_LITTLE 0x03 -#define FDR_BITS2_GLEVEL_SH_LITTLE 0 - -/* We ignore the `reserved' field in bits2. */ - -/* Procedure descriptor external record */ - -struct pdr_ext { - unsigned char p_adr[8]; - unsigned char p_cbLineOffset[8]; - unsigned char p_isym[4]; - unsigned char p_iline[4]; - unsigned char p_regmask[4]; - unsigned char p_regoffset[4]; - unsigned char p_iopt[4]; - unsigned char p_fregmask[4]; - unsigned char p_fregoffset[4]; - unsigned char p_frameoffset[4]; - unsigned char p_lnLow[4]; - unsigned char p_lnHigh[4]; - unsigned char p_gp_prologue[1]; - unsigned char p_bits1[1]; - unsigned char p_bits2[1]; - unsigned char p_localoff[1]; - unsigned char p_framereg[2]; - unsigned char p_pcreg[2]; -}; - -#define PDR_BITS1_GP_USED_BIG 0x80 -#define PDR_BITS1_REG_FRAME_BIG 0x40 -#define PDR_BITS1_PROF_BIG 0x20 -#define PDR_BITS1_RESERVED_BIG 0x1f -#define PDR_BITS1_RESERVED_SH_LEFT_BIG 8 -#define PDR_BITS2_RESERVED_BIG 0xff -#define PDR_BITS2_RESERVED_SH_BIG 0 - -#define PDR_BITS1_GP_USED_LITTLE 0x01 -#define PDR_BITS1_REG_FRAME_LITTLE 0x02 -#define PDR_BITS1_PROF_LITTLE 0x04 -#define PDR_BITS1_RESERVED_LITTLE 0xf8 -#define PDR_BITS1_RESERVED_SH_LITTLE 3 -#define PDR_BITS2_RESERVED_LITTLE 0xff -#define PDR_BITS2_RESERVED_SH_LEFT_LITTLE 5 - -/* Line numbers */ - -struct line_ext { - unsigned char l_line[4]; -}; - -/* Symbol external record */ - -struct sym_ext { - unsigned char s_value[8]; - unsigned char s_iss[4]; - unsigned char s_bits1[1]; - unsigned char s_bits2[1]; - unsigned char s_bits3[1]; - unsigned char s_bits4[1]; -}; - -#define SYM_BITS1_ST_BIG 0xFC -#define SYM_BITS1_ST_SH_BIG 2 -#define SYM_BITS1_ST_LITTLE 0x3F -#define SYM_BITS1_ST_SH_LITTLE 0 - -#define SYM_BITS1_SC_BIG 0x03 -#define SYM_BITS1_SC_SH_LEFT_BIG 3 -#define SYM_BITS1_SC_LITTLE 0xC0 -#define SYM_BITS1_SC_SH_LITTLE 6 - -#define SYM_BITS2_SC_BIG 0xE0 -#define SYM_BITS2_SC_SH_BIG 5 -#define SYM_BITS2_SC_LITTLE 0x07 -#define SYM_BITS2_SC_SH_LEFT_LITTLE 2 - -#define SYM_BITS2_RESERVED_BIG 0x10 -#define SYM_BITS2_RESERVED_LITTLE 0x08 - -#define SYM_BITS2_INDEX_BIG 0x0F -#define SYM_BITS2_INDEX_SH_LEFT_BIG 16 -#define SYM_BITS2_INDEX_LITTLE 0xF0 -#define SYM_BITS2_INDEX_SH_LITTLE 4 - -#define SYM_BITS3_INDEX_SH_LEFT_BIG 8 -#define SYM_BITS3_INDEX_SH_LEFT_LITTLE 4 - -#define SYM_BITS4_INDEX_SH_LEFT_BIG 0 -#define SYM_BITS4_INDEX_SH_LEFT_LITTLE 12 - -/* External symbol external record */ - -struct ext_ext { - struct sym_ext es_asym; - unsigned char es_bits1[1]; - unsigned char es_bits2[3]; - unsigned char es_ifd[4]; -}; - -#define EXT_BITS1_JMPTBL_BIG 0x80 -#define EXT_BITS1_JMPTBL_LITTLE 0x01 - -#define EXT_BITS1_COBOL_MAIN_BIG 0x40 -#define EXT_BITS1_COBOL_MAIN_LITTLE 0x02 - -#define EXT_BITS1_WEAKEXT_BIG 0x20 -#define EXT_BITS1_WEAKEXT_LITTLE 0x04 - -/* Dense numbers external record */ - -struct dnr_ext { - unsigned char d_rfd[4]; - unsigned char d_index[4]; -}; - -/* Relative file descriptor */ - -struct rfd_ext { - unsigned char rfd[4]; -}; - -/* Optimizer symbol external record */ - -struct opt_ext { - unsigned char o_bits1[1]; - unsigned char o_bits2[1]; - unsigned char o_bits3[1]; - unsigned char o_bits4[1]; - struct rndx_ext o_rndx; - unsigned char o_offset[4]; -}; - -#define OPT_BITS2_VALUE_SH_LEFT_BIG 16 -#define OPT_BITS2_VALUE_SH_LEFT_LITTLE 0 - -#define OPT_BITS3_VALUE_SH_LEFT_BIG 8 -#define OPT_BITS3_VALUE_SH_LEFT_LITTLE 8 - -#define OPT_BITS4_VALUE_SH_LEFT_BIG 0 -#define OPT_BITS4_VALUE_SH_LEFT_LITTLE 16 diff --git a/include/coff/apollo.h b/include/coff/apollo.h deleted file mode 100644 index 963c0be7553..00000000000 --- a/include/coff/apollo.h +++ /dev/null @@ -1,124 +0,0 @@ -/* coff information for Apollo M68K - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define DO_NOT_DEFINE_AOUTHDR -#define L_LNNO_SIZE 2 -#include "coff/external.h" - -/* Motorola 68000/68008/68010/68020 */ -#define MC68MAGIC 0520 -#define MC68KWRMAGIC 0520 /* writeable text segments */ -#define MC68TVMAGIC 0521 -#define MC68KROMAGIC 0521 /* readonly shareable text segments */ -#define MC68KPGMAGIC 0522 /* demand paged text segments */ -#define M68MAGIC 0210 -#define M68TVMAGIC 0211 - -/* Apollo 68000-based machines have a different magic number. This comes - * from /usr/include/apollo/filehdr.h - */ -#define APOLLOM68KMAGIC 0627 - -#define OMAGIC M68MAGIC -#define M68KBADMAG(x) (((x).f_magic!=MC68MAGIC) && ((x).f_magic!=MC68KWRMAGIC) && ((x).f_magic!=MC68TVMAGIC) && \ - ((x).f_magic!=MC68KROMAGIC) && ((x).f_magic!=MC68KPGMAGIC) && ((x).f_magic!=M68MAGIC) && ((x).f_magic!=M68TVMAGIC) && \ - ((x).f_magic!=APOLLOM68KMAGIC) ) - -/********************** AOUT "OPTIONAL HEADER" **********************/ - -typedef struct -{ - char magic[2]; /* type of file */ - char vstamp[2]; /* version stamp */ - char tsize[4]; /* text size in bytes, padded to FW bdry*/ - char dsize[4]; /* initialized data " " */ - char bsize[4]; /* uninitialized data " " */ - char entry[4]; /* entry pt. */ - char text_start[4]; /* base of text used for this file */ - char data_start[4]; /* base of data used for this file */ - char o_sri[4]; /* Apollo specific - .sri data pointer */ - char o_inlib[4]; /* Apollo specific - .inlib data pointer */ - char vid[8]; /* Apollo specific - 64 bit version ID */ -} -AOUTHDR; - -#define APOLLO_COFF_VERSION_NUMBER 1 /* the value of the aouthdr magic */ -#define AOUTHDRSZ 44 -#define AOUTSZ 44 - -/* Apollo allowa for larger section names by allowing - them to be in the string table. */ - -/* If s_zeores is all zeroes, s_offset gives the real - location of the name in the string table. */ - -#define s_zeroes section_name.s_name -#define s_offset (section_name.s_name+4) - -/* More names of "special" sections. */ -#define _TV ".tv" -#define _INIT ".init" -#define _FINI ".fini" -#define _LINES ".lines" -#define _BLOCKS ".blocks" -#define _SRI ".sri" /* Static Resource Information (systype, - et al.) */ -#define _MIR ".mir" /* Module Information Records */ -#define _APTV ".aptv" /* Apollo-style transfer vectors. */ -#define _INLIB ".inlib" /* Shared Library information */ -#define _RWDI ".rwdi" /* Read/write data initialization directives for - compressed sections */ -#define _UNWIND ".unwind" /* Stack unwind information */ - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; -#ifdef M68K_COFF_OFFSET - char r_offset[4]; -#endif - -}; - -#define RELOC struct external_reloc - -#ifdef M68K_COFF_OFFSET -#define RELSZ 14 -#else -#define RELSZ 10 -#endif - -/* Apollo specific STYP flags */ - -#define STYP_RELOCATED_NOT_LOADED 0x00010000 /* Section is relocated normally during linking, but need - not be loaded during program execution */ -#define STYP_DEBUG 0x00020000 /* debug section */ -#define STYP_OVERLAY 0x00040000 /* Section is overlayed */ -#define STYP_INSTRUCTION 0x00200000 /* Section contains executable code */ - -#define STYP_ZERO 0x00800000 /* Section is initialized to zero */ -#define STYP_INSTALLED 0x02000000 /* Section should be installable in KGT */ -#define STYP_LOOK_INSTALLED 0x04000000 /* Look for section in KGT */ -#define STYP_SECALIGN1 0x08000000 /* Specially aligned section */ -#define STYP_SECALIGN2 0x10000000 /* " " " */ -#define STYP_COMPRESSED 0x20000000 /* No section data per se (s_scnptr = 0), but there are - initialization directives for it in .rwdi section - (used in conjunction with STYP_BSS) */ diff --git a/include/coff/arm.h b/include/coff/arm.h deleted file mode 100644 index 750f7f2fcca..00000000000 --- a/include/coff/arm.h +++ /dev/null @@ -1,128 +0,0 @@ -/* ARM COFF support for BFD. - Copyright 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define COFFARM 1 - -#define L_LNNO_SIZE 2 -#define INCLUDE_COMDAT_FIELDS_IN_AUXENT -#include "coff/external.h" - -/* Bits for f_flags: - F_RELFLG relocation info stripped from file - F_EXEC file is executable (no unresolved external references) - F_LNNO line numbers stripped from file - F_LSYMS local symbols stripped from file - F_INTERWORK file supports switching between ARM and Thumb instruction sets - F_INTERWORK_SET the F_INTERWORK bit is valid - F_APCS_FLOAT code passes float arguments in float registers - F_PIC code is reentrant/position-independent - F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax) - F_APCS_26 file uses 26 bit ARM Procedure Calling Standard - F_APCS_SET the F_APCS_26, F_APCS_FLOAT and F_PIC bits have been initialised - F_SOFT_FLOAT code does not use floating point instructions. */ - -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_LSYMS (0x0008) -#define F_INTERWORK (0x0010) -#define F_INTERWORK_SET (0x0020) -#define F_APCS_FLOAT (0x0040) -#undef F_AR16WR -#define F_PIC (0x0080) -#define F_AR32WR (0x0100) -#define F_APCS_26 (0x0400) -#define F_APCS_SET (0x0800) -#define F_SOFT_FLOAT (0x2000) -#define F_VFP_FLOAT (0x4000) - -/* Bits stored in flags field of the internal_f structure */ - -#define F_INTERWORK (0x0010) -#define F_APCS_FLOAT (0x0040) -#define F_PIC (0x0080) -#define F_APCS26 (0x1000) -#define F_ARM_ARCHITECTURE_MASK (0x4000+0x0800+0x0400) -#define F_ARM_2 (0x0400) -#define F_ARM_2a (0x0800) -#define F_ARM_3 (0x0c00) -#define F_ARM_3M (0x4000) -#define F_ARM_4 (0x4400) -#define F_ARM_4T (0x4800) -#define F_ARM_5 (0x4c00) - -/* - ARMMAGIC ought to encoded the procesor type, - but it is too late to change it now, instead - the flags field of the internal_f structure - is used as shown above. - - XXX - NC 5/6/97. */ - -#define ARMMAGIC 0xa00 /* I just made this up */ - -#define ARMBADMAG(x) (((x).f_magic != ARMMAGIC)) - -#define ARMPEMAGIC 0x1c0 -#define THUMBPEMAGIC 0x1c2 - -#undef ARMBADMAG -#define ARMBADMAG(x) (((x).f_magic != ARMMAGIC) && ((x).f_magic != ARMPEMAGIC) && ((x).f_magic != THUMBPEMAGIC)) - -#define OMAGIC 0404 /* object files, eg as output */ -#define ZMAGIC 0413 /* demand load format, eg normal ld output */ -#define STMAGIC 0401 /* target shlib */ -#define SHMAGIC 0443 /* host shlib */ - -/* define some NT default values */ -/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */ -#define NT_SECTION_ALIGNMENT 0x1000 -#define NT_FILE_ALIGNMENT 0x200 -#define NT_DEF_RESERVE 0x100000 -#define NT_DEF_COMMIT 0x1000 - -/* We use the .rdata section to hold read only data. */ -#define _LIT ".rdata" - -/********************** RELOCATION DIRECTIVES **********************/ -#ifdef ARM_WINCE -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 10 - -#else -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; - char r_offset[4]; -}; - -#define RELOC struct external_reloc -#define RELSZ 14 -#endif - -#define ARM_NOTE_SECTION ".note" diff --git a/include/coff/aux-coff.h b/include/coff/aux-coff.h deleted file mode 100644 index 5199f2c485a..00000000000 --- a/include/coff/aux-coff.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Modifications of internal.h and m68k.h needed by A/UX - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - - Suggested by Ian Lance Taylor */ - -#ifndef GNU_COFF_AUX_H -#define GNU_COFF_AUX_H 1 - -#include "coff/internal.h" -#include "coff/m68k.h" - -/* Section contains 64-byte padded pathnames of shared libraries */ -#undef STYP_LIB -#define STYP_LIB 0x200 - -/* Section contains shared library initialization code */ -#undef STYP_INIT -#define STYP_INIT 0x400 - -/* Section contains .ident information */ -#undef STYP_IDENT -#define STYP_IDENT 0x800 - -/* Section types used by bfd and gas not defined (directly) by A/UX */ -#undef STYP_OVER -#define STYP_OVER 0 -#undef STYP_INFO -#define STYP_INFO STYP_IDENT - -/* Traditional name of the section tagged with STYP_LIB */ -#define _LIB ".lib" - -#endif /* GNU_COFF_AUX_H */ diff --git a/include/coff/ecoff.h b/include/coff/ecoff.h deleted file mode 100644 index d4d3fa52d23..00000000000 --- a/include/coff/ecoff.h +++ /dev/null @@ -1,410 +0,0 @@ -/* Generic ECOFF support. - This does not include symbol information, found in sym.h and - symconst.h. - - Copyright 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef ECOFF_H -#define ECOFF_H - -/* Mips magic numbers used in filehdr. MIPS_MAGIC_LITTLE is used on - little endian machines. MIPS_MAGIC_BIG is used on big endian - machines. Where is MIPS_MAGIC_1 from? */ -#define MIPS_MAGIC_1 0x0180 -#define MIPS_MAGIC_LITTLE 0x0162 -#define MIPS_MAGIC_BIG 0x0160 - -/* These are the magic numbers used for MIPS code compiled at ISA - level 2. */ -#define MIPS_MAGIC_LITTLE2 0x0166 -#define MIPS_MAGIC_BIG2 0x0163 - -/* These are the magic numbers used for MIPS code compiled at ISA - level 3. */ -#define MIPS_MAGIC_LITTLE3 0x142 -#define MIPS_MAGIC_BIG3 0x140 - -/* Alpha magic numbers used in filehdr. */ -#define ALPHA_MAGIC 0x183 -#define ALPHA_MAGIC_BSD 0x185 -/* A compressed version of an ALPHA_MAGIC file created by DEC's tools. */ -#define ALPHA_MAGIC_COMPRESSED 0x188 - -/* Magic numbers used in a.out header. */ -#define ECOFF_AOUT_OMAGIC 0407 /* not demand paged (ld -N). */ -#define ECOFF_AOUT_ZMAGIC 0413 /* demand load format, eg normal ld output */ - -/* Names of special sections. */ -#define _TEXT ".text" -#define _DATA ".data" -#define _BSS ".bss" -#define _RDATA ".rdata" -#define _SDATA ".sdata" -#define _SBSS ".sbss" -#define _LITA ".lita" -#define _LIT4 ".lit4" -#define _LIT8 ".lit8" -#define _LIB ".lib" -#define _INIT ".init" -#define _FINI ".fini" -#define _PDATA ".pdata" -#define _XDATA ".xdata" -#define _GOT ".got" -#define _HASH ".hash" -#define _DYNSYM ".dynsym" -#define _DYNSTR ".dynstr" -#define _RELDYN ".rel.dyn" -#define _CONFLIC ".conflic" -#define _COMMENT ".comment" -#define _LIBLIST ".liblist" -#define _DYNAMIC ".dynamic" -#define _RCONST ".rconst" - -/* ECOFF uses some additional section flags. */ -#define STYP_RDATA 0x100 -#define STYP_SDATA 0x200 -#define STYP_SBSS 0x400 -#define STYP_GOT 0x1000 -#define STYP_DYNAMIC 0x2000 -#define STYP_DYNSYM 0x4000 -#define STYP_RELDYN 0x8000 -#define STYP_DYNSTR 0x10000 -#define STYP_HASH 0x20000 -#define STYP_LIBLIST 0x40000 -#define STYP_CONFLIC 0x100000 -#define STYP_ECOFF_FINI 0x1000000 -#define STYP_EXTENDESC 0x2000000 /* 0x02FFF000 bits => scn type, rest clr */ -#define STYP_LITA 0x4000000 -#define STYP_LIT8 0x8000000 -#define STYP_LIT4 0x10000000 -#define STYP_ECOFF_LIB 0x40000000 -#define STYP_ECOFF_INIT 0x80000000 -#define STYP_OTHER_LOAD (STYP_ECOFF_INIT | STYP_ECOFF_FINI) - -/* extended section types */ -#define STYP_COMMENT 0x2100000 -#define STYP_RCONST 0x2200000 -#define STYP_XDATA 0x2400000 -#define STYP_PDATA 0x2800000 - -/* The linker needs a section to hold small common variables while - linking. There is no convenient way to create it when the linker - needs it, so we always create one for each BFD. We then avoid - writing it out. */ -#define SCOMMON ".scommon" - -/* If the extern bit in a reloc is 1, then r_symndx is an index into - the external symbol table. If the extern bit is 0, then r_symndx - indicates a section, and is one of the following values. */ -#define RELOC_SECTION_NONE 0 -#define RELOC_SECTION_TEXT 1 -#define RELOC_SECTION_RDATA 2 -#define RELOC_SECTION_DATA 3 -#define RELOC_SECTION_SDATA 4 -#define RELOC_SECTION_SBSS 5 -#define RELOC_SECTION_BSS 6 -#define RELOC_SECTION_INIT 7 -#define RELOC_SECTION_LIT8 8 -#define RELOC_SECTION_LIT4 9 -#define RELOC_SECTION_XDATA 10 -#define RELOC_SECTION_PDATA 11 -#define RELOC_SECTION_FINI 12 -#define RELOC_SECTION_LITA 13 -#define RELOC_SECTION_ABS 14 -#define RELOC_SECTION_RCONST 15 - -#define NUM_RELOC_SECTIONS 16 - -/********************** STABS **********************/ - -/* gcc uses mips-tfile to output type information in special stabs - entries. These must match the corresponding definition in - gcc/config/mips.h. At some point, these should probably go into a - shared include file, but currently gcc and gdb do not share any - directories. */ -#define CODE_MASK 0x8F300 -#define ECOFF_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK) -#define ECOFF_MARK_STAB(code) ((code)+CODE_MASK) -#define ECOFF_UNMARK_STAB(code) ((code)-CODE_MASK) -#define STABS_SYMBOL "@stabs" - -/********************** COFF **********************/ - -/* gcc also uses mips-tfile to output COFF debugging information. - These are the values it uses when outputting the .type directive. - These should also be in a shared include file. */ -#define N_BTMASK (017) -#define N_TMASK (060) -#define N_BTSHFT (4) -#define N_TSHIFT (2) - -/********************** AUX **********************/ - -/* The auxiliary type information is the same on all known ECOFF - targets. I can't see any reason that it would ever change, so I am - going to gamble and define the external structures here, in the - target independent ECOFF header file. The internal forms are - defined in coff/sym.h, which was originally donated by MIPS - Computer Systems. */ - -/* Type information external record */ - -struct tir_ext { - unsigned char t_bits1[1]; - unsigned char t_tq45[1]; - unsigned char t_tq01[1]; - unsigned char t_tq23[1]; -}; - -#define TIR_BITS1_FBITFIELD_BIG ((unsigned int) 0x80) -#define TIR_BITS1_FBITFIELD_LITTLE ((unsigned int) 0x01) - -#define TIR_BITS1_CONTINUED_BIG ((unsigned int) 0x40) -#define TIR_BITS1_CONTINUED_LITTLE ((unsigned int) 0x02) - -#define TIR_BITS1_BT_BIG ((unsigned int) 0x3F) -#define TIR_BITS1_BT_SH_BIG 0 -#define TIR_BITS1_BT_LITTLE ((unsigned int) 0xFC) -#define TIR_BITS1_BT_SH_LITTLE 2 - -#define TIR_BITS_TQ4_BIG ((unsigned int) 0xF0) -#define TIR_BITS_TQ4_SH_BIG 4 -#define TIR_BITS_TQ5_BIG ((unsigned int) 0x0F) -#define TIR_BITS_TQ5_SH_BIG 0 -#define TIR_BITS_TQ4_LITTLE ((unsigned int) 0x0F) -#define TIR_BITS_TQ4_SH_LITTLE 0 -#define TIR_BITS_TQ5_LITTLE ((unsigned int) 0xF0) -#define TIR_BITS_TQ5_SH_LITTLE 4 - -#define TIR_BITS_TQ0_BIG ((unsigned int) 0xF0) -#define TIR_BITS_TQ0_SH_BIG 4 -#define TIR_BITS_TQ1_BIG ((unsigned int) 0x0F) -#define TIR_BITS_TQ1_SH_BIG 0 -#define TIR_BITS_TQ0_LITTLE ((unsigned int) 0x0F) -#define TIR_BITS_TQ0_SH_LITTLE 0 -#define TIR_BITS_TQ1_LITTLE ((unsigned int) 0xF0) -#define TIR_BITS_TQ1_SH_LITTLE 4 - -#define TIR_BITS_TQ2_BIG ((unsigned int) 0xF0) -#define TIR_BITS_TQ2_SH_BIG 4 -#define TIR_BITS_TQ3_BIG ((unsigned int) 0x0F) -#define TIR_BITS_TQ3_SH_BIG 0 -#define TIR_BITS_TQ2_LITTLE ((unsigned int) 0x0F) -#define TIR_BITS_TQ2_SH_LITTLE 0 -#define TIR_BITS_TQ3_LITTLE ((unsigned int) 0xF0) -#define TIR_BITS_TQ3_SH_LITTLE 4 - -/* Relative symbol external record */ - -struct rndx_ext { - unsigned char r_bits[4]; -}; - -#define RNDX_BITS0_RFD_SH_LEFT_BIG 4 -#define RNDX_BITS1_RFD_BIG ((unsigned int) 0xF0) -#define RNDX_BITS1_RFD_SH_BIG 4 - -#define RNDX_BITS0_RFD_SH_LEFT_LITTLE 0 -#define RNDX_BITS1_RFD_LITTLE ((unsigned int) 0x0F) -#define RNDX_BITS1_RFD_SH_LEFT_LITTLE 8 - -#define RNDX_BITS1_INDEX_BIG ((unsigned int) 0x0F) -#define RNDX_BITS1_INDEX_SH_LEFT_BIG 16 -#define RNDX_BITS2_INDEX_SH_LEFT_BIG 8 -#define RNDX_BITS3_INDEX_SH_LEFT_BIG 0 - -#define RNDX_BITS1_INDEX_LITTLE ((unsigned int) 0xF0) -#define RNDX_BITS1_INDEX_SH_LITTLE 4 -#define RNDX_BITS2_INDEX_SH_LEFT_LITTLE 4 -#define RNDX_BITS3_INDEX_SH_LEFT_LITTLE 12 - -/* Auxiliary symbol information external record */ - -union aux_ext { - struct tir_ext a_ti; - struct rndx_ext a_rndx; - unsigned char a_dnLow[4]; - unsigned char a_dnHigh[4]; - unsigned char a_isym[4]; - unsigned char a_iss[4]; - unsigned char a_width[4]; - unsigned char a_count[4]; -}; - -#define AUX_GET_ANY(bigend, ax, field) \ - ((bigend) ? bfd_getb32 ((ax)->field) : bfd_getl32 ((ax)->field)) - -#define AUX_GET_DNLOW(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_dnLow) -#define AUX_GET_DNHIGH(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_dnHigh) -#define AUX_GET_ISYM(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_isym) -#define AUX_GET_ISS(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_iss) -#define AUX_GET_WIDTH(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_width) -#define AUX_GET_COUNT(bigend, ax) AUX_GET_ANY ((bigend), (ax), a_count) - -#define AUX_PUT_ANY(bigend, val, ax, field) \ - ((bigend) \ - ? (bfd_putb32 ((bfd_vma) (val), (ax)->field), 0) \ - : (bfd_putl32 ((bfd_vma) (val), (ax)->field), 0)) - -#define AUX_PUT_DNLOW(bigend, val, ax) \ - AUX_PUT_ANY ((bigend), (val), (ax), a_dnLow) -#define AUX_PUT_DNHIGH(bigend, val, ax) \ - AUX_PUT_ANY ((bigend), (val), (ax), a_dnHigh) -#define AUX_PUT_ISYM(bigend, val, ax) \ - AUX_PUT_ANY ((bigend), (val), (ax), a_isym) -#define AUX_PUT_ISS(bigend, val, ax) \ - AUX_PUT_ANY ((bigend), (val), (ax), a_iss) -#define AUX_PUT_WIDTH(bigend, val, ax) \ - AUX_PUT_ANY ((bigend), (val), (ax), a_width) -#define AUX_PUT_COUNT(bigend, val, ax) \ - AUX_PUT_ANY ((bigend), (val), (ax), a_count) - -/********************** SYMBOLS **********************/ - -/* For efficiency, gdb deals directly with the unswapped symbolic - information (that way it only takes the time to swap information - that it really needs to read). gdb originally retrieved the - information directly from the BFD backend information, but that - strategy, besides being sort of ugly, does not work for MIPS ELF, - which also uses ECOFF debugging information. This structure holds - pointers to the (mostly) unswapped symbolic information. */ - -struct ecoff_debug_info -{ - /* The swapped ECOFF symbolic header. */ - HDRR symbolic_header; - - /* Pointers to the unswapped symbolic information. Note that the - pointers to external structures point to different sorts of - information on different ECOFF targets. The ecoff_debug_swap - structure provides the sizes of the structures and the functions - needed to swap the information in and out. These pointers are - all pointers to arrays, not single structures. They will be NULL - if there are no instances of the relevant structure. These - fields are also used by the assembler to output ECOFF debugging - information. */ - unsigned char *line; - void *external_dnr; /* struct dnr_ext */ - void *external_pdr; /* struct pdr_ext */ - void *external_sym; /* struct sym_ext */ - void *external_opt; /* struct opt_ext */ - union aux_ext *external_aux; - char *ss; - char *ssext; - void *external_fdr; /* struct fdr_ext */ - void *external_rfd; /* struct rfd_ext */ - void *external_ext; /* struct ext_ext */ - - /* These fields are used when linking. They may disappear at some - point. */ - char *ssext_end; - void *external_ext_end; - - /* When linking, this field holds a mapping from the input FDR - numbers to the output numbers, and is used when writing out the - external symbols. It is NULL if no mapping is required. */ - RFDT *ifdmap; - - /* The swapped FDR information. Currently this is never NULL, but - code using this structure should probably double-check in case - this changes in the future. This is a pointer to an array, not a - single structure. */ - FDR *fdr; -}; - -/* These structures are used by the ECOFF find_nearest_line function. */ - -struct ecoff_fdrtab_entry -{ - /* Base address in .text of this FDR. */ - bfd_vma base_addr; - FDR *fdr; -}; - -struct ecoff_find_line -{ - /* Allocated memory to hold function and file names. */ - char *find_buffer; - - /* FDR table, sorted by address: */ - long fdrtab_len; - struct ecoff_fdrtab_entry *fdrtab; - - /* Cache entry for most recently found line information. The sect - field is NULL if this cache does not contain valid information. */ - struct - { - asection *sect; - bfd_vma start; - bfd_vma stop; - const char *filename; - const char *functionname; - unsigned int line_num; - } cache; -}; - -/********************** SWAPPING **********************/ - -/* The generic ECOFF code needs to be able to swap debugging - information in and out in the specific format used by a particular - ECOFF implementation. This structure provides the information - needed to do this. */ - -struct ecoff_debug_swap -{ - /* Symbol table magic number. */ - int sym_magic; - /* Alignment of debugging information. E.g., 4. */ - bfd_size_type debug_align; - /* Sizes of external symbolic information. */ - bfd_size_type external_hdr_size; - bfd_size_type external_dnr_size; - bfd_size_type external_pdr_size; - bfd_size_type external_sym_size; - bfd_size_type external_opt_size; - bfd_size_type external_fdr_size; - bfd_size_type external_rfd_size; - bfd_size_type external_ext_size; - /* Functions to swap in external symbolic data. */ - void (*swap_hdr_in) (bfd *, void *, HDRR *); - void (*swap_dnr_in) (bfd *, void *, DNR *); - void (*swap_pdr_in) (bfd *, void *, PDR *); - void (*swap_sym_in) (bfd *, void *, SYMR *); - void (*swap_opt_in) (bfd *, void *, OPTR *); - void (*swap_fdr_in) (bfd *, void *, FDR *); - void (*swap_rfd_in) (bfd *, void *, RFDT *); - void (*swap_ext_in) (bfd *, void *, EXTR *); - void (*swap_tir_in) (int, const struct tir_ext *, TIR *); - void (*swap_rndx_in) (int, const struct rndx_ext *, RNDXR *); - /* Functions to swap out external symbolic data. */ - void (*swap_hdr_out) (bfd *, const HDRR *, void *); - void (*swap_dnr_out) (bfd *, const DNR *, void *); - void (*swap_pdr_out) (bfd *, const PDR *, void *); - void (*swap_sym_out) (bfd *, const SYMR *, void *); - void (*swap_opt_out) (bfd *, const OPTR *, void *); - void (*swap_fdr_out) (bfd *, const FDR *, void *); - void (*swap_rfd_out) (bfd *, const RFDT *, void *); - void (*swap_ext_out) (bfd *, const EXTR *, void *); - void (*swap_tir_out) (int, const TIR *, struct tir_ext *); - void (*swap_rndx_out) (int, const RNDXR *, struct rndx_ext *); - /* Function to read symbol data and set up pointers in - ecoff_debug_info structure. The section argument is used for - ELF, not straight ECOFF. */ - bfd_boolean (*read_debug_info) (bfd *, asection *, struct ecoff_debug_info *); -}; - -#endif /* ! defined (ECOFF_H) */ diff --git a/include/coff/external.h b/include/coff/external.h deleted file mode 100644 index 9e760bd86da..00000000000 --- a/include/coff/external.h +++ /dev/null @@ -1,254 +0,0 @@ -/* external.h -- External COFF structures - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef COFF_EXTERNAL_H -#define COFF_EXTERNAL_H - -#ifndef DO_NOT_DEFINE_FILHDR -/********************** FILE HEADER **********************/ - -struct external_filehdr - { - char f_magic[2]; /* magic number */ - char f_nscns[2]; /* number of sections */ - char f_timdat[4]; /* time & date stamp */ - char f_symptr[4]; /* file pointer to symtab */ - char f_nsyms[4]; /* number of symtab entries */ - char f_opthdr[2]; /* sizeof(optional hdr) */ - char f_flags[2]; /* flags */ - }; - -#define FILHDR struct external_filehdr -#define FILHSZ 20 -#endif - -#ifndef DO_NOT_DEFINE_AOUTHDR -/********************** AOUT "OPTIONAL HEADER" **********************/ - -typedef struct external_aouthdr - { - char magic[2]; /* type of file */ - char vstamp[2]; /* version stamp */ - char tsize[4]; /* text size in bytes, padded to FW bdry*/ - char dsize[4]; /* initialized data " " */ - char bsize[4]; /* uninitialized data " " */ - char entry[4]; /* entry pt. */ - char text_start[4]; /* base of text used for this file */ - char data_start[4]; /* base of data used for this file */ - } -AOUTHDR; - -#define AOUTHDRSZ 28 -#define AOUTSZ 28 -#endif - -#ifndef DO_NOT_DEFINE_SCNHDR -/********************** SECTION HEADER **********************/ - -struct external_scnhdr - { - char s_name[8]; /* section name */ - char s_paddr[4]; /* physical address, aliased s_nlib */ - char s_vaddr[4]; /* virtual address */ - char s_size[4]; /* section size */ - char s_scnptr[4]; /* file ptr to raw data for section */ - char s_relptr[4]; /* file ptr to relocation */ - char s_lnnoptr[4]; /* file ptr to line numbers */ - char s_nreloc[2]; /* number of relocation entries */ - char s_nlnno[2]; /* number of line number entries */ - char s_flags[4]; /* flags */ - }; - -#define SCNHDR struct external_scnhdr -#define SCNHSZ 40 - -/* Names of "special" sections. */ - -#define _TEXT ".text" -#define _DATA ".data" -#define _BSS ".bss" -#define _COMMENT ".comment" -#define _LIB ".lib" -#endif /* not DO_NOT_DEFINE_SCNHDR */ - -#ifndef DO_NOT_DEFINE_LINENO - -/********************** LINE NUMBERS **********************/ - -#ifndef L_LNNO_SIZE -#error L_LNNO_SIZE needs to be defined -#endif - -/* 1 line number entry for every "breakpointable" source line in a section. - Line numbers are grouped on a per function basis; first entry in a function - grouping will have l_lnno = 0 and in place of physical address will be the - symbol table index of the function name. */ -struct external_lineno -{ - union - { - char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/ - char l_paddr[4]; /* (physical) address of line number */ - } l_addr; - - char l_lnno[L_LNNO_SIZE]; /* line number */ -}; - -#define LINENO struct external_lineno -#define LINESZ (4 + L_LNNO_SIZE) - -#if L_LNNO_SIZE == 4 -#define GET_LINENO_LNNO(abfd, ext) H_GET_32 (abfd, (ext->l_lnno)) -#define PUT_LINENO_LNNO(abfd, val, ext) H_PUT_32 (abfd, val, (ext->l_lnno)) -#endif -#if L_LNNO_SIZE == 2 -#define GET_LINENO_LNNO(abfd, ext) H_GET_16 (abfd, (ext->l_lnno)) -#define PUT_LINENO_LNNO(abfd, val, ext) H_PUT_16 (abfd, val, (ext->l_lnno)) -#endif - -#endif /* not DO_NOT_DEFINE_LINENO */ - -#ifndef DO_NOT_DEFINE_SYMENT -/********************** SYMBOLS **********************/ - -#define E_SYMNMLEN 8 /* # characters in a symbol name */ -#ifndef E_FILNMLEN -#define E_FILNMLEN 14 -#endif -#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */ - -struct external_syment -{ - union - { - char e_name[E_SYMNMLEN]; - - struct - { - char e_zeroes[4]; - char e_offset[4]; - } e; - } e; - - char e_value[4]; - char e_scnum[2]; - char e_type[2]; - char e_sclass[1]; - char e_numaux[1]; -}; - -#define SYMENT struct external_syment -#define SYMESZ 18 - -#ifndef N_BTMASK -#define N_BTMASK 0xf -#endif - -#ifndef N_TMASK -#define N_TMASK 0x30 -#endif - -#ifndef N_BTSHFT -#define N_BTSHFT 4 -#endif - -#ifndef N_TSHIFT -#define N_TSHIFT 2 -#endif - -#endif /* not DO_NOT_DEFINE_SYMENT */ - -#ifndef DO_NOT_DEFINE_AUXENT - -union external_auxent -{ - struct - { - char x_tagndx[4]; /* str, un, or enum tag indx */ - - union - { - struct - { - char x_lnno[2]; /* declaration line number */ - char x_size[2]; /* str/union/array size */ - } x_lnsz; - - char x_fsize[4]; /* size of function */ - - } x_misc; - - union - { - struct /* if ISFCN, tag, or .bb */ - { - char x_lnnoptr[4]; /* ptr to fcn line # */ - char x_endndx[4]; /* entry ndx past block end */ - } x_fcn; - - struct /* if ISARY, up to 4 dimen. */ - { - char x_dimen[E_DIMNUM][2]; - } x_ary; - - } x_fcnary; - - char x_tvndx[2]; /* tv index */ - - } x_sym; - - union - { - char x_fname[E_FILNMLEN]; - - struct - { - char x_zeroes[4]; - char x_offset[4]; - } x_n; - - } x_file; - - struct - { - char x_scnlen[4]; /* section length */ - char x_nreloc[2]; /* # relocation entries */ - char x_nlinno[2]; /* # line numbers */ -#ifdef INCLUDE_COMDAT_FIELDS_IN_AUXENT - char x_checksum[4]; /* section COMDAT checksum */ - char x_associated[2]; /* COMDAT associated section index */ - char x_comdat[1]; /* COMDAT selection number */ -#endif - } x_scn; - - struct - { - char x_tvfill[4]; /* tv fill value */ - char x_tvlen[2]; /* length of .tv */ - char x_tvran[2][2]; /* tv range */ - } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ -}; - -#define AUXENT union external_auxent -#define AUXESZ 18 - -#define _ETEXT "etext" - -#endif /* not DO_NOT_DEFINE_AUXENT */ - -#endif /* COFF_EXTERNAL_H */ diff --git a/include/coff/go32exe.h b/include/coff/go32exe.h deleted file mode 100644 index c85da0cc393..00000000000 --- a/include/coff/go32exe.h +++ /dev/null @@ -1,37 +0,0 @@ -/* COFF information for PC running go32. - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define STUBSIZE 2048 - -struct external_filehdr_go32_exe - { - char stub[STUBSIZE];/* the stub to load the image */ - /* the standard COFF header */ - char f_magic[2]; /* magic number */ - char f_nscns[2]; /* number of sections */ - char f_timdat[4]; /* time & date stamp */ - char f_symptr[4]; /* file pointer to symtab */ - char f_nsyms[4]; /* number of symtab entries */ - char f_opthdr[2]; /* sizeof(optional hdr) */ - char f_flags[2]; /* flags */ - }; - -#undef FILHDR -#define FILHDR struct external_filehdr_go32_exe -#undef FILHSZ -#define FILHSZ STUBSIZE+20 diff --git a/include/coff/h8300.h b/include/coff/h8300.h deleted file mode 100644 index 93be6ef26aa..00000000000 --- a/include/coff/h8300.h +++ /dev/null @@ -1,54 +0,0 @@ -/* coff information for Renesas H8/300 and H8/300-H - - Copyright 2001, 2003 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define L_LNNO_SIZE 4 -#include "coff/external.h" - -#define H8300MAGIC 0x8300 -#define H8300HMAGIC 0x8301 -#define H8300SMAGIC 0x8302 -#define H8300HNMAGIC 0x8303 -#define H8300SNMAGIC 0x8304 - -#define H8300BADMAG(x) (((x).f_magic != H8300MAGIC)) -#define H8300HBADMAG(x) (((x).f_magic != H8300HMAGIC)) -#define H8300SBADMAG(x) (((x).f_magic != H8300SMAGIC)) -#define H8300HNBADMAG(x) (((x).f_magic != H8300HNMAGIC)) -#define H8300SNBADMAG(x) (((x).f_magic != H8300SNMAGIC)) - -/* Relocation directives. */ - -/* The external reloc has an offset field, because some of the reloc - types on the h8 don't have room in the instruction for the entire - offset - eg the strange jump and high page addressing modes. */ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_offset[4]; - char r_type[2]; - char r_stuff[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 16 - - - - diff --git a/include/coff/h8500.h b/include/coff/h8500.h deleted file mode 100644 index 8d4e4114245..00000000000 --- a/include/coff/h8500.h +++ /dev/null @@ -1,46 +0,0 @@ -/* coff information for Renesas H8/500 - - Copyright 2001, 2003 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define L_LNNO_SIZE 4 -#include "coff/external.h" - -#define H8500MAGIC 0x8500 - -#define H8500BADMAG(x) ((0xffff && ((x).f_magic) != H8500MAGIC)) - -/********************** RELOCATION DIRECTIVES **********************/ - -/* The external reloc has an offset field, because some of the reloc - types on the h8 don't have room in the instruction for the entire - offset - eg the strange jump and high page addressing modes. */ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_offset[4]; - char r_type[2]; - char r_stuff[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 16 - - - - diff --git a/include/coff/i386.h b/include/coff/i386.h deleted file mode 100644 index 023b30293ac..00000000000 --- a/include/coff/i386.h +++ /dev/null @@ -1,71 +0,0 @@ -/* coff information for Intel 386/486. - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define L_LNNO_SIZE 2 -#define INCLUDE_COMDAT_FIELDS_IN_AUXENT -#include "coff/external.h" - -/* Bits for f_flags: - F_RELFLG relocation info stripped from file - F_EXEC file is executable (no unresolved external references) - F_LNNO line numbers stripped from file - F_LSYMS local symbols stripped from file - F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax). */ - -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_LSYMS (0x0008) - -#define I386MAGIC 0x14c -#define I386PTXMAGIC 0x154 -#define I386AIXMAGIC 0x175 - -/* This is Lynx's all-platform magic number for executables. */ - -#define LYNXCOFFMAGIC 0415 - -#define I386BADMAG(x) ( ((x).f_magic != I386MAGIC) \ - && (x).f_magic != I386AIXMAGIC \ - && (x).f_magic != I386PTXMAGIC \ - && (x).f_magic != LYNXCOFFMAGIC) - -#define OMAGIC 0404 /* object files, eg as output */ -#define ZMAGIC 0413 /* demand load format, eg normal ld output */ -#define STMAGIC 0401 /* target shlib */ -#define SHMAGIC 0443 /* host shlib */ - -/* define some NT default values */ -/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */ -#define NT_SECTION_ALIGNMENT 0x1000 -#define NT_FILE_ALIGNMENT 0x200 -#define NT_DEF_RESERVE 0x100000 -#define NT_DEF_COMMIT 0x1000 - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 10 - diff --git a/include/coff/i860.h b/include/coff/i860.h deleted file mode 100644 index 6e8d1b461bb..00000000000 --- a/include/coff/i860.h +++ /dev/null @@ -1,86 +0,0 @@ -/* COFF information for the Intel i860. - - Copyright 2001, 2003 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file was hacked from i386.h [dolan@ssd.intel.com] */ - -#define L_LNNO_SIZE 2 -#include "coff/external.h" - -/* Bits for f_flags: - F_RELFLG relocation info stripped from file - F_EXEC file is executable (no unresolved external references) - F_LNNO line numbers stripped from file - F_LSYMS local symbols stripped from file - F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax). */ - -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_LSYMS (0x0008) - -#define I860MAGIC 0x14d - -#define I860BADMAG(x) ((x).f_magic != I860MAGIC) - -#undef AOUTSZ -#define AOUTSZ 36 - -/* FIXME: What are the a.out magic numbers? */ - -#define _ETEXT "etext" - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 10 - -/* The relocation directory entry types. - PAIR : The low half that follows relates to the preceeding HIGH[ADJ]. - HIGH : The high half of a 32-bit constant. - LOWn : The low half, insn bits 15..(n-1), 2^n-byte aligned. - SPLITn : The low half, insn bits 20..16 and 10..(n-1), 2^n-byte aligned. - HIGHADJ: Similar to HIGH, but with adjustment. - BRADDR : 26-bit branch displacement. - - Note: The Intel assembler manual lists LOW4 as one of the - relocation types, but it appears to be useless for the i860. - We will recognize it anyway, just in case it actually appears in - any object files. */ - -enum { - COFF860_R_PAIR = 0x1c, - COFF860_R_HIGH = 0x1e, - COFF860_R_LOW0 = 0x1f, - COFF860_R_LOW1 = 0x20, - COFF860_R_LOW2 = 0x21, - COFF860_R_LOW3 = 0x22, - COFF860_R_LOW4 = 0x23, - COFF860_R_SPLIT0 = 0x24, - COFF860_R_SPLIT1 = 0x25, - COFF860_R_SPLIT2 = 0x26, - COFF860_R_HIGHADJ = 0x27, - COFF860_R_BRADDR = 0x28 -}; - diff --git a/include/coff/i960.h b/include/coff/i960.h deleted file mode 100644 index b5ff6a5f89d..00000000000 --- a/include/coff/i960.h +++ /dev/null @@ -1,319 +0,0 @@ -/* coff information for 80960. Origins: Intel corp, natch. - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* NOTE: Tagentries (cf TAGBITS) are no longer used by the 960 */ - -/********************** FILE HEADER **********************/ - -struct external_filehdr -{ - char f_magic[2]; /* magic number */ - char f_nscns[2]; /* number of sections */ - char f_timdat[4]; /* time & date stamp */ - char f_symptr[4]; /* file pointer to symtab */ - char f_nsyms[4]; /* number of symtab entries */ - char f_opthdr[2]; /* sizeof(optional hdr) */ - char f_flags[2]; /* flags */ -}; - -#define OMAGIC (0407) /* old impure format. data immediately - follows text. both sections are rw. */ -#define NMAGIC (0410) /* split i&d, read-only text */ - -/* -* Intel 80960 (I960) processor flags. -* F_I960TYPE == mask for processor type field. -*/ - -#define F_I960TYPE (0xf000) -#define F_I960CORE (0x1000) -#define F_I960KB (0x2000) -#define F_I960SB (0x2000) -#define F_I960MC (0x3000) -#define F_I960XA (0x4000) -#define F_I960CA (0x5000) -#define F_I960KA (0x6000) -#define F_I960SA (0x6000) -#define F_I960JX (0x7000) -#define F_I960HX (0x8000) - - -/** i80960 Magic Numbers -*/ - -#define I960ROMAGIC (0x160) /* read-only text segments */ -#define I960RWMAGIC (0x161) /* read-write text segments */ - -#define I960BADMAG(x) (((x).f_magic!=I960ROMAGIC) && ((x).f_magic!=I960RWMAGIC)) - -#define FILHDR struct external_filehdr -#define FILHSZ 20 - -/********************** AOUT "OPTIONAL HEADER" **********************/ - -typedef struct -{ - unsigned long phys_addr; - unsigned long bitarray; -} TAGBITS; - -typedef struct -{ - char magic[2]; /* type of file */ - char vstamp[2]; /* version stamp */ - char tsize[4]; /* text size in bytes, padded to FW bdry*/ - char dsize[4]; /* initialized data " " */ - char bsize[4]; /* uninitialized data " " */ - char entry[4]; /* entry pt. */ - char text_start[4]; /* base of text used for this file */ - char data_start[4]; /* base of data used for this file */ - char tagentries[4]; /* number of tag entries to follow */ -} -AOUTHDR; - -/* return a pointer to the tag bits array */ - -#define TAGPTR(aout) ((TAGBITS *) (&(aout.tagentries)+1)) - -/* compute size of a header */ - -/*#define AOUTSZ(aout) (sizeof(AOUTHDR)+(aout.tagentries*sizeof(TAGBITS)))*/ -#define AOUTSZ 32 -#define AOUTHDRSZ 32 - - -/********************** SECTION HEADER **********************/ - -struct external_scnhdr -{ - char s_name[8]; /* section name */ - char s_paddr[4]; /* physical address, aliased s_nlib */ - char s_vaddr[4]; /* virtual address */ - char s_size[4]; /* section size */ - char s_scnptr[4]; /* file ptr to raw data for section */ - char s_relptr[4]; /* file ptr to relocation */ - char s_lnnoptr[4]; /* file ptr to line numbers */ - char s_nreloc[2]; /* number of relocation entries */ - char s_nlnno[2]; /* number of line number entries*/ - char s_flags[4]; /* flags */ - char s_align[4]; /* section alignment */ -}; - - -#define SCNHDR struct external_scnhdr -#define SCNHSZ 44 - -/* - * names of "special" sections - */ -#define _TEXT ".text" -#define _DATA ".data" -#define _BSS ".bss" - -/********************** LINE NUMBERS **********************/ - -/* 1 line number entry for every "breakpointable" source line in a section. - * Line numbers are grouped on a per function basis; first entry in a function - * grouping will have l_lnno = 0 and in place of physical address will be the - * symbol table index of the function name. - */ -struct external_lineno -{ - union - { - char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/ - char l_paddr[4]; /* (physical) address of line number */ - } l_addr; - - char l_lnno[2]; /* line number */ - char padding[2]; /* force alignment */ -}; - - -#define LINENO struct external_lineno -#define LINESZ 8 - -/********************** SYMBOLS **********************/ - -#define E_SYMNMLEN 8 /* # characters in a symbol name */ -#define E_FILNMLEN 14 /* # characters in a file name */ -#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */ - -struct external_syment -{ - union - { - char e_name[E_SYMNMLEN]; - - struct - { - char e_zeroes[4]; - char e_offset[4]; - } e; - } e; - - char e_value[4]; - char e_scnum[2]; - char e_flags[2]; - char e_type[4]; - char e_sclass[1]; - char e_numaux[1]; - char pad2[2]; -}; - -#define N_BTMASK (0x1f) -#define N_TMASK (0x60) -#define N_BTSHFT (5) -#define N_TSHIFT (2) - -union external_auxent -{ - struct - { - char x_tagndx[4]; /* str, un, or enum tag indx */ - - union - { - struct - { - char x_lnno[2]; /* declaration line number */ - char x_size[2]; /* str/union/array size */ - } x_lnsz; - - char x_fsize[4]; /* size of function */ - - } x_misc; - - union - { - struct /* if ISFCN, tag, or .bb */ - { - char x_lnnoptr[4]; /* ptr to fcn line # */ - char x_endndx[4]; /* entry ndx past block end */ - } x_fcn; - - struct /* if ISARY, up to 4 dimen. */ - { - char x_dimen[E_DIMNUM][2]; - } x_ary; - - } x_fcnary; - - char x_tvndx[2]; /* tv index */ - - } x_sym; - - union - { - char x_fname[E_FILNMLEN]; - - struct - { - char x_zeroes[4]; - char x_offset[4]; - } x_n; - - } x_file; - - struct - { - char x_scnlen[4]; /* section length */ - char x_nreloc[2]; /* # relocation entries */ - char x_nlinno[2]; /* # line numbers */ - - } x_scn; - - struct - { - char x_tvfill[4]; /* tv fill value */ - char x_tvlen[2]; /* length of .tv */ - char x_tvran[2][2]; /* tv range */ - - } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ - - /****************************************** - * I960-specific *2nd* aux. entry formats - ******************************************/ - struct - { - /* This is a very old typo that keeps getting propagated. */ -#define x_stdindx x_stindx - char x_stindx[4]; /* sys. table entry */ - } x_sc; /* system call entry */ - - struct - { - char x_balntry[4]; /* BAL entry point */ - } x_bal; /* BAL-callable function */ - - struct - { - char x_timestamp[4]; /* time stamp */ - char x_idstring[20]; /* producer identity string */ - - } x_ident; /* Producer ident info */ -}; - -#define SYMENT struct external_syment -#define SYMESZ 24 -#define AUXENT union external_auxent -#define AUXESZ 24 - -# define _ETEXT "_etext" - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; - char pad[2]; -}; - -/* r_type values for the i960. */ - -/* The i960 uses R_RELLONG, which is defined in internal.h as 0x11. - It is an absolute 32 bit relocation. */ - -#define R_IPRMED (0x19) /* 24-bit ip-relative relocation */ -#define R_OPTCALL (0x1b) /* 32-bit optimizable call (leafproc/sysproc) */ -#define R_OPTCALLX (0x1c) /* 64-bit optimizable call (leafproc/sysproc) */ - -/* The following relocation types are defined use by relaxing linkers, - which convert 32 bit calls (which require a 64 bit instruction) - into 24 bit calls (which require a 32 bit instruction) when - possible. It will be possible whenever the target of the call is - within a 24 bit range of the call instruction. - - It is always safe to ignore these relocations. They only serve to - mark points which the relaxing linker will have to consider. The - assembler must ensure that the correct code is generated even if - the relocations are ignored. In particular, this means that the - R_IPR13 relocation may not appear with an external symbol. */ - -#define R_IPR13 (0x1d) /* 13 bit ip-relative branch */ -#define R_ALIGN (0x1e) /* alignment marker. This has no - associated symbol. Instead, the - r_symndx field indicates the - require alignment at this point in - the file. It must be a power of 2. */ - -#define RELOC struct external_reloc -#define RELSZ 12 - diff --git a/include/coff/ia64.h b/include/coff/ia64.h deleted file mode 100644 index dd04f62c659..00000000000 --- a/include/coff/ia64.h +++ /dev/null @@ -1,88 +0,0 @@ -/* coff information for HP/Intel IA-64. - - Copyright 2000 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define DO_NOT_DEFINE_AOUTHDR -#define L_LNNO_SIZE 2 -#define INCLUDE_COMDAT_FIELDS_IN_AUXENT -#include "coff/external.h" - -#define IA64MAGIC 0x200 - -#define IA64BADMAG(x) (((x).f_magic != IA64MAGIC)) - -/* Bits for f_flags: - * F_RELFLG relocation info stripped from file - * F_EXEC file is executable (no unresolved external references) - * F_LNNO line numbers stripped from file - * F_LSYMS local symbols stripped from file - * F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax) - */ - -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_LSYMS (0x0008) - -/********************** AOUT "OPTIONAL HEADER" **********************/ -typedef struct -{ - char magic[2]; /* type of file */ - char vstamp[2]; /* version stamp */ - char tsize[4]; /* text size in bytes, padded to FW bdry*/ - char dsize[4]; /* initialized data " " */ - char bsize[4]; /* uninitialized data " " */ - char entry[4]; /* entry pt. */ - char text_start[4]; /* base of text used for this file */ -#ifndef BFD64 - char data_start[4]; /* base of data used for this file */ -#endif -} -AOUTHDR; - -#define PE32MAGIC 0x10b /* 32-bit image */ -#define PE32PMAGIC 0x20b /* 32-bit image inside 64-bit address space */ - -#define PE32PBADMAG(x) (((x).f_magic != PE32PMAGIC)) - -#define AOUTSZ 108 -#define AOUTHDRSZ 108 - -#define OMAGIC 0404 /* object files, eg as output */ -#define ZMAGIC 0413 /* demand load format, eg normal ld output */ -#define STMAGIC 0401 /* target shlib */ -#define SHMAGIC 0443 /* host shlib */ - -/* define some NT default values */ -/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */ -#define NT_SECTION_ALIGNMENT 0x1000 -#define NT_FILE_ALIGNMENT 0x200 -#define NT_DEF_RESERVE 0x100000 -#define NT_DEF_COMMIT 0x1000 - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 10 - diff --git a/include/coff/internal.h b/include/coff/internal.h deleted file mode 100644 index ed0918a6aea..00000000000 --- a/include/coff/internal.h +++ /dev/null @@ -1,752 +0,0 @@ -/* Internal format of COFF object file data structures, for GNU BFD. - This file is part of BFD, the Binary File Descriptor library. - - Copyright 1999, 2000, 2001, 2002, 2003, 2004. 2005 - Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef GNU_COFF_INTERNAL_H -#define GNU_COFF_INTERNAL_H 1 - -/* First, make "signed char" work, even on old compilers. */ -#ifndef signed -#ifndef __STDC__ -#define signed /**/ -#endif -#endif - -/********************** FILE HEADER **********************/ - -/* extra stuff in a PE header. */ - -struct internal_extra_pe_filehdr -{ - /* DOS header data follows for PE stuff */ - unsigned short e_magic; /* Magic number, 0x5a4d */ - unsigned short e_cblp; /* Bytes on last page of file, 0x90 */ - unsigned short e_cp; /* Pages in file, 0x3 */ - unsigned short e_crlc; /* Relocations, 0x0 */ - unsigned short e_cparhdr; /* Size of header in paragraphs, 0x4 */ - unsigned short e_minalloc; /* Minimum extra paragraphs needed, 0x0 */ - unsigned short e_maxalloc; /* Maximum extra paragraphs needed, 0xFFFF */ - unsigned short e_ss; /* Initial (relative) SS value, 0x0 */ - unsigned short e_sp; /* Initial SP value, 0xb8 */ - unsigned short e_csum; /* Checksum, 0x0 */ - unsigned short e_ip; /* Initial IP value, 0x0 */ - unsigned short e_cs; /* Initial (relative) CS value, 0x0 */ - unsigned short e_lfarlc; /* File address of relocation table, 0x40 */ - unsigned short e_ovno; /* Overlay number, 0x0 */ - unsigned short e_res[4]; /* Reserved words, all 0x0 */ - unsigned short e_oemid; /* OEM identifier (for e_oeminfo), 0x0 */ - unsigned short e_oeminfo; /* OEM information; e_oemid specific, 0x0 */ - unsigned short e_res2[10]; /* Reserved words, all 0x0 */ - bfd_vma e_lfanew; /* File address of new exe header, 0x80 */ - unsigned long dos_message[16]; /* text which always follows dos header */ - bfd_vma nt_signature; /* required NT signature, 0x4550 */ -}; - -struct internal_filehdr -{ - struct internal_extra_pe_filehdr pe; - - /* Standard coff internal info. */ - unsigned short f_magic; /* magic number */ - unsigned short f_nscns; /* number of sections */ - long f_timdat; /* time & date stamp */ - bfd_vma f_symptr; /* file pointer to symtab */ - long f_nsyms; /* number of symtab entries */ - unsigned short f_opthdr; /* sizeof(optional hdr) */ - unsigned short f_flags; /* flags */ - unsigned short f_target_id; /* (TI COFF specific) */ -}; - - -/* Bits for f_flags: - F_RELFLG relocation info stripped from file - F_EXEC file is executable (no unresolved external references) - F_LNNO line numbers stripped from file - F_LSYMS local symbols stripped from file - F_AR16WR file is 16-bit little-endian - F_AR32WR file is 32-bit little-endian - F_AR32W file is 32-bit big-endian - F_DYNLOAD rs/6000 aix: dynamically loadable w/imports & exports - F_SHROBJ rs/6000 aix: file is a shared object - F_DLL PE format DLL. */ - -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_LSYMS (0x0008) -#define F_AR16WR (0x0080) -#define F_AR32WR (0x0100) -#define F_AR32W (0x0200) -#define F_DYNLOAD (0x1000) -#define F_SHROBJ (0x2000) -#define F_DLL (0x2000) - -/* Extra structure which is used in the optional header. */ -typedef struct _IMAGE_DATA_DIRECTORY -{ - bfd_vma VirtualAddress; - long Size; -} IMAGE_DATA_DIRECTORY; -#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 - -/* Default image base for NT. */ -#define NT_EXE_IMAGE_BASE 0x400000 -#define NT_DLL_IMAGE_BASE 0x10000000 - -/* Default image base for BeOS. */ -#define BEOS_EXE_IMAGE_BASE 0x80000000 -#define BEOS_DLL_IMAGE_BASE 0x10000000 - -/* Extra stuff in a PE aouthdr */ - -#define PE_DEF_SECTION_ALIGNMENT 0x1000 -#ifndef PE_DEF_FILE_ALIGNMENT -# define PE_DEF_FILE_ALIGNMENT 0x200 -#endif - -struct internal_extra_pe_aouthdr -{ - /* PE stuff */ - bfd_vma ImageBase; /* address of specific location in memory that - file is located, NT default 0x10000 */ - - bfd_vma SectionAlignment; /* section alignment default 0x1000 */ - bfd_vma FileAlignment; /* file alignment default 0x200 */ - short MajorOperatingSystemVersion; /* minimum version of the operating */ - short MinorOperatingSystemVersion; /* system req'd for exe, default to 1*/ - short MajorImageVersion; /* user defineable field to store version of */ - short MinorImageVersion; /* exe or dll being created, default to 0 */ - short MajorSubsystemVersion; /* minimum subsystem version required to */ - short MinorSubsystemVersion; /* run exe; default to 3.1 */ - long Reserved1; /* seems to be 0 */ - long SizeOfImage; /* size of memory to allocate for prog */ - long SizeOfHeaders; /* size of PE header and section table */ - long CheckSum; /* set to 0 */ - short Subsystem; - - /* type of subsystem exe uses for user interface, - possible values: - 1 - NATIVE Doesn't require a subsystem - 2 - WINDOWS_GUI runs in Windows GUI subsystem - 3 - WINDOWS_CUI runs in Windows char sub. (console app) - 5 - OS2_CUI runs in OS/2 character subsystem - 7 - POSIX_CUI runs in Posix character subsystem */ - short DllCharacteristics; /* flags for DLL init, use 0 */ - bfd_vma SizeOfStackReserve; /* amount of memory to reserve */ - bfd_vma SizeOfStackCommit; /* amount of memory initially committed for - initial thread's stack, default is 0x1000 */ - bfd_vma SizeOfHeapReserve; /* amount of virtual memory to reserve and */ - bfd_vma SizeOfHeapCommit; /* commit, don't know what to defaut it to */ - long LoaderFlags; /* can probably set to 0 */ - long NumberOfRvaAndSizes; /* number of entries in next entry, 16 */ - IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; -}; - -/********************** AOUT "OPTIONAL HEADER" **********************/ -struct internal_aouthdr -{ - short magic; /* type of file */ - short vstamp; /* version stamp */ - bfd_vma tsize; /* text size in bytes, padded to FW bdry*/ - bfd_vma dsize; /* initialized data " " */ - bfd_vma bsize; /* uninitialized data " " */ - bfd_vma entry; /* entry pt. */ - bfd_vma text_start; /* base of text used for this file */ - bfd_vma data_start; /* base of data used for this file */ - - /* i960 stuff */ - unsigned long tagentries; /* number of tag entries to follow */ - - /* RS/6000 stuff */ - bfd_vma o_toc; /* address of TOC */ - short o_snentry; /* section number for entry point */ - short o_sntext; /* section number for text */ - short o_sndata; /* section number for data */ - short o_sntoc; /* section number for toc */ - short o_snloader; /* section number for loader section */ - short o_snbss; /* section number for bss */ - short o_algntext; /* max alignment for text */ - short o_algndata; /* max alignment for data */ - short o_modtype; /* Module type field, 1R,RE,RO */ - short o_cputype; /* Encoded CPU type */ - bfd_vma o_maxstack; /* max stack size allowed. */ - bfd_vma o_maxdata; /* max data size allowed. */ - - /* ECOFF stuff */ - bfd_vma bss_start; /* Base of bss section. */ - bfd_vma gp_value; /* GP register value. */ - unsigned long gprmask; /* General registers used. */ - unsigned long cprmask[4]; /* Coprocessor registers used. */ - unsigned long fprmask; /* Floating pointer registers used. */ - - /* Apollo stuff */ - long o_inlib; /* inlib data */ - long o_sri; /* Static Resource Information */ - long vid[2]; /* Version id */ - - struct internal_extra_pe_aouthdr pe; -}; - -/********************** STORAGE CLASSES **********************/ - -/* This used to be defined as -1, but now n_sclass is unsigned. */ -#define C_EFCN 0xff /* physical end of function */ -#define C_NULL 0 -#define C_AUTO 1 /* automatic variable */ -#define C_EXT 2 /* external symbol */ -#define C_STAT 3 /* static */ -#define C_REG 4 /* register variable */ -#define C_EXTDEF 5 /* external definition */ -#define C_LABEL 6 /* label */ -#define C_ULABEL 7 /* undefined label */ -#define C_MOS 8 /* member of structure */ -#define C_ARG 9 /* function argument */ -#define C_STRTAG 10 /* structure tag */ -#define C_MOU 11 /* member of union */ -#define C_UNTAG 12 /* union tag */ -#define C_TPDEF 13 /* type definition */ -#define C_USTATIC 14 /* undefined static */ -#define C_ENTAG 15 /* enumeration tag */ -#define C_MOE 16 /* member of enumeration */ -#define C_REGPARM 17 /* register parameter */ -#define C_FIELD 18 /* bit field */ -#define C_AUTOARG 19 /* auto argument */ -#define C_LASTENT 20 /* dummy entry (end of block) */ -#define C_BLOCK 100 /* ".bb" or ".eb" */ -#define C_FCN 101 /* ".bf" or ".ef" */ -#define C_EOS 102 /* end of structure */ -#define C_FILE 103 /* file name */ -#define C_LINE 104 /* line # reformatted as symbol table entry */ -#define C_ALIAS 105 /* duplicate tag */ -#define C_HIDDEN 106 /* ext symbol in dmert public lib */ - -#if defined _AIX52 || defined AIX_WEAK_SUPPORT -#define C_WEAKEXT 111 /* weak symbol -- AIX standard. */ -#else -#define C_WEAKEXT 127 /* weak symbol -- GNU extension. */ -#endif - -/* New storage classes for TI COFF */ -#define C_UEXT 19 /* Tentative external definition */ -#define C_STATLAB 20 /* Static load time label */ -#define C_EXTLAB 21 /* External load time label */ -#define C_SYSTEM 23 /* System Wide variable */ - -/* New storage classes for WINDOWS_NT */ -#define C_SECTION 104 /* section name */ -#define C_NT_WEAK 105 /* weak external */ - - /* New storage classes for 80960 */ - -/* C_LEAFPROC is obsolete. Use C_LEAFEXT or C_LEAFSTAT */ -#define C_LEAFPROC 108 /* Leaf procedure, "call" via BAL */ - -#define C_SCALL 107 /* Procedure reachable via system call */ -#define C_LEAFEXT 108 /* External leaf */ -#define C_LEAFSTAT 113 /* Static leaf */ -#define C_OPTVAR 109 /* Optimized variable */ -#define C_DEFINE 110 /* Preprocessor #define */ -#define C_PRAGMA 111 /* Advice to compiler or linker */ -#define C_SEGMENT 112 /* 80960 segment name */ - - /* Storage classes for m88k */ -#define C_SHADOW 107 /* shadow symbol */ -#define C_VERSION 108 /* coff version symbol */ - - /* New storage classes for RS/6000 */ -#define C_HIDEXT 107 /* Un-named external symbol */ -#define C_BINCL 108 /* Marks beginning of include file */ -#define C_EINCL 109 /* Marks ending of include file */ - - /* storage classes for stab symbols for RS/6000 */ -#define C_GSYM (0x80) -#define C_LSYM (0x81) -#define C_PSYM (0x82) -#define C_RSYM (0x83) -#define C_RPSYM (0x84) -#define C_STSYM (0x85) -#define C_TCSYM (0x86) -#define C_BCOMM (0x87) -#define C_ECOML (0x88) -#define C_ECOMM (0x89) -#define C_DECL (0x8c) -#define C_ENTRY (0x8d) -#define C_FUN (0x8e) -#define C_BSTAT (0x8f) -#define C_ESTAT (0x90) - -/* Storage classes for Thumb symbols */ -#define C_THUMBEXT (128 + C_EXT) /* 130 */ -#define C_THUMBSTAT (128 + C_STAT) /* 131 */ -#define C_THUMBLABEL (128 + C_LABEL) /* 134 */ -#define C_THUMBEXTFUNC (C_THUMBEXT + 20) /* 150 */ -#define C_THUMBSTATFUNC (C_THUMBSTAT + 20) /* 151 */ - -/********************** SECTION HEADER **********************/ - -#define SCNNMLEN (8) - -struct internal_scnhdr -{ - char s_name[SCNNMLEN]; /* section name */ - - /* Physical address, aliased s_nlib. - In the pei format, this field is the virtual section size - (the size of the section after being loaded int memory), - NOT the physical address. */ - bfd_vma s_paddr; - - bfd_vma s_vaddr; /* virtual address */ - bfd_vma s_size; /* section size */ - bfd_vma s_scnptr; /* file ptr to raw data for section */ - bfd_vma s_relptr; /* file ptr to relocation */ - bfd_vma s_lnnoptr; /* file ptr to line numbers */ - unsigned long s_nreloc; /* number of relocation entries */ - unsigned long s_nlnno; /* number of line number entries*/ - long s_flags; /* flags */ - long s_align; /* used on I960 */ - unsigned char s_page; /* TI COFF load page */ -}; - -/* s_flags "type". */ -#define STYP_REG (0x0000) /* "regular": allocated, relocated, loaded */ -#define STYP_DSECT (0x0001) /* "dummy": relocated only*/ -#define STYP_NOLOAD (0x0002) /* "noload": allocated, relocated, not loaded */ -#define STYP_GROUP (0x0004) /* "grouped": formed of input sections */ -#define STYP_PAD (0x0008) /* "padding": not allocated, not relocated, loaded */ -#define STYP_COPY (0x0010) /* "copy": for decision function used by field update; not allocated, not relocated, - loaded; reloc & lineno entries processed normally */ -#define STYP_TEXT (0x0020) /* section contains text only */ -#define S_SHRSEG (0x0020) /* In 3b Update files (output of ogen), sections which appear in SHARED segments of the Pfile - will have the S_SHRSEG flag set by ogen, to inform dufr that updating 1 copy of the proc. will - update all process invocations. */ -#define STYP_DATA (0x0040) /* section contains data only */ -#define STYP_BSS (0x0080) /* section contains bss only */ -#define S_NEWFCN (0x0100) /* In a minimal file or an update file, a new function (as compared with a replaced function) */ -#define STYP_INFO (0x0200) /* comment: not allocated not relocated, not loaded */ -#define STYP_OVER (0x0400) /* overlay: relocated not allocated or loaded */ -#define STYP_LIB (0x0800) /* for .lib: same as INFO */ -#define STYP_MERGE (0x2000) /* merge section -- combines with text, data or bss sections only */ -#define STYP_REVERSE_PAD (0x4000) /* section will be padded with no-op instructions - wherever padding is necessary and there is a - word of contiguous bytes beginning on a word - boundary. */ - -#define STYP_LIT 0x8020 /* Literal data (like STYP_TEXT) */ - - -/********************** LINE NUMBERS **********************/ - -/* 1 line number entry for every "breakpointable" source line in a section. - Line numbers are grouped on a per function basis; first entry in a function - grouping will have l_lnno = 0 and in place of physical address will be the - symbol table index of the function name. */ - -struct internal_lineno -{ - union - { - bfd_signed_vma l_symndx; /* function name symbol index, iff l_lnno == 0*/ - bfd_signed_vma l_paddr; /* (physical) address of line number */ - } l_addr; - unsigned long l_lnno; /* line number */ -}; - -/********************** SYMBOLS **********************/ - -#define SYMNMLEN 8 /* # characters in a symbol name */ -#define FILNMLEN 14 /* # characters in a file name */ -#define DIMNUM 4 /* # array dimensions in auxiliary entry */ - -struct internal_syment -{ - union - { - char _n_name[SYMNMLEN]; /* old COFF version */ - struct - { - long _n_zeroes; /* new == 0 */ - long _n_offset; /* offset into string table */ - } _n_n; - char *_n_nptr[2]; /* allows for overlaying */ - } _n; - bfd_vma n_value; /* value of symbol */ - short n_scnum; /* section number */ - unsigned short n_flags; /* copy of flags from filhdr */ - unsigned short n_type; /* type and derived type */ - unsigned char n_sclass; /* storage class */ - unsigned char n_numaux; /* number of aux. entries */ -}; - -#define n_name _n._n_name -#define n_zeroes _n._n_n._n_zeroes -#define n_offset _n._n_n._n_offset - -/* Relocatable symbols have number of the section in which they are defined, - or one of the following: */ - -#define N_UNDEF ((short)0) /* undefined symbol */ -#define N_ABS ((short)-1) /* value of symbol is absolute */ -#define N_DEBUG ((short)-2) /* debugging symbol -- value is meaningless */ -#define N_TV ((short)-3) /* indicates symbol needs preload transfer vector */ -#define P_TV ((short)-4) /* indicates symbol needs postload transfer vector*/ - -/* Type of a symbol, in low N bits of the word. */ - -#define T_NULL 0 -#define T_VOID 1 /* function argument (only used by compiler) */ -#define T_CHAR 2 /* character */ -#define T_SHORT 3 /* short integer */ -#define T_INT 4 /* integer */ -#define T_LONG 5 /* long integer */ -#define T_FLOAT 6 /* floating point */ -#define T_DOUBLE 7 /* double word */ -#define T_STRUCT 8 /* structure */ -#define T_UNION 9 /* union */ -#define T_ENUM 10 /* enumeration */ -#define T_MOE 11 /* member of enumeration*/ -#define T_UCHAR 12 /* unsigned character */ -#define T_USHORT 13 /* unsigned short */ -#define T_UINT 14 /* unsigned integer */ -#define T_ULONG 15 /* unsigned long */ -#define T_LNGDBL 16 /* long double */ - -/* Derived types, in n_type. */ - -#define DT_NON (0) /* no derived type */ -#define DT_PTR (1) /* pointer */ -#define DT_FCN (2) /* function */ -#define DT_ARY (3) /* array */ - -#define BTYPE(x) ((x) & N_BTMASK) -#define DTYPE(x) (((x) & N_TMASK) >> N_BTSHFT) - -#define ISPTR(x) \ - (((unsigned long) (x) & N_TMASK) == ((unsigned long) DT_PTR << N_BTSHFT)) -#define ISFCN(x) \ - (((unsigned long) (x) & N_TMASK) == ((unsigned long) DT_FCN << N_BTSHFT)) -#define ISARY(x) \ - (((unsigned long) (x) & N_TMASK) == ((unsigned long) DT_ARY << N_BTSHFT)) -#define ISTAG(x) \ - ((x) == C_STRTAG || (x) == C_UNTAG || (x) == C_ENTAG) -#define DECREF(x) \ - ((((x) >> N_TSHIFT) & ~ N_BTMASK) | ((x) & N_BTMASK)) - -union internal_auxent -{ - struct - { - - union - { - long l; /* str, un, or enum tag indx */ - struct coff_ptr_struct *p; - } x_tagndx; - - union - { - struct - { - unsigned short x_lnno; /* declaration line number */ - unsigned short x_size; /* str/union/array size */ - } x_lnsz; - long x_fsize; /* size of function */ - } x_misc; - - union - { - struct - { /* if ISFCN, tag, or .bb */ - bfd_signed_vma x_lnnoptr; /* ptr to fcn line # */ - union - { /* entry ndx past block end */ - long l; - struct coff_ptr_struct *p; - } x_endndx; - } x_fcn; - - struct - { /* if ISARY, up to 4 dimen. */ - unsigned short x_dimen[DIMNUM]; - } x_ary; - } x_fcnary; - - unsigned short x_tvndx; /* tv index */ - } x_sym; - - union - { - char x_fname[FILNMLEN]; - struct - { - long x_zeroes; - long x_offset; - } x_n; - } x_file; - - struct - { - long x_scnlen; /* section length */ - unsigned short x_nreloc; /* # relocation entries */ - unsigned short x_nlinno; /* # line numbers */ - unsigned long x_checksum; /* section COMDAT checksum for PE */ - unsigned short x_associated; /* COMDAT associated section index for PE */ - unsigned char x_comdat; /* COMDAT selection number for PE */ - } x_scn; - - struct - { - long x_tvfill; /* tv fill value */ - unsigned short x_tvlen; /* length of .tv */ - unsigned short x_tvran[2]; /* tv range */ - } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ - - /****************************************** - * RS/6000-specific auxent - last auxent for every external symbol - ******************************************/ - struct - { - union - { /* csect length or enclosing csect */ - bfd_signed_vma l; - struct coff_ptr_struct *p; - } x_scnlen; - long x_parmhash; /* parm type hash index */ - unsigned short x_snhash; /* sect num with parm hash */ - unsigned char x_smtyp; /* symbol align and type */ - /* 0-4 - Log 2 of alignment */ - /* 5-7 - symbol type */ - unsigned char x_smclas; /* storage mapping class */ - long x_stab; /* dbx stab info index */ - unsigned short x_snstab; /* sect num with dbx stab */ - } x_csect; /* csect definition information */ - -/* x_smtyp values: */ - -#define SMTYP_ALIGN(x) ((x) >> 3) /* log2 of alignment */ -#define SMTYP_SMTYP(x) ((x) & 0x7) /* symbol type */ -/* Symbol type values: */ -#define XTY_ER 0 /* External reference */ -#define XTY_SD 1 /* Csect definition */ -#define XTY_LD 2 /* Label definition */ -#define XTY_CM 3 /* .BSS */ -#define XTY_EM 4 /* Error message */ -#define XTY_US 5 /* "Reserved for internal use" */ - -/* x_smclas values: */ - -#define XMC_PR 0 /* Read-only program code */ -#define XMC_RO 1 /* Read-only constant */ -#define XMC_DB 2 /* Read-only debug dictionary table */ -#define XMC_TC 3 /* Read-write general TOC entry */ -#define XMC_UA 4 /* Read-write unclassified */ -#define XMC_RW 5 /* Read-write data */ -#define XMC_GL 6 /* Read-only global linkage */ -#define XMC_XO 7 /* Read-only extended operation */ -#define XMC_SV 8 /* Read-only supervisor call */ -#define XMC_BS 9 /* Read-write BSS */ -#define XMC_DS 10 /* Read-write descriptor csect */ -#define XMC_UC 11 /* Read-write unnamed Fortran common */ -#define XMC_TI 12 /* Read-only traceback index csect */ -#define XMC_TB 13 /* Read-only traceback table csect */ -/* 14 ??? */ -#define XMC_TC0 15 /* Read-write TOC anchor */ -#define XMC_TD 16 /* Read-write data in TOC */ - - /****************************************** - * I960-specific *2nd* aux. entry formats - ******************************************/ - struct - { - /* This is a very old typo that keeps getting propagated. */ -#define x_stdindx x_stindx - long x_stindx; /* sys. table entry */ - } x_sc; /* system call entry */ - - struct - { - unsigned long x_balntry; /* BAL entry point */ - } x_bal; /* BAL-callable function */ - - struct - { - unsigned long x_timestamp; /* time stamp */ - char x_idstring[20]; /* producer identity string */ - } x_ident; /* Producer ident info */ - -}; - -/********************** RELOCATION DIRECTIVES **********************/ - -struct internal_reloc -{ - bfd_vma r_vaddr; /* Virtual address of reference */ - long r_symndx; /* Index into symbol table */ - unsigned short r_type; /* Relocation type */ - unsigned char r_size; /* Used by RS/6000 and ECOFF */ - unsigned char r_extern; /* Used by ECOFF */ - unsigned long r_offset; /* Used by Alpha ECOFF, SPARC, others */ -}; - -#define R_DIR16 1 -#define R_REL24 5 -#define R_DIR32 6 -#define R_IMAGEBASE 7 -#define R_SECREL32 11 -#define R_RELBYTE 15 -#define R_RELWORD 16 -#define R_RELLONG 17 -#define R_PCRBYTE 18 -#define R_PCRWORD 19 -#define R_PCRLONG 20 -#define R_PCR24 21 -#define R_IPRSHORT 24 -#define R_IPRLONG 26 -#define R_GETSEG 29 -#define R_GETPA 30 -#define R_TAGWORD 31 -#define R_JUMPTARG 32 /* strange 29k 00xx00xx reloc */ -#define R_PARTLS16 32 -#define R_PARTMS8 33 - -#define R_PCR16L 128 -#define R_PCR26L 129 -#define R_VRT16 130 -#define R_HVRT16 131 -#define R_LVRT16 132 -#define R_VRT32 133 - - -/* This reloc identifies mov.b instructions with a 16bit absolute - address. The linker tries to turn insns with this reloc into - an absolute 8-bit address. */ -#define R_MOV16B1 0x41 - -/* This reloc identifies mov.b instructions which had a 16bit - absolute address which have been shortened into a 8-bit - absolute address. */ -#define R_MOV16B2 0x42 - -/* This reloc identifies jmp insns with a 16bit target address; - the linker tries to turn these insns into bra insns with - an 8bit pc-relative target. */ -#define R_JMP1 0x43 - -/* This reloc identifies a bra with an 8-bit pc-relative - target that was formerly a jmp insn with a 16bit target. */ -#define R_JMP2 0x44 - -/* ??? */ -#define R_RELLONG_NEG 0x45 - -/* This reloc identifies jmp insns with a 24bit target address; - the linker tries to turn these insns into bra insns with - an 8bit pc-relative target. */ -#define R_JMPL1 0x46 - -/* This reloc identifies a bra with an 8-bit pc-relative - target that was formerly a jmp insn with a 24bit target. */ -#define R_JMPL2 0x47 - -/* This reloc identifies mov.b instructions with a 24bit absolute - address. The linker tries to turn insns with this reloc into - an absolute 8-bit address. */ - -#define R_MOV24B1 0x48 - -/* This reloc identifies mov.b instructions which had a 24bit - absolute address which have been shortened into a 8-bit - absolute address. */ -#define R_MOV24B2 0x49 - -/* An h8300 memory indirect jump/call. Forces the address of the jump/call - target into the function vector (in page zero), and the address of the - vector entry to be placed in the jump/call instruction. */ -#define R_MEM_INDIRECT 0x4a - -/* This reloc identifies a 16bit pc-relative branch target which was - shortened into an 8bit pc-relative branch target. */ -#define R_PCRWORD_B 0x4b - -/* This reloc identifies mov.[wl] instructions with a 32/24 bit - absolute address; the linker may turn this into a mov.[wl] - insn with a 16bit absolute address. */ -#define R_MOVL1 0x4c - -/* This reloc identifies mov.[wl] insns which formerly had - a 32/24bit absolute address and now have a 16bit absolute address. */ -#define R_MOVL2 0x4d - -/* This reloc identifies a bCC:8 which will have it's condition - inverted and its target redirected to the target of the branch - in the following insn. */ -#define R_BCC_INV 0x4e - -/* This reloc identifies a jmp instruction that has been deleted. */ -#define R_JMP_DEL 0x4f - -/* Z8k modes */ -#define R_IMM16 0x01 /* 16 bit abs */ -#define R_JR 0x02 /* jr 8 bit disp */ -#define R_IMM4L 0x23 /* low nibble */ -#define R_IMM8 0x22 /* 8 bit abs */ -#define R_IMM32 R_RELLONG /* 32 bit abs */ -#define R_CALL R_DA /* Absolute address which could be a callr */ -#define R_JP R_DA /* Absolute address which could be a jp */ -#define R_REL16 0x04 /* 16 bit PC rel */ -#define R_CALLR 0x05 /* callr 12 bit disp */ -#define R_SEG 0x10 /* set if in segmented mode */ -#define R_IMM4H 0x24 /* high nibble */ -#define R_DISP7 0x25 /* djnz displacement */ - -/* Z80 modes */ -#define R_OFF8 0x32 /* 8 bit signed abs, for (i[xy]+d) */ -#define R_IMM24 0x33 /* 24 bit abs */ -/* R_JR, R_IMM8, R_IMM16, R_IMM32 - as for Z8k */ - -/* H8500 modes */ - -#define R_H8500_IMM8 1 /* 8 bit immediate */ -#define R_H8500_IMM16 2 /* 16 bit immediate */ -#define R_H8500_PCREL8 3 /* 8 bit pcrel */ -#define R_H8500_PCREL16 4 /* 16 bit pcrel */ -#define R_H8500_HIGH8 5 /* high 8 bits of 24 bit address */ -#define R_H8500_LOW16 7 /* low 16 bits of 24 bit immediate */ -#define R_H8500_IMM24 6 /* 24 bit immediate */ -#define R_H8500_IMM32 8 /* 32 bit immediate */ -#define R_H8500_HIGH16 9 /* high 16 bits of 32 bit immediate */ - -/* W65 modes */ - -#define R_W65_ABS8 1 /* addr & 0xff */ -#define R_W65_ABS16 2 /* addr & 0xffff */ -#define R_W65_ABS24 3 /* addr & 0xffffff */ - -#define R_W65_ABS8S8 4 /* (addr >> 8) & 0xff */ -#define R_W65_ABS8S16 5 /* (addr >> 16) & 0xff */ - -#define R_W65_ABS16S8 6 /* (addr >> 8) & 0ffff */ -#define R_W65_ABS16S16 7 /* (addr >> 16) & 0ffff */ - -#define R_W65_PCR8 8 -#define R_W65_PCR16 9 - -#define R_W65_DP 10 /* direct page 8 bits only */ - -#endif /* GNU_COFF_INTERNAL_H */ diff --git a/include/coff/m68k.h b/include/coff/m68k.h deleted file mode 100644 index 4e88cea5a02..00000000000 --- a/include/coff/m68k.h +++ /dev/null @@ -1,81 +0,0 @@ -/* coff information for M68K - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef GNU_COFF_M68K_H -#define GNU_COFF_M68K_H 1 - -#define L_LNNO_SIZE 2 -#include "coff/external.h" - -/* Motorola 68000/68008/68010/68020 */ -#define MC68MAGIC 0520 -#define MC68KWRMAGIC 0520 /* writeable text segments */ -#define MC68TVMAGIC 0521 -#define MC68KROMAGIC 0521 /* readonly shareable text segments */ -#define MC68KPGMAGIC 0522 /* demand paged text segments */ -#define M68MAGIC 0210 -#define M68TVMAGIC 0211 - -/* This is the magic of the Bull dpx/2 */ -#define MC68KBCSMAGIC 0526 - -/* This is Lynx's all-platform magic number for executables. */ - -#define LYNXCOFFMAGIC 0415 - -#define OMAGIC M68MAGIC - -/* This intentionally does not include MC68KBCSMAGIC; it only includes - magic numbers which imply that names do not have underscores. */ -#define M68KBADMAG(x) (((x).f_magic != MC68MAGIC) \ - && ((x).f_magic != MC68KWRMAGIC) \ - && ((x).f_magic != MC68TVMAGIC) \ - && ((x).f_magic != MC68KROMAGIC) \ - && ((x).f_magic != MC68KPGMAGIC) \ - && ((x).f_magic != M68MAGIC) \ - && ((x).f_magic != M68TVMAGIC) \ - && ((x).f_magic != LYNXCOFFMAGIC)) - -/* Magic numbers for the a.out header. */ - -#define PAGEMAGICEXECSWAPPED 0407 /* executable (swapped) */ -#define PAGEMAGICPEXECSWAPPED 0410 /* pure executable (swapped) */ -#define PAGEMAGICPEXECTSHLIB 0443 /* pure executable (target shared library) */ -#define PAGEMAGICPEXECPAGED 0413 /* pure executable (paged) */ - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; -#ifdef M68K_COFF_OFFSET - char r_offset[4]; -#endif -}; - -#define RELOC struct external_reloc - -#ifdef M68K_COFF_OFFSET -#define RELSZ 14 -#else -#define RELSZ 10 -#endif - -#endif /* GNU_COFF_M68K_H */ diff --git a/include/coff/m88k.h b/include/coff/m88k.h deleted file mode 100644 index 9aeff1e6b85..00000000000 --- a/include/coff/m88k.h +++ /dev/null @@ -1,196 +0,0 @@ -/* coff information for 88k bcs - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define DO_NOT_DEFINE_SCNHDR -#define L_LNNO_SIZE 4 -#define DO_NOT_DEFINE_SYMENT -#define DO_NOT_DEFINE_AUXENT -#include "coff/external.h" - -#define MC88MAGIC 0540 /* 88k BCS executable */ -#define MC88DMAGIC 0541 /* DG/UX executable */ -#define MC88OMAGIC 0555 /* Object file */ - -#define MC88BADMAG(x) (((x).f_magic != MC88MAGIC) \ - && ((x).f_magic != MC88DMAGIC) \ - && ((x).f_magic != MC88OMAGIC)) - -#define PAGEMAGIC3 0414 /* Split i&d, zero mapped */ -#define PAGEMAGICBCS 0413 - -/********************** SECTION HEADER **********************/ - -struct external_scnhdr -{ - char s_name[8]; /* section name */ - char s_paddr[4]; /* physical address, aliased s_nlib */ - char s_vaddr[4]; /* virtual address */ - char s_size[4]; /* section size */ - char s_scnptr[4]; /* file ptr to raw data for section */ - char s_relptr[4]; /* file ptr to relocation */ - char s_lnnoptr[4]; /* file ptr to line numbers */ - char s_nreloc[4]; /* number of relocation entries */ - char s_nlnno[4]; /* number of line number entries*/ - char s_flags[4]; /* flags */ -}; - -#define SCNHDR struct external_scnhdr -#define SCNHSZ 44 - -/* Names of "special" sections. */ -#define _TEXT ".text" -#define _DATA ".data" -#define _BSS ".bss" -#define _COMMENT ".comment" - - -/********************** SYMBOLS **********************/ - -#define E_SYMNMLEN 8 /* # characters in a symbol name */ -#define E_FILNMLEN 14 /* # characters in a file name */ -#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */ - -struct external_syment -{ - union - { - char e_name[E_SYMNMLEN]; - - struct - { - char e_zeroes[4]; - char e_offset[4]; - } e; - - } e; - - char e_value[4]; - char e_scnum[2]; - char e_type[2]; - char e_sclass[1]; - char e_numaux[1]; - char pad2[2]; -}; - -#define N_BTMASK 017 -#define N_TMASK 060 -#define N_BTSHFT 4 -#define N_TSHIFT 2 - -/* Note that this isn't the same shape as other coffs */ -union external_auxent -{ - struct - { - char x_tagndx[4]; /* str, un, or enum tag indx */ - /* 4 */ - - union - { - char x_fsize[4]; /* size of function */ - - struct - { - char x_lnno[4]; /* declaration line number */ - char x_size[4]; /* str/union/array size */ - } x_lnsz; - - } x_misc; - - /* 12 */ - union - { - struct /* if ISFCN, tag, or .bb */ - { - char x_lnnoptr[4]; /* ptr to fcn line # */ - char x_endndx[4]; /* entry ndx past block end */ - } x_fcn; - - struct /* if ISARY, up to 4 dimen. */ - { - char x_dimen[E_DIMNUM][2]; - } x_ary; - - } x_fcnary; - /* 20 */ - - } x_sym; - - union - { - char x_fname[E_FILNMLEN]; - - struct - { - char x_zeroes[4]; - char x_offset[4]; - } x_n; - - } x_file; - - struct - { - char x_scnlen[4]; /* section length */ - char x_nreloc[4]; /* # relocation entries */ - char x_nlinno[4]; /* # line numbers */ - } x_scn; - - struct - { - char x_tvfill[4]; /* tv fill value */ - char x_tvlen[2]; /* length of .tv */ - char x_tvran[2][2]; /* tv range */ - } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ -}; - -#define GET_LNSZ_SIZE(abfd, ext) \ - H_GET_32 (abfd, ext->x_sym.x_misc.x_lnsz.x_size) -#define GET_LNSZ_LNNO(abfd, ext) \ - H_GET_32 (abfd, ext->x_sym.x_misc.x_lnsz.x_lnno) -#define PUT_LNSZ_LNNO(abfd, in, ext) \ - H_PUT_32 (abfd, in, ext->x_sym.x_misc.x_lnsz.x_lnno) -#define PUT_LNSZ_SIZE(abfd, in, ext) \ - H_PUT_32 (abfd, in, ext->x_sym.x_misc.x_lnsz.x_size) -#define GET_SCN_NRELOC(abfd, ext) \ - H_GET_32 (abfd, ext->x_scn.x_nreloc) -#define GET_SCN_NLINNO(abfd, ext) \ - H_GET_32 (abfd, ext->x_scn.x_nlinno) -#define PUT_SCN_NRELOC(abfd, in, ext) \ - H_PUT_32 (abfd, in, ext->x_scn.x_nreloc) -#define PUT_SCN_NLINNO(abfd, in, ext) \ - H_PUT_32 (abfd,in, ext->x_scn.x_nlinno) - -#define SYMENT struct external_syment -#define SYMESZ 20 -#define AUXENT union external_auxent -#define AUXESZ 20 - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; - char r_offset[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 12 - -#define NO_TVNDX diff --git a/include/coff/maxq.h b/include/coff/maxq.h deleted file mode 100644 index a8e3c403206..00000000000 --- a/include/coff/maxq.h +++ /dev/null @@ -1,56 +0,0 @@ -/* COFF spec for MAXQ - - Copyright 2004, 2005 Free Software Foundation, Inc. - - This program 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., - 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - - Contributed by Vineet Sharma(vineets@noida.hcltech.com) Inderpreet - S.(inderpreetb@noida.hcltech.com) HCL Technologies Ltd. */ - -#define L_LNNO_SIZE 2 - -#include "coff/external.h" - -/* Bits for f_flags: F_RELFLG relocation info stripped from file F_EXEC file - is executable (no unresolved external references) F_LNNO line numbers - stripped from file F_LSYMS local symbols stripped from file. */ - -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_LSYMS (0x0008) - -/* Variant Specific Flags for MAXQ10 and MAXQ20. */ -#define F_MAXQ10 (0x0030) -#define F_MAXQ20 (0x0040) - -#define F_MACHMASK (0x00F0) - -/* Magic numbers for maxq. */ -#define MAXQ20MAGIC 0xa0 -#define MAXQ20BADMAG(x) (((x).f_magic != MAXQ20MAGIC)) -#define BADMAG(x) MAXQ20BADMAG (x) - -/* Relocation information declaration and related definitions. */ -struct external_reloc -{ - char r_vaddr[4]; /* (Virtual) address of reference. */ - char r_symndx[4]; /* Index into symbol table. */ - char r_type[2]; /* Relocation type. */ - char r_offset[2]; /* Addend. */ -}; - -#define RELOC struct external_reloc -#define RELSZ (10 + 2) /* sizeof (RELOC) */ diff --git a/include/coff/mcore.h b/include/coff/mcore.h deleted file mode 100644 index 42c694c286c..00000000000 --- a/include/coff/mcore.h +++ /dev/null @@ -1,71 +0,0 @@ -/* Motorola MCore support for BFD. - Copyright 1999, 2000 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the MCore COFF/PE ABI. */ - -#ifndef _COFF_MORE_H -#define _COFF_MORE_H - -#define INCLUDE_COMDAT_FIELDS_IN_AUXENT -#define L_LNNO_SIZE 2 -#include "coff/external.h" - -#define MCOREMAGIC 0xb00 /* I just made this up */ - -#define MCOREBADMAG(x) (((x).f_magic != MCOREMAGIC)) - -#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */ - -#define IMAGE_REL_MCORE_ABSOLUTE 0x0000 -#define IMAGE_REL_MCORE_ADDR32 0x0001 -#define IMAGE_REL_MCORE_PCREL_IMM8BY4 0x0002 -#define IMAGE_REL_MCORE_PCREL_IMM11BY2 0x0003 -#define IMAGE_REL_MCORE_PCREL_IMM4BY2 0x0004 -#define IMAGE_REL_MCORE_PCREL_32 0x0005 -#define IMAGE_REL_MCORE_PCREL_JSR_IMM11BY2 0x0006 -#define IMAGE_REL_MCORE_RVA 0x0007 - -#define PEMCORE - -#define OMAGIC 0404 /* object files, eg as output */ -#define ZMAGIC 0413 /* demand load format, eg normal ld output */ -#define STMAGIC 0401 /* target shlib */ -#define SHMAGIC 0443 /* host shlib */ - -/* From winnt.h */ -#define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b - -/* Define some NT default values. */ -#define NT_SECTION_ALIGNMENT 0x1000 -#define NT_FILE_ALIGNMENT 0x200 -#define NT_DEF_RESERVE 0x100000 -#define NT_DEF_COMMIT 0x1000 - -struct external_reloc -{ - char r_vaddr [4]; - char r_symndx [4]; - char r_type [2]; - char r_offset [4]; -}; - -#define RELOC struct external_reloc -#define RELSZ 14 - -#endif /* __COFF_MCORE_H */ diff --git a/include/coff/mips.h b/include/coff/mips.h deleted file mode 100644 index feb2652145b..00000000000 --- a/include/coff/mips.h +++ /dev/null @@ -1,343 +0,0 @@ -/* ECOFF support on MIPS machines. - coff/ecoff.h must be included before this file. - - Copyright 1999, 2004 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define DO_NOT_DEFINE_AOUTHDR -#define L_LNNO_SIZE 4 -#include "coff/external.h" - -/* Magic numbers are defined in coff/ecoff.h. */ -#define MIPS_ECOFF_BADMAG(x) (((x).f_magic!=MIPS_MAGIC_1) && \ - ((x).f_magic!=MIPS_MAGIC_LITTLE) &&\ - ((x).f_magic!=MIPS_MAGIC_BIG) && \ - ((x).f_magic!=MIPS_MAGIC_LITTLE2) && \ - ((x).f_magic!=MIPS_MAGIC_BIG2) && \ - ((x).f_magic!=MIPS_MAGIC_LITTLE3) && \ - ((x).f_magic!=MIPS_MAGIC_BIG3)) - - -/********************** AOUT "OPTIONAL HEADER" **********************/ - -typedef struct external_aouthdr -{ - unsigned char magic[2]; /* type of file */ - unsigned char vstamp[2]; /* version stamp */ - unsigned char tsize[4]; /* text size in bytes, padded to FW bdry*/ - unsigned char dsize[4]; /* initialized data " " */ - unsigned char bsize[4]; /* uninitialized data " " */ - unsigned char entry[4]; /* entry pt. */ - unsigned char text_start[4]; /* base of text used for this file */ - unsigned char data_start[4]; /* base of data used for this file */ - unsigned char bss_start[4]; /* base of bss used for this file */ - unsigned char gprmask[4]; /* ?? */ - unsigned char cprmask[4][4]; /* ?? */ - unsigned char gp_value[4]; /* value for gp register */ -} AOUTHDR; - -/* compute size of a header */ - -#define AOUTSZ 56 -#define AOUTHDRSZ 56 - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc - { - unsigned char r_vaddr[4]; - unsigned char r_bits[4]; - }; - -#define RELOC struct external_reloc -#define RELSZ 8 - -/* MIPS ECOFF uses a packed 8 byte format for relocs. These constants - are used to unpack the r_bits field. */ - -#define RELOC_BITS0_SYMNDX_SH_LEFT_BIG 16 -#define RELOC_BITS0_SYMNDX_SH_LEFT_LITTLE 0 - -#define RELOC_BITS1_SYMNDX_SH_LEFT_BIG 8 -#define RELOC_BITS1_SYMNDX_SH_LEFT_LITTLE 8 - -#define RELOC_BITS2_SYMNDX_SH_LEFT_BIG 0 -#define RELOC_BITS2_SYMNDX_SH_LEFT_LITTLE 16 - -/* Originally, ECOFF used four bits for the reloc type and had three - reserved bits. Irix 4 added another bit for the reloc type, which - was easy because it was big endian and one of the spare bits became - the new most significant bit. To make this also work for little - endian ECOFF, we need to wrap one of the reserved bits around to - become the most significant bit of the reloc type. */ -#define RELOC_BITS3_TYPE_BIG 0x3E -#define RELOC_BITS3_TYPE_SH_BIG 1 -#define RELOC_BITS3_TYPE_LITTLE 0x78 -#define RELOC_BITS3_TYPE_SH_LITTLE 3 -#define RELOC_BITS3_TYPEHI_LITTLE 0x04 -#define RELOC_BITS3_TYPEHI_SH_LITTLE 2 - -#define RELOC_BITS3_EXTERN_BIG 0x01 -#define RELOC_BITS3_EXTERN_LITTLE 0x80 - -/* The r_type field in a reloc is one of the following values. I - don't know if any other values can appear. These seem to be all - that occur in the Ultrix 4.2 libraries. */ -#define MIPS_R_IGNORE 0 -#define MIPS_R_REFHALF 1 -#define MIPS_R_REFWORD 2 -#define MIPS_R_JMPADDR 3 -#define MIPS_R_REFHI 4 -#define MIPS_R_REFLO 5 -#define MIPS_R_GPREL 6 -#define MIPS_R_LITERAL 7 - -/* FIXME: This relocation is used (internally only) to represent branches - when assembling. It should never appear in output files, and - be removed. (It used to be used for embedded-PIC support.) */ -#define MIPS_R_PCREL16 12 - -/********************** STABS **********************/ - -#define MIPS_IS_STAB ECOFF_IS_STAB -#define MIPS_MARK_STAB ECOFF_MARK_STAB -#define MIPS_UNMARK_STAB ECOFF_UNMARK_STAB - -/********************** SYMBOLIC INFORMATION **********************/ - -/* Written by John Gilmore. */ - -/* ECOFF uses COFF-like section structures, but its own symbol format. - This file defines the symbol format in fields whose size and alignment - will not vary on different host systems. */ - -/* File header as a set of bytes */ - -struct hdr_ext -{ - unsigned char h_magic[2]; - unsigned char h_vstamp[2]; - unsigned char h_ilineMax[4]; - unsigned char h_cbLine[4]; - unsigned char h_cbLineOffset[4]; - unsigned char h_idnMax[4]; - unsigned char h_cbDnOffset[4]; - unsigned char h_ipdMax[4]; - unsigned char h_cbPdOffset[4]; - unsigned char h_isymMax[4]; - unsigned char h_cbSymOffset[4]; - unsigned char h_ioptMax[4]; - unsigned char h_cbOptOffset[4]; - unsigned char h_iauxMax[4]; - unsigned char h_cbAuxOffset[4]; - unsigned char h_issMax[4]; - unsigned char h_cbSsOffset[4]; - unsigned char h_issExtMax[4]; - unsigned char h_cbSsExtOffset[4]; - unsigned char h_ifdMax[4]; - unsigned char h_cbFdOffset[4]; - unsigned char h_crfd[4]; - unsigned char h_cbRfdOffset[4]; - unsigned char h_iextMax[4]; - unsigned char h_cbExtOffset[4]; -}; - -/* File descriptor external record */ - -struct fdr_ext -{ - unsigned char f_adr[4]; - unsigned char f_rss[4]; - unsigned char f_issBase[4]; - unsigned char f_cbSs[4]; - unsigned char f_isymBase[4]; - unsigned char f_csym[4]; - unsigned char f_ilineBase[4]; - unsigned char f_cline[4]; - unsigned char f_ioptBase[4]; - unsigned char f_copt[4]; - unsigned char f_ipdFirst[2]; - unsigned char f_cpd[2]; - unsigned char f_iauxBase[4]; - unsigned char f_caux[4]; - unsigned char f_rfdBase[4]; - unsigned char f_crfd[4]; - unsigned char f_bits1[1]; - unsigned char f_bits2[3]; - unsigned char f_cbLineOffset[4]; - unsigned char f_cbLine[4]; -}; - -#define FDR_BITS1_LANG_BIG 0xF8 -#define FDR_BITS1_LANG_SH_BIG 3 -#define FDR_BITS1_LANG_LITTLE 0x1F -#define FDR_BITS1_LANG_SH_LITTLE 0 - -#define FDR_BITS1_FMERGE_BIG 0x04 -#define FDR_BITS1_FMERGE_LITTLE 0x20 - -#define FDR_BITS1_FREADIN_BIG 0x02 -#define FDR_BITS1_FREADIN_LITTLE 0x40 - -#define FDR_BITS1_FBIGENDIAN_BIG 0x01 -#define FDR_BITS1_FBIGENDIAN_LITTLE 0x80 - -#define FDR_BITS2_GLEVEL_BIG 0xC0 -#define FDR_BITS2_GLEVEL_SH_BIG 6 -#define FDR_BITS2_GLEVEL_LITTLE 0x03 -#define FDR_BITS2_GLEVEL_SH_LITTLE 0 - -/* We ignore the `reserved' field in bits2. */ - -/* Procedure descriptor external record */ - -struct pdr_ext -{ - unsigned char p_adr[4]; - unsigned char p_isym[4]; - unsigned char p_iline[4]; - unsigned char p_regmask[4]; - unsigned char p_regoffset[4]; - unsigned char p_iopt[4]; - unsigned char p_fregmask[4]; - unsigned char p_fregoffset[4]; - unsigned char p_frameoffset[4]; - unsigned char p_framereg[2]; - unsigned char p_pcreg[2]; - unsigned char p_lnLow[4]; - unsigned char p_lnHigh[4]; - unsigned char p_cbLineOffset[4]; -}; - -/* Runtime procedure table */ - -struct rpdr_ext -{ - unsigned char p_adr[4]; - unsigned char p_regmask[4]; - unsigned char p_regoffset[4]; - unsigned char p_fregmask[4]; - unsigned char p_fregoffset[4]; - unsigned char p_frameoffset[4]; - unsigned char p_framereg[2]; - unsigned char p_pcreg[2]; - unsigned char p_irpss[4]; - unsigned char p_reserved[4]; - unsigned char p_exception_info[4]; -}; - -/* Line numbers */ - -struct line_ext -{ - unsigned char l_line[4]; -}; - -/* Symbol external record */ - -struct sym_ext -{ - unsigned char s_iss[4]; - unsigned char s_value[4]; - unsigned char s_bits1[1]; - unsigned char s_bits2[1]; - unsigned char s_bits3[1]; - unsigned char s_bits4[1]; -}; - -#define SYM_BITS1_ST_BIG 0xFC -#define SYM_BITS1_ST_SH_BIG 2 -#define SYM_BITS1_ST_LITTLE 0x3F -#define SYM_BITS1_ST_SH_LITTLE 0 - -#define SYM_BITS1_SC_BIG 0x03 -#define SYM_BITS1_SC_SH_LEFT_BIG 3 -#define SYM_BITS1_SC_LITTLE 0xC0 -#define SYM_BITS1_SC_SH_LITTLE 6 - -#define SYM_BITS2_SC_BIG 0xE0 -#define SYM_BITS2_SC_SH_BIG 5 -#define SYM_BITS2_SC_LITTLE 0x07 -#define SYM_BITS2_SC_SH_LEFT_LITTLE 2 - -#define SYM_BITS2_RESERVED_BIG 0x10 -#define SYM_BITS2_RESERVED_LITTLE 0x08 - -#define SYM_BITS2_INDEX_BIG 0x0F -#define SYM_BITS2_INDEX_SH_LEFT_BIG 16 -#define SYM_BITS2_INDEX_LITTLE 0xF0 -#define SYM_BITS2_INDEX_SH_LITTLE 4 - -#define SYM_BITS3_INDEX_SH_LEFT_BIG 8 -#define SYM_BITS3_INDEX_SH_LEFT_LITTLE 4 - -#define SYM_BITS4_INDEX_SH_LEFT_BIG 0 -#define SYM_BITS4_INDEX_SH_LEFT_LITTLE 12 - -/* External symbol external record */ - -struct ext_ext -{ - unsigned char es_bits1[1]; - unsigned char es_bits2[1]; - unsigned char es_ifd[2]; - struct sym_ext es_asym; -}; - -#define EXT_BITS1_JMPTBL_BIG 0x80 -#define EXT_BITS1_JMPTBL_LITTLE 0x01 - -#define EXT_BITS1_COBOL_MAIN_BIG 0x40 -#define EXT_BITS1_COBOL_MAIN_LITTLE 0x02 - -#define EXT_BITS1_WEAKEXT_BIG 0x20 -#define EXT_BITS1_WEAKEXT_LITTLE 0x04 - -/* Dense numbers external record */ - -struct dnr_ext -{ - unsigned char d_rfd[4]; - unsigned char d_index[4]; -}; - -/* Relative file descriptor */ - -struct rfd_ext -{ - unsigned char rfd[4]; -}; - -/* Optimizer symbol external record */ - -struct opt_ext -{ - unsigned char o_bits1[1]; - unsigned char o_bits2[1]; - unsigned char o_bits3[1]; - unsigned char o_bits4[1]; - struct rndx_ext o_rndx; - unsigned char o_offset[4]; -}; - -#define OPT_BITS2_VALUE_SH_LEFT_BIG 16 -#define OPT_BITS2_VALUE_SH_LEFT_LITTLE 0 - -#define OPT_BITS3_VALUE_SH_LEFT_BIG 8 -#define OPT_BITS3_VALUE_SH_LEFT_LITTLE 8 - -#define OPT_BITS4_VALUE_SH_LEFT_BIG 0 -#define OPT_BITS4_VALUE_SH_LEFT_LITTLE 16 diff --git a/include/coff/mipspe.h b/include/coff/mipspe.h deleted file mode 100644 index c1c2efa5e64..00000000000 --- a/include/coff/mipspe.h +++ /dev/null @@ -1,66 +0,0 @@ -/* coff information for Windows CE with MIPS VR4111 - - Copyright 2000 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define L_LNNO_SIZE 2 -#define INCLUDE_COMDAT_FIELDS_IN_AUXENT -#include "coff/external.h" - -#define MIPS_ARCH_MAGIC_WINCE 0x0166 /* Windows CE - little endian */ -#define MIPS_PE_MAGIC 0x010b - -#define MIPSBADMAG(x) ((x).f_magic != MIPS_ARCH_MAGIC_WINCE) - -/* define some NT default values */ -/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */ -#define NT_SECTION_ALIGNMENT 0x1000 -#define NT_FILE_ALIGNMENT 0x200 -#define NT_DEF_RESERVE 0x100000 -#define NT_DEF_COMMIT 0x1000 - -/********************** RELOCATION DIRECTIVES **********************/ - -/* The external reloc has an offset field, because some of the reloc - types on the h8 don't have room in the instruction for the entire - offset - eg the strange jump and high page addressing modes. */ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 10 - -/* MIPS PE relocation types. */ - -#define MIPS_R_ABSOLUTE 0 /* ignored */ -#define MIPS_R_REFHALF 1 -#define MIPS_R_REFWORD 2 -#define MIPS_R_JMPADDR 3 -#define MIPS_R_REFHI 4 /* PAIR follows */ -#define MIPS_R_REFLO 5 -#define MIPS_R_GPREL 6 -#define MIPS_R_LITERAL 7 /* same as GPREL */ -#define MIPS_R_SECTION 10 -#define MIPS_R_SECREL 11 -#define MIPS_R_SECRELLO 12 -#define MIPS_R_SECRELHI 13 /* PAIR follows */ -#define MIPS_R_RVA 34 /* 0x22 */ -#define MIPS_R_PAIR 37 /* 0x25 - symndx is really a signed 16-bit addend */ diff --git a/include/coff/or32.h b/include/coff/or32.h deleted file mode 100644 index 65495fb9b90..00000000000 --- a/include/coff/or32.h +++ /dev/null @@ -1,287 +0,0 @@ -/* COFF specification for OpenRISC 1000. - Copyright (C) 1993-2000, 2002 Free Software Foundation, Inc. - Contributed by David Wood @ New York University. - Modified by Johan Rydberg, - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef OR32 -# define OR32 -#endif - -/* File Header and related definitions. */ -struct external_filehdr -{ - char f_magic[2]; /* magic number */ - char f_nscns[2]; /* number of sections */ - char f_timdat[4]; /* time & date stamp */ - char f_symptr[4]; /* file pointer to symtab */ - char f_nsyms[4]; /* number of symtab entries */ - char f_opthdr[2]; /* sizeof(optional hdr) */ - char f_flags[2]; /* flags */ -}; - -#define FILHDR struct external_filehdr -#define FILHSZ 20 - -/* Magic numbers for OpenRISC 1000. As it is know we use the - numbers for Am29000. - - (AT&T will assign the "real" magic number). */ -#define SIPFBOMAGIC 0572 /* Am29000 (Byte 0 is MSB). */ -#define SIPRBOMAGIC 0573 /* Am29000 (Byte 0 is LSB). */ - -#define OR32_MAGIC_BIG SIPFBOMAGIC -#define OR32_MAGIC_LITTLE SIPRBOMAGIC -#define OR32BADMAG(x) (((x).f_magic!=OR32_MAGIC_BIG) && \ - ((x).f_magic!=OR32_MAGIC_LITTLE)) - -#define OMAGIC OR32_MAGIC_BIG - -/* Optional (a.out) header. */ -typedef struct external_aouthdr -{ - char magic[2]; /* type of file */ - char vstamp[2]; /* version stamp */ - char tsize[4]; /* text size in bytes, padded to FW bdry */ - char dsize[4]; /* initialized data " " */ - char bsize[4]; /* uninitialized data " " */ - char entry[4]; /* entry pt. */ - char text_start[4]; /* base of text used for this file */ - char data_start[4]; /* base of data used for this file */ -} AOUTHDR; - -#define AOUTSZ 28 -#define AOUTHDRSZ 28 - -/* aouthdr magic numbers. */ -#define NMAGIC 0410 /* separate i/d executable. */ -#define SHMAGIC 0406 /* NYU/Ultra3 shared data executable - (writable text). */ - -#define _ETEXT "_etext" - -/* Section header and related definitions. */ -struct external_scnhdr -{ - char s_name[8]; /* section name */ - char s_paddr[4]; /* physical address, aliased s_nlib */ - char s_vaddr[4]; /* virtual address */ - char s_size[4]; /* section size */ - char s_scnptr[4]; /* file ptr to raw data for section */ - char s_relptr[4]; /* file ptr to relocation */ - char s_lnnoptr[4]; /* file ptr to line numbers */ - char s_nreloc[2]; /* number of relocation entries */ - char s_nlnno[2]; /* number of line number entries */ - char s_flags[4]; /* flags */ -}; - -#define SCNHDR struct external_scnhdr -#define SCNHSZ 40 - -/* Names of "special" sections: */ -#define _TEXT ".text" -#define _DATA ".data" -#define _BSS ".bss" -#define _LIT ".lit" - -/* Section types - with additional section type for global - registers which will be relocatable for the OpenRISC 1000. - - In instances where it is necessary for a linker to produce an - output file which contains text or data not based at virtual - address 0, e.g. for a ROM, then the linker should accept - address base information as command input and use PAD sections - to skip over unused addresses. */ -#define STYP_BSSREG 0x1200 /* Global register area (like STYP_INFO) */ -#define STYP_ENVIR 0x2200 /* Environment (like STYP_INFO) */ -#define STYP_ABS 0x4000 /* Absolute (allocated, not reloc, loaded) */ - -/* Relocation information declaration and related definitions: */ -struct external_reloc -{ - char r_vaddr[4]; /* (virtual) address of reference */ - char r_symndx[4]; /* index into symbol table */ - char r_type[2]; /* relocation type */ -}; - -#define RELOC struct external_reloc -#define RELSZ 10 /* sizeof (RELOC) */ - -/* Relocation types for the OpenRISC 1000: */ - -#define R_ABS 0 /* reference is absolute */ -#define R_IREL 030 /* instruction relative (jmp/call) */ -#define R_IABS 031 /* instruction absolute (jmp/call) */ -#define R_ILOHALF 032 /* instruction low half (const) */ -#define R_IHIHALF 033 /* instruction high half (consth) part 1 */ -#define R_IHCONST 034 /* instruction high half (consth) part 2 */ - /* constant offset of R_IHIHALF relocation */ -#define R_BYTE 035 /* relocatable byte value */ -#define R_HWORD 036 /* relocatable halfword value */ -#define R_WORD 037 /* relocatable word value */ - -#define R_IGLBLRC 040 /* instruction global register RC */ -#define R_IGLBLRA 041 /* instruction global register RA */ -#define R_IGLBLRB 042 /* instruction global register RB */ - -/* - NOTE: - All the "I" forms refer to 29000 instruction formats. The linker is - expected to know how the numeric information is split and/or aligned - within the instruction word(s). R_BYTE works for instructions, too. - - If the parameter to a CONSTH instruction is a relocatable type, two - relocation records are written. The first has an r_type of R_IHIHALF - (33 octal) and a normal r_vaddr and r_symndx. The second relocation - record has an r_type of R_IHCONST (34 octal), a normal r_vaddr (which - is redundant), and an r_symndx containing the 32-bit constant offset - to the relocation instead of the actual symbol table index. This - second record is always written, even if the constant offset is zero. - The constant fields of the instruction are set to zero. */ - -/* Line number entry declaration and related definitions: */ -struct external_lineno -{ - union - { - char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/ - char l_paddr[4]; /* (physical) address of line number */ - } - l_addr; - - char l_lnno[2]; /* line number */ -}; - -#define LINENO struct external_lineno -#define LINESZ 6 /* sizeof (LINENO) */ - -/* Symbol entry declaration and related definitions: */ -#define E_SYMNMLEN 8 /* Number of characters in a symbol name */ - -struct external_syment -{ - union - { - char e_name[E_SYMNMLEN]; - struct - { - char e_zeroes[4]; - char e_offset[4]; - } - e; - } - e; - - char e_value[4]; - char e_scnum[2]; - char e_type[2]; - char e_sclass[1]; - char e_numaux[1]; -}; - -#define SYMENT struct external_syment -#define SYMESZ 18 - -/* Storage class definitions - new classes for global registers: */ -#define C_GLBLREG 19 /* global register */ -#define C_EXTREG 20 /* external global register */ -#define C_DEFREG 21 /* ext. def. of global register */ - -/* Derived symbol mask/shifts: */ -#define N_BTMASK (0xf) -#define N_BTSHFT (4) -#define N_TMASK (0x30) -#define N_TSHIFT (2) - -/* Auxiliary symbol table entry declaration and related - definitions. */ -#define E_FILNMLEN 14 /* # characters in a file name */ -#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */ - -union external_auxent -{ - struct - { - char x_tagndx[4]; /* str, un, or enum tag indx */ - union - { - struct - { - char x_lnno[2]; /* declaration line number */ - char x_size[2]; /* str/union/array size */ - } - x_lnsz; - - char x_fsize[4]; /* size of function */ - } - x_misc; - - union - { - struct /* if ISFCN, tag, or .bb */ - { - char x_lnnoptr[4]; /* ptr to fcn line # */ - char x_endndx[4]; /* entry ndx past block end */ - } - x_fcn; - - struct /* if ISARY, up to 4 dimen. */ - { - char x_dimen[E_DIMNUM][2]; - } - x_ary; - } - x_fcnary; - - char x_tvndx[2]; /* tv index */ - } - x_sym; - - union - { - char x_fname[E_FILNMLEN]; - - struct - { - char x_zeroes[4]; - char x_offset[4]; - } - x_n; - } - x_file; - - struct - { - char x_scnlen[4]; /* section length */ - char x_nreloc[2]; /* # relocation entries */ - char x_nlinno[2]; /* # line numbers */ - } - x_scn; - - struct - { - char x_tvfill[4]; /* tv fill value */ - char x_tvlen[2]; /* length of .tv */ - char x_tvran[2][2]; /* tv range */ - } - x_tv; /* info about .tv section - (in auxent of symbol .tv)) */ -}; - -#define AUXENT union external_auxent -#define AUXESZ 18 diff --git a/include/coff/pe.h b/include/coff/pe.h deleted file mode 100644 index 643cea480c9..00000000000 --- a/include/coff/pe.h +++ /dev/null @@ -1,318 +0,0 @@ -/* pe.h - PE COFF header information - - Copyright 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -#ifndef _PE_H -#define _PE_H - -/* NT specific file attributes. */ -#define IMAGE_FILE_RELOCS_STRIPPED 0x0001 -#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 -#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 -#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 -#define IMAGE_FILE_AGGRESSIVE_WS_TRIM 0x0010 -#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 -#define IMAGE_FILE_16BIT_MACHINE 0x0040 -#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 -#define IMAGE_FILE_32BIT_MACHINE 0x0100 -#define IMAGE_FILE_DEBUG_STRIPPED 0x0200 -#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 -#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 -#define IMAGE_FILE_SYSTEM 0x1000 -#define IMAGE_FILE_DLL 0x2000 -#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 -#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 - -/* Additional flags to be set for section headers to allow the NT loader to - read and write to the section data (to replace the addresses of data in - dlls for one thing); also to execute the section in .text's case. */ -#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 -#define IMAGE_SCN_MEM_EXECUTE 0x20000000 -#define IMAGE_SCN_MEM_READ 0x40000000 -#define IMAGE_SCN_MEM_WRITE 0x80000000 - -/* Section characteristics added for ppc-nt. */ - -#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved. */ - -#define IMAGE_SCN_CNT_CODE 0x00000020 /* Section contains code. */ -#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 /* Section contains initialized data. */ -#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 /* Section contains uninitialized data. */ - -#define IMAGE_SCN_LNK_OTHER 0x00000100 /* Reserved. */ -#define IMAGE_SCN_LNK_INFO 0x00000200 /* Section contains comments or some other type of information. */ -#define IMAGE_SCN_LNK_REMOVE 0x00000800 /* Section contents will not become part of image. */ -#define IMAGE_SCN_LNK_COMDAT 0x00001000 /* Section contents comdat. */ - -#define IMAGE_SCN_MEM_FARDATA 0x00008000 - -#define IMAGE_SCN_MEM_PURGEABLE 0x00020000 -#define IMAGE_SCN_MEM_16BIT 0x00020000 -#define IMAGE_SCN_MEM_LOCKED 0x00040000 -#define IMAGE_SCN_MEM_PRELOAD 0x00080000 - -#define IMAGE_SCN_ALIGN_1BYTES 0x00100000 -#define IMAGE_SCN_ALIGN_2BYTES 0x00200000 -#define IMAGE_SCN_ALIGN_4BYTES 0x00300000 -#define IMAGE_SCN_ALIGN_8BYTES 0x00400000 -#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default alignment if no others are specified. */ -#define IMAGE_SCN_ALIGN_32BYTES 0x00600000 -#define IMAGE_SCN_ALIGN_64BYTES 0x00700000 - -#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 /* Section contains extended relocations. */ -#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 /* Section is not cachable. */ -#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 /* Section is not pageable. */ -#define IMAGE_SCN_MEM_SHARED 0x10000000 /* Section is shareable. */ - -/* COMDAT selection codes. */ - -#define IMAGE_COMDAT_SELECT_NODUPLICATES (1) /* Warn if duplicates. */ -#define IMAGE_COMDAT_SELECT_ANY (2) /* No warning. */ -#define IMAGE_COMDAT_SELECT_SAME_SIZE (3) /* Warn if different size. */ -#define IMAGE_COMDAT_SELECT_EXACT_MATCH (4) /* Warn if different. */ -#define IMAGE_COMDAT_SELECT_ASSOCIATIVE (5) /* Base on other section. */ - -/* Machine numbers. */ - -#define IMAGE_FILE_MACHINE_UNKNOWN 0x0000 -#define IMAGE_FILE_MACHINE_ALPHA 0x0184 -#define IMAGE_FILE_MACHINE_ALPHA64 0x0284 -#define IMAGE_FILE_MACHINE_AM33 0x01d3 -#define IMAGE_FILE_MACHINE_AMD64 0x8664 -#define IMAGE_FILE_MACHINE_ARM 0x01c0 -#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64 -#define IMAGE_FILE_MACHINE_CEE 0xc0ee -#define IMAGE_FILE_MACHINE_CEF 0x0cef -#define IMAGE_FILE_MACHINE_EBC 0x0ebc -#define IMAGE_FILE_MACHINE_I386 0x014c -#define IMAGE_FILE_MACHINE_IA64 0x0200 -#define IMAGE_FILE_MACHINE_M32R 0x9041 -#define IMAGE_FILE_MACHINE_M68K 0x0268 -#define IMAGE_FILE_MACHINE_MIPS16 0x0266 -#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366 -#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466 -#define IMAGE_FILE_MACHINE_POWERPC 0x01f0 -#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1 -#define IMAGE_FILE_MACHINE_R10000 0x0168 -#define IMAGE_FILE_MACHINE_R3000 0x0162 -#define IMAGE_FILE_MACHINE_R4000 0x0166 -#define IMAGE_FILE_MACHINE_SH3 0x01a2 -#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3 -#define IMAGE_FILE_MACHINE_SH3E 0x01a4 -#define IMAGE_FILE_MACHINE_SH4 0x01a6 -#define IMAGE_FILE_MACHINE_SH5 0x01a8 -#define IMAGE_FILE_MACHINE_THUMB 0x01c2 -#define IMAGE_FILE_MACHINE_TRICORE 0x0520 -#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169 - -#define IMAGE_SUBSYSTEM_UNKNOWN 0 -#define IMAGE_SUBSYSTEM_NATIVE 1 -#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 -#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 -#define IMAGE_SUBSYSTEM_POSIX_CUI 7 -#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 -#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 -#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 -#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 - -/* Magic values that are true for all dos/nt implementations. */ -#define DOSMAGIC 0x5a4d -#define NT_SIGNATURE 0x00004550 - -/* NT allows long filenames, we want to accommodate this. - This may break some of the bfd functions. */ -#undef FILNMLEN -#define FILNMLEN 18 /* # characters in a file name. */ - -struct external_PEI_DOS_hdr -{ - /* DOS header fields - always at offset zero in the EXE file. */ - char e_magic[2]; /* Magic number, 0x5a4d. */ - char e_cblp[2]; /* Bytes on last page of file, 0x90. */ - char e_cp[2]; /* Pages in file, 0x3. */ - char e_crlc[2]; /* Relocations, 0x0. */ - char e_cparhdr[2]; /* Size of header in paragraphs, 0x4. */ - char e_minalloc[2]; /* Minimum extra paragraphs needed, 0x0. */ - char e_maxalloc[2]; /* Maximum extra paragraphs needed, 0xFFFF. */ - char e_ss[2]; /* Initial (relative) SS value, 0x0. */ - char e_sp[2]; /* Initial SP value, 0xb8. */ - char e_csum[2]; /* Checksum, 0x0. */ - char e_ip[2]; /* Initial IP value, 0x0. */ - char e_cs[2]; /* Initial (relative) CS value, 0x0. */ - char e_lfarlc[2]; /* File address of relocation table, 0x40. */ - char e_ovno[2]; /* Overlay number, 0x0. */ - char e_res[4][2]; /* Reserved words, all 0x0. */ - char e_oemid[2]; /* OEM identifier (for e_oeminfo), 0x0. */ - char e_oeminfo[2]; /* OEM information; e_oemid specific, 0x0. */ - char e_res2[10][2]; /* Reserved words, all 0x0. */ - char e_lfanew[4]; /* File address of new exe header, usually 0x80. */ - char dos_message[16][4]; /* Other stuff, always follow DOS header. */ -}; - -struct external_PEI_IMAGE_hdr -{ - char nt_signature[4]; /* required NT signature, 0x4550. */ - - /* From standard header. */ - char f_magic[2]; /* Magic number. */ - char f_nscns[2]; /* Number of sections. */ - char f_timdat[4]; /* Time & date stamp. */ - char f_symptr[4]; /* File pointer to symtab. */ - char f_nsyms[4]; /* Number of symtab entries. */ - char f_opthdr[2]; /* Sizeof(optional hdr). */ - char f_flags[2]; /* Flags. */ -}; - -struct external_PEI_filehdr -{ - /* DOS header fields - always at offset zero in the EXE file. */ - char e_magic[2]; /* Magic number, 0x5a4d. */ - char e_cblp[2]; /* Bytes on last page of file, 0x90. */ - char e_cp[2]; /* Pages in file, 0x3. */ - char e_crlc[2]; /* Relocations, 0x0. */ - char e_cparhdr[2]; /* Size of header in paragraphs, 0x4. */ - char e_minalloc[2]; /* Minimum extra paragraphs needed, 0x0. */ - char e_maxalloc[2]; /* Maximum extra paragraphs needed, 0xFFFF. */ - char e_ss[2]; /* Initial (relative) SS value, 0x0. */ - char e_sp[2]; /* Initial SP value, 0xb8. */ - char e_csum[2]; /* Checksum, 0x0. */ - char e_ip[2]; /* Initial IP value, 0x0. */ - char e_cs[2]; /* Initial (relative) CS value, 0x0. */ - char e_lfarlc[2]; /* File address of relocation table, 0x40. */ - char e_ovno[2]; /* Overlay number, 0x0. */ - char e_res[4][2]; /* Reserved words, all 0x0. */ - char e_oemid[2]; /* OEM identifier (for e_oeminfo), 0x0. */ - char e_oeminfo[2]; /* OEM information; e_oemid specific, 0x0. */ - char e_res2[10][2]; /* Reserved words, all 0x0. */ - char e_lfanew[4]; /* File address of new exe header, usually 0x80. */ - char dos_message[16][4]; /* Other stuff, always follow DOS header. */ - - /* Note: additional bytes may be inserted before the signature. Use - the e_lfanew field to find the actual location of the NT signature. */ - - char nt_signature[4]; /* required NT signature, 0x4550. */ - - /* From standard header. */ - char f_magic[2]; /* Magic number. */ - char f_nscns[2]; /* Number of sections. */ - char f_timdat[4]; /* Time & date stamp. */ - char f_symptr[4]; /* File pointer to symtab. */ - char f_nsyms[4]; /* Number of symtab entries. */ - char f_opthdr[2]; /* Sizeof(optional hdr). */ - char f_flags[2]; /* Flags. */ -}; - -#ifdef COFF_IMAGE_WITH_PE - -/* The filehdr is only weird in images. */ - -#undef FILHDR -#define FILHDR struct external_PEI_filehdr -#undef FILHSZ -#define FILHSZ 152 - -#endif /* COFF_IMAGE_WITH_PE */ - -/* 32-bit PE a.out header: */ - -typedef struct -{ - AOUTHDR standard; - - /* NT extra fields; see internal.h for descriptions. */ - char ImageBase[4]; - char SectionAlignment[4]; - char FileAlignment[4]; - char MajorOperatingSystemVersion[2]; - char MinorOperatingSystemVersion[2]; - char MajorImageVersion[2]; - char MinorImageVersion[2]; - char MajorSubsystemVersion[2]; - char MinorSubsystemVersion[2]; - char Reserved1[4]; - char SizeOfImage[4]; - char SizeOfHeaders[4]; - char CheckSum[4]; - char Subsystem[2]; - char DllCharacteristics[2]; - char SizeOfStackReserve[4]; - char SizeOfStackCommit[4]; - char SizeOfHeapReserve[4]; - char SizeOfHeapCommit[4]; - char LoaderFlags[4]; - char NumberOfRvaAndSizes[4]; - /* IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; */ - char DataDirectory[16][2][4]; /* 16 entries, 2 elements/entry, 4 chars. */ -} PEAOUTHDR; -#undef AOUTSZ -#define AOUTSZ (AOUTHDRSZ + 196) - -/* Like PEAOUTHDR, except that the "standard" member has no BaseOfData - (aka data_start) member and that some of the members are 8 instead - of just 4 bytes long. */ -typedef struct -{ - AOUTHDR standard; - - /* NT extra fields; see internal.h for descriptions. */ - char ImageBase[8]; - char SectionAlignment[4]; - char FileAlignment[4]; - char MajorOperatingSystemVersion[2]; - char MinorOperatingSystemVersion[2]; - char MajorImageVersion[2]; - char MinorImageVersion[2]; - char MajorSubsystemVersion[2]; - char MinorSubsystemVersion[2]; - char Reserved1[4]; - char SizeOfImage[4]; - char SizeOfHeaders[4]; - char CheckSum[4]; - char Subsystem[2]; - char DllCharacteristics[2]; - char SizeOfStackReserve[8]; - char SizeOfStackCommit[8]; - char SizeOfHeapReserve[8]; - char SizeOfHeapCommit[8]; - char LoaderFlags[4]; - char NumberOfRvaAndSizes[4]; - /* IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; */ - char DataDirectory[16][2][4]; /* 16 entries, 2 elements/entry, 4 chars. */ -} PEPAOUTHDR; -#define PEPAOUTSZ 240 - -#undef E_FILNMLEN -#define E_FILNMLEN 18 /* # characters in a file name. */ - -/* Import Tyoes fot ILF format object files.. */ -#define IMPORT_CODE 0 -#define IMPORT_DATA 1 -#define IMPORT_CONST 2 - -/* Import Name Tyoes for ILF format object files. */ -#define IMPORT_ORDINAL 0 -#define IMPORT_NAME 1 -#define IMPORT_NAME_NOPREFIX 2 -#define IMPORT_NAME_UNDECORATE 3 - -/* Weak external characteristics. */ -#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1 -#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2 -#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3 - -#endif /* _PE_H */ diff --git a/include/coff/powerpc.h b/include/coff/powerpc.h deleted file mode 100644 index 0b1105530e4..00000000000 --- a/include/coff/powerpc.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Basic coff information for the PowerPC - Based on coff/rs6000.h, coff/i386.h and others. - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - - Initial release: Kim Knuttila (krk@cygnus.com) */ -#define L_LNNO_SIZE 2 -#define INCLUDE_COMDAT_FIELDS_IN_AUXENT -#include "coff/external.h" - -/* Bits for f_flags: - F_RELFLG relocation info stripped from file - F_EXEC file is executable (no unresolved external references) - F_LNNO line numbers stripped from file - F_LSYMS local symbols stripped from file - F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax). */ - -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_LSYMS (0x0008) - -/* extra NT defines */ -#define PPCMAGIC 0760 /* peeked on aa PowerPC Windows NT box */ -#define DOSMAGIC 0x5a4d /* from arm.h, i386.h */ -#define NT_SIGNATURE 0x00004550 /* from arm.h, i386.h */ - -/* from winnt.h */ -#define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b - -#define PPCBADMAG(x) ((x).f_magic != PPCMAGIC) - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 10 - diff --git a/include/coff/rs6000.h b/include/coff/rs6000.h deleted file mode 100644 index 5323662823e..00000000000 --- a/include/coff/rs6000.h +++ /dev/null @@ -1,267 +0,0 @@ -/* IBM RS/6000 "XCOFF" file definitions for BFD. - Copyright (C) 1990, 1991, 2001 Free Software Foundation, Inc. - FIXME: Can someone provide a transliteration of this name into ASCII? - Using the following chars caused a compiler warning on HIUX (so I replaced - them with octal escapes), and isn't useful without an understanding of what - character set it is. - Written by Mimi Ph\373\364ng-Th\345o V\365 of IBM - and John Gilmore of Cygnus Support. */ - -/********************** FILE HEADER **********************/ - -struct external_filehdr { - char f_magic[2]; /* magic number */ - char f_nscns[2]; /* number of sections */ - char f_timdat[4]; /* time & date stamp */ - char f_symptr[4]; /* file pointer to symtab */ - char f_nsyms[4]; /* number of symtab entries */ - char f_opthdr[2]; /* sizeof(optional hdr) */ - char f_flags[2]; /* flags */ -}; - - /* IBM RS/6000 */ -#define U802WRMAGIC 0730 /* writeable text segments **chh** */ -#define U802ROMAGIC 0735 /* readonly sharable text segments */ -#define U802TOCMAGIC 0737 /* readonly text segments and TOC */ - -#define BADMAG(x) \ - ((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \ - (x).f_magic != U802TOCMAGIC) - -#define FILHDR struct external_filehdr -#define FILHSZ 20 - - -/********************** AOUT "OPTIONAL HEADER" **********************/ - - -typedef struct -{ - unsigned char magic[2]; /* type of file */ - unsigned char vstamp[2]; /* version stamp */ - unsigned char tsize[4]; /* text size in bytes, padded to FW bdry */ - unsigned char dsize[4]; /* initialized data " " */ - unsigned char bsize[4]; /* uninitialized data " " */ - unsigned char entry[4]; /* entry pt. */ - unsigned char text_start[4]; /* base of text used for this file */ - unsigned char data_start[4]; /* base of data used for this file */ - unsigned char o_toc[4]; /* address of TOC */ - unsigned char o_snentry[2]; /* section number of entry point */ - unsigned char o_sntext[2]; /* section number of .text section */ - unsigned char o_sndata[2]; /* section number of .data section */ - unsigned char o_sntoc[2]; /* section number of TOC */ - unsigned char o_snloader[2]; /* section number of .loader section */ - unsigned char o_snbss[2]; /* section number of .bss section */ - unsigned char o_algntext[2]; /* .text alignment */ - unsigned char o_algndata[2]; /* .data alignment */ - unsigned char o_modtype[2]; /* module type (??) */ - unsigned char o_cputype[2]; /* cpu type */ - unsigned char o_maxstack[4]; /* max stack size (??) */ - unsigned char o_maxdata[4]; /* max data size (??) */ - unsigned char o_resv2[12]; /* reserved */ -} -AOUTHDR; - -#define AOUTSZ 72 -#define SMALL_AOUTSZ (28) -#define AOUTHDRSZ 72 - -/********************** SECTION HEADER **********************/ - - -struct external_scnhdr { - char s_name[8]; /* section name */ - char s_paddr[4]; /* physical address, aliased s_nlib */ - char s_vaddr[4]; /* virtual address */ - char s_size[4]; /* section size */ - char s_scnptr[4]; /* file ptr to raw data for section */ - char s_relptr[4]; /* file ptr to relocation */ - char s_lnnoptr[4]; /* file ptr to line numbers */ - char s_nreloc[2]; /* number of relocation entries */ - char s_nlnno[2]; /* number of line number entries*/ - char s_flags[4]; /* flags */ -}; - -#define SCNHDR struct external_scnhdr -#define SCNHSZ 40 - -/********************** LINE NUMBERS **********************/ - -/* 1 line number entry for every "breakpointable" source line in a section. - * Line numbers are grouped on a per function basis; first entry in a function - * grouping will have l_lnno = 0 and in place of physical address will be the - * symbol table index of the function name. - */ -struct external_lineno { - union { - char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/ - char l_paddr[4]; /* (physical) address of line number */ - } l_addr; - char l_lnno[2]; /* line number */ -}; - - -#define LINENO struct external_lineno -#define LINESZ 6 - - -/********************** SYMBOLS **********************/ - -#define E_SYMNMLEN 8 /* # characters in a symbol name */ -#define E_FILNMLEN 14 /* # characters in a file name */ -#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */ - -struct external_syment -{ - union { - char e_name[E_SYMNMLEN]; - struct { - char e_zeroes[4]; - char e_offset[4]; - } e; - } e; - char e_value[4]; - char e_scnum[2]; - char e_type[2]; - char e_sclass[1]; - char e_numaux[1]; -}; - - - -#define N_BTMASK (017) -#define N_TMASK (060) -#define N_BTSHFT (4) -#define N_TSHIFT (2) - - -union external_auxent { - struct { - char x_tagndx[4]; /* str, un, or enum tag indx */ - union { - struct { - char x_lnno[2]; /* declaration line number */ - char x_size[2]; /* str/union/array size */ - } x_lnsz; - char x_fsize[4]; /* size of function */ - } x_misc; - union { - struct { /* if ISFCN, tag, or .bb */ - char x_lnnoptr[4]; /* ptr to fcn line # */ - char x_endndx[4]; /* entry ndx past block end */ - } x_fcn; - struct { /* if ISARY, up to 4 dimen. */ - char x_dimen[E_DIMNUM][2]; - } x_ary; - } x_fcnary; - char x_tvndx[2]; /* tv index */ - } x_sym; - - union { - char x_fname[E_FILNMLEN]; - struct { - char x_zeroes[4]; - char x_offset[4]; - } x_n; - } x_file; - - struct { - char x_scnlen[4]; /* section length */ - char x_nreloc[2]; /* # relocation entries */ - char x_nlinno[2]; /* # line numbers */ - } x_scn; - - struct { - char x_tvfill[4]; /* tv fill value */ - char x_tvlen[2]; /* length of .tv */ - char x_tvran[2][2]; /* tv range */ - } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ - - struct { - unsigned char x_scnlen[4]; - unsigned char x_parmhash[4]; - unsigned char x_snhash[2]; - unsigned char x_smtyp[1]; - unsigned char x_smclas[1]; - unsigned char x_stab[4]; - unsigned char x_snstab[2]; - } x_csect; - -}; - -#define SYMENT struct external_syment -#define SYMESZ 18 -#define AUXENT union external_auxent -#define AUXESZ 18 -#define DBXMASK 0x80 /* for dbx storage mask */ -#define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK) - - - -/********************** RELOCATION DIRECTIVES **********************/ - - -struct external_reloc { - char r_vaddr[4]; - char r_symndx[4]; - char r_size[1]; - char r_type[1]; -}; - - -#define RELOC struct external_reloc -#define RELSZ 10 - -#define DEFAULT_DATA_SECTION_ALIGNMENT 4 -#define DEFAULT_BSS_SECTION_ALIGNMENT 4 -#define DEFAULT_TEXT_SECTION_ALIGNMENT 4 -/* For new sections we havn't heard of before */ -#define DEFAULT_SECTION_ALIGNMENT 4 - -/* The ldhdr structure. This appears at the start of the .loader - section. */ - -struct external_ldhdr -{ - bfd_byte l_version[4]; - bfd_byte l_nsyms[4]; - bfd_byte l_nreloc[4]; - bfd_byte l_istlen[4]; - bfd_byte l_nimpid[4]; - bfd_byte l_impoff[4]; - bfd_byte l_stlen[4]; - bfd_byte l_stoff[4]; -}; - -#define LDHDRSZ (8 * 4) - -struct external_ldsym -{ - union - { - bfd_byte _l_name[SYMNMLEN]; - struct - { - bfd_byte _l_zeroes[4]; - bfd_byte _l_offset[4]; - } _l_l; - } _l; - bfd_byte l_value[4]; - bfd_byte l_scnum[2]; - bfd_byte l_smtype[1]; - bfd_byte l_smclas[1]; - bfd_byte l_ifile[4]; - bfd_byte l_parm[4]; -}; - -#define LDSYMSZ (8 + 3 * 4 + 2 + 2) - -struct external_ldrel -{ - bfd_byte l_vaddr[4]; - bfd_byte l_symndx[4]; - bfd_byte l_rtype[2]; - bfd_byte l_rsecnm[2]; -}; - -#define LDRELSZ (2 * 4 + 2 * 2) diff --git a/include/coff/rs6k64.h b/include/coff/rs6k64.h deleted file mode 100644 index 388818dc4d2..00000000000 --- a/include/coff/rs6k64.h +++ /dev/null @@ -1,260 +0,0 @@ -/* IBM RS/6000 "XCOFF64" file definitions for BFD. - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/********************** FILE HEADER **********************/ - -struct external_filehdr -{ - char f_magic[2]; /* magic number */ - char f_nscns[2]; /* number of sections */ - char f_timdat[4]; /* time & date stamp */ - char f_symptr[8]; /* file pointer to symtab */ - char f_opthdr[2]; /* sizeof(optional hdr) */ - char f_flags[2]; /* flags */ - char f_nsyms[4]; /* number of symtab entries */ -}; - -/* IBM RS/6000. */ -#define U803XTOCMAGIC 0757 /* Aix 4.3 64-bit XCOFF */ -#define U64_TOCMAGIC 0767 /* AIX 5+ 64-bit XCOFF */ -#define BADMAG(x) ((x).f_magic != U803XTOCMAGIC && (x).f_magic != U64_TOCMAGIC) - -#define FILHDR struct external_filehdr -#define FILHSZ 24 - -/********************** AOUT "OPTIONAL HEADER" **********************/ - -typedef struct -{ - unsigned char magic[2]; /* type of file */ - unsigned char vstamp[2]; /* version stamp */ - unsigned char o_debugger[4]; /* reserved */ - unsigned char text_start[8]; /* base of text used for this file */ - unsigned char data_start[8]; /* base of data used for this file */ - unsigned char o_toc[8]; /* address of TOC */ - unsigned char o_snentry[2]; /* section number of entry point */ - unsigned char o_sntext[2]; /* section number of .text section */ - unsigned char o_sndata[2]; /* section number of .data section */ - unsigned char o_sntoc[2]; /* section number of TOC */ - unsigned char o_snloader[2]; /* section number of .loader section */ - unsigned char o_snbss[2]; /* section number of .bss section */ - unsigned char o_algntext[2]; /* .text alignment */ - unsigned char o_algndata[2]; /* .data alignment */ - unsigned char o_modtype[2]; /* module type (??) */ - unsigned char o_cputype[2]; /* cpu type */ - unsigned char o_resv2[4]; /* reserved */ - unsigned char tsize[8]; /* text size bytes, padded to FW bdry */ - unsigned char dsize[8]; /* initialized data " " */ - unsigned char bsize[8]; /* uninitialized data " " */ - unsigned char entry[8]; /* entry pt. */ - unsigned char o_maxstack[8]; /* max stack size (??) */ - unsigned char o_maxdata[8]; /* max data size (??) */ - unsigned char o_resv3[16]; /* reserved */ -} -AOUTHDR; - -#define AOUTSZ 120 -#define SMALL_AOUTSZ (0) -#define AOUTHDRSZ 72 - -/********************** SECTION HEADER **********************/ - -struct external_scnhdr -{ - char s_name[8]; /* section name */ - char s_paddr[8]; /* physical address, aliased s_nlib */ - char s_vaddr[8]; /* virtual address */ - char s_size[8]; /* section size */ - char s_scnptr[8]; /* file ptr to raw data for section */ - char s_relptr[8]; /* file ptr to relocation */ - char s_lnnoptr[8]; /* file ptr to line numbers */ - char s_nreloc[4]; /* number of relocation entries */ - char s_nlnno[4]; /* number of line number entries*/ - char s_flags[4]; /* flags */ - char s_pad[4]; /* padding */ -}; - -#define SCNHDR struct external_scnhdr - -#define SCNHSZ 72 - -/********************** LINE NUMBERS **********************/ - -/* 1 line number entry for every "breakpointable" source line in a section. - Line numbers are grouped on a per function basis; first entry in a function - grouping will have l_lnno = 0 and in place of physical address will be the - symbol table index of the function name. */ - -struct external_lineno -{ - union - { - char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/ - char l_paddr[8]; /* (physical) address of line number */ - } l_addr; - - char l_lnno[4]; /* line number */ -}; - -#define LINENO struct external_lineno - -#define LINESZ 12 - -/********************** SYMBOLS **********************/ - -#define E_SYMNMLEN 8 /* # characters in a symbol name */ -#define E_FILNMLEN 14 /* # characters in a file name */ -#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */ - -struct external_syment -{ - char e_value[8]; - char e_offset[4]; - char e_scnum[2]; - char e_type[2]; - char e_sclass[1]; - char e_numaux[1]; -}; - -#define N_BTMASK (017) -#define N_TMASK (060) -#define N_BTSHFT (4) -#define N_TSHIFT (2) - -union external_auxent -{ - struct { - union { - struct { - char x_lnno[4]; /* declaration line number */ - char x_size[2]; /* str/union/array size */ - } x_lnsz; - struct { - char x_lnnoptr[8];/* ptr to fcn line */ - char x_fsize[4]; /* size of function */ - char x_endndx[4]; /* entry ndx past block end */ - } x_fcn; - } x_fcnary; - } x_sym; - - union { - char x_fname[E_FILNMLEN]; - struct { - char x_zeroes[4]; - char x_offset[4]; - char x_pad[6]; - unsigned char x_ftype[1]; - unsigned char x_resv[2]; - } x_n; - } x_file; - - struct { - char x_exptr[8]; - char x_fsize[4]; - char x_endndx[4]; - char x_pad[1]; - } x_except; - - struct { - unsigned char x_scnlen_lo[4]; - unsigned char x_parmhash[4]; - unsigned char x_snhash[2]; - unsigned char x_smtyp[1]; - unsigned char x_smclas[1]; - unsigned char x_scnlen_hi[4]; - unsigned char x_pad[1]; - } x_csect; - - struct { - char x_pad[17]; - char x_auxtype[1]; - } x_auxtype; -}; - -#define SYMENT struct external_syment -#define SYMESZ 18 -#define AUXENT union external_auxent -#define AUXESZ 18 -#define DBXMASK 0x80 /* for dbx storage mask */ -#define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK) - -/* Values for auxtype field in XCOFF64, taken from AIX 4.3 sym.h. */ -#define _AUX_EXCEPT 255 -#define _AUX_FCN 254 -#define _AUX_SYM 253 -#define _AUX_FILE 252 -#define _AUX_CSECT 251 - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[8]; - char r_symndx[4]; - char r_size[1]; - char r_type[1]; -}; - -#define RELOC struct external_reloc -#define RELSZ 14 - -#define DEFAULT_DATA_SECTION_ALIGNMENT 4 -#define DEFAULT_BSS_SECTION_ALIGNMENT 4 -#define DEFAULT_TEXT_SECTION_ALIGNMENT 4 -/* For new sections we havn't heard of before */ -#define DEFAULT_SECTION_ALIGNMENT 4 - -/* The ldhdr structure. This appears at the start of the .loader - section. */ - -struct external_ldhdr -{ - bfd_byte l_version[4]; - bfd_byte l_nsyms[4]; - bfd_byte l_nreloc[4]; - bfd_byte l_istlen[4]; - bfd_byte l_nimpid[4]; - bfd_byte l_stlen[4]; - bfd_byte l_impoff[8]; - bfd_byte l_stoff[8]; - bfd_byte l_symoff[8]; - bfd_byte l_rldoff[8]; -}; -#define LDHDRSZ (56) - -struct external_ldsym -{ - bfd_byte l_value[8]; - bfd_byte l_offset[4]; - bfd_byte l_scnum[2]; - bfd_byte l_smtype[1]; - bfd_byte l_smclas[1]; - bfd_byte l_ifile[4]; - bfd_byte l_parm[4]; -}; - -#define LDSYMSZ (24) - -struct external_ldrel -{ - bfd_byte l_vaddr[8]; - bfd_byte l_rtype[2]; - bfd_byte l_rsecnm[2]; - bfd_byte l_symndx[4]; -}; - -#define LDRELSZ (16) diff --git a/include/coff/sh.h b/include/coff/sh.h deleted file mode 100644 index 5349a1074e6..00000000000 --- a/include/coff/sh.h +++ /dev/null @@ -1,147 +0,0 @@ -/* coff information for Renesas SH - - Copyright 2000, 2003 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifdef COFF_WITH_PE -#define L_LNNO_SIZE 2 -#else -#define L_LNNO_SIZE 4 -#endif -#define INCLUDE_COMDAT_FIELDS_IN_AUXENT -#include "coff/external.h" - -#define SH_ARCH_MAGIC_BIG 0x0500 -#define SH_ARCH_MAGIC_LITTLE 0x0550 /* Little endian SH */ -#define SH_ARCH_MAGIC_WINCE 0x01a2 /* Windows CE - little endian */ -#define SH_PE_MAGIC 0x010b - -#define SHBADMAG(x) \ - (((x).f_magic != SH_ARCH_MAGIC_BIG) && \ - ((x).f_magic != SH_ARCH_MAGIC_WINCE) && \ - ((x).f_magic != SH_ARCH_MAGIC_LITTLE)) - -/* Define some NT default values. */ -/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */ -#define NT_SECTION_ALIGNMENT 0x1000 -#define NT_FILE_ALIGNMENT 0x200 -#define NT_DEF_RESERVE 0x100000 -#define NT_DEF_COMMIT 0x1000 - -/********************** RELOCATION DIRECTIVES **********************/ - -/* The external reloc has an offset field, because some of the reloc - types on the h8 don't have room in the instruction for the entire - offset - eg the strange jump and high page addressing modes. */ - -#ifndef COFF_WITH_PE -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_offset[4]; - char r_type[2]; - char r_stuff[2]; -}; -#else -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; -}; -#endif - -#define RELOC struct external_reloc -#ifdef COFF_WITH_PE -#define RELSZ 10 -#else -#define RELSZ 16 -#endif - -/* SH relocation types. Not all of these are actually used. */ - -#define R_SH_UNUSED 0 /* only used internally */ -#define R_SH_IMM32CE 2 /* 32 bit immediate for WinCE */ -#define R_SH_PCREL8 3 /* 8 bit pcrel */ -#define R_SH_PCREL16 4 /* 16 bit pcrel */ -#define R_SH_HIGH8 5 /* high 8 bits of 24 bit address */ -#define R_SH_LOW16 7 /* low 16 bits of 24 bit immediate */ -#define R_SH_IMM24 6 /* 24 bit immediate */ -#define R_SH_PCDISP8BY4 9 /* PC rel 8 bits *4 +ve */ -#define R_SH_PCDISP8BY2 10 /* PC rel 8 bits *2 +ve */ -#define R_SH_PCDISP8 11 /* 8 bit branch */ -#define R_SH_PCDISP 12 /* 12 bit branch */ -#define R_SH_IMM32 14 /* 32 bit immediate */ -#define R_SH_IMM8 16 /* 8 bit immediate */ -#define R_SH_IMAGEBASE 16 /* Windows CE */ -#define R_SH_IMM8BY2 17 /* 8 bit immediate *2 */ -#define R_SH_IMM8BY4 18 /* 8 bit immediate *4 */ -#define R_SH_IMM4 19 /* 4 bit immediate */ -#define R_SH_IMM4BY2 20 /* 4 bit immediate *2 */ -#define R_SH_IMM4BY4 21 /* 4 bit immediate *4 */ -#define R_SH_PCRELIMM8BY2 22 /* PC rel 8 bits *2 unsigned */ -#define R_SH_PCRELIMM8BY4 23 /* PC rel 8 bits *4 unsigned */ -#define R_SH_IMM16 24 /* 16 bit immediate */ - -/* The switch table reloc types are used for relaxing. They are - generated for expressions such as - .word L1 - L2 - The r_offset field holds the difference between the reloc address - and L2. */ -#define R_SH_SWITCH8 33 /* 8 bit switch table entry */ -#define R_SH_SWITCH16 25 /* 16 bit switch table entry */ -#define R_SH_SWITCH32 26 /* 32 bit switch table entry */ - -/* The USES reloc type is used for relaxing. The compiler will - generate .uses pseudo-ops when it finds a function call which it - can relax. The r_offset field of the USES reloc holds the PC - relative offset to the instruction which loads the register used in - the function call. */ -#define R_SH_USES 27 /* .uses pseudo-op */ - -/* The COUNT reloc type is used for relaxing. The assembler will - generate COUNT relocs for addresses referred to by the register - loads associated with USES relocs. The r_offset field of the COUNT - reloc holds the number of times the address is referenced in the - object file. */ -#define R_SH_COUNT 28 /* Count of constant pool uses */ - -/* The ALIGN reloc type is used for relaxing. The r_offset field is - the power of two to which subsequent portions of the object file - must be aligned. */ -#define R_SH_ALIGN 29 /* .align pseudo-op */ - -/* The CODE and DATA reloc types are used for aligning load and store - instructions. The assembler will generate a CODE reloc before a - block of instructions. It will generate a DATA reloc before data. - A section should be processed assuming it contains data, unless a - CODE reloc is seen. The only relevant pieces of information in the - CODE and DATA relocs are the section and the address. The symbol - and offset are meaningless. */ -#define R_SH_CODE 30 /* start of code */ -#define R_SH_DATA 31 /* start of data */ - -/* The LABEL reloc type is used for aligning load and store - instructions. The assembler will generate a LABEL reloc for each - label within a block of instructions. This permits the linker to - avoid swapping instructions which are the targets of branches. */ -#define R_SH_LABEL 32 /* label */ - -/* NB: R_SH_SWITCH8 is 33 */ - -#define R_SH_LOOP_START 34 -#define R_SH_LOOP_END 35 diff --git a/include/coff/sparc.h b/include/coff/sparc.h deleted file mode 100644 index fb475f1a588..00000000000 --- a/include/coff/sparc.h +++ /dev/null @@ -1,155 +0,0 @@ -/* coff information for Sparc. - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file is an amalgamation of several standard include files that - define coff format, such as filehdr.h, aouthdr.h, and so forth. In - addition, all datatypes have been translated into character arrays of - (presumed) equivalent size. This is necessary so that this file can - be used with different systems while still yielding the same results. */ - -#define L_LNNO_SIZE 2 -#define DO_NOT_DEFINE_SYMENT -#define DO_NOT_DEFINE_AUXENT -#include "coff/external.h" - -#define F_RELFLG (0x0001) /* relocation info stripped */ -#define F_EXEC (0x0002) /* file is executable */ -#define F_LNNO (0x0004) /* line numbers stripped */ -#define F_LSYMS (0x0008) /* local symbols stripped */ - -#define SPARCMAGIC (0540) - -/* This is Lynx's all-platform magic number for executables. */ - -#define LYNXCOFFMAGIC (0415) - -#define OMAGIC 0404 /* object files, eg as output */ -#define ZMAGIC 0413 /* demand load format, eg normal ld output */ -#define STMAGIC 0401 /* target shlib */ -#define SHMAGIC 0443 /* host shlib */ - -/* More names of "special" sections. */ - -#define _TV ".tv" -#define _INIT ".init" -#define _FINI ".fini" - -/********************** SYMBOLS **********************/ - -#define E_SYMNMLEN (8) /* # characters in a symbol name */ -#define E_FILNMLEN (14) /* # characters in a file name */ -#define E_DIMNUM (4) /* # array dimensions in auxiliary entry */ - -struct external_syment -{ - union { - char e_name[E_SYMNMLEN]; - struct { - char e_zeroes[4]; - char e_offset[4]; - } e; -#if 0 /* of doubtful value */ - char e_nptr[2][4]; - struct { - char e_leading_zero[1]; - char e_dbx_type[1]; - char e_dbx_desc[2]; - } e_dbx; -#endif - } e; - - char e_value[4]; - char e_scnum[2]; - char e_type[2]; - char e_sclass[1]; - char e_numaux[1]; - char padding[2]; -}; - -#define N_BTMASK (0xf) -#define N_TMASK (0x30) -#define N_BTSHFT (4) -#define N_TSHIFT (2) - -union external_auxent -{ - struct { - char x_tagndx[4]; /* str, un, or enum tag indx */ - union { - struct { - char x_lnno[2]; /* declaration line number */ - char x_size[2]; /* str/union/array size */ - } x_lnsz; - char x_fsize[4]; /* size of function */ - } x_misc; - union { - struct { /* if ISFCN, tag, or .bb */ - char x_lnnoptr[4]; /* ptr to fcn line # */ - char x_endndx[4]; /* entry ndx past block end */ - } x_fcn; - struct { /* if ISARY, up to 4 dimen. */ - char x_dimen[E_DIMNUM][2]; - } x_ary; - } x_fcnary; - char x_tvndx[2]; /* tv index */ - } x_sym; - - union { - char x_fname[E_FILNMLEN]; - struct { - char x_zeroes[4]; - char x_offset[4]; - } x_n; - } x_file; - - struct { - char x_scnlen[4]; /* section length */ - char x_nreloc[2]; /* # relocation entries */ - char x_nlinno[2]; /* # line numbers */ - } x_scn; - - struct { - char x_tvfill[4]; /* tv fill value */ - char x_tvlen[2]; /* length of .tv */ - char x_tvran[2][2]; /* tv range */ - } x_tv; /* .tv section info (in auxent of sym .tv)) */ - - char x_fill[20]; /* forces to 20-byte size */ -}; - -#define SYMENT struct external_syment -#define SYMESZ 20 -#define AUXENT union external_auxent -#define AUXESZ 20 - -#define _ETEXT "etext" - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; - char r_spare[2]; - char r_offset[4]; -}; - -#define RELOC struct external_reloc -#define RELSZ 16 - diff --git a/include/coff/sym.h b/include/coff/sym.h deleted file mode 100644 index 76204af59ad..00000000000 --- a/include/coff/sym.h +++ /dev/null @@ -1,484 +0,0 @@ -/* Declarations of internal format of MIPS ECOFF symbols. - Originally contributed by MIPS Computer Systems and Third Eye Software. - Changes contributed by Cygnus Support are in the public domain. - - This file is just aggregated with the files that make up the GNU - release; it is not considered part of GAS, GDB, or other GNU - programs. */ - -/* - * |-----------------------------------------------------------| - * | Copyright (c) 1992, 1991, 1990 MIPS Computer Systems, Inc.| - * | MIPS Computer Systems, Inc. grants reproduction and use | - * | rights to all parties, PROVIDED that this comment is | - * | maintained in the copy. | - * |-----------------------------------------------------------| - */ -#ifndef _SYM_H -#define _SYM_H - -/* (C) Copyright 1984 by Third Eye Software, Inc. - * - * Third Eye Software, Inc. grants reproduction and use rights to - * all parties, PROVIDED that this comment is maintained in the copy. - * - * Third Eye makes no claims about the applicability of this - * symbol table to a particular use. - */ - -/* - * This file contains the definition of the Third Eye Symbol Table. - * - * Symbols are assumed to be in 'encounter order' - i.e. the order that - * the things they represent were encountered by the compiler/assembler/loader. - * EXCEPT for globals! These are assumed to be bunched together, - * probably right after the last 'normal' symbol. Globals ARE sorted - * in ascending order. - * - * ----------------------------------------------------------------------- - * A brief word about Third Eye naming/use conventions: - * - * All arrays and index's are 0 based. - * All "ifooMax" values are the highest legal value PLUS ONE. This makes - * them good for allocating arrays, etc. All checks are "ifoo < ifooMax". - * - * "isym" Index into the SYMbol table. - * "ipd" Index into the Procedure Descriptor array. - * "ifd" Index into the File Descriptor array. - * "iss" Index into String Space. - * "cb" Count of Bytes. - * "rgPd" array whose domain is "0..ipdMax-1" and RanGe is PDR. - * "rgFd" array whose domain is "0..ifdMax-1" and RanGe is FDR. - */ - - -/* - * Symbolic Header (HDR) structure. - * As long as all the pointers are set correctly, - * we don't care WHAT order the various sections come out in! - * - * A file produced solely for the use of CDB will probably NOT have - * any instructions or data areas in it, as these are available - * in the original. - */ - -typedef struct { - short magic; /* to verify validity of the table */ - short vstamp; /* version stamp */ - long ilineMax; /* number of line number entries */ - bfd_vma cbLine; /* number of bytes for line number entries */ - bfd_vma cbLineOffset; /* offset to start of line number entries*/ - long idnMax; /* max index into dense number table */ - bfd_vma cbDnOffset; /* offset to start dense number table */ - long ipdMax; /* number of procedures */ - bfd_vma cbPdOffset; /* offset to procedure descriptor table */ - long isymMax; /* number of local symbols */ - bfd_vma cbSymOffset; /* offset to start of local symbols*/ - long ioptMax; /* max index into optimization symbol entries */ - bfd_vma cbOptOffset; /* offset to optimization symbol entries */ - long iauxMax; /* number of auxillary symbol entries */ - bfd_vma cbAuxOffset; /* offset to start of auxillary symbol entries*/ - long issMax; /* max index into local strings */ - bfd_vma cbSsOffset; /* offset to start of local strings */ - long issExtMax; /* max index into external strings */ - bfd_vma cbSsExtOffset; /* offset to start of external strings */ - long ifdMax; /* number of file descriptor entries */ - bfd_vma cbFdOffset; /* offset to file descriptor table */ - long crfd; /* number of relative file descriptor entries */ - bfd_vma cbRfdOffset; /* offset to relative file descriptor table */ - long iextMax; /* max index into external symbols */ - bfd_vma cbExtOffset; /* offset to start of external symbol entries*/ - /* If you add machine dependent fields, add them here */ - } HDRR, *pHDRR; -#define cbHDRR sizeof(HDRR) -#define hdrNil ((pHDRR)0) - -/* - * The FDR and PDR structures speed mapping of address <-> name. - * They are sorted in ascending memory order and are kept in - * memory by CDB at runtime. - */ - -/* - * File Descriptor - * - * There is one of these for EVERY FILE, whether compiled with - * full debugging symbols or not. The name of a file should be - * the path name given to the compiler. This allows the user - * to simply specify the names of the directories where the COMPILES - * were done, and we will be able to find their files. - * A field whose comment starts with "R - " indicates that it will be - * setup at runtime. - */ -typedef struct fdr { - bfd_vma adr; /* memory address of beginning of file */ - long rss; /* file name (of source, if known) */ - long issBase; /* file's string space */ - bfd_vma cbSs; /* number of bytes in the ss */ - long isymBase; /* beginning of symbols */ - long csym; /* count file's of symbols */ - long ilineBase; /* file's line symbols */ - long cline; /* count of file's line symbols */ - long ioptBase; /* file's optimization entries */ - long copt; /* count of file's optimization entries */ - unsigned short ipdFirst;/* start of procedures for this file */ - short cpd; /* count of procedures for this file */ - long iauxBase; /* file's auxiliary entries */ - long caux; /* count of file's auxiliary entries */ - long rfdBase; /* index into the file indirect table */ - long crfd; /* count file indirect entries */ - unsigned lang: 5; /* language for this file */ - unsigned fMerge : 1; /* whether this file can be merged */ - unsigned fReadin : 1; /* true if it was read in (not just created) */ - unsigned fBigendian : 1;/* if set, was compiled on big endian machine */ - /* aux's will be in compile host's sex */ - unsigned glevel : 2; /* level this file was compiled with */ - unsigned reserved : 22; /* reserved for future use */ - bfd_vma cbLineOffset; /* byte offset from header for this file ln's */ - bfd_vma cbLine; /* size of lines for this file */ - } FDR, *pFDR; -#define cbFDR sizeof(FDR) -#define fdNil ((pFDR)0) -#define ifdNil -1 -#define ifdTemp 0 -#define ilnNil -1 - - -/* - * Procedure Descriptor - * - * There is one of these for EVERY TEXT LABEL. - * If a procedure is in a file with full symbols, then isym - * will point to the PROC symbols, else it will point to the - * global symbol for the label. - */ - -typedef struct pdr { - bfd_vma adr; /* memory address of start of procedure */ - long isym; /* start of local symbol entries */ - long iline; /* start of line number entries*/ - long regmask; /* save register mask */ - long regoffset; /* save register offset */ - long iopt; /* start of optimization symbol entries*/ - long fregmask; /* save floating point register mask */ - long fregoffset; /* save floating point register offset */ - long frameoffset; /* frame size */ - short framereg; /* frame pointer register */ - short pcreg; /* offset or reg of return pc */ - long lnLow; /* lowest line in the procedure */ - long lnHigh; /* highest line in the procedure */ - bfd_vma cbLineOffset; /* byte offset for this procedure from the fd base */ - /* These fields are new for 64 bit ECOFF. */ - unsigned gp_prologue : 8; /* byte size of GP prologue */ - unsigned gp_used : 1; /* true if the procedure uses GP */ - unsigned reg_frame : 1; /* true if register frame procedure */ - unsigned prof : 1; /* true if compiled with -pg */ - unsigned reserved : 13; /* reserved: must be zero */ - unsigned localoff : 8; /* offset of local variables from vfp */ - } PDR, *pPDR; -#define cbPDR sizeof(PDR) -#define pdNil ((pPDR) 0) -#define ipdNil -1 - -/* - * The structure of the runtime procedure descriptor created by the loader - * for use by the static exception system. - */ -/* - * If 0'd out because exception_info chokes Visual C++ and because there - * don't seem to be any references to this structure elsewhere in gdb. - */ -#if 0 -typedef struct runtime_pdr { - bfd_vma adr; /* memory address of start of procedure */ - long regmask; /* save register mask */ - long regoffset; /* save register offset */ - long fregmask; /* save floating point register mask */ - long fregoffset; /* save floating point register offset */ - long frameoffset; /* frame size */ - short framereg; /* frame pointer register */ - short pcreg; /* offset or reg of return pc */ - long irpss; /* index into the runtime string table */ - long reserved; - struct exception_info *exception_info;/* pointer to exception array */ -} RPDR, *pRPDR; -#define cbRPDR sizeof(RPDR) -#define rpdNil ((pRPDR) 0) -#endif - -/* - * Line Numbers - * - * Line Numbers are segregated from the normal symbols because they - * are [1] smaller , [2] are of no interest to your - * average loader, and [3] are never needed in the middle of normal - * scanning and therefore slow things down. - * - * By definition, the first LINER for any given procedure will have - * the first line of a procedure and represent the first address. - */ - -typedef long LINER, *pLINER; -#define lineNil ((pLINER)0) -#define cbLINER sizeof(LINER) -#define ilineNil -1 - - - -/* - * The Symbol Structure (GFW, to those who Know!) - */ - -typedef struct { - long iss; /* index into String Space of name */ - bfd_vma value; /* value of symbol */ - unsigned st : 6; /* symbol type */ - unsigned sc : 5; /* storage class - text, data, etc */ - unsigned reserved : 1; /* reserved */ - unsigned index : 20; /* index into sym/aux table */ - } SYMR, *pSYMR; -#define symNil ((pSYMR)0) -#define cbSYMR sizeof(SYMR) -#define isymNil -1 -#define indexNil 0xfffff -#define issNil -1 -#define issNull 0 - - -/* The following converts a memory resident string to an iss. - * This hack is recognized in SbFIss, in sym.c of the debugger. - */ -#define IssFSb(sb) (0x80000000 | ((unsigned long)(sb))) - -/* E X T E R N A L S Y M B O L R E C O R D - * - * Same as the SYMR except it contains file context to determine where - * the index is. - */ -typedef struct ecoff_extr { - unsigned jmptbl:1; /* symbol is a jump table entry for shlibs */ - unsigned cobol_main:1; /* symbol is a cobol main procedure */ - unsigned weakext:1; /* symbol is weak external */ - unsigned reserved:13; /* reserved for future use */ - int ifd; /* where the iss and index fields point into */ - SYMR asym; /* symbol for the external */ - } EXTR, *pEXTR; -#define extNil ((pEXTR)0) -#define cbEXTR sizeof(EXTR) - - -/* A U X I L L A R Y T Y P E I N F O R M A T I O N */ - -/* - * Type Information Record - */ -typedef struct { - unsigned fBitfield : 1; /* set if bit width is specified */ - unsigned continued : 1; /* indicates additional TQ info in next AUX */ - unsigned bt : 6; /* basic type */ - unsigned tq4 : 4; - unsigned tq5 : 4; - /* ---- 16 bit boundary ---- */ - unsigned tq0 : 4; - unsigned tq1 : 4; /* 6 type qualifiers - tqPtr, etc. */ - unsigned tq2 : 4; - unsigned tq3 : 4; - } TIR, *pTIR; -#define cbTIR sizeof(TIR) -#define tiNil ((pTIR)0) -#define itqMax 6 - -/* - * Relative symbol record - * - * If the rfd field is 4095, the index field indexes into the global symbol - * table. - */ - -typedef struct { - unsigned rfd : 12; /* index into the file indirect table */ - unsigned index : 20; /* index int sym/aux/iss tables */ - } RNDXR, *pRNDXR; -#define cbRNDXR sizeof(RNDXR) -#define rndxNil ((pRNDXR)0) - -/* dense numbers or sometimes called block numbers are stored in this type, - * a rfd of 0xffffffff is an index into the global table. - */ -typedef struct { - unsigned long rfd; /* index into the file table */ - unsigned long index; /* index int sym/aux/iss tables */ - } DNR, *pDNR; -#define cbDNR sizeof(DNR) -#define dnNil ((pDNR)0) - - - -/* - * Auxillary information occurs only if needed. - * It ALWAYS occurs in this order when present. - - isymMac used by stProc only - TIR type info - TIR additional TQ info (if first TIR was not enough) - rndx if (bt == btStruct,btUnion,btEnum,btSet,btRange, - btTypedef): - rsym.index == iaux for btSet or btRange - else rsym.index == isym - dimLow btRange, btSet - dimMac btRange, btSet - rndx0 As many as there are tq arrays - dimLow0 - dimHigh0 - ... - rndxMax-1 - dimLowMax-1 - dimHighMax-1 - width in bits if (bit field), width in bits. - */ -#define cAuxMax (6 + (idimMax*3)) - -/* a union of all possible info in the AUX universe */ -typedef union { - TIR ti; /* type information record */ - RNDXR rndx; /* relative index into symbol table */ - long dnLow; /* low dimension */ - long dnHigh; /* high dimension */ - long isym; /* symbol table index (end of proc) */ - long iss; /* index into string space (not used) */ - long width; /* width for non-default sized struc fields */ - long count; /* count of ranges for variant arm */ - } AUXU, *pAUXU; -#define cbAUXU sizeof(AUXU) -#define auxNil ((pAUXU)0) -#define iauxNil -1 - - -/* - * Optimization symbols - * - * Optimization symbols contain some overlap information with the normal - * symbol table. In particular, the proc information - * is somewhat redundant but necessary to easily find the other information - * present. - * - * All of the offsets are relative to the beginning of the last otProc - */ - -typedef struct { - unsigned ot: 8; /* optimization type */ - unsigned value: 24; /* address where we are moving it to */ - RNDXR rndx; /* points to a symbol or opt entry */ - unsigned long offset; /* relative offset this occured */ - } OPTR, *pOPTR; -#define optNil ((pOPTR) 0) -#define cbOPTR sizeof(OPTR) -#define ioptNil -1 - -/* - * File Indirect - * - * When a symbol is referenced across files the following procedure is used: - * 1) use the file index to get the File indirect entry. - * 2) use the file indirect entry to get the File descriptor. - * 3) add the sym index to the base of that file's sym table - * - */ - -typedef long RFDT, *pRFDT; -#define cbRFDT sizeof(RFDT) -#define rfdNil -1 - -/* - * The file indirect table in the mips loader is known as an array of FITs. - * This is done to keep the code in the loader readable in the area where - * these tables are merged. Note this is only a name change. - */ -typedef long FIT, *pFIT; -#define cbFIT sizeof(FIT) -#define ifiNil -1 -#define fiNil ((pFIT) 0) - -#ifdef _LANGUAGE_PASCAL -#define ifdNil -1 -#define ilnNil -1 -#define ipdNil -1 -#define ilineNil -1 -#define isymNil -1 -#define indexNil 16#fffff -#define issNil -1 -#define issNull 0 -#define itqMax 6 -#define iauxNil -1 -#define ioptNil -1 -#define rfdNil -1 -#define ifiNil -1 -#endif /* _LANGUAGE_PASCAL */ - - -/* Dense numbers - * - * Rather than use file index, symbol index pairs to represent symbols - * and globals, we use dense number so that they can be easily embeded - * in intermediate code and the programs that process them can - * use direct access tabls instead of hash table (which would be - * necesary otherwise because of the sparse name space caused by - * file index, symbol index pairs. Dense number are represented - * by RNDXRs. - */ - -/* - * The following table defines the meaning of each SYM field as - * a function of the "st". (scD/B == scData OR scBss) - * - * Note: the value "isymMac" is used by symbols that have the concept - * of enclosing a block of related information. This value is the - * isym of the first symbol AFTER the end associated with the primary - * symbol. For example if a procedure was at isym==90 and had an - * isymMac==155, the associated end would be at isym==154, and the - * symbol at 155 would probably (although not necessarily) be the - * symbol for the next procedure. This allows rapid skipping over - * internal information of various sorts. "stEnd"s ALWAYS have the - * isym of the primary symbol that started the block. - * - -ST SC VALUE INDEX --------- ------ -------- ------ -stFile scText address isymMac -stLabel scText address --- -stGlobal scD/B address iaux -stStatic scD/B address iaux -stParam scAbs offset iaux -stLocal scAbs offset iaux -stProc scText address iaux (isymMac is first AUX) -stStaticProc scText address iaux (isymMac is first AUX) - -stMember scNil ordinal --- (if member of enum) - (mipsread thinks the case below has a bit, not byte, offset.) -stMember scNil byte offset iaux (if member of struct/union) -stMember scBits bit offset iaux (bit field spec) - -stBlock scText address isymMac (text block) - (the code seems to think that rather than scNil, we see scInfo for - the two cases below.) -stBlock scNil cb isymMac (struct/union member define) -stBlock scNil cMembers isymMac (enum member define) - - (New types added by SGI to simplify things:) -stStruct scInfo cb isymMac (struct type define) -stUnion scInfo cb isymMac (union type define) -stEnum scInfo cMembers isymMac (enum type define) - -stEnd scText address isymStart -stEnd scNil ------- isymStart (struct/union/enum) - -stTypedef scNil ------- iaux -stRegReloc sc??? value old register number -stForward sc??? new address isym to original symbol - -stConstant scInfo value --- (scalar) -stConstant scInfo iss --- (complex, e.g. string) - - * - */ -#endif diff --git a/include/coff/symconst.h b/include/coff/symconst.h deleted file mode 100644 index 3e45705f408..00000000000 --- a/include/coff/symconst.h +++ /dev/null @@ -1,177 +0,0 @@ -/* Declarations of constants for internal format of MIPS ECOFF symbols. - Originally contributed by MIPS Computer Systems and Third Eye Software. - Changes contributed by Cygnus Support are in the public domain. - - This file is just aggregated with the files that make up the GNU - release; it is not considered part of GAS, GDB, or other GNU - programs. */ - -/* - * |-----------------------------------------------------------| - * | Copyright (c) 1992, 1991, 1990 MIPS Computer Systems, Inc.| - * | MIPS Computer Systems, Inc. grants reproduction and use | - * | rights to all parties, PROVIDED that this comment is | - * | maintained in the copy. | - * |-----------------------------------------------------------| - */ - -/* (C) Copyright 1984 by Third Eye Software, Inc. - * - * Third Eye Software, Inc. grants reproduction and use rights to - * all parties, PROVIDED that this comment is maintained in the copy. - * - * Third Eye makes no claims about the applicability of this - * symbol table to a particular use. - */ - -/* glevels for field in FDR */ -#define GLEVEL_0 2 -#define GLEVEL_1 1 -#define GLEVEL_2 0 /* for upward compat reasons. */ -#define GLEVEL_3 3 - -/* magic number fo symheader */ -#define magicSym 0x7009 -/* The Alpha uses this value instead, for some reason. */ -#define magicSym2 0x1992 - -/* Language codes */ -#define langC 0 -#define langPascal 1 -#define langFortran 2 -#define langAssembler 3 /* one Assembley inst might map to many mach */ -#define langMachine 4 -#define langNil 5 -#define langAda 6 -#define langPl1 7 -#define langCobol 8 -#define langStdc 9 /* FIXME: Collides with SGI langCplusplus */ -#define langCplusplus 9 /* FIXME: Collides with langStdc */ -#define langCplusplusV2 10 /* SGI addition */ -#define langMax 11 /* maximum allowed 32 -- 5 bits */ - -/* The following are value definitions for the fields in the SYMR */ - -/* - * Storage Classes - */ - -#define scNil 0 -#define scText 1 /* text symbol */ -#define scData 2 /* initialized data symbol */ -#define scBss 3 /* un-initialized data symbol */ -#define scRegister 4 /* value of symbol is register number */ -#define scAbs 5 /* value of symbol is absolute */ -#define scUndefined 6 /* who knows? */ -#define scCdbLocal 7 /* variable's value is IN se->va.?? */ -#define scBits 8 /* this is a bit field */ -#define scCdbSystem 9 /* variable's value is IN CDB's address space */ -#define scDbx 9 /* overlap dbx internal use */ -#define scRegImage 10 /* register value saved on stack */ -#define scInfo 11 /* symbol contains debugger information */ -#define scUserStruct 12 /* address in struct user for current process */ -#define scSData 13 /* load time only small data */ -#define scSBss 14 /* load time only small common */ -#define scRData 15 /* load time only read only data */ -#define scVar 16 /* Var parameter (fortran,pascal) */ -#define scCommon 17 /* common variable */ -#define scSCommon 18 /* small common */ -#define scVarRegister 19 /* Var parameter in a register */ -#define scVariant 20 /* Variant record */ -#define scSUndefined 21 /* small undefined(external) data */ -#define scInit 22 /* .init section symbol */ -#define scBasedVar 23 /* Fortran or PL/1 ptr based var */ -#define scXData 24 /* exception handling data */ -#define scPData 25 /* Procedure section */ -#define scFini 26 /* .fini section */ -#define scRConst 27 /* .rconst section */ -#define scMax 32 - - -/* - * Symbol Types - */ - -#define stNil 0 /* Nuthin' special */ -#define stGlobal 1 /* external symbol */ -#define stStatic 2 /* static */ -#define stParam 3 /* procedure argument */ -#define stLocal 4 /* local variable */ -#define stLabel 5 /* label */ -#define stProc 6 /* " " Procedure */ -#define stBlock 7 /* beginnning of block */ -#define stEnd 8 /* end (of anything) */ -#define stMember 9 /* member (of anything - struct/union/enum */ -#define stTypedef 10 /* type definition */ -#define stFile 11 /* file name */ -#define stRegReloc 12 /* register relocation */ -#define stForward 13 /* forwarding address */ -#define stStaticProc 14 /* load time only static procs */ -#define stConstant 15 /* const */ -#define stStaParam 16 /* Fortran static parameters */ - /* These new symbol types have been recently added to SGI machines. */ -#define stStruct 26 /* Beginning of block defining a struct type */ -#define stUnion 27 /* Beginning of block defining a union type */ -#define stEnum 28 /* Beginning of block defining an enum type */ -#define stIndirect 34 /* Indirect type specification */ - /* Pseudo-symbols - internal to debugger */ -#define stStr 60 /* string */ -#define stNumber 61 /* pure number (ie. 4 NOR 2+2) */ -#define stExpr 62 /* 2+2 vs. 4 */ -#define stType 63 /* post-coersion SER */ -#define stMax 64 - -/* definitions for fields in TIR */ - -/* type qualifiers for ti.tq0 -> ti.(itqMax-1) */ -#define tqNil 0 /* bt is what you see */ -#define tqPtr 1 /* pointer */ -#define tqProc 2 /* procedure */ -#define tqArray 3 /* duh */ -#define tqFar 4 /* longer addressing - 8086/8 land */ -#define tqVol 5 /* volatile */ -#define tqConst 6 /* const */ -#define tqMax 8 - -/* basic types as seen in ti.bt */ -#define btNil 0 /* undefined (also, enum members) */ -#define btAdr 1 /* address - integer same size as pointer */ -#define btChar 2 /* character */ -#define btUChar 3 /* unsigned character */ -#define btShort 4 /* short */ -#define btUShort 5 /* unsigned short */ -#define btInt 6 /* int */ -#define btUInt 7 /* unsigned int */ -#define btLong 8 /* long */ -#define btULong 9 /* unsigned long */ -#define btFloat 10 /* float (real) */ -#define btDouble 11 /* Double (real) */ -#define btStruct 12 /* Structure (Record) */ -#define btUnion 13 /* Union (variant) */ -#define btEnum 14 /* Enumerated */ -#define btTypedef 15 /* defined via a typedef, isymRef points */ -#define btRange 16 /* subrange of int */ -#define btSet 17 /* pascal sets */ -#define btComplex 18 /* fortran complex */ -#define btDComplex 19 /* fortran double complex */ -#define btIndirect 20 /* forward or unnamed typedef */ -#define btFixedDec 21 /* Fixed Decimal */ -#define btFloatDec 22 /* Float Decimal */ -#define btString 23 /* Varying Length Character String */ -#define btBit 24 /* Aligned Bit String */ -#define btPicture 25 /* Picture */ -#define btVoid 26 /* void */ -#define btLongLong 27 /* long long */ -#define btULongLong 28 /* unsigned long long */ -#define btMax 64 - -#if (_MFG == _MIPS) -/* optimization type codes */ -#define otNil 0 -#define otReg 1 /* move var to reg */ -#define otBlock 2 /* begin basic block */ -#define otProc 3 /* procedure */ -#define otInline 4 /* inline procedure */ -#define otEnd 5 /* whatever you started */ -#define otMax 6 /* KEEP UP TO DATE */ -#endif /* (_MFG == _MIPS) */ diff --git a/include/coff/ti.h b/include/coff/ti.h deleted file mode 100644 index 4c246d4a9e0..00000000000 --- a/include/coff/ti.h +++ /dev/null @@ -1,473 +0,0 @@ -/* COFF information for TI COFF support. Definitions in this file should be - customized in a target-specific file, and then this file included (see - tic54x.h for an example). - - Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -#ifndef COFF_TI_H -#define COFF_TI_H - -/* Note "coff/external.h is not used because TI adds extra fields to the structures. */ - -/********************** FILE HEADER **********************/ - -struct external_filehdr - { - char f_magic[2]; /* magic number */ - char f_nscns[2]; /* number of sections */ - char f_timdat[4]; /* time & date stamp */ - char f_symptr[4]; /* file pointer to symtab */ - char f_nsyms[4]; /* number of symtab entries */ - char f_opthdr[2]; /* sizeof(optional hdr) */ - char f_flags[2]; /* flags */ - char f_target_id[2]; /* magic no. (TI COFF-specific) */ - }; - -/* COFF0 has magic number in f_magic, and omits f_target_id from the file - header; for later versions, f_magic is 0xC1 for COFF1 and 0xC2 for COFF2 - and the target-specific magic number is found in f_target_id */ - -#define TICOFF0MAGIC TI_TARGET_ID -#define TICOFF1MAGIC 0x00C1 -#define TICOFF2MAGIC 0x00C2 -#define TICOFF_AOUT_MAGIC 0x0108 /* magic number in optional header */ -#define TICOFF 1 /* customize coffcode.h */ - -/* The target_id field changes depending on the particular CPU target */ -/* for COFF0, the target id appeared in f_magic, where COFFX magic is now */ -#ifndef TI_TARGET_ID -#error "TI_TARGET_ID needs to be defined for your CPU" -#endif - -/* Which bfd_arch to use... */ -#ifndef TICOFF_TARGET_ARCH -#error "TICOFF_TARGET_ARCH needs to be defined for your CPU" -#endif - -#ifndef TICOFF_TARGET_MACHINE_GET -#define TICOFF_TARGET_MACHINE_GET(FLAGS) 0 -#endif - -#ifndef TICOFF_TARGET_MACHINE_SET -#define TICOFF_TARGET_MACHINE_SET(FLAGSP, MACHINE) -#endif - -/* Default to COFF2 for file output */ -#ifndef TICOFF_DEFAULT_MAGIC -#define TICOFF_DEFAULT_MAGIC TICOFF2MAGIC -#endif - -/* This value is made available in the rare case where a bfd is unavailable */ -#ifndef OCTETS_PER_BYTE_POWER -#error "OCTETS_PER_BYTE_POWER not defined for this CPU" -#else -#define OCTETS_PER_BYTE (1<>8)&0xF) - -#define COFF0_P(ABFD) (bfd_coff_filhsz(ABFD) == FILHSZ_V0) -#define COFF2_P(ABFD) (bfd_coff_scnhsz(ABFD) != SCNHSZ_V01) - -#define COFF0_BADMAG(x) ((x).f_magic != TICOFF0MAGIC) -#define COFF1_BADMAG(x) ((x).f_magic != TICOFF1MAGIC || (x).f_target_id != TI_TARGET_ID) -#define COFF2_BADMAG(x) ((x).f_magic != TICOFF2MAGIC || (x).f_target_id != TI_TARGET_ID) - -/* we need to read/write an extra field in the coff file header */ -#ifndef COFF_ADJUST_FILEHDR_IN_POST -#define COFF_ADJUST_FILEHDR_IN_POST(abfd, src, dst) \ - do \ - { \ - ((struct internal_filehdr *)(dst))->f_target_id = \ - H_GET_16 (abfd, ((FILHDR *)(src))->f_target_id); \ - } \ - while (0) -#endif - -#ifndef COFF_ADJUST_FILEHDR_OUT_POST -#define COFF_ADJUST_FILEHDR_OUT_POST(abfd, src, dst) \ - do \ - { \ - H_PUT_16 (abfd, ((struct internal_filehdr *)(src))->f_target_id, \ - ((FILHDR *)(dst))->f_target_id); \ - } \ - while (0) -#endif - -#define FILHDR struct external_filehdr -#define FILHSZ 22 -#define FILHSZ_V0 20 /* COFF0 omits target_id field */ - -/* File header flags */ -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_VERS (0x0010) /* TMS320C4x code */ -/* F_LSYMS needs to be redefined in your source file */ -#define F_LSYMS_TICOFF (0x0010) /* normal COFF is 0x8 */ - -#define F_10 0x00 /* file built for TMS320C1x devices */ -#define F_20 0x10 /* file built for TMS320C2x devices */ -#define F_25 0x20 /* file built for TMS320C2x/C5x devices */ -#define F_LENDIAN 0x0100 /* 16 bits/word, LSB first */ -#define F_SYMMERGE 0x1000 /* duplicate symbols were removed */ - -/********************** OPTIONAL HEADER **********************/ - - -typedef struct -{ - char magic[2]; /* type of file (0x108) */ - char vstamp[2]; /* version stamp */ - char tsize[4]; /* text size in bytes, padded to FW bdry*/ - char dsize[4]; /* initialized data " " */ - char bsize[4]; /* uninitialized data " " */ - char entry[4]; /* entry pt. */ - char text_start[4]; /* base of text used for this file */ - char data_start[4]; /* base of data used for this file */ -} -AOUTHDR; - - -#define AOUTHDRSZ 28 -#define AOUTSZ 28 - - -/********************** SECTION HEADER **********************/ -/* COFF0, COFF1 */ -struct external_scnhdr_v01 { - char s_name[8]; /* section name */ - char s_paddr[4]; /* physical address, aliased s_nlib */ - char s_vaddr[4]; /* virtual address */ - char s_size[4]; /* section size (in WORDS) */ - char s_scnptr[4]; /* file ptr to raw data for section */ - char s_relptr[4]; /* file ptr to relocation */ - char s_lnnoptr[4]; /* file ptr to line numbers */ - char s_nreloc[2]; /* number of relocation entries */ - char s_nlnno[2]; /* number of line number entries*/ - char s_flags[2]; /* flags */ - char s_reserved[1]; /* reserved */ - char s_page[1]; /* section page number (LOAD) */ -}; - -/* COFF2 */ -struct external_scnhdr { - char s_name[8]; /* section name */ - char s_paddr[4]; /* physical address, aliased s_nlib */ - char s_vaddr[4]; /* virtual address */ - char s_size[4]; /* section size (in WORDS) */ - char s_scnptr[4]; /* file ptr to raw data for section */ - char s_relptr[4]; /* file ptr to relocation */ - char s_lnnoptr[4]; /* file ptr to line numbers */ - char s_nreloc[4]; /* number of relocation entries */ - char s_nlnno[4]; /* number of line number entries*/ - char s_flags[4]; /* flags */ - char s_reserved[2]; /* reserved */ - char s_page[2]; /* section page number (LOAD) */ -}; - -/* - * Special section flags - */ - -/* TI COFF defines these flags; - STYP_CLINK: the section should be excluded from the final - linker output if there are no references found to any symbol in the section - STYP_BLOCK: the section should be blocked, i.e. if the section would cross - a page boundary, it is started at a page boundary instead. - TI COFF puts the section alignment power of two in the section flags - e.g. 2**N is alignment, flags |= (N & 0xF) << 8 -*/ -#define STYP_CLINK (0x4000) -#define STYP_BLOCK (0x1000) -#define STYP_ALIGN (0x0F00) /* TI COFF stores section alignment here */ - -#define SCNHDR_V01 struct external_scnhdr_v01 -#define SCNHDR struct external_scnhdr -#define SCNHSZ_V01 40 /* for v0 and v1 */ -#define SCNHSZ 48 - -/* COFF2 changes the offsets and sizes of these fields - Assume we're dealing with the COFF2 scnhdr structure, and adjust - accordingly - */ -#define GET_SCNHDR_NRELOC(ABFD, LOC) \ - (COFF2_P (ABFD) ? H_GET_32 (ABFD, LOC) : H_GET_16 (ABFD, LOC)) -#define PUT_SCNHDR_NRELOC(ABFD, VAL, LOC) \ - (COFF2_P (ABFD) ? H_PUT_32 (ABFD, VAL, LOC) : H_PUT_16 (ABFD, VAL, LOC)) -#define GET_SCNHDR_NLNNO(ABFD, LOC) \ - (COFF2_P (ABFD) ? H_GET_32 (ABFD, LOC) : H_GET_16 (ABFD, (LOC) - 2)) -#define PUT_SCNHDR_NLNNO(ABFD, VAL, LOC) \ - (COFF2_P (ABFD) ? H_PUT_32 (ABFD, VAL, LOC) : H_PUT_16 (ABFD, VAL, (LOC) - 2)) -#define GET_SCNHDR_FLAGS(ABFD, LOC) \ - (COFF2_P (ABFD) ? H_GET_32 (ABFD, LOC) : H_GET_16 (ABFD, (LOC) - 4)) -#define PUT_SCNHDR_FLAGS(ABFD, VAL, LOC) \ - (COFF2_P (ABFD) ? H_PUT_32 (ABFD, VAL, LOC) : H_PUT_16 (ABFD, VAL, (LOC) - 4)) -#define GET_SCNHDR_PAGE(ABFD, LOC) \ - (COFF2_P (ABFD) ? H_GET_16 (ABFD, LOC) : (unsigned) H_GET_8 (ABFD, (LOC) - 7)) -/* on output, make sure that the "reserved" field is zero */ -#define PUT_SCNHDR_PAGE(ABFD, VAL, LOC) \ - (COFF2_P (ABFD) \ - ? H_PUT_16 (ABFD, VAL, LOC) \ - : H_PUT_8 (ABFD, VAL, (LOC) - 7), H_PUT_8 (ABFD, 0, (LOC) - 8)) - -/* TI COFF stores section size as number of bytes (address units, not octets), - so adjust to be number of octets, which is what BFD expects */ -#define GET_SCNHDR_SIZE(ABFD, SZP) \ - (H_GET_32 (ABFD, SZP) * bfd_octets_per_byte (ABFD)) -#define PUT_SCNHDR_SIZE(ABFD, SZ, SZP) \ - H_PUT_32 (ABFD, (SZ) / bfd_octets_per_byte (ABFD), SZP) - -#define COFF_ADJUST_SCNHDR_IN_POST(ABFD, EXT, INT) \ - do \ - { \ - ((struct internal_scnhdr *)(INT))->s_page = \ - GET_SCNHDR_PAGE (ABFD, ((SCNHDR *)(EXT))->s_page); \ - } \ - while (0) - -/* The line number and reloc overflow checking in coff_swap_scnhdr_out in - coffswap.h doesn't use PUT_X for s_nlnno and s_nreloc. - Due to different sized v0/v1/v2 section headers, we have to re-write these - fields. - */ -#define COFF_ADJUST_SCNHDR_OUT_POST(ABFD, INT, EXT) \ - do \ - { \ - PUT_SCNHDR_NLNNO (ABFD, ((struct internal_scnhdr *)(INT))->s_nlnno, \ - ((SCNHDR *)(EXT))->s_nlnno); \ - PUT_SCNHDR_NRELOC (ABFD, ((struct internal_scnhdr *)(INT))->s_nreloc,\ - ((SCNHDR *)(EXT))->s_nreloc); \ - PUT_SCNHDR_FLAGS (ABFD, ((struct internal_scnhdr *)(INT))->s_flags, \ - ((SCNHDR *)(EXT))->s_flags); \ - PUT_SCNHDR_PAGE (ABFD, ((struct internal_scnhdr *)(INT))->s_page, \ - ((SCNHDR *)(EXT))->s_page); \ - } \ - while (0) - -/* - * names of "special" sections - */ -#define _TEXT ".text" -#define _DATA ".data" -#define _BSS ".bss" -#define _CINIT ".cinit" /* initialized C data */ -#define _SCONST ".const" /* constants */ -#define _SWITCH ".switch" /* switch tables */ -#define _STACK ".stack" /* C stack */ -#define _SYSMEM ".sysmem" /* used for malloc et al. syscalls */ - -/********************** LINE NUMBERS **********************/ - -/* 1 line number entry for every "breakpointable" source line in a section. - * Line numbers are grouped on a per function basis; first entry in a function - * grouping will have l_lnno = 0 and in place of physical address will be the - * symbol table index of the function name. - */ -struct external_lineno { - union { - char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/ - char l_paddr[4]; /* (physical) address of line number */ - } l_addr; - char l_lnno[2]; /* line number */ -}; - -#define LINENO struct external_lineno -#define LINESZ 6 - - -/********************** SYMBOLS **********************/ - -/* NOTE: this is what a local label looks like in assembly source; what it - looks like in COFF output is undefined */ -#define TICOFF_LOCAL_LABEL_P(NAME) \ -((NAME[0] == '$' && NAME[1] >= '0' && NAME[1] <= '9' && NAME[2] == '\0') \ - || NAME[strlen(NAME)-1] == '?') - -#define E_SYMNMLEN 8 /* # characters in a symbol name */ -#define E_FILNMLEN 14 /* # characters in a file name */ -#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */ - -struct external_syment -{ - union { - char e_name[E_SYMNMLEN]; - struct { - char e_zeroes[4]; - char e_offset[4]; - } e; - } e; - char e_value[4]; - char e_scnum[2]; - char e_type[2]; - char e_sclass[1]; - char e_numaux[1]; -}; - - -#define N_BTMASK (017) -#define N_TMASK (060) -#define N_BTSHFT (4) -#define N_TSHIFT (2) - - -union external_auxent { - struct { - char x_tagndx[4]; /* str, un, or enum tag indx */ - union { - struct { - char x_lnno[2]; /* declaration line number */ - char x_size[2]; /* str/union/array size */ - } x_lnsz; - char x_fsize[4]; /* size of function */ - } x_misc; - union { - struct { /* if ISFCN, tag, or .bb */ - char x_lnnoptr[4]; /* ptr to fcn line # */ - char x_endndx[4]; /* entry ndx past block end */ - } x_fcn; - struct { /* if ISARY, up to 4 dimen. */ - char x_dimen[E_DIMNUM][2]; - } x_ary; - } x_fcnary; - char x_tvndx[2]; /* tv index */ - } x_sym; - - union { - char x_fname[E_FILNMLEN]; - struct { - char x_zeroes[4]; - char x_offset[4]; - } x_n; - } x_file; - - struct { - char x_scnlen[4]; /* section length */ - char x_nreloc[2]; /* # relocation entries */ - char x_nlinno[2]; /* # line numbers */ - } x_scn; - - struct { - char x_tvfill[4]; /* tv fill value */ - char x_tvlen[2]; /* length of .tv */ - char x_tvran[2][2]; /* tv range */ - } x_tv; /* info about .tv section (in auxent of symbol .tv)) */ - - -}; - -#define SYMENT struct external_syment -#define SYMESZ 18 -#define AUXENT union external_auxent -#define AUXESZ 18 - -/* section lengths are in target bytes (not host bytes) */ -#define GET_SCN_SCNLEN(ABFD, EXT) \ - (H_GET_32 (ABFD, (EXT)->x_scn.x_scnlen) * bfd_octets_per_byte (ABFD)) -#define PUT_SCN_SCNLEN(ABFD, INT, EXT) \ - H_PUT_32 (ABFD, (INT) / bfd_octets_per_byte (ABFD), (EXT)->x_scn.x_scnlen) - -/* lnsz size is in bits in COFF file, in bytes in BFD */ -#define GET_LNSZ_SIZE(abfd, ext) \ - (H_GET_16 (abfd, ext->x_sym.x_misc.x_lnsz.x_size) / (class != C_FIELD ? 8 : 1)) - -#define PUT_LNSZ_SIZE(abfd, in, ext) \ - H_PUT_16 (abfd, ((class != C_FIELD) ? (in) * 8 : (in)), \ - ext->x_sym.x_misc.x_lnsz.x_size) - -/* TI COFF stores offsets for MOS and MOU in bits; BFD expects bytes - Also put the load page flag of the section into the symbol value if it's an - address. */ -#ifndef NEEDS_PAGE -#define NEEDS_PAGE(X) 0 -#define PAGE_MASK 0 -#endif -#define COFF_ADJUST_SYM_IN_POST(ABFD, EXT, INT) \ - do \ - { \ - struct internal_syment *dst = (struct internal_syment *)(INT); \ - if (dst->n_sclass == C_MOS || dst->n_sclass == C_MOU) \ - dst->n_value /= 8; \ - else if (NEEDS_PAGE (dst->n_sclass)) { \ - asection *scn = coff_section_from_bfd_index (abfd, dst->n_scnum); \ - dst->n_value |= (scn->lma & PAGE_MASK); \ - } \ - } \ - while (0) - -#define COFF_ADJUST_SYM_OUT_POST(ABFD, INT, EXT) \ - do \ - { \ - struct internal_syment *src = (struct internal_syment *)(INT); \ - SYMENT *dst = (SYMENT *)(EXT); \ - if (src->n_sclass == C_MOU || src->n_sclass == C_MOS) \ - H_PUT_32 (abfd, src->n_value * 8, dst->e_value); \ - else if (NEEDS_PAGE (src->n_sclass)) { \ - H_PUT_32 (abfd, src->n_value &= ~PAGE_MASK, dst->e_value); \ - } \ - } \ - while (0) - -/* Detect section-relative absolute symbols so they get flagged with a sym - index of -1. -*/ -#define SECTION_RELATIVE_ABSOLUTE_SYMBOL_P(RELOC, SECT) \ - ((*(RELOC)->sym_ptr_ptr)->section->output_section == (SECT) \ - && (RELOC)->howto->name[0] == 'A') - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc_v0 -{ - char r_vaddr[4]; - char r_symndx[2]; - char r_reserved[2]; - char r_type[2]; -}; - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_reserved[2]; /* extended pmad byte for COFF2 */ - char r_type[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ_V0 10 /* FIXME -- coffcode.h needs fixing */ -#define RELSZ 12 /* for COFF1/2 */ - -/* various relocation types. */ -#define R_ABS 0x0000 /* no relocation */ -#define R_REL13 0x002A /* 13-bit direct reference (???) */ -#define R_PARTLS7 0x0028 /* 7 LSBs of an address */ -#define R_PARTMS9 0x0029 /* 9MSBs of an address */ -#define R_EXTWORD 0x002B /* 23-bit direct reference */ -#define R_EXTWORD16 0x002C /* 16-bit direct reference to 23-bit addr*/ -#define R_EXTWORDMS7 0x002D /* upper 7 bits of 23-bit address */ - -#endif /* COFF_TI_H */ diff --git a/include/coff/tic30.h b/include/coff/tic30.h deleted file mode 100644 index 0da61d7103c..00000000000 --- a/include/coff/tic30.h +++ /dev/null @@ -1,50 +0,0 @@ -/* coff information for Texas Instruments TMS320C3X - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define L_LNNO_SIZE 4 -#include "coff/external.h" - -#define TIC30MAGIC 0xC000 - -#define TIC30BADMAG(x) (((x).f_magic != TIC30MAGIC)) - -/********************** RELOCATION DIRECTIVES **********************/ - -/* The external reloc has an offset field, because some of the reloc - types on the z8k don't have room in the instruction for the entire - offset - eg with segments */ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_offset[4]; - char r_type[2]; - char r_stuff[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 16 - -/* TMS320C30 relocation types. */ - -#define R_TIC30_ABS16 0x100 /* 16 bit absolute. */ -#define R_TIC30_ABS24 0x101 /* 24 bit absolute. */ -#define R_TIC30_ABS32 0x102 /* 32 bit absolute. */ -#define R_TIC30_LDP 0x103 /* LDP bits 23-16 to 7-0. */ -#define R_TIC30_PC16 0x104 /* 16 bit pc relative. */ diff --git a/include/coff/tic4x.h b/include/coff/tic4x.h deleted file mode 100644 index 433590e0094..00000000000 --- a/include/coff/tic4x.h +++ /dev/null @@ -1,46 +0,0 @@ -/* TI COFF information for Texas Instruments TMS320C4X/C3X. - This file customizes the settings in coff/ti.h. - - Copyright 2002, 2003 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef COFF_TIC4X_H -#define COFF_TIC4X_H - -#define TIC4X_TARGET_ID 0x0093 -/* Octets per byte, as a power of two. */ -#define TI_TARGET_ID TIC4X_TARGET_ID -#define OCTETS_PER_BYTE_POWER 2 -/* Add to howto to get absolute/sect-relative version. */ -#define HOWTO_BANK 6 -#define TICOFF_TARGET_ARCH bfd_arch_tic4x -/* We use COFF2. */ -#define TICOFF_DEFAULT_MAGIC TICOFF2MAGIC - -#define TICOFF_TARGET_MACHINE_GET(FLAGS) \ - (((FLAGS) & F_VERS) ? bfd_mach_tic4x : bfd_mach_tic3x) - -#define TICOFF_TARGET_MACHINE_SET(FLAGSP, MACHINE) \ - do \ - { \ - if ((MACHINE) == bfd_mach_tic4x) \ - *(FLAGSP) |= F_VERS; \ - } \ - while (0) - -#include "coff/ti.h" - -#endif /* COFF_TIC4X_H */ diff --git a/include/coff/tic54x.h b/include/coff/tic54x.h deleted file mode 100644 index a65511be844..00000000000 --- a/include/coff/tic54x.h +++ /dev/null @@ -1,59 +0,0 @@ -/* TI COFF information for Texas Instruments TMS320C54X. - This file customizes the settings in coff/ti.h. - - Copyright 2000, 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef COFF_TIC54X_H -#define COFF_TIC54X_H - -#define TIC54X_TARGET_ID 0x98 -#define TIC54XALGMAGIC 0x009B /* c54x algebraic assembler output */ -#define TIC5X_TARGET_ID 0x92 -#define TI_TARGET_ID TIC54X_TARGET_ID -#define OCTETS_PER_BYTE_POWER 1 /* octets per byte, as a power of two */ -#define HOWTO_BANK 6 /* add to howto to get absolute/sect-relative version */ -#define TICOFF_TARGET_ARCH bfd_arch_tic54x -#define TICOFF_DEFAULT_MAGIC TICOFF1MAGIC /* we use COFF1 for compatibility */ - -/* Page macros - - The first GDB port requires flags in its remote memory access commands to - distinguish between data/prog space. Hopefully we can make this go away - eventually. Stuff the page in the upper bits of a 32-bit address, since - the c5x family only uses 16 or 23 bits. - - c2x, c5x and most c54x devices have 16-bit addresses, but the c548 has - 23-bit program addresses. Make sure the page flags don't interfere. - These flags are used by GDB to identify the destination page for - addresses. -*/ - -/* Recognized load pages (by common convention). */ -#define PG_PROG 0x0 /* PROG page */ -#define PG_DATA 0x1 /* DATA page */ -#define PG_IO 0x2 /* I/O page */ - -/** Indicate whether the given storage class requires a page flag. */ -#define NEEDS_PAGE(X) ((X)==C_EXT) -#define PAGE_MASK 0xFF000000 -#define ADDR_MASK 0x00FFFFFF -#define PG_TO_FLAG(p) (((unsigned long)(p) & 0xFF) << 24) -#define FLAG_TO_PG(f) (((f) >> 24) & 0xFF) - -#include "coff/ti.h" - -#endif /* COFF_TIC54X_H */ diff --git a/include/coff/tic80.h b/include/coff/tic80.h deleted file mode 100644 index ed4b5c8931a..00000000000 --- a/include/coff/tic80.h +++ /dev/null @@ -1,122 +0,0 @@ -/* coff information for TI TMS320C80 (MVP) - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define DO_NOT_DEFINE_FILHDR -#define DO_NOT_DEFINE_SCNHDR -#define L_LNNO_SIZE 2 -#include "coff/external.h" - -/********************** FILE HEADER **********************/ - -struct external_filehdr - { - char f_magic[2]; /* magic number */ - char f_nscns[2]; /* number of sections */ - char f_timdat[4]; /* time & date stamp */ - char f_symptr[4]; /* file pointer to symtab */ - char f_nsyms[4]; /* number of symtab entries */ - char f_opthdr[2]; /* sizeof(optional hdr) */ - char f_flags[2]; /* flags */ - char f_target_id[2];/* target id (TIc80 specific) */ -}; - -#define TIC80_ARCH_MAGIC 0x0C1 /* Goes in the file header magic number field */ -#define TIC80_TARGET_ID 0x95 /* Goes in the target id field */ - -#define TIC80BADMAG(x) ((x).f_magic != TIC80_ARCH_MAGIC) - -#define FILHDR struct external_filehdr -#define FILHSZ 22 - -#define TIC80_AOUTHDR_MAGIC 0x108 /* Goes in the optional file header magic number field */ - -/********************** SECTION HEADER **********************/ - -struct external_scnhdr -{ - char s_name[8]; /* section name */ - char s_paddr[4]; /* physical address, aliased s_nlib */ - char s_vaddr[4]; /* virtual address */ - char s_size[4]; /* section size */ - char s_scnptr[4]; /* file ptr to raw data for section */ - char s_relptr[4]; /* file ptr to relocation */ - char s_lnnoptr[4]; /* file ptr to line numbers */ - char s_nreloc[2]; /* number of relocation entries */ - char s_nlnno[2]; /* number of line number entries*/ - char s_flags[2]; /* flags */ - char s_reserved[1]; /* reserved (TIc80 specific) */ - char s_mempage[1]; /* memory page number (TIc80) */ -}; - -/* Names of "special" sections. */ -#define _TEXT ".text" -#define _DATA ".data" -#define _BSS ".bss" -#define _CINIT ".cinit" -#define _CONST ".const" -#define _SWITCH ".switch" -#define _STACK ".stack" -#define _SYSMEM ".sysmem" - -#define SCNHDR struct external_scnhdr -#define SCNHSZ 40 - -/* FIXME - need to correlate external_auxent with - TIc80 Code Generation Tools User's Guide, CG:A-25 */ - -/********************** RELOCATION DIRECTIVES **********************/ - -/* The external reloc has an offset field, because some of the reloc - types on the h8 don't have room in the instruction for the entire - offset - eg the strange jump and high page addressing modes. */ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_reserved[2]; - char r_type[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 12 - -/* TIc80 relocation types. */ - -#define R_ABS 0x00 /* Absolute address - no relocation */ -#define R_RELLONGX 0x11 /* PP: 32 bits, direct */ -#define R_PPBASE 0x34 /* PP: Global base address type */ -#define R_PPLBASE 0x35 /* PP: Local base address type */ -#define R_PP15 0x38 /* PP: Global 15 bit offset */ -#define R_PP15W 0x39 /* PP: Global 15 bit offset divided by 4 */ -#define R_PP15H 0x3A /* PP: Global 15 bit offset divided by 2 */ -#define R_PP16B 0x3B /* PP: Global 16 bit offset for bytes */ -#define R_PPL15 0x3C /* PP: Local 15 bit offset */ -#define R_PPL15W 0x3D /* PP: Local 15 bit offset divided by 4 */ -#define R_PPL15H 0x3E /* PP: Local 15 bit offset divided by 2 */ -#define R_PPL16B 0x3F /* PP: Local 16 bit offset for bytes */ -#define R_PPN15 0x40 /* PP: Global 15 bit negative offset */ -#define R_PPN15W 0x41 /* PP: Global 15 bit negative offset divided by 4 */ -#define R_PPN15H 0x42 /* PP: Global 15 bit negative offset divided by 2 */ -#define R_PPN16B 0x43 /* PP: Global 16 bit negative byte offset */ -#define R_PPLN15 0x44 /* PP: Local 15 bit negative offset */ -#define R_PPLN15W 0x45 /* PP: Local 15 bit negative offset divided by 4 */ -#define R_PPLN15H 0x46 /* PP: Local 15 bit negative offset divided by 2 */ -#define R_PPLN16B 0x47 /* PP: Local 16 bit negative byte offset */ -#define R_MPPCR15W 0x4E /* MP: 15 bit PC-relative divided by 4 */ -#define R_MPPCR 0x4F /* MP: 32 bit PC-relative divided by 4 */ diff --git a/include/coff/w65.h b/include/coff/w65.h deleted file mode 100644 index 813297039d1..00000000000 --- a/include/coff/w65.h +++ /dev/null @@ -1,46 +0,0 @@ -/* coff information for WDC 65816 - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define L_LNNO_SIZE 4 -#include "coff/external.h" - -#define W65MAGIC 0x6500 - -#define W65BADMAG(x) (((x).f_magic != W65MAGIC)) - -/********************** RELOCATION DIRECTIVES **********************/ - -/* The external reloc has an offset field, because some of the reloc - types on the w65 don't have room in the instruction for the entire - offset - eg the strange jump and high page addressing modes */ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_offset[4]; - char r_type[2]; - char r_stuff[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 16 - - - - diff --git a/include/coff/we32k.h b/include/coff/we32k.h deleted file mode 100644 index 933307f1f0e..00000000000 --- a/include/coff/we32k.h +++ /dev/null @@ -1,60 +0,0 @@ -/* coff information for we32k - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -#define L_LNNO_SIZE 2 -#include "coff/external.h" - -/* Bits for f_flags: - F_RELFLG relocation info stripped from file - F_EXEC file is executable (no unresolved external references) - F_LNNO line numbers stripped from file - F_LSYMS local symbols stripped from file - F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax). */ - -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_LSYMS (0x0008) -#define F_BM32B (0020000) -#define F_BM32MAU (0040000) - -#define WE32KMAGIC 0x170 /* we32k sans transfer vector */ -#define FBOMAGIC 0x170 /* we32k sans transfer vector */ -#define MTVMAGIC 0x171 /* we32k with transfer vector */ -#define RBOMAGIC 0x172 /* reserved */ -#define WE32KBADMAG(x) ( ((x).f_magic != WE32KMAGIC) \ - && ((x).f_magic != FBOMAGIC) \ - && ((x).f_magic != RBOMAGIC) \ - && ((x).f_magic != MTVMAGIC)) - -/* More names of "special" sections. */ -#define _TV ".tv" -#define _INIT ".init" -#define _FINI ".fini" - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 10 - diff --git a/include/coff/xcoff.h b/include/coff/xcoff.h deleted file mode 100644 index 7c1eef53aca..00000000000 --- a/include/coff/xcoff.h +++ /dev/null @@ -1,639 +0,0 @@ -/* Internal format of XCOFF object file data structures for BFD. - - Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 - Free Software Foundation, Inc. - Written by Ian Lance Taylor , Cygnus Support. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _INTERNAL_XCOFF_H -#define _INTERNAL_XCOFF_H - -/* Linker */ - -/* Names of "special" sections. */ -#define _TEXT ".text" -#define _DATA ".data" -#define _BSS ".bss" -#define _PAD ".pad" -#define _LOADER ".loader" -#define _EXCEPT ".except" -#define _TYPCHK ".typchk" - -/* XCOFF uses a special .loader section with type STYP_LOADER. */ -#define STYP_LOADER 0x1000 - -/* XCOFF uses a special .debug section with type STYP_DEBUG. */ -#define STYP_DEBUG 0x2000 - -/* XCOFF handles line number or relocation overflow by creating - another section header with STYP_OVRFLO set. */ -#define STYP_OVRFLO 0x8000 - -/* Specifies an exception section. A section of this type provides - information to identify the reason that a trap or ececptin occured within - and executable object program */ -#define STYP_EXCEPT 0x0100 - -/* Specifies a type check section. A section of this type contains parameter - argument type check strings used by the AIX binder. */ -#define STYP_TYPCHK 0x4000 - -#define RS6K_AOUTHDR_OMAGIC 0x0107 /* old: text & data writeable */ -#define RS6K_AOUTHDR_NMAGIC 0x0108 /* new: text r/o, data r/w */ -#define RS6K_AOUTHDR_ZMAGIC 0x010B /* paged: text r/o, both page-aligned */ - -/* XCOFF relocation types. - The relocations are described in the function - xcoff[64]_ppc_relocate_section in coff64-rs6000.c and coff-rs6000.c */ - -#define R_POS (0x00) -#define R_NEG (0x01) -#define R_REL (0x02) -#define R_TOC (0x03) -#define R_RTB (0x04) -#define R_GL (0x05) -#define R_TCL (0x06) -#define R_BA (0x08) -#define R_BR (0x0a) -#define R_RL (0x0c) -#define R_RLA (0x0d) -#define R_REF (0x0f) -#define R_TRL (0x12) -#define R_TRLA (0x13) -#define R_RRTBI (0x14) -#define R_RRTBA (0x15) -#define R_CAI (0x16) -#define R_CREL (0x17) -#define R_RBA (0x18) -#define R_RBAC (0x19) -#define R_RBR (0x1a) -#define R_RBRC (0x1b) - -/* Storage class #defines, from /usr/include/storclass.h that are not already - defined in internal.h */ - -/* Comment string in .info section */ -#define C_INFO 110 - -/* Auxillary Symbol Entries */ - -/* x_smtyp values: */ -#define SMTYP_ALIGN(x) ((x) >> 3) /* log2 of alignment */ -#define SMTYP_SMTYP(x) ((x) & 0x7) /* symbol type */ -/* Symbol type values: */ -#define XTY_ER 0 /* External reference */ -#define XTY_SD 1 /* Csect definition */ -#define XTY_LD 2 /* Label definition */ -#define XTY_CM 3 /* .BSS */ -#define XTY_EM 4 /* Error message */ -#define XTY_US 5 /* "Reserved for internal use" */ - -/* x_smclas values: */ -#define XMC_PR 0 /* Read-only program code */ -#define XMC_RO 1 /* Read-only constant */ -#define XMC_DB 2 /* Read-only debug dictionary table */ -#define XMC_TC 3 /* Read-write general TOC entry */ -#define XMC_UA 4 /* Read-write unclassified */ -#define XMC_RW 5 /* Read-write data */ -#define XMC_GL 6 /* Read-only global linkage */ -#define XMC_XO 7 /* Read-only extended operation */ -#define XMC_SV 8 /* Read-only supervisor call */ -#define XMC_BS 9 /* Read-write BSS */ -#define XMC_DS 10 /* Read-write descriptor csect */ -#define XMC_UC 11 /* Read-write unnamed Fortran common */ -#define XMC_TI 12 /* Read-only traceback index csect */ -#define XMC_TB 13 /* Read-only traceback table csect */ -/* 14 ??? */ -#define XMC_TC0 15 /* Read-write TOC anchor */ -#define XMC_TD 16 /* Read-write data in TOC */ -#define XMC_SV64 17 /* Read-only 64 bit supervisor call */ -#define XMC_SV3264 18 /* Read-only 32 or 64 bit supervisor call */ - -/* The ldhdr structure. This appears at the start of the .loader - section. */ - -struct internal_ldhdr -{ - /* The version number: - 1 : 32 bit - 2 : 64 bit */ - unsigned long l_version; - - /* The number of symbol table entries. */ - bfd_size_type l_nsyms; - - /* The number of relocation table entries. */ - bfd_size_type l_nreloc; - - /* The length of the import file string table. */ - bfd_size_type l_istlen; - - /* The number of import files. */ - bfd_size_type l_nimpid; - - /* The offset from the start of the .loader section to the first - entry in the import file table. */ - bfd_size_type l_impoff; - - /* The length of the string table. */ - bfd_size_type l_stlen; - - /* The offset from the start of the .loader section to the first - entry in the string table. */ - bfd_size_type l_stoff; - - /* The offset to start of the symbol table, only in XCOFF64 */ - bfd_vma l_symoff; - - /* The offset to the start of the relocation table, only in XCOFF64 */ - bfd_vma l_rldoff; -}; - -/* The ldsym structure. This is used to represent a symbol in the - .loader section. */ - -struct internal_ldsym -{ - union - { - /* The symbol name if <= SYMNMLEN characters. */ - char _l_name[SYMNMLEN]; - struct - { - /* Zero if the symbol name is more than SYMNMLEN characters. */ - long _l_zeroes; - - /* The offset in the string table if the symbol name is more - than SYMNMLEN characters. */ - long _l_offset; - } - _l_l; - } - _l; - - /* The symbol value. */ - bfd_vma l_value; - - /* The symbol section number. */ - short l_scnum; - - /* The symbol type and flags. */ - char l_smtype; - - /* The symbol storage class. */ - char l_smclas; - - /* The import file ID. */ - bfd_size_type l_ifile; - - /* Offset to the parameter type check string. */ - bfd_size_type l_parm; -}; - -/* These flags are for the l_smtype field (the lower three bits are an - XTY_* value). */ - -/* Imported symbol. */ -#define L_IMPORT (0x40) -/* Entry point. */ -#define L_ENTRY (0x20) -/* Exported symbol. */ -#define L_EXPORT (0x10) - -/* The ldrel structure. This is used to represent a reloc in the - .loader section. */ - -struct internal_ldrel -{ - /* The reloc address. */ - bfd_vma l_vaddr; - - /* The symbol table index in the .loader section symbol table. */ - bfd_size_type l_symndx; - - /* The relocation type and size. */ - short l_rtype; - - /* The section number this relocation applies to. */ - short l_rsecnm; -}; - -/* An entry in the XCOFF linker hash table. */ -struct xcoff_link_hash_entry -{ - struct bfd_link_hash_entry root; - - /* Symbol index in output file. Set to -1 initially. Set to -2 if - there is a reloc against this symbol. */ - long indx; - - /* If we have created a TOC entry for this symbol, this is the .tc - section which holds it. */ - asection *toc_section; - - union - { - /* If we have created a TOC entry (the XCOFF_SET_TOC flag is - set), this is the offset in toc_section. */ - bfd_vma toc_offset; - - /* If the TOC entry comes from an input file, this is set to the - symbol index of the C_HIDEXT XMC_TC or XMC_TD symbol. */ - long toc_indx; - } - u; - - /* If this symbol is a function entry point which is called, this - field holds a pointer to the function descriptor. If this symbol - is a function descriptor, this field holds a pointer to the - function entry point. */ - struct xcoff_link_hash_entry *descriptor; - - /* The .loader symbol table entry, if there is one. */ - struct internal_ldsym *ldsym; - - /* If XCOFF_BUILT_LDSYM is set, this is the .loader symbol table - index. If XCOFF_BUILD_LDSYM is clear, and XCOFF_IMPORT is set, - this is the l_ifile value. */ - long ldindx; - - /* Some linker flags. */ - unsigned long flags; - - /* The storage mapping class. */ - unsigned char smclas; -}; - -/* Flags for xcoff_link_hash_entry. */ - -/* Symbol is referenced by a regular object. */ -#define XCOFF_REF_REGULAR 0x00000001 -/* Symbol is defined by a regular object. */ -#define XCOFF_DEF_REGULAR 0x00000002 -/* Symbol is defined by a dynamic object. */ -#define XCOFF_DEF_DYNAMIC 0x00000004 -/* Symbol is used in a reloc being copied into the .loader section. */ -#define XCOFF_LDREL 0x00000008 -/* Symbol is the entry point. */ -#define XCOFF_ENTRY 0x00000010 -/* Symbol is called; this is, it appears in a R_BR reloc. */ -#define XCOFF_CALLED 0x00000020 -/* Symbol needs the TOC entry filled in. */ -#define XCOFF_SET_TOC 0x00000040 -/* Symbol is explicitly imported. */ -#define XCOFF_IMPORT 0x00000080 -/* Symbol is explicitly exported. */ -#define XCOFF_EXPORT 0x00000100 -/* Symbol has been processed by xcoff_build_ldsyms. */ -#define XCOFF_BUILT_LDSYM 0x00000200 -/* Symbol is mentioned by a section which was not garbage collected. */ -#define XCOFF_MARK 0x00000400 -/* Symbol size is recorded in size_list list from hash table. */ -#define XCOFF_HAS_SIZE 0x00000800 -/* Symbol is a function descriptor. */ -#define XCOFF_DESCRIPTOR 0x00001000 -/* Multiple definitions have been for the symbol. */ -#define XCOFF_MULTIPLY_DEFINED 0x00002000 -/* Symbol is the __rtinit symbol. */ -#define XCOFF_RTINIT 0x00004000 -/* Symbol is an imported 32 bit syscall. */ -#define XCOFF_SYSCALL32 0x00008000 -/* Symbol is an imported 64 bit syscall. */ -#define XCOFF_SYSCALL64 0x00010000 - -/* The XCOFF linker hash table. */ - -#define XCOFF_NUMBER_OF_SPECIAL_SECTIONS 6 -#define XCOFF_SPECIAL_SECTION_TEXT 0 -#define XCOFF_SPECIAL_SECTION_ETEXT 1 -#define XCOFF_SPECIAL_SECTION_DATA 2 -#define XCOFF_SPECIAL_SECTION_EDATA 3 -#define XCOFF_SPECIAL_SECTION_END 4 -#define XCOFF_SPECIAL_SECTION_END2 5 - -struct xcoff_link_hash_table -{ - struct bfd_link_hash_table root; - - /* The .debug string hash table. We need to compute this while - reading the input files, so that we know how large the .debug - section will be before we assign section positions. */ - struct bfd_strtab_hash *debug_strtab; - - /* The .debug section we will use for the final output. */ - asection *debug_section; - - /* The .loader section we will use for the final output. */ - asection *loader_section; - - /* A count of non TOC relative relocs which will need to be - allocated in the .loader section. */ - size_t ldrel_count; - - /* The .loader section header. */ - struct internal_ldhdr ldhdr; - - /* The .gl section we use to hold global linkage code. */ - asection *linkage_section; - - /* The .tc section we use to hold toc entries we build for global - linkage code. */ - asection *toc_section; - - /* The .ds section we use to hold function descriptors which we - create for exported symbols. */ - asection *descriptor_section; - - /* The list of import files. */ - struct xcoff_import_file *imports; - - /* Required alignment of sections within the output file. */ - unsigned long file_align; - - /* Whether the .text section must be read-only. */ - bfd_boolean textro; - - /* Whether garbage collection was done. */ - bfd_boolean gc; - - /* A linked list of symbols for which we have size information. */ - struct xcoff_link_size_list - { - struct xcoff_link_size_list *next; - struct xcoff_link_hash_entry *h; - bfd_size_type size; - } - *size_list; - - /* Magic sections: _text, _etext, _data, _edata, _end, end. */ - asection *special_sections[XCOFF_NUMBER_OF_SPECIAL_SECTIONS]; -}; - - -/* This structure is used to pass information through - xcoff_link_hash_traverse. */ - -struct xcoff_loader_info -{ - /* Set if a problem occurred. */ - bfd_boolean failed; - - /* Output BFD. */ - bfd *output_bfd; - - /* Link information structure. */ - struct bfd_link_info *info; - - /* Whether all defined symbols should be exported. */ - bfd_boolean export_defineds; - - /* Number of ldsym structures. */ - size_t ldsym_count; - - /* Size of string table. */ - size_t string_size; - - /* String table. */ - char *strings; - - /* Allocated size of string table. */ - size_t string_alc; -}; - -/* In case we're on a 32-bit machine, construct a 64-bit "-1" value - from smaller values. Start with zero, widen, *then* decrement. */ -#define MINUS_ONE (((bfd_vma) 0) - 1) - -/* __rtinit, from /usr/include/rtinit.h. */ -struct __rtinit -{ - /* Pointer to runtime linker. - XXX: Is the parameter really void? */ - int (*rtl) (void); - - /* Offset to array of init functions, 0 if none. */ - int init_offset; - - /* Offset to array of fini functions, 0 if none. */ - int fini_offset; - - /* Size of __RTINIT_DESCRIPTOR. This value should be used instead of - sizeof(__RTINIT_DESCRIPTOR). */ - int __rtinit_descriptor_size; -}; - -#define RTINIT_DESCRIPTOR_SIZE (12) - -struct __rtinit_descriptor -{ - /* Init/fini function. */ - int f; - - /* Offset, relative to the start of the __rtinit symbol, to name of the - function. */ - - int name_offset; - - /* Flags */ - unsigned char flags; -}; - -/* Archive */ - -#define XCOFFARMAG "\012" -#define XCOFFARMAGBIG "\012" -#define SXCOFFARMAG 8 - -/* The size of the ascii archive elements */ -#define XCOFFARMAG_ELEMENT_SIZE 12 -#define XCOFFARMAGBIG_ELEMENT_SIZE 20 - -/* This terminates an XCOFF archive member name. */ - -#define XCOFFARFMAG "`\012" -#define SXCOFFARFMAG 2 - -/* XCOFF archives start with this (printable) structure. */ - -struct xcoff_ar_file_hdr -{ - /* Magic string. */ - char magic[SXCOFFARMAG]; - - /* Offset of the member table (decimal ASCII string). */ - char memoff[XCOFFARMAG_ELEMENT_SIZE]; - - /* Offset of the global symbol table (decimal ASCII string). */ - char symoff[XCOFFARMAG_ELEMENT_SIZE]; - - /* Offset of the first member in the archive (decimal ASCII string). */ - char firstmemoff[XCOFFARMAG_ELEMENT_SIZE]; - - /* Offset of the last member in the archive (decimal ASCII string). */ - char lastmemoff[XCOFFARMAG_ELEMENT_SIZE]; - - /* Offset of the first member on the free list (decimal ASCII - string). */ - char freeoff[XCOFFARMAG_ELEMENT_SIZE]; -}; - -#define SIZEOF_AR_FILE_HDR (SXCOFFARMAG + 5 * XCOFFARMAG_ELEMENT_SIZE) - -/* This is the equivalent data structure for the big archive format. */ - -struct xcoff_ar_file_hdr_big -{ - /* Magic string. */ - char magic[SXCOFFARMAG]; - - /* Offset of the member table (decimal ASCII string). */ - char memoff[XCOFFARMAGBIG_ELEMENT_SIZE]; - - /* Offset of the global symbol table for 32-bit objects (decimal ASCII - string). */ - char symoff[XCOFFARMAGBIG_ELEMENT_SIZE]; - - /* Offset of the global symbol table for 64-bit objects (decimal ASCII - string). */ - char symoff64[XCOFFARMAGBIG_ELEMENT_SIZE]; - - /* Offset of the first member in the archive (decimal ASCII string). */ - char firstmemoff[XCOFFARMAGBIG_ELEMENT_SIZE]; - - /* Offset of the last member in the archive (decimal ASCII string). */ - char lastmemoff[XCOFFARMAGBIG_ELEMENT_SIZE]; - - /* Offset of the first member on the free list (decimal ASCII - string). */ - char freeoff[XCOFFARMAGBIG_ELEMENT_SIZE]; -}; - -#define SIZEOF_AR_FILE_HDR_BIG (SXCOFFARMAG + 6 * XCOFFARMAGBIG_ELEMENT_SIZE) - -/* Each XCOFF archive member starts with this (printable) structure. */ - -struct xcoff_ar_hdr -{ - /* File size not including the header (decimal ASCII string). */ - char size[XCOFFARMAG_ELEMENT_SIZE]; - - /* File offset of next archive member (decimal ASCII string). */ - char nextoff[XCOFFARMAG_ELEMENT_SIZE]; - - /* File offset of previous archive member (decimal ASCII string). */ - char prevoff[XCOFFARMAG_ELEMENT_SIZE]; - - /* File mtime (decimal ASCII string). */ - char date[12]; - - /* File UID (decimal ASCII string). */ - char uid[12]; - - /* File GID (decimal ASCII string). */ - char gid[12]; - - /* File mode (octal ASCII string). */ - char mode[12]; - - /* Length of file name (decimal ASCII string). */ - char namlen[4]; - - /* This structure is followed by the file name. The length of the - name is given in the namlen field. If the length of the name is - odd, the name is followed by a null byte. The name and optional - null byte are followed by XCOFFARFMAG, which is not included in - namlen. The contents of the archive member follow; the number of - bytes is given in the size field. */ -}; - -#define SIZEOF_AR_HDR (3 * XCOFFARMAG_ELEMENT_SIZE + 4 * 12 + 4) - -/* The equivalent for the big archive format. */ - -struct xcoff_ar_hdr_big -{ - /* File size not including the header (decimal ASCII string). */ - char size[XCOFFARMAGBIG_ELEMENT_SIZE]; - - /* File offset of next archive member (decimal ASCII string). */ - char nextoff[XCOFFARMAGBIG_ELEMENT_SIZE]; - - /* File offset of previous archive member (decimal ASCII string). */ - char prevoff[XCOFFARMAGBIG_ELEMENT_SIZE]; - - /* File mtime (decimal ASCII string). */ - char date[12]; - - /* File UID (decimal ASCII string). */ - char uid[12]; - - /* File GID (decimal ASCII string). */ - char gid[12]; - - /* File mode (octal ASCII string). */ - char mode[12]; - - /* Length of file name (decimal ASCII string). */ - char namlen[4]; - - /* This structure is followed by the file name. The length of the - name is given in the namlen field. If the length of the name is - odd, the name is followed by a null byte. The name and optional - null byte are followed by XCOFFARFMAG, which is not included in - namlen. The contents of the archive member follow; the number of - bytes is given in the size field. */ -}; - -#define SIZEOF_AR_HDR_BIG (3 * XCOFFARMAGBIG_ELEMENT_SIZE + 4 * 12 + 4) - -/* We often have to distinguish between the old and big file format. - Make it a bit cleaner. We can use `xcoff_ardata' here because the - `hdr' member has the same size and position in both formats. - is the default format, return TRUE even when xcoff_ardata is - NULL. */ -#ifndef SMALL_ARCHIVE -/* Creates big archives by default */ -#define xcoff_big_format_p(abfd) \ - ((NULL != bfd_ardata (abfd) && NULL == xcoff_ardata (abfd)) || \ - ((NULL != bfd_ardata (abfd)) && \ - (NULL != xcoff_ardata (abfd)) && \ - (xcoff_ardata (abfd)->magic[1] == 'b'))) -#else -/* Creates small archives by default. */ -#define xcoff_big_format_p(abfd) \ - (((NULL != bfd_ardata (abfd)) && \ - (NULL != xcoff_ardata (abfd)) && \ - (xcoff_ardata (abfd)->magic[1] == 'b'))) -#endif - -/* We store a copy of the xcoff_ar_file_hdr in the tdata field of the - artdata structure. Similar for the big archive. */ -#define xcoff_ardata(abfd) \ - ((struct xcoff_ar_file_hdr *) bfd_ardata (abfd)->tdata) -#define xcoff_ardata_big(abfd) \ - ((struct xcoff_ar_file_hdr_big *) bfd_ardata (abfd)->tdata) - -/* We store a copy of the xcoff_ar_hdr in the arelt_data field of an - archive element. Similar for the big archive. */ -#define arch_eltdata(bfd) ((struct areltdata *) ((bfd)->arelt_data)) -#define arch_xhdr(bfd) \ - ((struct xcoff_ar_hdr *) arch_eltdata (bfd)->arch_header) -#define arch_xhdr_big(bfd) \ - ((struct xcoff_ar_hdr_big *) arch_eltdata (bfd)->arch_header) - -#endif /* _INTERNAL_XCOFF_H */ diff --git a/include/coff/z80.h b/include/coff/z80.h deleted file mode 100644 index 3c72c10dd9e..00000000000 --- a/include/coff/z80.h +++ /dev/null @@ -1,51 +0,0 @@ -/* coff information for Zilog Z80 - Copyright 2005 Free Software Foundation, Inc. - Contributed by Arnold Metselaar - - This program 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, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define L_LNNO_SIZE 4 -#include "coff/external.h" - -/* z80 backend does not use dots in section names. */ -#undef _TEXT -#define _TEXT "text" -#undef _DATA -#define _DATA "data" -#undef _BSS -#define _BSS "bss" - -/* Type of cpu is stored in flags. */ -#define F_MACHMASK 0xF000 - -#define Z80MAGIC 0x805A - -#define Z80BADMAG(x) (((x).f_magic != Z80MAGIC)) - -/* Relocation directives. */ - -/* This format actually has more bits than we need. */ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_offset[4]; - char r_type[2]; - char r_stuff[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 16 diff --git a/include/coff/z8k.h b/include/coff/z8k.h deleted file mode 100644 index cfd5f04c089..00000000000 --- a/include/coff/z8k.h +++ /dev/null @@ -1,48 +0,0 @@ -/* coff information for Zilog Z800N - - Copyright 2001 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define L_LNNO_SIZE 4 -#include "coff/external.h" - -/* Type of cpu is stored in flags */ -#define F_Z8001 0x1000 -#define F_Z8002 0x2000 -#define F_MACHMASK 0xf000 - -#define Z8KMAGIC 0x8000 - -#define Z8KBADMAG(x) (((x).f_magic != Z8KMAGIC)) - -/********************** RELOCATION DIRECTIVES **********************/ - -/* The external reloc has an offset field, because some of the reloc - types on the z8k don't have room in the instruction for the entire - offset - eg with segments. */ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_offset[4]; - char r_type[2]; - char r_stuff[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 16 - diff --git a/include/demangle.h b/include/demangle.h deleted file mode 100644 index af294672736..00000000000 --- a/include/demangle.h +++ /dev/null @@ -1,536 +0,0 @@ -/* Defs for interface to demanglers. - Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, - 2003, 2004 Free Software Foundation, Inc. - - This program 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, 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., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - - -#if !defined (DEMANGLE_H) -#define DEMANGLE_H - -#include "libiberty.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* Options passed to cplus_demangle (in 2nd parameter). */ - -#define DMGL_NO_OPTS 0 /* For readability... */ -#define DMGL_PARAMS (1 << 0) /* Include function args */ -#define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */ -#define DMGL_JAVA (1 << 2) /* Demangle as Java rather than C++. */ -#define DMGL_VERBOSE (1 << 3) /* Include implementation details. */ -#define DMGL_TYPES (1 << 4) /* Also try to demangle type encodings. */ -#define DMGL_RET_POSTFIX (1 << 5) /* Print function return types (when - present) after function signature */ - -#define DMGL_AUTO (1 << 8) -#define DMGL_GNU (1 << 9) -#define DMGL_LUCID (1 << 10) -#define DMGL_ARM (1 << 11) -#define DMGL_HP (1 << 12) /* For the HP aCC compiler; - same as ARM except for - template arguments, etc. */ -#define DMGL_EDG (1 << 13) -#define DMGL_GNU_V3 (1 << 14) -#define DMGL_GNAT (1 << 15) - -/* If none of these are set, use 'current_demangling_style' as the default. */ -#define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM|DMGL_HP|DMGL_EDG|DMGL_GNU_V3|DMGL_JAVA|DMGL_GNAT) - -/* Enumeration of possible demangling styles. - - Lucid and ARM styles are still kept logically distinct, even though - they now both behave identically. The resulting style is actual the - union of both. I.E. either style recognizes both "__pt__" and "__rf__" - for operator "->", even though the first is lucid style and the second - is ARM style. (FIXME?) */ - -extern enum demangling_styles -{ - no_demangling = -1, - unknown_demangling = 0, - auto_demangling = DMGL_AUTO, - gnu_demangling = DMGL_GNU, - lucid_demangling = DMGL_LUCID, - arm_demangling = DMGL_ARM, - hp_demangling = DMGL_HP, - edg_demangling = DMGL_EDG, - gnu_v3_demangling = DMGL_GNU_V3, - java_demangling = DMGL_JAVA, - gnat_demangling = DMGL_GNAT -} current_demangling_style; - -/* Define string names for the various demangling styles. */ - -#define NO_DEMANGLING_STYLE_STRING "none" -#define AUTO_DEMANGLING_STYLE_STRING "auto" -#define GNU_DEMANGLING_STYLE_STRING "gnu" -#define LUCID_DEMANGLING_STYLE_STRING "lucid" -#define ARM_DEMANGLING_STYLE_STRING "arm" -#define HP_DEMANGLING_STYLE_STRING "hp" -#define EDG_DEMANGLING_STYLE_STRING "edg" -#define GNU_V3_DEMANGLING_STYLE_STRING "gnu-v3" -#define JAVA_DEMANGLING_STYLE_STRING "java" -#define GNAT_DEMANGLING_STYLE_STRING "gnat" - -/* Some macros to test what demangling style is active. */ - -#define CURRENT_DEMANGLING_STYLE current_demangling_style -#define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO) -#define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU) -#define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID) -#define ARM_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_ARM) -#define HP_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_HP) -#define EDG_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_EDG) -#define GNU_V3_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU_V3) -#define JAVA_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_JAVA) -#define GNAT_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNAT) - -/* Provide information about the available demangle styles. This code is - pulled from gdb into libiberty because it is useful to binutils also. */ - -extern const struct demangler_engine -{ - const char *const demangling_style_name; - const enum demangling_styles demangling_style; - const char *const demangling_style_doc; -} libiberty_demanglers[]; - -extern char * -cplus_demangle (const char *mangled, int options); - -extern int -cplus_demangle_opname (const char *opname, char *result, int options); - -extern const char * -cplus_mangle_opname (const char *opname, int options); - -/* Note: This sets global state. FIXME if you care about multi-threading. */ - -extern void -set_cplus_marker_for_demangling (int ch); - -extern enum demangling_styles -cplus_demangle_set_style (enum demangling_styles style); - -extern enum demangling_styles -cplus_demangle_name_to_style (const char *name); - -/* V3 ABI demangling entry points, defined in cp-demangle.c. */ -extern char* -cplus_demangle_v3 (const char* mangled, int options); - -extern char* -java_demangle_v3 (const char* mangled); - - -enum gnu_v3_ctor_kinds { - gnu_v3_complete_object_ctor = 1, - gnu_v3_base_object_ctor, - gnu_v3_complete_object_allocating_ctor -}; - -/* Return non-zero iff NAME is the mangled form of a constructor name - in the G++ V3 ABI demangling style. Specifically, return an `enum - gnu_v3_ctor_kinds' value indicating what kind of constructor - it is. */ -extern enum gnu_v3_ctor_kinds - is_gnu_v3_mangled_ctor (const char *name); - - -enum gnu_v3_dtor_kinds { - gnu_v3_deleting_dtor = 1, - gnu_v3_complete_object_dtor, - gnu_v3_base_object_dtor -}; - -/* Return non-zero iff NAME is the mangled form of a destructor name - in the G++ V3 ABI demangling style. Specifically, return an `enum - gnu_v3_dtor_kinds' value, indicating what kind of destructor - it is. */ -extern enum gnu_v3_dtor_kinds - is_gnu_v3_mangled_dtor (const char *name); - -/* The V3 demangler works in two passes. The first pass builds a tree - representation of the mangled name, and the second pass turns the - tree representation into a demangled string. Here we define an - interface to permit a caller to build their own tree - representation, which they can pass to the demangler to get a - demangled string. This can be used to canonicalize user input into - something which the demangler might output. It could also be used - by other demanglers in the future. */ - -/* These are the component types which may be found in the tree. Many - component types have one or two subtrees, referred to as left and - right (a component type with only one subtree puts it in the left - subtree). */ - -enum demangle_component_type -{ - /* A name, with a length and a pointer to a string. */ - DEMANGLE_COMPONENT_NAME, - /* A qualified name. The left subtree is a class or namespace or - some such thing, and the right subtree is a name qualified by - that class. */ - DEMANGLE_COMPONENT_QUAL_NAME, - /* A local name. The left subtree describes a function, and the - right subtree is a name which is local to that function. */ - DEMANGLE_COMPONENT_LOCAL_NAME, - /* A typed name. The left subtree is a name, and the right subtree - describes that name as a function. */ - DEMANGLE_COMPONENT_TYPED_NAME, - /* A template. The left subtree is a template name, and the right - subtree is a template argument list. */ - DEMANGLE_COMPONENT_TEMPLATE, - /* A template parameter. This holds a number, which is the template - parameter index. */ - DEMANGLE_COMPONENT_TEMPLATE_PARAM, - /* A constructor. This holds a name and the kind of - constructor. */ - DEMANGLE_COMPONENT_CTOR, - /* A destructor. This holds a name and the kind of destructor. */ - DEMANGLE_COMPONENT_DTOR, - /* A vtable. This has one subtree, the type for which this is a - vtable. */ - DEMANGLE_COMPONENT_VTABLE, - /* A VTT structure. This has one subtree, the type for which this - is a VTT. */ - DEMANGLE_COMPONENT_VTT, - /* A construction vtable. The left subtree is the type for which - this is a vtable, and the right subtree is the derived type for - which this vtable is built. */ - DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, - /* A typeinfo structure. This has one subtree, the type for which - this is the tpeinfo structure. */ - DEMANGLE_COMPONENT_TYPEINFO, - /* A typeinfo name. This has one subtree, the type for which this - is the typeinfo name. */ - DEMANGLE_COMPONENT_TYPEINFO_NAME, - /* A typeinfo function. This has one subtree, the type for which - this is the tpyeinfo function. */ - DEMANGLE_COMPONENT_TYPEINFO_FN, - /* A thunk. This has one subtree, the name for which this is a - thunk. */ - DEMANGLE_COMPONENT_THUNK, - /* A virtual thunk. This has one subtree, the name for which this - is a virtual thunk. */ - DEMANGLE_COMPONENT_VIRTUAL_THUNK, - /* A covariant thunk. This has one subtree, the name for which this - is a covariant thunk. */ - DEMANGLE_COMPONENT_COVARIANT_THUNK, - /* A Java class. This has one subtree, the type. */ - DEMANGLE_COMPONENT_JAVA_CLASS, - /* A guard variable. This has one subtree, the name for which this - is a guard variable. */ - DEMANGLE_COMPONENT_GUARD, - /* A reference temporary. This has one subtree, the name for which - this is a temporary. */ - DEMANGLE_COMPONENT_REFTEMP, - /* A hidden alias. This has one subtree, the encoding for which it - is providing alternative linkage. */ - DEMANGLE_COMPONENT_HIDDEN_ALIAS, - /* A standard substitution. This holds the name of the - substitution. */ - DEMANGLE_COMPONENT_SUB_STD, - /* The restrict qualifier. The one subtree is the type which is - being qualified. */ - DEMANGLE_COMPONENT_RESTRICT, - /* The volatile qualifier. The one subtree is the type which is - being qualified. */ - DEMANGLE_COMPONENT_VOLATILE, - /* The const qualifier. The one subtree is the type which is being - qualified. */ - DEMANGLE_COMPONENT_CONST, - /* The restrict qualifier modifying a member function. The one - subtree is the type which is being qualified. */ - DEMANGLE_COMPONENT_RESTRICT_THIS, - /* The volatile qualifier modifying a member function. The one - subtree is the type which is being qualified. */ - DEMANGLE_COMPONENT_VOLATILE_THIS, - /* The const qualifier modifying a member function. The one subtree - is the type which is being qualified. */ - DEMANGLE_COMPONENT_CONST_THIS, - /* A vendor qualifier. The left subtree is the type which is being - qualified, and the right subtree is the name of the - qualifier. */ - DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL, - /* A pointer. The one subtree is the type which is being pointed - to. */ - DEMANGLE_COMPONENT_POINTER, - /* A reference. The one subtree is the type which is being - referenced. */ - DEMANGLE_COMPONENT_REFERENCE, - /* A complex type. The one subtree is the base type. */ - DEMANGLE_COMPONENT_COMPLEX, - /* An imaginary type. The one subtree is the base type. */ - DEMANGLE_COMPONENT_IMAGINARY, - /* A builtin type. This holds the builtin type information. */ - DEMANGLE_COMPONENT_BUILTIN_TYPE, - /* A vendor's builtin type. This holds the name of the type. */ - DEMANGLE_COMPONENT_VENDOR_TYPE, - /* A function type. The left subtree is the return type. The right - subtree is a list of ARGLIST nodes. Either or both may be - NULL. */ - DEMANGLE_COMPONENT_FUNCTION_TYPE, - /* An array type. The left subtree is the dimension, which may be - NULL, or a string (represented as DEMANGLE_COMPONENT_NAME), or an - expression. The right subtree is the element type. */ - DEMANGLE_COMPONENT_ARRAY_TYPE, - /* A pointer to member type. The left subtree is the class type, - and the right subtree is the member type. CV-qualifiers appear - on the latter. */ - DEMANGLE_COMPONENT_PTRMEM_TYPE, - /* An argument list. The left subtree is the current argument, and - the right subtree is either NULL or another ARGLIST node. */ - DEMANGLE_COMPONENT_ARGLIST, - /* A template argument list. The left subtree is the current - template argument, and the right subtree is either NULL or - another TEMPLATE_ARGLIST node. */ - DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, - /* An operator. This holds information about a standard - operator. */ - DEMANGLE_COMPONENT_OPERATOR, - /* An extended operator. This holds the number of arguments, and - the name of the extended operator. */ - DEMANGLE_COMPONENT_EXTENDED_OPERATOR, - /* A typecast, represented as a unary operator. The one subtree is - the type to which the argument should be cast. */ - DEMANGLE_COMPONENT_CAST, - /* A unary expression. The left subtree is the operator, and the - right subtree is the single argument. */ - DEMANGLE_COMPONENT_UNARY, - /* A binary expression. The left subtree is the operator, and the - right subtree is a BINARY_ARGS. */ - DEMANGLE_COMPONENT_BINARY, - /* Arguments to a binary expression. The left subtree is the first - argument, and the right subtree is the second argument. */ - DEMANGLE_COMPONENT_BINARY_ARGS, - /* A trinary expression. The left subtree is the operator, and the - right subtree is a TRINARY_ARG1. */ - DEMANGLE_COMPONENT_TRINARY, - /* Arguments to a trinary expression. The left subtree is the first - argument, and the right subtree is a TRINARY_ARG2. */ - DEMANGLE_COMPONENT_TRINARY_ARG1, - /* More arguments to a trinary expression. The left subtree is the - second argument, and the right subtree is the third argument. */ - DEMANGLE_COMPONENT_TRINARY_ARG2, - /* A literal. The left subtree is the type, and the right subtree - is the value, represented as a DEMANGLE_COMPONENT_NAME. */ - DEMANGLE_COMPONENT_LITERAL, - /* A negative literal. Like LITERAL, but the value is negated. - This is a minor hack: the NAME used for LITERAL points directly - to the mangled string, but since negative numbers are mangled - using 'n' instead of '-', we want a way to indicate a negative - number which involves neither modifying the mangled string nor - allocating a new copy of the literal in memory. */ - DEMANGLE_COMPONENT_LITERAL_NEG -}; - -/* Types which are only used internally. */ - -struct demangle_operator_info; -struct demangle_builtin_type_info; - -/* A node in the tree representation is an instance of a struct - demangle_component. Note that the field names of the struct are - not well protected against macros defined by the file including - this one. We can fix this if it ever becomes a problem. */ - -struct demangle_component -{ - /* The type of this component. */ - enum demangle_component_type type; - - union - { - /* For DEMANGLE_COMPONENT_NAME. */ - struct - { - /* A pointer to the name (which need not NULL terminated) and - its length. */ - const char *s; - int len; - } s_name; - - /* For DEMANGLE_COMPONENT_OPERATOR. */ - struct - { - /* Operator. */ - const struct demangle_operator_info *op; - } s_operator; - - /* For DEMANGLE_COMPONENT_EXTENDED_OPERATOR. */ - struct - { - /* Number of arguments. */ - int args; - /* Name. */ - struct demangle_component *name; - } s_extended_operator; - - /* For DEMANGLE_COMPONENT_CTOR. */ - struct - { - /* Kind of constructor. */ - enum gnu_v3_ctor_kinds kind; - /* Name. */ - struct demangle_component *name; - } s_ctor; - - /* For DEMANGLE_COMPONENT_DTOR. */ - struct - { - /* Kind of destructor. */ - enum gnu_v3_dtor_kinds kind; - /* Name. */ - struct demangle_component *name; - } s_dtor; - - /* For DEMANGLE_COMPONENT_BUILTIN_TYPE. */ - struct - { - /* Builtin type. */ - const struct demangle_builtin_type_info *type; - } s_builtin; - - /* For DEMANGLE_COMPONENT_SUB_STD. */ - struct - { - /* Standard substitution string. */ - const char* string; - /* Length of string. */ - int len; - } s_string; - - /* For DEMANGLE_COMPONENT_TEMPLATE_PARAM. */ - struct - { - /* Template parameter index. */ - long number; - } s_number; - - /* For other types. */ - struct - { - /* Left (or only) subtree. */ - struct demangle_component *left; - /* Right subtree. */ - struct demangle_component *right; - } s_binary; - - } u; -}; - -/* People building mangled trees are expected to allocate instances of - struct demangle_component themselves. They can then call one of - the following functions to fill them in. */ - -/* Fill in most component types with a left subtree and a right - subtree. Returns non-zero on success, zero on failure, such as an - unrecognized or inappropriate component type. */ - -extern int -cplus_demangle_fill_component (struct demangle_component *fill, - enum demangle_component_type, - struct demangle_component *left, - struct demangle_component *right); - -/* Fill in a DEMANGLE_COMPONENT_NAME. Returns non-zero on success, - zero for bad arguments. */ - -extern int -cplus_demangle_fill_name (struct demangle_component *fill, - const char *, int); - -/* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE, using the name of the - builtin type (e.g., "int", etc.). Returns non-zero on success, - zero if the type is not recognized. */ - -extern int -cplus_demangle_fill_builtin_type (struct demangle_component *fill, - const char *type_name); - -/* Fill in a DEMANGLE_COMPONENT_OPERATOR, using the name of the - operator and the number of arguments which it takes (the latter is - used to disambiguate operators which can be both binary and unary, - such as '-'). Returns non-zero on success, zero if the operator is - not recognized. */ - -extern int -cplus_demangle_fill_operator (struct demangle_component *fill, - const char *opname, int args); - -/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR, providing the - number of arguments and the name. Returns non-zero on success, - zero for bad arguments. */ - -extern int -cplus_demangle_fill_extended_operator (struct demangle_component *fill, - int numargs, - struct demangle_component *nm); - -/* Fill in a DEMANGLE_COMPONENT_CTOR. Returns non-zero on success, - zero for bad arguments. */ - -extern int -cplus_demangle_fill_ctor (struct demangle_component *fill, - enum gnu_v3_ctor_kinds kind, - struct demangle_component *name); - -/* Fill in a DEMANGLE_COMPONENT_DTOR. Returns non-zero on success, - zero for bad arguments. */ - -extern int -cplus_demangle_fill_dtor (struct demangle_component *fill, - enum gnu_v3_dtor_kinds kind, - struct demangle_component *name); - -/* This function translates a mangled name into a struct - demangle_component tree. The first argument is the mangled name. - The second argument is DMGL_* options. This returns a pointer to a - tree on success, or NULL on failure. On success, the third - argument is set to a block of memory allocated by malloc. This - block should be passed to free when the tree is no longer - needed. */ - -extern struct demangle_component * -cplus_demangle_v3_components (const char *mangled, int options, void **mem); - -/* This function takes a struct demangle_component tree and returns - the corresponding demangled string. The first argument is DMGL_* - options. The second is the tree to demangle. The third is a guess - at the length of the demangled string, used to initially allocate - the return buffer. The fourth is a pointer to a size_t. On - success, this function returns a buffer allocated by malloc(), and - sets the size_t pointed to by the fourth argument to the size of - the allocated buffer (not the length of the returned string). On - failure, this function returns NULL, and sets the size_t pointed to - by the fourth argument to 0 for an invalid tree, or to 1 for a - memory allocation error. */ - -extern char * -cplus_demangle_print (int options, - const struct demangle_component *tree, - int estimated_length, - size_t *p_allocated_size); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* DEMANGLE_H */ diff --git a/include/dis-asm.h b/include/dis-asm.h deleted file mode 100644 index bdbf9f88c5f..00000000000 --- a/include/dis-asm.h +++ /dev/null @@ -1,339 +0,0 @@ -/* Interface between the opcode library and its callers. - - Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005 - Free Software Foundation, Inc. - - This program 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, 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., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. - - Written by Cygnus Support, 1993. - - The opcode library (libopcodes.a) provides instruction decoders for - a large variety of instruction sets, callable with an identical - interface, for making instruction-processing programs more independent - of the instruction set being processed. */ - -#ifndef DIS_ASM_H -#define DIS_ASM_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "bfd.h" - -typedef int (*fprintf_ftype) (void *, const char*, ...) ATTRIBUTE_FPTR_PRINTF_2; - -enum dis_insn_type { - dis_noninsn, /* Not a valid instruction */ - dis_nonbranch, /* Not a branch instruction */ - dis_branch, /* Unconditional branch */ - dis_condbranch, /* Conditional branch */ - dis_jsr, /* Jump to subroutine */ - dis_condjsr, /* Conditional jump to subroutine */ - dis_dref, /* Data reference instruction */ - dis_dref2 /* Two data references in instruction */ -}; - -/* This struct is passed into the instruction decoding routine, - and is passed back out into each callback. The various fields are used - for conveying information from your main routine into your callbacks, - for passing information into the instruction decoders (such as the - addresses of the callback functions), or for passing information - back from the instruction decoders to their callers. - - It must be initialized before it is first passed; this can be done - by hand, or using one of the initialization macros below. */ - -typedef struct disassemble_info { - fprintf_ftype fprintf_func; - void *stream; - void *application_data; - - /* Target description. We could replace this with a pointer to the bfd, - but that would require one. There currently isn't any such requirement - so to avoid introducing one we record these explicitly. */ - /* The bfd_flavour. This can be bfd_target_unknown_flavour. */ - enum bfd_flavour flavour; - /* The bfd_arch value. */ - enum bfd_architecture arch; - /* The bfd_mach value. */ - unsigned long mach; - /* Endianness (for bi-endian cpus). Mono-endian cpus can ignore this. */ - enum bfd_endian endian; - /* An arch/mach-specific bitmask of selected instruction subsets, mainly - for processors with run-time-switchable instruction sets. The default, - zero, means that there is no constraint. CGEN-based opcodes ports - may use ISA_foo masks. */ - void *insn_sets; - - /* Some targets need information about the current section to accurately - display insns. If this is NULL, the target disassembler function - will have to make its best guess. */ - asection *section; - - /* An array of pointers to symbols either at the location being disassembled - or at the start of the function being disassembled. The array is sorted - so that the first symbol is intended to be the one used. The others are - present for any misc. purposes. This is not set reliably, but if it is - not NULL, it is correct. */ - asymbol **symbols; - /* Number of symbols in array. */ - int num_symbols; - - /* For use by the disassembler. - The top 16 bits are reserved for public use (and are documented here). - The bottom 16 bits are for the internal use of the disassembler. */ - unsigned long flags; -#define INSN_HAS_RELOC 0x80000000 - void *private_data; - - /* Function used to get bytes to disassemble. MEMADDR is the - address of the stuff to be disassembled, MYADDR is the address to - put the bytes in, and LENGTH is the number of bytes to read. - INFO is a pointer to this struct. - Returns an errno value or 0 for success. */ - int (*read_memory_func) - (bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, - struct disassemble_info *info); - - /* Function which should be called if we get an error that we can't - recover from. STATUS is the errno value from read_memory_func and - MEMADDR is the address that we were trying to read. INFO is a - pointer to this struct. */ - void (*memory_error_func) - (int status, bfd_vma memaddr, struct disassemble_info *info); - - /* Function called to print ADDR. */ - void (*print_address_func) - (bfd_vma addr, struct disassemble_info *info); - - /* Function called to determine if there is a symbol at the given ADDR. - If there is, the function returns 1, otherwise it returns 0. - This is used by ports which support an overlay manager where - the overlay number is held in the top part of an address. In - some circumstances we want to include the overlay number in the - address, (normally because there is a symbol associated with - that address), but sometimes we want to mask out the overlay bits. */ - int (* symbol_at_address_func) - (bfd_vma addr, struct disassemble_info * info); - - /* Function called to check if a SYMBOL is can be displayed to the user. - This is used by some ports that want to hide special symbols when - displaying debugging outout. */ - bfd_boolean (* symbol_is_valid) - (asymbol *, struct disassemble_info * info); - - /* These are for buffer_read_memory. */ - bfd_byte *buffer; - bfd_vma buffer_vma; - unsigned int buffer_length; - - /* This variable may be set by the instruction decoder. It suggests - the number of bytes objdump should display on a single line. If - the instruction decoder sets this, it should always set it to - the same value in order to get reasonable looking output. */ - int bytes_per_line; - - /* The next two variables control the way objdump displays the raw data. */ - /* For example, if bytes_per_line is 8 and bytes_per_chunk is 4, the */ - /* output will look like this: - 00: 00000000 00000000 - with the chunks displayed according to "display_endian". */ - int bytes_per_chunk; - enum bfd_endian display_endian; - - /* Number of octets per incremented target address - Normally one, but some DSPs have byte sizes of 16 or 32 bits. */ - unsigned int octets_per_byte; - - /* The number of zeroes we want to see at the end of a section before we - start skipping them. */ - unsigned int skip_zeroes; - - /* The number of zeroes to skip at the end of a section. If the number - of zeroes at the end is between SKIP_ZEROES_AT_END and SKIP_ZEROES, - they will be disassembled. If there are fewer than - SKIP_ZEROES_AT_END, they will be skipped. This is a heuristic - attempt to avoid disassembling zeroes inserted by section - alignment. */ - unsigned int skip_zeroes_at_end; - - /* Whether the disassembler always needs the relocations. */ - bfd_boolean disassembler_needs_relocs; - - /* Results from instruction decoders. Not all decoders yet support - this information. This info is set each time an instruction is - decoded, and is only valid for the last such instruction. - - To determine whether this decoder supports this information, set - insn_info_valid to 0, decode an instruction, then check it. */ - - char insn_info_valid; /* Branch info has been set. */ - char branch_delay_insns; /* How many sequential insn's will run before - a branch takes effect. (0 = normal) */ - char data_size; /* Size of data reference in insn, in bytes */ - enum dis_insn_type insn_type; /* Type of instruction */ - bfd_vma target; /* Target address of branch or dref, if known; - zero if unknown. */ - bfd_vma target2; /* Second target address for dref2 */ - - /* Command line options specific to the target disassembler. */ - char * disassembler_options; - -} disassemble_info; - - -/* Standard disassemblers. Disassemble one instruction at the given - target address. Return number of octets processed. */ -typedef int (*disassembler_ftype) (bfd_vma, disassemble_info *); - -extern int print_insn_big_mips (bfd_vma, disassemble_info *); -extern int print_insn_little_mips (bfd_vma, disassemble_info *); -extern int print_insn_i386 (bfd_vma, disassemble_info *); -extern int print_insn_i386_att (bfd_vma, disassemble_info *); -extern int print_insn_i386_intel (bfd_vma, disassemble_info *); -extern int print_insn_ia64 (bfd_vma, disassemble_info *); -extern int print_insn_i370 (bfd_vma, disassemble_info *); -extern int print_insn_m68hc11 (bfd_vma, disassemble_info *); -extern int print_insn_m68hc12 (bfd_vma, disassemble_info *); -extern int print_insn_m68k (bfd_vma, disassemble_info *); -extern int print_insn_z80 (bfd_vma, disassemble_info *); -extern int print_insn_z8001 (bfd_vma, disassemble_info *); -extern int print_insn_z8002 (bfd_vma, disassemble_info *); -extern int print_insn_h8300 (bfd_vma, disassemble_info *); -extern int print_insn_h8300h (bfd_vma, disassemble_info *); -extern int print_insn_h8300s (bfd_vma, disassemble_info *); -extern int print_insn_h8500 (bfd_vma, disassemble_info *); -extern int print_insn_alpha (bfd_vma, disassemble_info *); -extern int print_insn_big_arm (bfd_vma, disassemble_info *); -extern int print_insn_little_arm (bfd_vma, disassemble_info *); -extern int print_insn_sparc (bfd_vma, disassemble_info *); -extern int print_insn_avr (bfd_vma, disassemble_info *); -extern int print_insn_bfin (bfd_vma, disassemble_info *); -extern int print_insn_d10v (bfd_vma, disassemble_info *); -extern int print_insn_d30v (bfd_vma, disassemble_info *); -extern int print_insn_dlx (bfd_vma, disassemble_info *); -extern int print_insn_fr30 (bfd_vma, disassemble_info *); -extern int print_insn_hppa (bfd_vma, disassemble_info *); -extern int print_insn_i860 (bfd_vma, disassemble_info *); -extern int print_insn_i960 (bfd_vma, disassemble_info *); -extern int print_insn_ip2k (bfd_vma, disassemble_info *); -extern int print_insn_m32r (bfd_vma, disassemble_info *); -extern int print_insn_m88k (bfd_vma, disassemble_info *); -extern int print_insn_maxq_little (bfd_vma, disassemble_info *); -extern int print_insn_maxq_big (bfd_vma, disassemble_info *); -extern int print_insn_mcore (bfd_vma, disassemble_info *); -extern int print_insn_mmix (bfd_vma, disassemble_info *); -extern int print_insn_mn10200 (bfd_vma, disassemble_info *); -extern int print_insn_mn10300 (bfd_vma, disassemble_info *); -extern int print_insn_mt (bfd_vma, disassemble_info *); -extern int print_insn_msp430 (bfd_vma, disassemble_info *); -extern int print_insn_ns32k (bfd_vma, disassemble_info *); -extern int print_insn_crx (bfd_vma, disassemble_info *); -extern int print_insn_openrisc (bfd_vma, disassemble_info *); -extern int print_insn_big_or32 (bfd_vma, disassemble_info *); -extern int print_insn_little_or32 (bfd_vma, disassemble_info *); -extern int print_insn_pdp11 (bfd_vma, disassemble_info *); -extern int print_insn_pj (bfd_vma, disassemble_info *); -extern int print_insn_big_powerpc (bfd_vma, disassemble_info *); -extern int print_insn_little_powerpc (bfd_vma, disassemble_info *); -extern int print_insn_rs6000 (bfd_vma, disassemble_info *); -extern int print_insn_s390 (bfd_vma, disassemble_info *); -extern int print_insn_sh (bfd_vma, disassemble_info *); -extern int print_insn_tic30 (bfd_vma, disassemble_info *); -extern int print_insn_tic4x (bfd_vma, disassemble_info *); -extern int print_insn_tic54x (bfd_vma, disassemble_info *); -extern int print_insn_tic80 (bfd_vma, disassemble_info *); -extern int print_insn_v850 (bfd_vma, disassemble_info *); -extern int print_insn_vax (bfd_vma, disassemble_info *); -extern int print_insn_w65 (bfd_vma, disassemble_info *); -extern int print_insn_xstormy16 (bfd_vma, disassemble_info *); -extern int print_insn_xtensa (bfd_vma, disassemble_info *); -extern int print_insn_sh64 (bfd_vma, disassemble_info *); -extern int print_insn_sh64x_media (bfd_vma, disassemble_info *); -extern int print_insn_frv (bfd_vma, disassemble_info *); -extern int print_insn_iq2000 (bfd_vma, disassemble_info *); -extern int print_insn_xc16x (bfd_vma, disassemble_info *); -extern int print_insn_m32c (bfd_vma, disassemble_info *); - -extern disassembler_ftype arc_get_disassembler (void *); -extern disassembler_ftype cris_get_disassembler (bfd *); - -extern void print_mips_disassembler_options (FILE *); -extern void print_ppc_disassembler_options (FILE *); -extern void print_arm_disassembler_options (FILE *); -extern void parse_arm_disassembler_option (char *); -extern int get_arm_regname_num_options (void); -extern int set_arm_regname_option (int); -extern int get_arm_regnames (int, const char **, const char **, const char *const **); -extern bfd_boolean arm_symbol_is_valid (asymbol *, struct disassemble_info *); - -/* Fetch the disassembler for a given BFD, if that support is available. */ -extern disassembler_ftype disassembler (bfd *); - -/* Amend the disassemble_info structure as necessary for the target architecture. - Should only be called after initialising the info->arch field. */ -extern void disassemble_init_for_target (struct disassemble_info * info); - -/* Document any target specific options available from the disassembler. */ -extern void disassembler_usage (FILE *); - - -/* This block of definitions is for particular callers who read instructions - into a buffer before calling the instruction decoder. */ - -/* Here is a function which callers may wish to use for read_memory_func. - It gets bytes from a buffer. */ -extern int buffer_read_memory - (bfd_vma, bfd_byte *, unsigned int, struct disassemble_info *); - -/* This function goes with buffer_read_memory. - It prints a message using info->fprintf_func and info->stream. */ -extern void perror_memory (int, bfd_vma, struct disassemble_info *); - - -/* Just print the address in hex. This is included for completeness even - though both GDB and objdump provide their own (to print symbolic - addresses). */ -extern void generic_print_address - (bfd_vma, struct disassemble_info *); - -/* Always true. */ -extern int generic_symbol_at_address - (bfd_vma, struct disassemble_info *); - -/* Also always true. */ -extern bfd_boolean generic_symbol_is_valid - (asymbol *, struct disassemble_info *); - -/* Method to initialize a disassemble_info struct. This should be - called by all applications creating such a struct. */ -extern void init_disassemble_info (struct disassemble_info *info, void *stream, - fprintf_ftype fprintf_func); - -/* For compatibility with existing code. */ -#define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC) \ - init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC)) -#define INIT_DISASSEMBLE_INFO_NO_ARCH(INFO, STREAM, FPRINTF_FUNC) \ - init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC)) - - -#ifdef __cplusplus -} -#endif - -#endif /* ! defined (DIS_ASM_H) */ diff --git a/include/dyn-string.h b/include/dyn-string.h deleted file mode 100644 index 44e33deba3a..00000000000 --- a/include/dyn-string.h +++ /dev/null @@ -1,60 +0,0 @@ -/* An abstract string datatype. - Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc. - Contributed by Mark Mitchell (mark@markmitchell.com). - -This file is part of GCC. - -GCC 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, or (at your option) -any later version. - -GCC 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 GCC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - - -typedef struct dyn_string -{ - int allocated; /* The amount of space allocated for the string. */ - int length; /* The actual length of the string. */ - char *s; /* The string itself, NUL-terminated. */ -}* dyn_string_t; - -/* The length STR, in bytes, not including the terminating NUL. */ -#define dyn_string_length(STR) \ - ((STR)->length) - -/* The NTBS in which the contents of STR are stored. */ -#define dyn_string_buf(STR) \ - ((STR)->s) - -/* Compare DS1 to DS2 with strcmp. */ -#define dyn_string_compare(DS1, DS2) \ - (strcmp ((DS1)->s, (DS2)->s)) - - -extern int dyn_string_init (struct dyn_string *, int); -extern dyn_string_t dyn_string_new (int); -extern void dyn_string_delete (dyn_string_t); -extern char *dyn_string_release (dyn_string_t); -extern dyn_string_t dyn_string_resize (dyn_string_t, int); -extern void dyn_string_clear (dyn_string_t); -extern int dyn_string_copy (dyn_string_t, dyn_string_t); -extern int dyn_string_copy_cstr (dyn_string_t, const char *); -extern int dyn_string_prepend (dyn_string_t, dyn_string_t); -extern int dyn_string_prepend_cstr (dyn_string_t, const char *); -extern int dyn_string_insert (dyn_string_t, int, dyn_string_t); -extern int dyn_string_insert_cstr (dyn_string_t, int, const char *); -extern int dyn_string_insert_char (dyn_string_t, int, int); -extern int dyn_string_append (dyn_string_t, dyn_string_t); -extern int dyn_string_append_cstr (dyn_string_t, const char *); -extern int dyn_string_append_char (dyn_string_t, int); -extern int dyn_string_substring (dyn_string_t, dyn_string_t, int, int); -extern int dyn_string_eq (dyn_string_t, dyn_string_t); diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog deleted file mode 100644 index f1c15b52c7d..00000000000 --- a/include/elf/ChangeLog +++ /dev/null @@ -1,500 +0,0 @@ -2006-07-10 Jakub Jelinek - - * common.h (SHT_GNU_HASH, DT_GNU_HASH): Define. - -2006-05-31 H.J. Lu - - * internal.h (ELF_SECTION_SIZE): New. - (ELF_IS_SECTION_IN_SEGMENT): Likewise. - (ELF_IS_SECTION_IN_SEGMENT_FILE): Updated. - (ELF_IS_SECTION_IN_SEGMENT_MEMORY): Likewise. - -2006-05-27 H.J. Lu - - * internal.h (struct elf_segment_map): Add p_align and p_align_valid. - -2006-05-24 Carlos O'Donell - Randolph Chung - * hppa.h (R_PARISC_TLS_GD21L, R_PARISC_TLS_GD14R, R_PARISC_TLS_GDCALL, - R_PARISC_TLS_LDM21L, R_PARISC_TLS_LDM14R, R_PARISC_TLS_LDMCALL, - R_PARISC_TLS_LDO21L, R_PARISC_TLS_LDO14R, R_PARISC_TLS_DTPMOD32, - R_PARISC_TLS_DTPMOD64, R_PARISC_TLS_DTPOFF32, R_PARISC_TLS_DTPOFF64): - New TLS relocs. - (R_PARISC_TLS_LE21L, R_PARISC_TLS_LE14R, R_PARISC_TLS_IE21L, - R_PARISC_TLS_IE14R, R_PARISC_TLS_TPREL32, R_PARISC_TLS_TPREL64): - Define TLS relocs using existing equivalents. - -2006-05-24 Bjoern Haase - - * avr.h: Add E_AVR_MACH_AVR6, R_AVR_LO8_LDI_GS and R_AVR_HI8_LDI_GS. - -2006-03-22 Richard Sandiford - Daniel Jacobowitz - Phil Edwards - Zack Weinberg - Mark Mitchell - Nathan Sidwell - - * mips.h (R_MIPS_COPY, R_MIPS_JUMP_SLOT): New relocs. - -2006-03-19 John David Anglin - - * hppa.h (SHF_HP_TLS, SHF_HP_NEAR_SHARED, SHF_HP_FAR_SHARED, - SHF_HP_COMDAT, SHF_HP_CONST, SHN_TLS_COMMON, SHN_NS_COMMON, - SHN_NS_UNDEF, SHN_FS_UNDEF, SHN_HP_EXTERN, SHN_HP_EXTHINT, - SHN_HP_UNDEF_BIND_IMM, SHT_HP_OVLBITS, SHT_HP_DLKM, SHT_HP_COMDAT, - SHT_HP_OBJDICT, SHT_HP_ANNOT, STB_HP_ALIAS): Define. - -2006-03-10 Paul Brook - - * arm.h (EF_ARM_EABI_VER5): Define. - -2006-03-06 Nathan Sidwell - - * m68k.h (EF_M68K_ISA_MASK, EF_M68K_ISA_A, - EF_M68K_ISA_A_PLUS, EF_M68K_ISA_B, EF_M68K_ISA_C): Adjust. - (EF_M68K_ISA_A_NODIV, EF_M68K_ISA_B_NOUSP): New. - (EF_M68K_HW_DIV, EF_M68K_USP): Remove. - (EF_M68K_MAC, EF_M68K_EMAC, EF_M68K_FLOAT): Adjust. - (EF_M68K_EMAC_B): New. - -2006-03-03 Bjoern Haase - - * avr.h (R_AVR_MS8_LDI,R_AVR_MS8_LDI_NEG): Add. - (EF_AVR_LINKRELAX_PREPARED): Add. - -2006-03-02 Ben Elliston - - Import from the GCC tree: - 2006-03-01 Jakub Jelinek - - * dwarf2.h (DW_TAG_condition, DW_TAG_shared_type): New constants - from DWARF 3. - (DW_AT_description, DW_AT_binary_scale, DW_AT_decimal_scale, - DW_AT_small, DW_AT_decimal_sign, DW_AT_digit_count, - DW_AT_picture_string, DW_AT_mutable, DW_AT_threads_scaled, - DW_AT_explicit, DW_AT_object_pointer, DW_AT_endianity, - DW_AT_elemental, DW_AT_pure, DW_AT_recursive): New. - (DW_OP_form_tls_address, DW_OP_call_frame_cfa, DW_OP_bit_piece): New. - (DW_ATE_packed_decimal, DW_ATE_numeric_string, DW_ATE_edited, - DW_ATE_signed_fixed, DW_ATE_unsigned_fixed): New. - (DW_DS_unsigned, DW_DS_leading_overpunch, DW_DS_trailing_overpunch, - DW_DS_leading_separate, DW_DS_trailing_separate): New. - (DW_END_default, DW_END_big, DW_END_little): New. - (DW_END_lo_user, DW_END_hi_user): Define. - (DW_LNE_lo_user, DW_LNE_hi_user): Define. - (DW_CFA_val_offset, DW_CFA_val_offset_sf, DW_CFA_val_expression): New. - (DW_LANG_PLI, DW_LANG_ObjC, DW_LANG_ObjC_plus_plus, DW_LANG_UPC, - DW_LANG_D): New. - -2006-02-24 DJ Delorie - - * m32c.h: Add relax relocs. - -2006-02-17 Shrirang Khisti - Anil Paranjape - Shilin Shakti - - * common.h (EM_XC16X): New entry for xc16x cpu. - Sort other EM_* numbers into numerical order. - * xc16x.h: New file. - -2006-02-10 H.J. Lu - - PR binutils/2258 - * internal.h (ELF_IS_SECTION_IN_SEGMENT_FILE): New. - (ELF_IS_SECTION_IN_SEGMENT_MEMORY): Likewise. - -2006-02-07 Nathan Sidwell - - * m68k.h (EF_CPU32, EF_M68000, EF_CFV4E): Rename to ... - (EF_M68K_CPU32, EF_M68K_M68000, EF_M68K_CFV4E): ... here. - (EF_M68K_ISA_MASK, EF_M68K_ISA_A, EF_M68K_M68K_ISA_A_PLUS, - EF_M68K_ISA_B, EF_M68K_HW_DIV, EF_M68K_MAC_MASK, EF_M68K_MAC, - EF_M68K_EMAC, EF_M68K_USP, EF_M68K_FLOAT): New. - -2006-02-06 Steve Ellcey - - * ia64.h (SHF_IA_64_HP_TLS): New. - -2006-01-18 Alexandre Oliva - - Introduce TLS descriptors for i386 and x86_64. - * common.h (DT_TLSDESC_GOT, DT_TLSDESC_PLT): New. - * i386.h (R_386_TLS_GOTDESC, R_386_TLS_DESC_CALL, R_386_TLS_DESC): - New. - * x86-64.h (R_X86_64_GOTPC32_TLSDESC, R_X86_64_TLSDESC_CALL, - R_X86_64_TLSDESC): New. - -2006-01-09 Mike Frysinger : - - * common.h (EM_ALTERA_NIOS2, EM_NIOS32) Define. - -2005-12-16 Nathan Sidwell - - Second part of ms1 to mt renaming. - * common.h (EM_MT): Renamed. - * mt.h: Rename relocs, cpu & other defines. - -2005-12-12 Paul Brook - - * arm.h (elf32_arm_get_eabi_attr_int): Add prototype. - -2005-11-11 Nick Clifton - - PR 1150 - * mips.h (STO_OPTIONAL): Define. - (ELF_MIPS_IS_OPTIONAL): Define. - -2005-09-30 Catherine Moore - - * bfin.h: New file. - * common.h (EM_BLACKFIN): Define. - -2005-10-08 Paul Brook - - * arm.h: Add prototypes for BFD object attribute routines. - -2005-09-09 Richard Earnshaw - - * arm.h (SHT_ARM_PREEMPTMAP, SHT_ARM_ATTRIBUTES): New defines. - -2005-08-09 John David Anglin - - * hppa.h (SHT_PARISC_DLKM, SHF_PARISC_WEAKORDER, PT_PARISC_WEAKORDER): - New defines. - -2005-08-04 John David Anglin - - * hppa.h (PF_HP_CODE, PF_HP_MODIFY, PF_HP_LAZYSWAP): Revise defines. - (PF_HP_CODE_DEPR, PF_HP_MODIFY_DEPR, PF_HP_LAZYSWAP_DEPR): New - deprecated defines. - (DT_HP_EPLTREL, DT_HP_EPLTRELSZ, DT_HP_FILTERED, DT_HP_FILTER_TLS, - DT_HP_COMPAT_FILTERED, DT_HP_LAZYLOAD, DT_HP_BIND_NOW_COUNT, DT_PLT, - DT_PLT_SIZE, DT_DLT, DT_DLT_SIZE, DT_HP_BIND_DEPTH_FIRST, DT_HP_GST, - DT_HP_SHLIB_FIXED, DT_HP_MERGE_SHLIB_SEG, DT_HP_NODELETE, DT_HP_GROUP, - DT_HP_PROTECT_LINKAGE_TABLE, PT_HP_OPT_ANNOT, PT_HP_HSL_ANNOT, - PT_HP_STACK, PT_HP_CORE_UTSNAME, NT_HP_COMPILER, NT_HP_COPYRIGHT, - NT_HP_VERSION, NT_HP_SRCFILE_INFO, NT_HP_LINKER, NT_HP_INSTRUMENTED, - NT_HP_UX_OPTIONS): Define. - -2005-07-25 DJ Delorie - - * m32c.h: Add R_M32C_8, R_M32C_LO16, R_M32C_HI8, and R_M32C_HI16. - -2005-07-25 Jan Hubicka - - * x86-64.h (SHN_X86_64_LCOMMON): New. - (SHF_X86_64_LARGE): New. - -2005-07-20 Kazuhiro Inaoka - - * m32r.h (R_M32R_REL32): Added. - -2005-07-18 Ben Elliston - - * dwarf2.h (enum dwarf_type): Remove DW_AT_GNU_decimal_float. - Replace with DW_ATE_decimal_float (now in DWARF 3). - -2005-07-14 Jim Blandy - - Add support for Renesas M32C and M16C. - * common.h (EM_M32C): New machine number. - * m32c.h: New file. - -2005-06-17 Jan Beulich - - * x86-64.h (elf_x86_64_reloc_type): Adjust comment for - R_X86_64_GOTPCREL. Add R_X86_64_PC64, R_X86_64_GOTOFF64, and - R_X86_64_GOTPC32. - -2005-06-07 Aldy Hernandez - Michael Snyder - Stan Cox - - * common.h (EM_MS1): Define. - - * ms1.h: New file. - -2005-05-31 Richard Henderson - - * alpha.h (LITUSE_ALPHA_JSRDIRECT): New. - -2005-05-29 Richard Henderson - - * alpha.h (DT_ALPHA_PLTRO): New. - -2005-05-19 Ben Elliston - - * dwarf2.h (enum dwarf_type): Assign DW_ATE_GNU_decimal_float from - the user-defined encoding space pending inclusion in the standard. - -2005-05-18 Zack Weinberg - - * arm.h: Make all #ifndef OLD_ARM_ABI blocks - unconditional, delete all #ifdef OLD_ARM_ABI blocks. - -2005-05-17 Zack Weinberg - - * arm.h: Import complete list of official relocation names - and numbers from AAELF. Define FAKE_RELOCs for old names. - Remove a few old names no longer used anywhere. - -2005-05-14 Alan Modra - - * ppc.h (DT_PPC_GOT): Rename from DT_PPC_GLINK. - -2005-05-11 Alan Modra - - * ppc.h (R_PPC_RELAX32, R_PPC_RELAX32PC, R_PPC_RELAX32_PLT, - R_PPC_RELAX32PC_PLT) Adjust. - (R_PPC_REL16, R_PPC_REL16_LO, R_PPC_REL16_HI, R_PPC_REL16_HA): Define. - (DT_PPC_GLINK): Define. - -2005-05-10 Nick Clifton - - * Update the address and phone number of the FSF organization in - the GPL notices in the following files: - alpha.h, arc.h, arm.h, avr.h, common.h, cr16c.h, cris.h, crx.h, - d10v.h, d30v.h, dlx.h, dwarf.h, dwarf2.h, external.h, fr30.h, - frv.h, h8.h, hppa.h, i370.h, i386.h, i860.h, i960.h, ia64.h, - internal.h, ip2k.h, iq2000.h, m32r.h, m68hc11.h, m68k.h, mcore.h, - mips.h, mmix.h, mn10200.h, mn10300.h, msp430.h, openrisc.h, - or32.h, pj.h, ppc.h, ppc64.h, reloc-macros.h, s390.h, sh.h, - sparc.h, v850.h, vax.h, x86-64.h, xstormy16.h, xtensa.h - -2005-04-13 H.J. Lu - - Moved from ../ChangeLog - - 2004-10-27 Richard Earnshaw - * arm.h: Add R_ARM_CALL and R_ARM_JUMP32. - - 2004-10-12 Paul Brook - * arm.h (EF_ARM_EABI_VER4): Define. - - 2004-10-08 Daniel Jacobowitz - - * common.h (PT_SUNW_EH_FRAME): Define. - * x86-64.h (SHT_X86_64_UNWIND): Define. - - 2004-10-07 Bob Wilson - * xtensa.h (R_XTENSA_DIFF8, R_XTENSA_DIFF16, R_XTENSA_DIFF32, - R_XTENSA_SLOT*_OP, R_XTENSA_SLOT*_ALT): New relocations. - (XTENSA_PROP_SEC_NAME): Define. - (property_table_entry): Add flags field. - (XTENSA_PROP_*, GET_XTENSA_PROP_*, SET_XTENSA_PROP_*): Define. - - 2004-09-17 Paul Brook - * arm.h: Remove R_ARM_STKCHK and R_ARM_THM_STKCHK. - Add R_ARM_TARGET2, R_ARM_PREL31, R_ARM_GOT_ABS, R_ARM_GOT_PREL, - R_ARM_GOT_BREL12, R_ARM_GOTOFF12 and R_ARM_GOTRELAX. - - 2004-09-13 Paul Brook - * arm.h: Rename RELABS to TARGET1. - - 2004-05-11 Jakub Jelinek - * common.h (PT_GNU_EH_FRAME, PT_GNU_STACK): Add comments. - (PT_GNU_RELRO): Define. - -2005-03-29 Daniel Jacobowitz - Phil Blundell - - * arm.h: Add TLS relocations. - -2005-03-23 Ben Elliston - - * dwarf.h: Merge with GCC's dwarf.h. - -2005-03-18 C Jaipraash - - * m68k.h (EF_CFV4E): Define. - -2005-03-17 Paul Brook - Dan Jacobowitz - Mark Mitchell - - * arm.h (PT_ARM_EXIDX): Define. - -2005-03-02 Daniel Jacobowitz - Joseph Myers - - * mips.h: Define MIPS TLS relocations. - -2005-02-15 Nigel Stephens - Maciej W. Rozycki - - * mips.h (R_MIPS16_GOT16): New reloc code. - (R_MIPS16_CALL16): Likewise. - (R_MIPS16_HI16): Likewise. - (R_MIPS16_LO16): Likewise. - (R_MIPS16_min): New fake reloc code. - (R_MIPS16_max): Likewise. - -2005-02-11 Maciej W. Rozycki - - * mips.h (R_MIPS_max): Use FAKE_RELOC to define. - -2005-01-25 Alexandre Oliva - - 2004-12-10 Alexandre Oliva - * frv.h: Add R_FRV_TLSMOFF. - 2004-11-10 Alexandre Oliva - * frv.h: Add TLS relocations. - -2005-01-17 Nick Clifton - - * sh.h (EF_SH2A_SH4_NOFPU, EF_SH2A_SH3_NOFPU, EF_SH2A_SH4, - EF_SH2A_SH3E): New flags. - (EF_SH_BFD_TABLE): Add these new flags to the table. - -2005-01-12 Alan Modra - - * ppc.h (R_PPC_RELAX32_PLT, R_PPC_RELAX32PC_PLT): Define. - (R_PPC_RELAX32, R_PPC_RELAX32PC): Adjust value. - -2004-12-22 Klaus Rudolph - - * avr.h (R_AVR_LDI, R_AVR_6, R_AVR_6_ADIW): New relocs. - -2004-12-16 Richard Sandiford - - * v850.h (R_V850_LO16_SPLIT_OFFSET): New reloc. - -2004-12-09 Ian Lance Taylor - - * mips.h (E_MIPS_MACH_9000): Define. - -2004-11-04 Hans-Peter Nilsson - - * cris.h (EF_CRIS_VARIANT_MASK, EF_CRIS_VARIANT_ANY_V0_V10) - (EF_CRIS_VARIANT_V32, EF_CRIS_VARIANT_COMMON_V10_V32): New - macros. - -2004-10-06 Eric Christopher - - * dwarf2.h: Sync with gcc dwarf2.h. Fix typo. - -2004-10-01 Paul Brook - - * arm.h (SHT_ARM_EXIDX): Define. - (ELF_STRING_ARM_unwind, ELF_STRING_ARM_unwind, - ELF_STRING_ARM_unwind_once, ELF_STRING_ARM_unwind_info_once): - Define. - -2004-08-25 Dmitry Diky - - * msp430.h: Add new relocs. - -2004-08-12 H.J. Lu - - * i386.h (R_386_USED_BY_INTEL_200): New. - -2004-07-29 Alexandre Oliva - - Introduce SH2a support. - 2004-02-18 Corinna Vinschen - * sh.h (EF_SH2A_NOFPU): New. - 2003-12-01 Michael Snyder - * sh.h (EF_SH2A): New. - -2004-07-27 Tomer Levi - - * crx.h: Add BFD_RELOC_CRX_SWITCH8, BFD_RELOC_CRX_SWITCH16, - BFD_RELOC_CRX_SWITCH32. - -2004-07-06 Tomer Levi - - * common.h (EM_CRX): Define. - * crx.h: New file. - -2004-06-25 Kazuhiro Inaoka - - * m32r.h: Add defintions of R_M32R_GOTOFF_HI_ULO, - R_M32R_GOTOFF_HI_SLO and R_M32R_GOTOFF_LO. - -2004-06-19 Alan Modra - - * common.h (ELF64_R_INFO): Warning fix. - -2004-06-14 Chris Demetriou - - * mips.h (R_MIPS_PC32): Add back (undoing removal on 2004-04-24), - with an updated comment. - -2004-05-28 Andrew Stubbs - - * sh.h (EF_SH_HAS_DSP): Remove. - (EF_SH_HAS_FP): Remove. - (EF_SH_MERGE_MACH): Remove. - (EF_SH4_NOFPU): Convert to decimal. - (EF_SH4A_NOFPU): Likewise. - (EF_SH4_NOMMU_NOFPU): Likewise. - (EF_SH3_NOMMU): Add new macro. - (EF_SH_BFD_TABLE): Likewise. - (sh_find_elf_flags): Add prototype. - (sh_elf_get_flags_from_mach): Likewise. - -2004-04-24 Chris Demetriou - - * mips.h (R_MIPS_PC32, R_MIPS_PC64, R_MIPS_GNU_REL_LO16) - (R_MIPS_GNU_REL_HI16): Remove. - (R_MIPS_GNU_REL16_S2): Update comment. - -2004-30-30 Galit Heller - Tomer Levi - - * common.h (EM_CR): Define. - * cr16c.h: New file. - -2004-03-23 Paul Brook - - * arm.h (EF_ERM_BE8, EF_ARM_LE8, EF_ARM_EABI_VER3): Add. - -2003-03-03 Andrew Stubbs - - * sh.h: Add EF_SH4_NOMMU_NOFPU. - -2004-03-01 Richard Sandiford - - * frv.h (EF_FRV_CPU_FR405, EF_FRV_CPU_FR450): Define. - -2004-01-28 Roland McGrath - - * common.h (AT_SECURE): New macro. - -2004-01-21 Roland McGrath - - * common.h (AT_SUN_UID, AT_SUN_RUID, AT_SUN_GID): New macros. - (AT_SUN_RGID, AT_SUN_LDELF, AT_SUN_LDSHDR, AT_SUN_LDNAME, - AT_SUN_LPAGESZ, AT_SUN_PLATFORM, AT_SUN_HWCAP, AT_SUN_IFLUSH, - AT_SUN_CPU, AT_SUN_EMUL_ENTRY, AT_SUN_EMUL_EXECFD, - AT_SUN_EXECNAME) AT_SUN_MMU, AT_SUN_LDDATA): Likewise. - -2004-01-17 Mark Kettenis - - * common.h (NT_OPENBSD_IDENT): Define. - -2004-01-06 Alexandre Oliva - - 2003-09-18 Alexandre Oliva - * frv.h (EF_FRV_FDPIC): New macro. - (EF_FRV_PIC_FLAGS): Adjust. - 2003-08-08 Alexandre Oliva - * frv.h (R_FRV_FUNCDESC_VALUE, R_FRV_FUNCDESC_GOTOFF12, - R_FRV_FUNCDESC_GOTOFFLO, R_FRV_FUNCDESC_GOTOFFHI, R_FRV_GOTOFF12, - R_FRV_GOTOFFLO, R_FRV_GOTOFFHI): New. - 2003-08-04 Alexandre Oliva - * frv.h (R_FRV_GOT12, R_FRV_GOTHI, R_FRV_GOTLO, R_FRV_FUNCDESC, - R_FRV_FUNCDESC_GOT12, R_FRV_FUNCDESC_GOTHI, R_FRV_FUNCDESC_GOTLO): - New. - - -For older changes see ChangeLog-9103 - -Local Variables: -mode: change-log -left-margin: 8 -fill-column: 74 -version-control: never -End: diff --git a/include/elf/ChangeLog-9103 b/include/elf/ChangeLog-9103 deleted file mode 100644 index 93632ef80eb..00000000000 --- a/include/elf/ChangeLog-9103 +++ /dev/null @@ -1,1948 +0,0 @@ -2005-04-13 H.J. Lu - - Moved from ../ChangeLog - - 2003-10-14 Bob Wilson - * xtensa.h: Formatting. Fix comments about property section - names for linkonce sections. - - 2003-05-23 Jakub Jelinek - * common.h (PT_GNU_STACK): Define. - - 2003-01-25 Jakub Jelinek - * sparc.h: Add TLS relocs. Move R_SPARC_REV32 to 252. - - 2002-09-26 Jakub Jelinek - * x86-64.h: Add TLS relocs. - - 2002-09-19 Jakub Jelinek - * i386.h (R_386_TLS_TPOFF, R_386_TLS_IE, R_386_TLS_GOTIE): - Define. - - 2002-07-10 Jakub Jelinek - * common.h (SHT_GNU_LIBLIST, DT_GNU_PRELINKED, - DT_GNU_CONFLICT*, DT_GNU_LIBLIST*): Define. - - 2002-05-31 Michal Ludvig - * dwarf2.h (DW_CFA_low_user, DW_CFA_high_user): Renamed - to DW_CFA_lo_user, DW_CFA_hi_user respectively. - - 2002-05-23 Jakub Jelinek - * common.h (PT_TLS, SHF_TLS, STT_TLS, DF_STATIC_TLS): Define. - * ia64.h (R_IA64_LTOFF_TPREL22): Renamed from R_IA64_LTOFF_TP22. - * i386.h: Add TLS relocs. - -2003-12-19 Kazuhiro Inaoka - - * m32r.h : Added m32r-linux and PIC support. Add new ABI that - uses RELA. - (R_M32R_16_RELA, R_M32R_32_RELA, R_M32R_24_RELA, - R_M32R_10_PCREL_RELA, R_M32R_18_PCREL_RELA, - R_M32R_26_PCREL_RELA, R_M32R_HI16_ULO_RELA, - R_M32R_HI16_SLO_RELA, R_M32R_LO16_RELA, - R_M32R_SDA16_RELA, R_M32R_RELA_GNU_VTINHERIT, - R_M32R_RELA_GNU_VTENTRY, R_M32R_GOT24, - R_M32R_26_PLTREL, R_M32R_COPY, R_M32R_GLOB_DAT, - R_M32R_JMP_SLOT, R_M32R_RELATIVE, R_M32R_GOTOFF, - R_M32R_GOTPC24, R_M32R_GOT16_HI_ULO, - R_M32R_GOT16_HI_SLO, R_M32R_GOT16_LO, - R_M32R_GOTPC_HI_ULO, R_M32R_GOTPC_HI_SLO, - R_M32R_GOTPC_LO): New relocs. - -2003-12-06 Alan Modra - - From Jan Beulich - * common.h (DT_HIOS): Correct value. - -2003-12-03 Kazuhiro Inaoka - - * m32r.h: Add new machine type m32r2 and instruction modes. - -2003-11-06 Alan Modra - - * ppc.h (R_PPC_RELAX32PC): Define. - -2003-10-22 Alexandre Oliva , - Michael Snyder - - * sh.h (EF_SH4A, EF_SH4AL_DSP, EF_SH4_NOFPU, EF_SH4A_NOFPU): New. - (EF_SH_MERGE_MACH): Combine them. - -2003-10-18 Hans-Peter Nilsson - - * mmix.h (R_MMIX_PUSHJ_STUBBABLE): New reloc number. - (_bfd_mmix_before_linker_allocation): Rename from - _bfd_mmix_prepare_linker_allocated_gregs. - (_bfd_mmix_after_linker_allocation): Rename from - _bfd_mmix_finalize_linker_allocated_gregs. - -2003-10-06 Dave Brolley - - * frv.h (EF_FRV_CPU_FR550): New macro. - -2003-09-30 Chris Demetriou - - * mips.h (E_MIPS_ARCH_64R2): New define. - -2003-09-23 DJ Delorie - - * sh.h (R_SH_SWITCH8, R_SH_GNU_VTINHERIT, R_SH_GNU_VTENTRY, - R_SH_LOOP_START,R_SH_LOOP_END): Move to "reserved" spaces. - (R_SH_DIR16, R_SH_DIR8, R_SH_DIR8UL, R_SH_DIR8UW, R_SH_DIR8U, - R_SH_DIR8SW, R_SH_DIR8S, R_SH_DIR4UL, R_SH_DIR4UW, R_SH_DIR4U, - R_SH_PSHA, R_SH_PSHL): New. - -2003-09-11 James Cownie - - * dwarf2.h: Add HP dwarf extensions from their hacked gdb - header files (ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz). - -2003-09-04 Nick Clifton - - * v850.h (E_V850E1_ARCH): Define. - -2003-08-21 James Cownie - - * dwarf2.h: Add PGI dwarf extensions. - -2003-08-08 Dmitry Diky - - * msp430.h: Add xW42 and xE42 parts. Sort MPU list according to - gcc order. - -2003-08-07 Alan Modra - - * reloc-macros.h (START_RELOC_NUMBERS) : Remove PARAMS macro. Use - C90 function definition. Formatting. - (RELOC_NUMBER): Remove !__STDC__ code. - -2003-07-28 Eric Christopher - - * ppc.h (R_PPC_RELAX32): New. Fake relocation. - -2003-07-25 H.J. Lu - - * v850.h (SHF_V850_GPREL): New. - (SHF_V850_EPREL): Likewise. - (SHF_V850_R0REL): Likewise. - -2003-07-09 Alexandre Oliva - - 2001-05-16 Alexandre Oliva - * mn10300.h: Introduce GOTPC16, GOTOFF24, GOTOFF16 and - PLT16, and rename GOTPC to GOTPC32 and GOTOFF to GOTOFF32. - Renumbered all relocs. - 2001-04-12 Alexandre Oliva - * mn10300.h (R_MN10300_GOTPC, R_MN10300_GOTOFF, - R_MN10300_PLT32, R_MN10300_GOT32, R_MN10300_GOT24, - R_MN10300_GOT16, R_MN10300_COPY, R_MN10300_GLOB_DAT, - R_MN10300_JMP_SLOT, R_MN10300_RELATIVE): New relocs. - -2003-07-09 Alexandre Oliva - - 2000-04-01 Alexandre Oliva - * mn10300.h (E_MN10300_MACH_AM33_2): Renamed from - E_MN10300_MACH_AM332. - 2000-03-31 Alexandre Oliva - * mn10300.h (E_MN10300_MACH_AM332): Defined. - -2003-07-01 Martin Schwidefsky - - * s390.h (elf_s390_reloc_type): Add long displacement relocations - R_390_20, R_390_GOT20, R_390_GOTPLT20 and R_390_TLS_GOTIE20. - -2003-06-29 Andreas Jaeger - - * mmix.h: Convert to ISO C90 prototypes. - * mips.h: Likewise. - -2003-06-13 Robert Millan - - * common.h (GNU_ABI_TAG_NETBSD): New tag. - (GNU_ABI_TAG_FREEBSD): New tag. - -2003-06-10 Richard Sandiford - - * h8.h (E_H8_MACH_H8300SXN): New flag. - -2003-06-03 Nick Clifton - - * v850.h (R_V850_32): Rename to R_V850_ABS32. - Add R_V850_REL32. - -2003-05-15 Roland McGrath - - * common.h (NT_AUXV, AT_*): New macros. - * external.h (Elf32_External_Auxv, Elf64_External_Auxv): New types. - * internal.h (Elf_Internal_Auxv): New type. - -2003-05-14 Michael Snyder - From Bernd Schmidt - * h8.h (E_H8_MACH_H8300SX): New. - -2003-04-24 Dhananjay Deshpande - - * h8.h (E_H8_MACH_H8300HN, E_H8_MACH_H8300SN): New - -2003-04-23 J"orn Rennecke - - * common.h (EM_SH): Amend comment to refer to SuperH. - -2003-04-22 Kazuhiro Inaoka - - * common.h: Replace references to Mitsubishi M32R with - references to Renesas M32R. - -2003-04-15 Rohit Kumar Srivastava - - * common.h: Replace occurrances of 'Hitachi' with 'Renesas'. - -2003-04-01 Bob Wilson - - * common.h (EM_XTENSA_OLD): Define. - * xtensa.h: New file. - -2003-04-01 Nick Clifton - - * arm.h (ARM_NOTE_SECTION): Include .gnu in the string. - -2003-03-25 Stan Cox - Nick Clifton - - Contribute support for Intel's iWMMXt chip - an ARM variant: - - * arm.h (ARM_NOTE_SECTION): Define. - -2003-03-03 J"orn Rennecke - - * sh.h (EF_SH_MERGE_MACH): Make sure SH2E & SH3/SH3E merge to SH3E, - and SH2E & SH4 merge to SH4, not SH2E. - -2003-02-21 Ian Wienand - - * ia64.h (SHT_IA_64_LOPSREG, SHT_IA_64_HIPSREG, - SHT_IA_64_PRIORITY_INIT): Define. - -2003-02-18 Alan Modra - - * ppc64.h (IS_PPC64_TLS_RELOC): Rename from IS_TLS_RELOC. - - * ppc.h: Replace DTPMOD64, TPREL64, DTPREL64 with DTPMOD32 etc. - (IS_PPC_TLS_RELOC): Define. - -2003-02-10 Nick Clifton - - * arm.h (EF_ARM_MAVERICK_FLOAT): Define. - -2003-02-05 Alan Modra - - * ppc.h: Add TLS relocs. Format. - * ppc64.h: Likewise. - -2003-01-27 Alexandre Oliva - - * mips.h (EF_MIPS_XGOT): Define. - -2003-01-24 Martin Schwidefsky - - * s390.h: Add s390 TLS relocations. - -2003-01-23 Nick Clifton - - * Add sh2e support: - - 2002-04-02 Alexandre Oliva - - * sh.h (EF_SH_MERGE_MACH): Handle SH2E. - - 2002-04-02 Elena Zannoni - - * sh.h (EF_SH2E): New. - -2003-01-23 Alan Modra - - * sh.h: Split out various bits to bfd/elf32-sh64.h. - -2003-01-20 Martin Schwidefsky - - * s390.h: Rename R_390_GOTOFF to R_390_GOTOFF32. Add new gotoff, - gotplt and pltoff relocations. - -2003-01-17 Alan Modra - - * common.h: Formatting, typo fixes. - (DT_ENCODING): Correct value. - -2003-01-17 Fabio Alemagna - - * common.h (ELFOSABI_AROS): Define. - (ELFOSABI_OPENVMS): Likewise. - (ELFOSABI_NSK): Likewise. - -2003-01-16 Alan Modra - - * ppc.h: Split out ppc64 definitions to.. - * pcc64.h: ..here. New file. - (R_PPC64_REL30): Rename from R_PPC64_ADDR30. - -2003-01-13 Dmitry Diky - - * elf/common.h (EM_MSP430): Change e_machine value to officially - assigned. - -2003-01-02 Ben Elliston - - * common.h (EM_IQ2000): Define. - * iq2000.h: New file. - -2002-12-30 Chris Demetriou - - * mips.h (E_MIPS_ARCH_32R2): New define. - -2002-12-24 Dmitry Diky - - * common.h: Define msp430 machine numbers. - * msp430.h: New file. Define msp430 relocs. - -2002-12-20 DJ Delorie - - * xstormy16.h: Add XSTORMY16_12. - -2002-12-16 Andrew MacLeod - - * xstormy16.h (START_RELOC_NUMBERS) Add relocation numbers - for R_XSTORMY16_LO16 and R_XSTORMY16_HI16. - -2002-12-10 James Cownie - - * dwarf2.h (DW_TAG_upc_shared_type, DW_TAG_upc_strict_type, - DW_TAG_upc_relaxed_type, DW_AT_upc_threads_scaled, DW_LANG_Upc): - Define. - -2002-12-01 Stephane Carrez - - * m68hc11.h (EF_M68HC12_MACH, EF_M68HCS12_MACH): Define. - (EF_M68HC11_MACH_MASK, EF_M68HC11_MACH): Define. - (EF_M68HC11_MERGE_MACH, EF_M68HC11_CAN_MERGE_MACH): Define. - -2002-11-30 Alan Modra - - * mmix.h: Replace boolean with bfd_boolean. - * sh.h: Likewise. - -2002-11-28 Alan Modra - - * internal.h (elf32_internal_ehdr, Elf32_Internal_Ehdr, - elf64_internal_ehdr, Elf64_Internal_Ehdr, elf32_internal_phdr, - Elf32_Internal_Phdr, elf64_internal_phdr, Elf64_Internal_Phdr, - elf32_internal_shdr, Elf32_Internal_Shdr, elf64_internal_shdr, - Elf64_Internal_Shdr, elf32_internal_sym, elf64_internal_sym, - Elf32_Internal_Sym, Elf64_Internal_Sym, Elf32_Internal_Note, - elf32_internal_note, elf32_internal_rel, Elf32_Internal_Rel, - elf64_internal_rel, Elf64_Internal_Rel, elf32_internal_rela, - elf64_internal_rela, Elf32_Internal_Rela, Elf64_Internal_Rela, - elf32_internal_dyn, elf64_internal_dyn, Elf32_Internal_Dyn, - Elf64_Internal_Dyn, elf32_internal_verdef, elf64_internal_verdef, - elf32_internal_verdaux, elf64_internal_verdaux, elf32_internal_verneed, - elf64_internal_verneed, elf32_internal_vernaux, elf64_internal_vernaux, - elf32_internal_versym, elf64_internal_versym, Elf32_Internal_Verdef, - Elf64_Internal_Verdef, Elf32_Internal_Verdaux, Elf64_Internal_Verdaux, - Elf32_Internal_Verneed, Elf64_Internal_Verneed, Elf32_Internal_Vernaux, - Elf64_Internal_Vernaux, Elf32_Internal_Versym, Elf64_Internal_Versym, - Elf32_Internal_Syminfo, Elf64_Internal_Syminfo): Delete. - (Elf_Internal_Rel): Delete. - -2002-10-11 Kaz Kojima - - * sh.h: Add SH TLS relocs. - -2002-09-30 Gavin Romig-Koch - Ken Raeburn - Aldy Hernandez - Eric Christopher - Richard Sandiford - - * mips.h (E_MIPS_MACH_4120, E_MIPS_MACH_5400, E_MIPS_MACH_5500): New. - -2002-09-12 Roland McGrath - - * dwarf2.h: Updates from GCC version of thie file: - (enum dwarf_location_atom): DW_OP_calli -> DW_OP_call_ref. - Add DW_OP_GNU_push_tls_address. - (DW_OP_lo_user): Change to 0xe0. - -2002-08-28 Catherine Moore - - * v850.h (R_V850_LONGCALL, R_V850_ALIGN, - R_V850_LONGJUMP): New relocations. - -2002-08-15 Alan Modra - - * i370.h: Define relocs using reloc-macros.h. - -2002-08-13 Stephane Carrez - - * m68hc11.h (E_M68HC12_BANKS, E_M68HC11_I32, E_M68HC11_F64, - EF_M68HC11_ABI): Define for ABI specification. - (STO_M68HC12_FAR, STO_M68HC12_INTERRUPT): Symbol flags for - linker and debugger. - (R_M68HC11_24, R_M68HC11_LO16, R_M68HC11_PAGE): New relocs. - (R_M68HC11_RL_JUMP, R_M68HC11_RL_GROUP): New reloc for linker - relaxation. - -2002-07-15 Denis Chertykov - Frank Ch. Eigler - Ben Elliston - Alan Lehotsky - John Healy - Graham Stott - Jeff Johnston - - * common.h (EM_IP2K): New macro. - (EM_IP2K_OLD): New macro. - * ip2k.h: New file. - -2002-07-01 Matt Thomas - - * vax.h: Rename EF_* to EF_VAX_*. - -2002-06-18 Dave Brolley - - From Catherine Moore, Michael Meissner, Dave Brolley: - * common.h (EM_CYGNUS_FRV): New macro. - * frv.h: New file. - -2002-06-06 Lars Brinkhoff - - * common.h: Change registry@sco.com to registry@caldera.com. - (EM_PDP10, EM_PDP11): Define. - -2002-06-04 Jason Thorpe - - * sh.h (_bfd_sh64_crange_qsort_cmpb, _bfd_sh64_crange_qsort_cmpl) - (_bfd_sh64_crange_bsearch_cmpb, _bfd_sh64_crange_bsearch_cmpl): New - prototypes. - -2002-06-01 Richard Henderson - - * alpha.h (LITUSE_ALPHA_ADDR, LITUSE_ALPHA_BASE, LITUSE_ALPHA_BYTOFF, - LITUSE_ALPHA_JSR, LITUSE_ALPHA_TLSGD, LITUSE_ALPHA_TLSLDM): New. - -2002-05-30 Richard Henderson - - * alpha.h (R_ALPHA_TLSGD, R_ALPHA_TLSLDM, R_ALPHA_DTPMOD64, - R_ALPHA_GOTDTPREL, R_ALPHA_DTPREL64, R_ALPHA_DTPRELHI, - R_ALPHA_DTPRELLO, R_ALPHA_DTPREL16, R_ALPHA_GOTTPREL, R_ALPHA_TPREL64, - R_ALPHA_TPRELHI, R_ALPHA_TPRELLO, R_ALPHA_TPREL16): New. - -2002-05-29 Matt Thomas - - * vax.h: New file - -2002-05-28 Kuang Hwa Lin - - * common.h (EM_DLX): Define. - * dlx.h: New file. - -2002-05-08 Jason Thorpe - - * common.h (NT_GNU_ABI_TAG): Define. - (GNU_ABI_TAG_LINUX): Define. - (GNU_ABI_TAG_HURD): Define. - (GNU_ABI_TAG_SOLARIS): Define. - (NT_NETBSD_IDENT): Define. - (NT_FREEBSD_ABI_TAG): Define. - -2002-04-24 Elena Zannoni - - * dwarf2.h: Add DW_AT_GNU_vector. - -2002-02-13 Matt Fredette - - * m68k.h (EF_M68000): Define. - -2002-02-12 Alan Modra - - * ppc.h (DT_PPC64_OPD, DT_PPC64_OPDSZ): Define. - -2002-02-09 Richard Henderson - - * alpha.h (R_ALPHA_BRSGP): New. - -2002-02-08 Alexandre Oliva - - Contribute sh64-elf. - 2002-01-23 Alexandre Oliva - * sh.h (R_SH_GOTPLT32, R_SH_GOT_LOW16, R_SH_GOT_MEDLOW16, - R_SH_GOT_MEDHI16, R_SH_GOT_HI16, R_SH_GOTPLT_LOW16, - R_SH_GOTPLT_MEDLOW16, R_SH_GOTPLT_MEDHI16, R_SH_GOTPLT_HI16, - R_SH_PLT_LOW16, R_SH_PLT_MEDLOW16, R_SH_PLT_MEDHI16, - R_SH_PLT_HI16, R_SH_GOTOFF_LOW16, R_SH_GOTOFF_MEDLOW16, - R_SH_GOTOFF_MEDHI16, R_SH_GOTOFF_HI16, R_SH_GOTPC_LOW16, - R_SH_GOTPC_MEDLOW16, R_SH_GOTPC_MEDHI16, R_SH_GOTPC_HI16, - R_SH_GOT10BY4, R_SH_GOTPLT10BY4, R_SH_GOT10BY8, - R_SH_GOTPLT10BY8, R_SH_COPY64, R_SH_GLOB_DAT64, R_SH_JMP_SLOT64, - R_SH_RELATIVE64): New relocs. - (R_SH_FIRST_INVALID_RELOC_4): Adjust. - 2001-05-16 Alexandre Oliva - * sh.h: Renumbered and renamed some SH5 relocations to match - official numbers and names; moved unmaching ones to the range - 0xf2-0xff. - 2001-01-06 Hans-Peter Nilsson - * sh.h (sh64_get_contents_type): Declare. - (sh64_address_is_shmedia): Likewise. - 2000-12-30 Hans-Peter Nilsson - * sh.h (sh64_elf_crange): New type. - (struct sh64_section_data): New. - (sh64_elf_section_data): New macro. - (EF_SH5): Rename back from EF_SH64. - 2000-12-18 Hans-Peter Nilsson - * sh.h (SHF_SH5_ISA32_MIXED, SHT_SH5_CR_SORTED, - SH64_CRANGES_SECTION_NAME, SH64_CRANGE_SIZE, - SH64_CRANGE_CR_ADDR_OFFSET, SH64_CRANGE_CR_SIZE_OFFSET, - SH64_CRANGE_CR_TYPE_OFFSET): New macros. - 2000-12-12 Hans-Peter Nilsson - * sh.h (EF_SH64): Don't define EF_SH64_ABI64. - 2000-11-27 Hans-Peter Nilsson - * sh.h (EF_SH64_32BIT_ABI, EF_SH64_64BIT_ABI): Delete. - (EF_SH64_ABI64): New. - 2000-11-23 Hans-Peter Nilsson - * sh.h (EF_SH64): Rename from EF_SH5. - (EF_SH64_32BIT_ABI): New. - (EF_SH64_64BIT_ABI): New. - (R_SH_PT_16, R_SH_SHMEDIA_CODE - R_SH_IMMU5, R_SH_IMMS6, R_SH_IMMU6, R_SH_IMMS10, R_SH_IMMS10BY2, - R_SH_IMMS10BY4, R_SH_IMMS10BY8, R_SH_IMMS16, R_SH_IMMU16, - R_SH_IMM_LOW16, R_SH_IMM_LOW16_PCREL, R_SH_IMM_MEDLOW16, - R_SH_IMM_MEDLOW16_PCREL, R_SH_IMM_MEDHI16, R_SH_IMM_MEDHI16_PCREL, - R_SH_IMM_HI16, R_SH_IMM_HI16_PCREL, R_SH_64, R_SH_64_PCREL): New - relocs. - 2000-09-01 Ben Elliston - * sh.h (EF_SH5): Define. - -2002-02-01 Hans-Peter Nilsson - - * mmix.h: Tweak comments. - (MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME): New. - [BFD_ARCH_SIZE] (_bfd_mmix_prepare_linker_allocated_gregs, - _bfd_mmix_finalize_linker_allocated_gregs, - _bfd_mmix_check_all_relocs): Provide prototypes. - -2002-01-31 Ivan Guzvinec - - * or32.h: New file. - * common.h: Add support for or32 targets. - -2002-01-28 Jason Merrill - - * dwarf2.h: Sync with gcc version. - -2002-01-16 Alan Modra - - * ppc.h (DT_PPC64_GLINK): Define. - -2002-01-15 Richard Earnshaw - - * arm.h (F_VFP_FLOAT, EF_ARM_VFP_FLOAT): Define. - -2002-01-09 Jason Thorpe - - * common.h: Update copyright years. - (NT_NETBSDCORE_PROCINFO): Define. - (NT_NETBSDCORE_FIRSTMACH): Define. - -2002-01-06 Steve Ellcey - - * ia64.h (ELF_STRING_ia64_unwind_hdr): New Macro for HP-UX. - (SHT_IA_64_HP_OPT_ANOT): Ditto - (PT_IA_64_HP_OPT_ANOT): Ditto - (PT_IA_64_HP_HSL_ANOT): Ditto - (PT_IA_64_HP_STACK): Ditto - (SHN_IA_64_ANSI_COMMON): Ditto - -2001-12-17 Alan Modra - - * external.h (Elf_External_Sym_Shndx): Declare. - * internal.h (struct elf_internal_sym ): Make it an - unsigned int. - * common.h (SHN_BAD): Define. - -2001-12-13 Jakub Jelinek - - * common.h (PT_GNU_EH_FRAME): Define. - -2001-12-11 Alan Modra - - * common.h (SHN_XINDEX): Comment typo fix. - * internal.h (Elf_Internal_Ehdr): Change existing "unsigned short" - size, count and index fields to "unsigned int". - -2001-12-07 Geoffrey Keating - Richard Henderson - - * common.h (EM_XSTORMY16): Define. - * xstormy16.h: New file. - -2001-11-15 Alan Modra - - * common.h (NT_ARCH): Define. Remove incorrect comment. - -2001-11-11 Geoffrey Keating - - * dwarf2.h (dwarf_line_number_ops): Add DWARF 3 opcodes. - -2001-10-30 Hans-Peter Nilsson - - * mmix.h: New file. - -2001-10-23 Alan Modra - - * internal.h: White space changes to keep lines under 80 chars. - -2001-10-16 Jeff Holcomb - - * internal.h (elf_internal_shdr): Make contents a unsigned char *. - -2001-09-18 Alan Modra - - * internal.h (elf_internal_rela): Make r_addend a bfd_vma. - -2001-09-13 Alexandre Oliva - - * common.h (EM_OPENRISC_OLD): Renamed the old EM_OPENRISC entry. - -2001-09-12 Alexandre Oliva - - * common.h (EM_AVR_OLD): Renamed from... - (EM_AVR): this, redefined as in the current ELF standard. - (EM_PJ_OLD): Renamed from... - (EM_PJ): this, redefined as in the current ELF standard. - (EM_R30, EM_D10V, EM_D30V, EM_V850, EM_M32R, EM_MN10300, - EM_MN10200, EM_OPENRISC, EM_ARC_A5, EM_XTENSA): Defined as in - the current ELF standard. - (EM_CYGNUS_ARC): Removed, unused for a long time. - -2001-09-04 Richard Henderson - - * alpha.h (R_ALPHA_OP*, R_ALPHA_IMMED*, R_ALPHA_GPVALUE): Remove. - (R_ALPHA_GPREL16): Rename from R_ALPHA_IMMED_GP_16. - -2001-08-30 Eric Christopher - - * mips.h: Remove E_MIPS_MACH_MIPS32_4K. - -2001-08-29 Jeff Law - - * h8.h (EF_H8_MACH): New mask for encoded machine type. - (E_H8_MACH_H8300, E_H8_MACH_H8300H, E_H8_MACH_H8300S): New - machine types. - -2001-08-26 J"orn Rennecke - - * h8.h: New file. - -2001-08-27 Staffan Ulfberg - - * ppc.h: Add relocs from the 64-bit PowerPC ELF ABI revision 1.2. - -2001-06-30 Daniel Berlin - - * dwarf2.h: Remerge with gcc version, - including all new DWARF 2.1 extensions. - -2001-06-29 James Cownie - - * dwarf2.h: Add DWARF 2.1 attribues. - -2001-06-15 Per Bothner - - * dwarf2.h: Partial merge with gcc version. - (enum dwarf_descrim_list): Fix typo -> dwarf_discrim_list. - (DW_LANG_Java): Use value from dwarf 2.1 draft (also used in gcc). - -2001-05-15 Ralf Baechle - - * common.h: Remove definition of EM_MIPS_RS4_BE. The constant was - never in active use and is used otherwise by the ABI. - -2001-05-11 Jakub Jelinek - - * ia64.h (ELF_STRING_ia64_unwind_once): Define. - (ELF_STRING_ia64_unwind_info_once): Define. - -2001-05-07 Thiemo Seufer - - * external.h: Fix typo. - * mips.h: Add/Extend many comments with reference to the MIPS ELF64 - spec v. 2.4, available at e.g. - ftp://oss.sgi.com/pub/linux/mips/doc/ABI/ELF64.ps. - (EF_MIPS_UCODE): Define. - (EF_MIPS_OPTIONS_FIRST): Define. - (EF_MIPS_ARCH_ASE): Define. - (EF_MIPS_ARCH_ASE_MDMX): Define. - (EF_MIPS_ARCH_ASE_M16): Define. - (SHF_MIPS_ADDR): Renamed SHF_MIPS_ADDR32. - (SHF_MIPS_STRING): Renamed SHF_MIPS_ADDR64. - (SHF_MIPS_NODUPES): Define. - (ELF64_MIPS_R_SSYM): New MIPS ELF 64 relocation info access macro. - (ELF64_MIPS_R_TYPE3): Likewise. - (ELF64_MIPS_R_TYPE2): Likewise. - (ELF64_MIPS_R_TYPE): Likewise. - (OHW_R10KLDL): Define. - -2001-04-24 Todd Fries - - * sparc.h: Fix typo. - -2001-04-20 Johan Rydberg - - * openrisc.h: New file. - * common.h (EM_OPENRISC): New constant. - -2001-04-23 Bo Thorsen - - * x86-64.h: Add vtable support. - -2001-03-23 Nick Clifton - - * mips.h: Remove extraneous whitespace. - -2001-03-22 Hans-Peter Nilsson - - * cris.h: Add leading comment about PC-relative location. - (R_CRIS_COPY, R_CRIS_GLOB_DAT, R_CRIS_JUMP_SLOT, R_CRIS_RELATIVE, - R_CRIS_16_GOT, R_CRIS_32_GOT, R_CRIS_16_GOTPLT, R_CRIS_32_GOTPLT, - R_CRIS_32_GOTREL, R_CRIS_32_PLT_GOTREL, R_CRIS_32_PLT_PCREL): - New relocs. - -2001-02-27 Philip Blundell - - * arm.h: Add new definitions from ARM document SWS ESPC 0003 B-01. - (EF_PIC, et al.): Rename to EF_ARM_xx. - -2001-02-09 Martin Schwidefsky - - * common.h: Add linux target for S/390. - * s390.h: New file. - -2001-01-11 Peter Targett - - * arc.h (E_ARC_MACH_ARC5, E_ARC_MACH_ARC6, E_ARC_MACH_ARC7, - E_ARC_MACH_ARC8): New definitions for cpu types. - - * common.h (EM_ARC): Change comment. - -2000-12-12 Nick Clifton - - * mips.h: Fix formatting. - -2000-12-11 Jeffrey A Law (law@cygnus.com) - - * hppa.h (DT_HP_*): Define relative to OLD_DT_LOOS for hpux - compatibility. - -2000-10-16 Chris Demetriou - - * mips.h (E_MIPS_ARCH_32): New constant. - (E_MIPS_MACH_MIPS32, E_MIPS_MACH_MIPS32_4K): Replace the - former with the latter. - - * mips.h (E_MIPS_ARCH_5, E_MIPS_ARCH_64): New definitions. - - * mips.h (E_MIPS_MACH_SB1): New constant. - -2000-11-30 Jan Hubicka - - * common.h (EM_X86_64): New macro. - * x86-64.h: New file. - -2000-11-27 Hans-Peter Nilsson - - * common.h (e_machine numbers): Clarify comments to describe how - EM_* constants are assigned. Move EM_PJ from official section to - ad-hoc section. - (EM_CRIS): Correct comment to match official description. - (EM_MMIX): Ditto. - -2000-11-22 Nick Clifton - - * common.h (EM_JAVELIN): New machine number. - (EM_FIREPATH): New machine number. - (EM_ZSP): New machine number. - (EM_MMIX): New machine number. - (EM_HUANY): New machine number. - (EM_PRISM): New machine number. - (SHT_GROUP): New section type. - (SHT_SYMTAB_SHNDX): New section type. - (SHF_GROUP): New section flag. - (SHN_XINDEX): New section index. - (GRP_COMDAT): New section group flag. - -2000-11-20 H.J. Lu - - * common.h (ELFOSABI_MONTEREY): Renamed to ... - (ELFOSABI_AIX): This. - -2000-11-16 Richard Henderson - - Update relocations per August psABI docs. - * ia64.h (R_IA64_SEGBASE): Remove. - (R_IA64_LTV*): Renumber to 0x74 to 0x77. - (R_IA64_EPLTMSB, R_IA64_EPLTLSB): Remove. - (R_IA64_TPREL14, R_IA64_TPREL64I): New. - (R_IA64_DTPMOD*): New. - (R_IA64_DTPREL*): New. - -2000-09-29 Hans-Peter Nilsson - - * cris.h (EF_CRIS_UNDERSCORE): New. - -2000-09-27 Alan Modra - - * hppa.h (R_PARISC_DIR14F): Add. - -2000-09-14 Alexandre Oliva - - * sh.h (R_SH_GOT32, R_SH_PLT32, R_SH_COPY, R_SH_GLOB_DAT, - R_SH_JMP_SLOT, R_SH_RELATIVE, R_SH_GOTOFF, R_SH_GOTPC): Change - numbers to the range from 160 to 167. - (R_SH_FIRST_INVALID_RELOC): Adjust. - (R_SH_FIRST_INVALID_RELOC_2, R_SH_LAST_INVALID_RELOC_2): - New relocs to fill in the gap. - -2000-09-13 Anders Norlander - - * mips.h (E_MIPS_MACH_4K): New define. - -2000-09-05 Alan Modra - - * hppa.h: Fix a comment. - (R_PARISC_PCREL12F): Define. - (R_PARISC_GNU_VTENTRY): Define. - (R_PARISC_GNU_VTINHERIT): Define. - -2000-09-01 Alexandre Oliva - - * sh.h (R_SH_GOT32, R_SH_PLT32, R_SH_COPY, R_SH_GLOB_DAT, - R_SH_JMP_SLOT, R_SH_RELATIVE, R_SH_GOTOFF, R_SH_GOTPC): New relocs. - (R_SH_FIRST_INVALID_RELOC): Adjust. - -2000-08-14 Jim Wilson - - * ia64.h (EF_IA_64_REDUCEDFP, EF_IA_64_CONS_GP, - EF_IA_64_NOFUNCDESC_CONS_GP, EF_IA_64_ABSOLUTE): Define. - -2000-08-07 Nick Clifton - - * ppc.h: Remove spurious CYGNUS LOCAL comments. - * v850.h: Likewise. - -2000-07-22 Jason Eckhardt - - * i860.h: New file. - (elf_i860_reloc_type): Defined ELF32 i860 relocations. - -2000-07-20 Hans-Peter Nilsson - - common.h (EM_CRIS): New machine number. - cris.h: New file. - -2000-07-19 H.J. Lu - - * common.h (DF_1_NODEFLIB): Renamed from DF_1_NODEPLIB. - -2000-07-19 H.J. Lu - - * common.h (DT_CHECKSUM): Set to 0x6ffffdf8. - (DTF_1_CONFEXP): It is 0x00000002 as suspected. - -2000-07-19 H.J. Lu - - * common.h (DT_FEATURE): Renamed from DT_FEATURE_1. - (DT_CONFIG): New. From Solaris 8. - (DT_DEPAUDIT): Likewise. - (DT_AUDIT): Likewise. - (DT_PLTPAD): Likewise. - (DT_MOVETAB): Likewise. - (DF_1_NODEPLIB): Likewise. - (DF_1_NODUMP): Likewise. - (DF_1_CONLFAT): Likewise. - (DT_CHECKSUM): Likewise. FIXME. Check the value on Solaris 8. - (DTF_1_CONFEXP): Likewise. - -2000-07-18 H.J. Lu - - * common.h (DT_FLAGS_1): Renamed from DT_1_FLAGS. - -2000-07-12 Alan Modra - - * internal.h (struct elf_internal_sym): Update comment for st_other. - -2000-07-10 Alan Modra - - * hppa.h: Add comments to all the relocs. - -2000-06-26 Marek Michalkiewicz - - * avr.h (E_AVR_MACH_AVR5): Define. - -2000-06-18 Stephane Carrez - - * m68hc11.h: New file, definitions for the Motorola 68hc11. - -2000-06-06 Alan Modra - - * reloc-macros.h (START_RELOC_NUMBERS): Don't define initial dummy - -1 valued enum. - (RELOC_NUMBER, FAKE_RELOC, EMPTY_RELOC): Append rather than - prepend comma. - (END_RELOC_NUMBERS): Give macro an arg to define as last enum. - - * alpha.h (R_ALPHA_max): Define via END_RELOC_NUMBERS rather than - with EMPTY_RELOC. - * arc.h (R_ARC_max): Likewise. - * avr.h (R_AVR_max): Likewise. - * fr30.h (R_FR30_max): Likewise. - * hppa.h (R_PARISC_UNIMPLEMENTED): Likewise. - * i960.h (R_960_max): Likewise. - * m32r.h (R_M32R_max): Likewise. - * m68k.h (R_68K_max): Likewise. - * mcore.h (R_MCORE_max): Likewise. - * mn10300.h (R_MN10300_MAX): Likewise. - * pj.h (R_PJ_max): Likewise. - * ppc.h (R_PPC_max): Likewise. - * sh.h (R_SH_max): Likewise. - * sparc.h (R_SPARC_max): Likewise. - * v850.h (R_V850_max): Likewise. - - * arm.h (R_ARM_max): Define via END_RELOC_NUMBERS. - * d10v.h (R_D10V_max): Likewise. - * d30v.h (R_D30V_max): Likewise. - * ia64.h (R_IA64_max): Likewise. - * mips.h (R_MIPS_maxext): Likewise. - * mn10200.h (R_MN10200_max): Likewise. - - * i386.h (R_386_max): Remove old RELOC_NUMBER definition, and - define via END_RELOC_NUMBERS. - -2000-06-03 Alan Modra - - * reloc-macros.h (START_RELOC_NUMBERS): Fix name clash for - !__STDC__ case. - (RELOC_NUMBER): Use ansi stringify if ALMOST_STDC defined. - -2000-05-22 Richard Henderson - - * ia64.h (R_IA64_PCREL60B, R_IA64_PCREL21BI): New. - (R_IA64_PCREL22, R_IA64_PCREL64I): New. - -2000-05-02 H.J. Lu - - * common.h (ELFOSABI_NONE): Renamed from ELFOSABI_SYSV. - (ELFOSABI_MODESTO): Defined. - (ELFOSABI_OPENBSD): Likewise. - -2000-04-21 Richard Henderson - David Mosberger - - * ia64.h: New file. - -2000-04-14 H.J. Lu - - * common.h (ELFOSABI_TRUE64): Renamed to ELFOSABI_TRU64. - -2000-04-14 H.J. Lu - - * common.h (ELFOSABI_NETBSD): Defined. - (ELFOSABI_HURD): Likewise. - (ELFOSABI_SOLARIS): Likewise. - (ELFOSABI_MONTEREY): Likewise. - (ELFOSABI_IRIX): Likewise. - (ELFOSABI_FREEBSD): Likewise. - (ELFOSABI_TRUE64): Likewise. - -2000-04-07 Nick Clifton - - * arm-oabi.h: Delete. - * arm.h: Merge in definitions of old reloc numbers from - arm-oabi.h. - -2000-04-06 Nick Clifton - - * arm.h (EF_ARM_SYMSARESORTED): Define. - (EF_ARM_EABIMASK): Define. - (EF_ARM_EABI_VERSION): Define. - (EF_ARM_EABI_UNKNOWN): Define. - (EF_ARM_EABI_VER1): Define. - (PF_ARM_PI): Define. - (PF_ARM_ABS): Define. - -2000-04-05 J"orn Rennecke - - * sh.h (R_SH_LOOP_START, R_SH_LOOP_END): New RELOC_NUMBERs. - -2000-03-27 Denis Chertykov - - * avr.h: New file. AVR ELF support for BFD. - * common.h: Add AVR magic number. - -2000-03-10 Geoffrey Keating - - * mips.h: Add R_MIPS_GNU_REL_HI16, R_MIPS_GNU_REL_LO16, - R_MIPS_GNU_REL16_S2, R_MIPS_PC64 and R_MIPS_PC32 relocation - numbers. - -2000-02-23 Linas Vepstas - - * i370.h: New file. - -2000-02-22 Nick Clifton - - * common.h (ELF_ST_OTHER): Remove definition. - (ELF32_ST_OTHER): Remove definition. - (ELF64_ST_OTHER): Remove definition. - -2000-02-22 H.J. Lu - - * common.h (ELFOSABI_LINUX): Define. - -2000-02-17 J"orn Rennecke - - * sh.h: (EF_SH_MACH_MASK, EF_SH_UNKNOWN, EF_SH1, EF_SH2): New macros. - (EF_SH3, EF_SH_HAS_DSP, EF_SH_DSP, EF_SH3_DSP): Likewise. - (EF_SH_HAS_FP, EF_SH3E, EF_SH4, EF_SH_MERGE_MACH): Likewise. - -2000-02-03 H.J. Lu - - * arm-oabi.h: Duplicate changes made to arm.h on Jan. 27, - 2000 by Thomas de Lellis . - -2000-01-27 Thomas de Lellis - - * arm.h (STT_ARM_TFUNC): Define in terms of STT_LOPROC. - (STT_ARM_16BIT): New flag. Denotes a label that was defined in - Thumb block but was does not identify a function. - -2000-01-20 Nick Clifton - - * common.h (EM_MCORE): Fix spelling of Motorola. - * mcore.h (EM_MCORE): Fix spelling of Motorola. - -2000-01-13 Nick Clifton - - * common.h (EM_S370): Change comment - this is now the IBM - System/370. - (EM_IA_64): Change comment - this is now the IA-64. - -2000-01-11 Nick Clifton - - * common.h (DT_ENCODING): Fix definition of this value. - (DT_LOOS): Fix definition of this value. - (DT_HIOS): Fix definition of this value. - (OLD_DT_LOOS): Value of DT_LOOS before Oct 4, 1999 draft - of ELF spec changed it. - (OLD_DT_HIOS): Value of DT_HIOS before Oct 4, 1999 draft - of ELF spec changed it. - -2000-01-10 Egor Duda - - * common.h (NT_WIN32PSTATUS): Define. (cygwin elf core dumps). - -1999-12-28 Nick Clifton - - * mips.h (STO_*): Redefine in terms of STV_* values now in - common.h. - -1999-12-27 Nick Clifton - - * common.h: Upgrade to match Oct4, 1999 Draft ELF ABI Spec. - (EM_MIPS_RS3_LE): New machine number. - (EM_RCE): New machine number. - (EM_MMA): New machine number. - (EM_PCP): New machine number. - (EM_NCPU): New machine number. - (EM_NDR1): New machine number. - (EM_STARCORE): New machine number. - (EM_ME16): New machine number. - (EM_ST100): New machine number. - (EM_TINYJ): New machine number. - (EM_FX66): New machine number. - (EM_ST9PLUS): New machine number. - (EM_ST7): New machine number. - (EM_68HC16): New machine number. - (EM_68HC11): New machine number. - (EM_68HC08): New machine number. - (EM_68HC05): New machine number. - (EM_SVX): New machine number. - (EM_VAX): New machine number. - (PF_MASKOS): Change value. - (SHT_INIT_ARRAY): New value for sh_type field. - (SHT_FINI_ARRAY): New value for sh_type field. - (SHT_PREINIT_ARRAY): New value for sh_type field. - (SHT_HIUSER): Change value. - (SHF_MERGE): New valye for sh_flags field. - (SHF_STRINGS): New valye for sh_flags field. - (SHF_INFO_LINK): New valye for sh_flags field. - (SHF_OS_NONCONFORMING): New valye for sh_flags field. - (SHF_MASKOS): Change value. - (ELF_ST_VISIBILITY): New macro. - (ELF_ST_OTHER): New macro. - (STT_COMMON): New symbol type. - (STV_DEFAULT): Value for symbol visibility. - (STV_INTERNAL): Value for symbol visibility. - (STV_HIDDEN): Value for symbol visibility. - (STV_PROTECTED): Value for symbol visibility. - (DT_RUNPATH): New dynamic section tag. - (DT_FLAGS): New dynamic section tag. - (DT_ENCODING): New dynamic section tag. - (DT_PREINIT_ARRAY): New dynamic section tag. - (DT_PREINIT_ARRAYSZ): New dynamic section tag. - (DT_LOPROC): New dynamic section tag index. - (DT_HIPROC): New dynamic section tag index. - (DF_ORIGIN): Value for dynamic section flag. - (DF_SYMBOLIC): Value for dynamic section flag. - (DF_TEXTREL): Value for dynamic section flag. - (DF_BIND_NOW): Value for dynamic section flag. - -1999-12-09 Fred Fish - - * i960.h (reloc-macros.h): Include using relative dir elf/. - * i386.h (reloc-macros.h): Include using relative dir elf/. - * hppa.h (reloc-macros.h): Include using relative dir elf/. - -1999-12-07 Jim Blandy - - * common.h (NT_PRXFPREG): New definition. - -Wed Dec 1 03:02:15 1999 Jeffrey A Law (law@cygnus.com) - - * mn10300.h (E_MN10300_MACH_AM33): Define. - -Mon Oct 11 22:42:37 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (PF_HP_PAGE_SIZE): Define. - (PF_HP_FAR_SHARED, PF_HP_NEAR_SHARED, PF_HP_CODE): Likewise. - (PF_HP_MODIFY, PF_HP_LAZYSWAP, PF_HP_SBP): Likewise. - -Mon Oct 4 17:42:38 1999 Doug Evans - - * m32r.h (E_M32RX_ARCH): Define. - -1999-09-15 Ulrich Drepper - - * hppa.h: Add DT_HP_GST_SIZE, DT_HP_GST_VERSION, and DT_HP_GST_HASHVAL. - -1999-09-04 Steve Chamberlain - - * pj.h: New file. - * common.h (EM_PJ): Define. - -1999-09-02 Ulrich Drepper - - * hppa.h: Add HPUX specific symbol type definitions. - - * hppa.h: Add HPUX specific dynamic and program header table - specific definitions. - -1999-08-31 Scott Bambrough - - * common.h (NT_TASKSTRUCT): Define. - -1999-07-16 Jakub Jelinek - - * sparc.h (EF_SPARC_SUN_US3): Define in Cheetah extensions - flag (as per SCD2.4.1). - -1999-07-16 Jakub Jelinek - - * sparc.h (ELF64_R_TYPE_DATA): Only use ELF64_R_TYPE bits, not - ELF64_R_SYM bits. - -1999-06-21 Philip Blundell - - * arm.h (EF_SOFT_FLOAT, F_SOFT_FLOAT): Define. - -1999-07-13 Andreas Schwab - - * m68k.h (EF_CPU32): Move definition inside multiple inclusion - guard. - -1999-07-08 Richard Henderson - - * sparc.h (ELF64_R_TYPE_DATA): Sign extend the value. - (ELF64_R_TYPE_INFO): Mask out all but low 24 bits of data. - (DT_SPARC_PLTFMT): Delete. - Based on a patch from Jakub Jelinek. - -Mon Jun 21 16:36:02 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (elf_hppa_reloc_type): Renamed from elf32_hppa_reloc_type. - -1999-06-10 Jakub Jelinek - - * sparc.h (R_SPARC_max_std): Define. - -Wed Jun 9 15:16:34 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h: Update with various changes from newest PA ELF - specifications. - -1999-06-03 Ian Lance Taylor - - * common.h (EM_PPC64): Define. - -1999-06-02 Stu Grossman - - * dwarf.h: Add LANG_JAVA. - * dwarf2.h: Add DW_LANG_Java. - -1999-05-29 Nick Clifton - - * common.h (ELFOSABI_ARM): Define. - -1999-05-28 Nick Clifton - - * reloc-macros.h: Update comment. - -1999-05-28 Ian Lance Taylor - - * i960.h: New file. - -1999-05-16 Nick Clifton - - * mcore.h (R_MCORE_COPY): Define. - (R_MCORE_GLOB_DAT): Define. - (R_MCORE_JUMP_SLOT): Define. - -1999-05-15 Nick Clifton - - * mcore.h (R_MCORE_RELATIVE): Define. - -1999-05-05 Catherine Moore - - * m68k.h (EF_CPU32): Define. - -1999-04-21 Nick Clifton - - * reloc-macros.h (START_RELOC_NUMBERS): Prepend an underscore to - fake reloc entry name (if possible), in order to avoid conflicts - with typedefs of the same name. - -1999-04-16 Gavin Romig-Koch - - * mips.h (EF_MIPS_32BITMODE): New. - -1999-04-08 Nick Clifton - - * mcore.h: New header file. Defines for Motorola's MCore - processor. - -1999-04-08 Nick Clifton - - * common.h: Add new constants defined in: "System V Application - Binary Interface - DRAFT - April 29, 1998" found at the web site: - http://www.sco.com/developer/gabi/contents.html - - (EM_MMA): Removed. Replaced with EM_MCORE as Motorolla own this - value. - -1999-03-31 Nick Clifton - - * reloc-macros.h: Fixed to not generate an enum with a trailing - comma. - -1999-03-16 Gavin Romig-Koch - - * mips.h (E_MIPS_MACH_5000): New. - -1999-03-10 Ulrich Drepper - - * common.h: Add definitions for a few more Solaris ELF extensions. - -Thu Feb 18 18:58:26 1999 Ian Lance Taylor - - * external.h: Only use attribute if __GNUC__ is defined. - -1999-02-17 Nick Clifton - - Patch submitted by: Scott Bambrough - - * external.h: struct Elf_External_Versym must be packed on - ARM. Code uses sizeof(Elf_External_Versym) and assumes it is - equal to sizeof(char[2]). Reported by Jim Pick - -1999-02-02 Nick Clifton - - * dwarf2.h (DWARF2_External_ARange): New structure. - (DWARF2_Internal_ARange): New structure. - -Mon Feb 1 11:33:56 1999 Catherine Moore - - * arm.h: Renumber relocs to conform to standard. - (EF_NEW_ABI): Define. - (EF_OLD_ABI): Define. - * arm-oabi.h: New file. - -1999-01-28 Nick Clifton - - * fr30.h: Add R_FR30_GNU_VT{INHERIT,ENTRY} relocs. - -1999-01-27 Nick Clifton - - * dwarf2.h: Add typedefs for structures found in dwarf2 sections. - -1998-12-16 Gavin Romig-Koch - - * mips.h (E_MIPS_MACH_4111): New. - -1998-12-15 Gavin Romig-Koch - - * mips.h (EF_MIPS_ABI,E_MIPS_ABI_O32,E_MIPS_ABI_O64, - E_MIPS_ABI_EABI32,E_MIPS_ABI_EABI64): - -1998-12-03 Nick Clifton - - * fr30.h: Add R_FR30_48 reloc. - -1998-12-02 Ulrich Drepper - - * mips.h: Add external data type for conflict section. - - * mips.h: Add more LL_* options from Irix 6.5. - - * mips.h: Add R_MIPS_JALR and adjust R_MIPS_max appropriately. - -Mon Nov 30 15:25:58 1998 J"orn Rennecke - - * sh.h (elf_sh_reloc_type): Add R_SH_FIRST_INVALID_RELOC, - R_SH_LAST_INVALID_RELOC, R_SH_SWITCH8 and R_SH_max. - -Tue Nov 10 15:12:28 1998 Nick Clifton - - * common.h (EM_CYGNUS_FR30): Reduce to a 16 bit value. - -Tue Nov 10 15:17:28 1998 Catherine Moore - - * d10v.h: Add vtable relocs. - -Wed Nov 4 15:56:50 1998 Nick Clifton - - * common.h (EM_CYGNUS_FR30): New machine number. - - * fr30.h: New file: Definitions for the FR30. - -Fri Oct 30 11:54:15 1998 Catherine Moore - - From Philip Blundell : - * arm.h (R_ARM_COPY, et al.): New relocs, used by Linux for PIC. - (EF_ALIGN8): New flag. - -Tue Oct 20 11:19:50 1998 Ian Lance Taylor - - * common.h (NT_LWPSTATUS): Close comment accidentally left open. - -Mon Oct 19 20:24:11 1998 Catherine Moore - - * sh.h: Add vtable relocs. - -Mon Oct 19 01:44:42 1998 Felix Lee - - * common.h (NT_PSTATUS, NT_FPREGS, NT_PSINFO, - NT_LWPSTATUS,NT_LWPSINFO): added. - * internal.h (Elf_Internal_Note): new structure members. - -Fri Oct 16 14:11:25 1998 Catherine Moore - - * m32r.h: Add vtable relocs. - -Tue Oct 6 09:22:22 1998 Catherine Moore - - * sparc.h: Add vtable relocs. - -Mon Oct 5 09:39:22 1998 Catherine Moore - - * v850.h: Add vtable relocs. - -Sun Oct 4 21:17:51 1998 Ian Lance Taylor - - * i386.h (R_386_max): Change from 252 to 24. - -Mon Sep 21 12:24:44 1998 Catherine Moore - - * i386.h: Change vtable reloc numbers. - -Sun Sep 20 00:54:22 1998 Andreas Schwab - - * m68k.h: Add vtable relocs and R_68K_max. - -Tue Sep 15 09:56:49 CDT 1998 Catherine Moore - - * arm.h: Add vtable relocs. - -Mon Aug 31 11:25:27 1998 Catherine Moore - - * arm.h: Define STT_ARM_TFUNC. Remove ST_THUMB_xxxx - definitions. - -Sat Aug 29 22:25:51 1998 Richard Henderson - - * i386.h: Add vtable relocs. - -1998-08-25 16:42 Ulrich Drepper - - * common.h: Add SYMINFO_* macros to access Elf*_Syminfo information. - - * external.h: Add Elf_External_Syminfo definition. - - * internal.h: Add Elf_Internal_Syminfo, Elf32_Internal_Syminfo, - and Elf64_Syminfo definitions. - -Sun Aug 9 20:26:49 CDT 1998 Catherine Moore - - * arm.h: Add ST_THUMB definitions. - -Wed Aug 5 15:52:35 1998 Nick Clifton - - * arm.h: Add ELF header flags to specify compile time optins: - EF_INTERWORK: New flag. - EF_APCS_26: New flag. - EF_APCS_FLOAT: New flag. - EF_PIC: New flag. - -1998-07-31 21:28 Ulrich Drepper - - * mips.h: Add missing RHF_* constants. - -Fri Jul 31 10:01:40 1998 Catherine Moore - - * arm.h: Add R_ARM_THM_PC9 relocation. - -1998-07-30 16:25 Ulrich Drepper - - * common.h: Add new DT_* entries and there flag macros from Solaris. - -Tue Jul 28 18:14:07 1998 Stan Cox - - * sparc.h: (R_SPARC_REV32): Added for little endian data e.g. sparc 86x. - -Fri Jul 24 11:22:06 1998 Jeffrey A Law (law@cygnus.com) - - * mn10300.h: Add R_MN10300_24 relocation. - -1998-07-24 Ulrich Drepper - - * mips.h: Add MIPS64 relocation names and values. - -Wed Jul 22 19:29:00 Catherine Moore - - * arm.h: Rename relocations. - -1998-07-22 Ulrich Drepper - - * ppc.h: Define enum as elf_ppc_reloc_type. - -Wed Jul 22 16:22:11 1998 Nick Clifton - - * reloc-macros.h: New file. Provides relocation macros: - START_RELOC_NUMBERS, RELOC_NUMBER, FAKE_RELOC, EMPTY_RELOC and - END_RELOC_NUMBERS used by other elf header files. - - * alpha.h: Use reloc-macros.h. - * arc.h: Use reloc-macros.h. - * arm.h: Use reloc-macros.h. - * d10v.h: Use reloc-macros.h. - * d30v.h: Use reloc-macros.h. - * hppa.h: Use reloc-macros.h. - * i386.h: Use reloc-macros.h. - * m32r.h: Use reloc-macros.h. - * m68k.h: Use reloc-macros.h. - * mips.h: Use reloc-macros.h. - * mn10200.h: Use reloc-macros.h. - * mn10300.h: Use reloc-macros.h. - * ppc.h: Use reloc-macros.h. - * sh.h: Use reloc-macros.h. - * sparc.h: Use reloc-macros.h. - * v850.h: Use reloc-macros.h. - -1998-07-22 13:07 Ulrich Drepper - - * mn10300.h: Rewrite relocation definition using macros. - * mips.h: Likewise. - * ppc.h: Likewise. - * alpha.h: Likewise. - * arm.h: Likewise. - * d10v.h: Likewise. - * d30v.h: Likewise. - * m32r.h: Likewise. - * m68k.h: Likewise. - * mn10200.h: Likewise. - * sh.h: Likewise. - * sparc.h: Likewise. - -1998-07-21 13:07 Ulrich Drepper - - * arm.h: New file. - * d10v.h: New file. - * d30v.h: New file. - * i386.h: New file. - * m68k.h: New file. - * mn10200.h: New file. - * sh.h: New file. - - * mips.h: Add R_MIPS_* and SHT_MIPS_* entries. - - * mn10300.h: Add R_MN10300_* entries. - - * ppc.h: Add R_PPC_* entries. - -1998-07-20 07:11 Ulrich Drepper - - * mips.h: Add ODK_*, OEX_*, OPAD_*, OHW_*, and OGP_* constants. - Define Elf32_External_Lib. - -1998-07-19 15:24 Ulrich Drepper - - * mips.h (PT_MIPS_OPTIONS): New symbol. - Add lots of DT_MIPS_* symbols. - -Fri Jun 26 10:46:35 1998 Jeffrey A Law (law@cygnus.com) - - * mn10300.h: New file. - -Thu Jun 18 19:27:56 1998 Nick Clifton - - * common.h (EM_960, EM_V800, EM_FR20, EM_RH32, EM_MMA, - EM_OLD_ALPHA): Add these constants. - -Thu Jun 11 17:59:01 1998 Nick Clifton - - * common.h (EM_486, EM_S370): Add these constants. - -Tue Jun 9 09:35:29 1998 Nick Clifton - - * common.h (EM_ARM): Add this constant. - -Wed May 6 09:45:30 1998 Gavin Koch - - * mips.h (EF_MIPS_MACH,E_MIPS_MACH_*): Added. - -Sat Apr 25 18:35:06 1998 Richard Henderson - - * alpha.h (STO_ALPHA_NOPV, STO_ALPHA_STD_GPLOAD): New. - -Wed Apr 15 15:42:45 1998 Richard Henderson - - * common.h (EM_SPARC64): Move and rename to EM_OLD_SPARCV9. - (EM_SPARCV9): New. This is the official ABI name and number. - -Sat Feb 28 17:04:41 1998 Richard Henderson - - * alpha.h (EF_ALPHA_32BIT, EF_ALPHA_CANRELAX): New. - -Mon Dec 15 15:07:49 1997 Nick Clifton - - * m32r.h (EF_M32R_ARCH, E_M32R_ARCH): New flags to - specify machine architecture. - -Fri Dec 5 11:20:08 1997 Nick Clifton - - * v850.h: New constants: SHN_V850_SCOMMON, SHN_V850_TCOMMON, - SHN_V850_ZCOMMON, SHT_V850_SCOMMON, SHT_V850_TCOMMON, - SHT_V850_ZCOMMON to handle v850 common sections. - enum reloc_type renamed to v850_reloc_type to avoid name - conflict. - -Thu Oct 23 13:55:24 1997 Richard Henderson - - * sparc.h (enum elf_sparc_reloc_type): Add UA64 & UA16. - -Thu Oct 23 00:42:04 1997 Richard Henderson - - * sparc.h (DT_SPARC_REGISTER): New macro. - (DT_SPARC_PLTFMT): In support of old sparc64-linux .plts; will - go away soon. - -Tue Sep 30 13:26:58 1997 Doug Evans - - * sparc.h (EF_SPARC_HAL_R1, EF_SPARC_EXT_MASK): New macros. - (EF_SPARCV9_{MM,TSO,PSO,RMO}): New macros. - (SHN_BEFORE,SHN_AFTER): New macros. - (SHF_EXCLUDE,SHF_ORDERED): New macros. - (STT_REGISTER): New macro. - (R_SPARC_GLOB_JMP): Deleted, but slot reserved. - (R_SPARC_{DISP64,PLT64,HIX22,LOX10}): New relocations. - (R_SPARC_{H44,M44,L44,REGISTER}): New relocations. - (ELF64_R_TYPE_{DATA,ID,INFO}): New macros. - -Wed Sep 17 16:41:42 1997 Nick Clifton - - * v850.h: Add R_V850_CALLT_6_7_OFFSET and R_V850_CALLT_16_16_OFFSET. - -Tue Sep 16 14:16:17 1997 Nick Clifton - - * v850.h (reloc_type): Add R_V850_TDA_16_16_OFFSET. - -Wed Sep 3 15:11:14 1997 Richard Henderson - - * mips.h: Correct typo in comment. - -Wed Sep 3 11:25:57 1997 Nick Clifton - - * v850.h (reloc_type): Remove R_V850_16_PCREL. - -Tue Sep 2 17:41:05 1997 Nick Clifton - - * common.h: Remove magic number for V850E. - * common.h: Remove magic number for V850EA. - * v850.h: Add new flags for e_flags field in elf header. - -Mon Aug 25 16:06:47 1997 Nick Clifton - - * common.h (EM_CYGNUS_V850E): backend magic number for v850e. - * common.h (EM_CYGNUS_V850EA): backend magic number for v850ea. - -Mon Aug 18 11:05:23 1997 Nick Clifton - - * v850.h (reloc_type): Add 16 bit PC relative relocation. - -Fri Aug 15 05:10:09 1997 Doug Evans - - * arc.h (enum reloc): Move here from elf32-arc.c. - -Fri Aug 8 17:05:29 1997 Doug Evans - - * arc.h: New file. - * common.h (EM_CYGNUS_ARC): Define. - -Mon Jun 16 14:46:12 1997 Ian Lance Taylor - - * internal.h (Elf_Internal_Ehdr): Change e_phoff and e_shoff from - bfd_signed_vma to bfd_size_type, as they are not signed. - -Wed Mar 5 15:35:26 1997 Doug Evans - - * m32r.h (SHF_M32R_CAN_RELAX): Define. - -Mon Feb 24 17:49:01 1997 Ian Lance Taylor - - * external.h: Dump the 32/64 bit specific forms of the version - structures, and just define them as size independent. - - * common.h (VERSYM_HIDDEN, VERSYM_VERSION): Define. - -Fri Feb 21 13:00:34 1997 Doug Evans - - * m32r.h (enum reloc_type): Add R_M32R_SDA16. - (SHN_M32R_SCOMMON): Define. - -Wed Feb 19 15:35:31 1997 Ian Lance Taylor - - From Eric Youngdale : - * external.h, internal.h, common.h: Added new structures and - definitions for ELF versions. - -Tue Feb 18 17:40:36 1997 Martin M. Hunt - - * common.h (EM_CYGNUS_D30V): Define. - -Mon Jan 27 11:54:44 1997 Doug Evans - - * m32r.h (enum reloc_type): Add R_M32R_HI16_[SU]LO,R_M32R_LO16. - -Fri Jan 3 11:32:51 1997 Michael Meissner - - * v850.h (V850_OTHER_{TDA_BYTE,ERROR}): New bits for the st_other - field. - (SHN_V850_*): Remove v850 specific section indexes, which are not - needed. - (enum reloc_type): Move the v850 relocations here from - elf32-v850.c - -Thu Jan 2 19:30:23 1997 Michael Meissner - - * v850.h: New file, provide V850 specific definitions. - -Tue Dec 31 14:44:32 1996 Ian Lance Taylor - - * common.h (DT_AUXILIARY): Define. - (DT_FILTER): Define. - -Wed Dec 4 05:03:37 1996 Jason Merrill - - * dwarf2.h: Update. - -Tue Nov 26 10:44:47 1996 Ian Lance Taylor - - * mips.h (STO_MIPS16): Define. - -Tue Nov 12 15:45:42 1996 Martin M. Hunt - - * d10v.h: Remove empty file. - -Tue Oct 8 11:31:24 1996 Ian Lance Taylor - - * mips.h (EF_MIPS_ABI2): Define. - -Thu Oct 3 10:01:40 1996 Jeffrey A Law (law@cygnus.com) - - * common.h: Break mn10x00 support into mn10200 and mn10300. - -Wed Oct 2 21:26:43 1996 Jeffrey A Law (law@cygnus.com) - - * common.h (EM_CYGNUS_MN10x00): Define. - -Mon Sep 23 09:18:04 1996 Doug Evans - - * m32r.h: New file. - -Fri Aug 30 17:06:21 1996 Ian Lance Taylor - - * common.h (EM_SH): Define. - -Tue Aug 20 14:47:54 1996 J.T. Conklin - - * common.h (EM_CYGNUS_V850): Define. - -Mon Aug 19 10:59:10 1996 Doug Evans - - * common.h (EM_CYGNUS_M32R): Define. - -Mon Jul 22 18:59:55 1996 Ian Lance Taylor - - * mips.h (SHT_MIPS_IFACE, SHT_MIPS_CONTENT): Define. - (SHT_MIPS_SYMBOL_LIB): Define. - (SHF_MIPS_MERGE, SHF_MIPS_ADDR32, SHF_MIPS_ADDR64): Define. - (SHF_MIPS_NOSTRIP, SHF_MIPS_LOCAL, SHF_MIPS_NAMES): Define. - -Thu Jul 18 19:12:15 1996 Stan Shebs - - * dwarf2.h: New file. - -Jul 18 13:20:39 1996 Martin M. Hunt - - * common.h (EM_CYGNUS_D10V): Define. - * d10v.h: New file. - -Fri Jun 21 12:33:24 1996 Richard Henderson - - * alpha.h: New file. - * common.h (EM_ALPHA): Define. - -Fri May 31 17:28:05 1996 Ian Lance Taylor - - * mips.h (Elf_External_Options, Elf_Internal_Options): Define. - (bfd_mips_elf_swap_options_in): Declare. - (bfd_mips_elf_swap_options_out): Declare. - (ODK_*): Define. - (Elf64_External_RegInfo, Elf64_Internal_RegInfo): Define. - (bfd_mips_elf64_swap_reginfo_in): Declare. - (bfd_mips_elf64_swap_reginfo_out): Declare. - -Thu May 30 12:35:57 1996 Ian Lance Taylor - - * mips.h (E_MIPS_ARCH_4): Define. - -Wed May 29 15:35:33 1996 Ian Lance Taylor - - * mips.h (Elf64_Mips_External_Rel): Define. - (Elf64_Mips_Internal_Rel): Define. - (Elf64_Mips_External_Rela, Elf64_Mips_Internal_Rela): Define. - (RSS_*): Define. - -Mon Apr 22 18:26:30 1996 Doug Evans - - * sparc.h (R_SPARC_[56]): Always define. - -Mon Feb 19 01:55:56 1996 Doug Evans - - * sparc.h (R_SPARC_{PLT32,HIPLT22,LOPLT10,PCPLT32,PCPLT22, - PCPLT10,5,6}): Don't define ifdef SPARC64_OLD_RELOCS. - -Tue Feb 6 11:33:58 1996 Doug Evans - - * sparc.h (enum sparc_elf_reloc_type): Define. - -Wed Jan 17 09:09:16 1996 Doug Evans - - * common.h: Define EM_SPARC32PLUS. - * sparc.h: New file. - -Thu Jan 11 16:27:34 1996 Michael Meissner - - * ppc.h (SHF_EXCLUDE, SHT_ORDERED): New fields from the abi. - -Thu Nov 30 16:47:18 1995 Ian Lance Taylor - - * internal.h (struct elf_segment_map): Add includes_filehdr and - includes_phdrs fields. - -Tue Nov 28 16:58:10 1995 Ian Lance Taylor - - * internal.h (struct elf_segment_map): Define. - -Tue Oct 31 15:19:36 1995 Fred Fish - - * common.h, dwarf.h, external.h, hppa.h, internal.h, - mips.h, ppc.h: Protect against multiple inclusions. - -Thu Sep 21 13:51:58 1995 Michael Meissner - - * ppc.h (EF_PPC_RELOCATABLE_LIB): Add new flag bit. - -Fri Sep 1 15:32:17 1995 Kazumoto Kojima - - * mips.h: Add some definitions used on Irix 5. - -Tue Jun 20 10:18:28 1995 Jeff Law (law@snake.cs.utah.edu) - - * hppa.h (CPU_PA_RISC1_0): Protect from redefinitions. - (CPU_PA_RISC1_1): Likewise. - -Wed Mar 8 18:14:37 1995 Michael Meissner - - * ppc.h: New file for PowerPC support. - -Tue Feb 14 13:59:13 1995 Michael Meissner - - * common.h (EM_PPC): Use offical value of 20, not 17. - (EM_PPC_OLD): Define this to be the old value of EM_PPC. - -Tue Jan 24 09:40:59 1995 Michael Meissner - - * common.h (EM_PPC): New macro, PowerPC machine id. - -Tue Jan 17 10:51:38 1995 Ian Lance Taylor - - * mips.h (SHT_MIPS_MSYM, SHT_MIPS_DWARF, SHT_MIPS_EVENTS): Define. - -Mon Oct 17 13:43:59 1994 Ian Lance Taylor - - * internal.h (Elf_Internal_Shdr): Remove rawdata and size fields. - Add bfd_section field. - -Tue May 24 16:11:50 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h (Elf32_External_gptab): Define. - -Mon May 16 13:22:04 1994 Jeff Law (law@snake.cs.utah.edu) - - * common.h (EM_HPPA): Delete. - (EM_PARISC): Add. - * hppa.h: New file. - -Mon May 9 13:27:03 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * common.h (SHN_LORESERVE): Rename from SHN_LORESERV. - (ELF32_R_TYPE, ELF32_R_INFO): Don't rely on size of unsigned char. - (ELF64_R_TYPE): Don't rely on size of unsigned long. - -Mon Apr 25 15:53:09 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * internal.h (Elf_Internal_Shdr): Use PTR, not void *. - -Fri Mar 11 00:34:59 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * mips.h (SHN_MIPS_TEXT, SHN_MIPS_DATA): Define. - -Sat Mar 5 14:08:54 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * internal.h: Remove Elf32_*, Elf64_* typedefs. These names - cause conflicts with system headers, e.g. link.h in gdb/solib.c. - Combine 32- and 64-bit versions of *_Internal_Dyn. - * common.h: Replace uses of Elf64_Word, Elf64_Xword typedefs - by their expansion. - * mips.h: Replace uses of Elf32_Word, Elf32_Sword, Elf32_Addr - typedefs by their expansion. Add DT_MIPS_RLD_MAP definition. - -Fri Feb 18 10:39:54 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * common.h (EM_CYGNUS_POWERPC): Define. This may be temporary, - depending upon how quickly I can find a real PowerPC ABI. - -Mon Feb 7 08:27:13 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * internal.h: Change HOST_64_BIT to BFD_HOST_64_BIT. - -Wed Feb 2 14:12:18 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * common.h: Add comments regarding value of EM_HPPA and how to - pick an unofficial value. - -Wed Nov 17 17:14:26 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h (SHT_MIPS_OPTIONS): Define. - -Mon Nov 8 17:57:00 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h: Added some more MIPS ABI macro definitions. - -Wed Nov 3 22:07:17 1993 Ken Raeburn (raeburn@rtl.cygnus.com) - - * common.h (EM_MIPS_RS4_BE): New macro. - -Tue Oct 12 07:28:18 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.h: New file. MIPS ABI specific information. - -Mon Jun 21 13:13:43 1993 Ken Raeburn (raeburn@poseidon.cygnus.com) - - * internal.h: Combined 32- and 64-bit versions of all structures - except *_Internal_Dyn. This will simply the assembler interface, - and some bfd code. - -Tue May 25 02:00:16 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * external.h, internal.h, common.h: Added 64-bit versions of some - structures and macros. Renamed old versions to put "32" in the - name. Some are unchanged. - -Thu Apr 29 12:12:20 1993 Ken Raeburn (raeburn@deneb.cygnus.com) - - * common.h (EM_HPPA, NT_VERSION, STN_UNDEF, DT_*): New macros. - * external.h (Elf_External_Dyn): New type. - - * internal.h (Elf_Intenral_Shdr): New field `size'. - (Elf_Internal_Dyn): New type. - -Tue Apr 20 16:03:45 1993 Fred Fish (fnf@cygnus.com) - - * dwarf.h (LANG_CHILL): Change value to one randomly picked in - the user defined range, to reduce probability of collisions. - -Sun Nov 15 09:34:02 1992 Fred Fish (fnf@cygnus.com) - - * dwarf.h (AT_src_coords): Whitespace change only. - * dwarf.h (AT_body_begin, AT_body_end, LANG_MODULA2): - Add from latest gcc. - * dwarf.h (LANG_CHILL): Add as GNU extension. - -Sat Aug 1 13:46:53 1992 Fred Fish (fnf@cygnus.com) - - * dwarf.h: Replace with current version from gcc distribution. - -Fri Jun 19 19:05:09 1992 John Gilmore (gnu at cygnus.com) - - * internal.h: Add real struct tags to all the Type_Defs, so they - can be used in prototypes where the Type_Defs are not known. - -Fri Apr 3 20:58:58 1992 Mark Eichin (eichin at cygnus.com) - - * common.h: added ELF_R_{SYM,TYPE,INFO} for handling relocation - info - added EM_MIPS, and corrected value of EM_860 based on System V ABI - manual. - - * external.h: added Elf_External_{Rel,Rela}. - - * internal.h: added Elf_Internal_{Rel,Rela}. - added rawdata to Elf_Internal_Shdr. - -Sat Nov 30 20:43:59 1991 Steve Chamberlain (sac at rtl.cygnus.com) - - * common.h, dwarf.h, external.h, internal.h, ChangeLog; moved from - ../elf- - - -Local Variables: -version-control: never -End: diff --git a/include/elf/alpha.h b/include/elf/alpha.h deleted file mode 100644 index e53202c6e4b..00000000000 --- a/include/elf/alpha.h +++ /dev/null @@ -1,130 +0,0 @@ -/* ALPHA ELF support for BFD. - Copyright 1996, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. - - By Eric Youngdale, . No processor supplement available - for this platform. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the ALPHA ELF ABI. Note - that most of this is not actually implemented by BFD. */ - -#ifndef _ELF_ALPHA_H -#define _ELF_ALPHA_H - -/* Processor specific flags for the ELF header e_flags field. */ - -/* All addresses must be below 2GB. */ -#define EF_ALPHA_32BIT 0x00000001 - -/* All relocations needed for relaxation with code movement are present. */ -#define EF_ALPHA_CANRELAX 0x00000002 - -/* Processor specific section flags. */ - -/* This section must be in the global data area. */ -#define SHF_ALPHA_GPREL 0x10000000 - -/* Section contains some sort of debugging information. The exact - format is unspecified. It's probably ECOFF symbols. */ -#define SHT_ALPHA_DEBUG 0x70000001 - -/* Section contains register usage information. */ -#define SHT_ALPHA_REGINFO 0x70000002 - -/* A section of type SHT_MIPS_REGINFO contains the following - structure. */ -typedef struct -{ - /* Mask of general purpose registers used. */ - unsigned long ri_gprmask; - /* Mask of co-processor registers used. */ - unsigned long ri_cprmask[4]; - /* GP register value for this object file. */ - long ri_gp_value; -} Elf64_RegInfo; - -/* Special values for the st_other field in the symbol table. */ - -#define STO_ALPHA_NOPV 0x80 -#define STO_ALPHA_STD_GPLOAD 0x88 - -/* Special values for Elf64_Dyn tag. */ -#define DT_ALPHA_PLTRO DT_LOPROC - -#include "elf/reloc-macros.h" - -/* Alpha relocs. */ -START_RELOC_NUMBERS (elf_alpha_reloc_type) - RELOC_NUMBER (R_ALPHA_NONE, 0) /* No reloc */ - RELOC_NUMBER (R_ALPHA_REFLONG, 1) /* Direct 32 bit */ - RELOC_NUMBER (R_ALPHA_REFQUAD, 2) /* Direct 64 bit */ - RELOC_NUMBER (R_ALPHA_GPREL32, 3) /* GP relative 32 bit */ - RELOC_NUMBER (R_ALPHA_LITERAL, 4) /* GP relative 16 bit w/optimization */ - RELOC_NUMBER (R_ALPHA_LITUSE, 5) /* Optimization hint for LITERAL */ - RELOC_NUMBER (R_ALPHA_GPDISP, 6) /* Add displacement to GP */ - RELOC_NUMBER (R_ALPHA_BRADDR, 7) /* PC+4 relative 23 bit shifted */ - RELOC_NUMBER (R_ALPHA_HINT, 8) /* PC+4 relative 16 bit shifted */ - RELOC_NUMBER (R_ALPHA_SREL16, 9) /* PC relative 16 bit */ - RELOC_NUMBER (R_ALPHA_SREL32, 10) /* PC relative 32 bit */ - RELOC_NUMBER (R_ALPHA_SREL64, 11) /* PC relative 64 bit */ - - /* Skip 12 - 16; deprecated ECOFF relocs. */ - - RELOC_NUMBER (R_ALPHA_GPRELHIGH, 17) /* GP relative 32 bit, high 16 bits */ - RELOC_NUMBER (R_ALPHA_GPRELLOW, 18) /* GP relative 32 bit, low 16 bits */ - RELOC_NUMBER (R_ALPHA_GPREL16, 19) /* GP relative 16 bit */ - - /* Skip 20 - 23; deprecated ECOFF relocs. */ - - /* These relocations are specific to shared libraries. */ - RELOC_NUMBER (R_ALPHA_COPY, 24) /* Copy symbol at runtime */ - RELOC_NUMBER (R_ALPHA_GLOB_DAT, 25) /* Create GOT entry */ - RELOC_NUMBER (R_ALPHA_JMP_SLOT, 26) /* Create PLT entry */ - RELOC_NUMBER (R_ALPHA_RELATIVE, 27) /* Adjust by program base */ - - /* Like BRADDR, but assert that the source and target object file - share the same GP value, and adjust the target address for - STO_ALPHA_STD_GPLOAD. */ - RELOC_NUMBER (R_ALPHA_BRSGP, 28) - - /* Thread-Local Storage. */ - RELOC_NUMBER (R_ALPHA_TLSGD, 29) - RELOC_NUMBER (R_ALPHA_TLSLDM, 30) - RELOC_NUMBER (R_ALPHA_DTPMOD64, 31) - RELOC_NUMBER (R_ALPHA_GOTDTPREL, 32) - RELOC_NUMBER (R_ALPHA_DTPREL64, 33) - RELOC_NUMBER (R_ALPHA_DTPRELHI, 34) - RELOC_NUMBER (R_ALPHA_DTPRELLO, 35) - RELOC_NUMBER (R_ALPHA_DTPREL16, 36) - RELOC_NUMBER (R_ALPHA_GOTTPREL, 37) - RELOC_NUMBER (R_ALPHA_TPREL64, 38) - RELOC_NUMBER (R_ALPHA_TPRELHI, 39) - RELOC_NUMBER (R_ALPHA_TPRELLO, 40) - RELOC_NUMBER (R_ALPHA_TPREL16, 41) - -END_RELOC_NUMBERS (R_ALPHA_max) - -#define LITUSE_ALPHA_ADDR 0 -#define LITUSE_ALPHA_BASE 1 -#define LITUSE_ALPHA_BYTOFF 2 -#define LITUSE_ALPHA_JSR 3 -#define LITUSE_ALPHA_TLSGD 4 -#define LITUSE_ALPHA_TLSLDM 5 -#define LITUSE_ALPHA_JSRDIRECT 6 - -#endif /* _ELF_ALPHA_H */ diff --git a/include/elf/arc.h b/include/elf/arc.h deleted file mode 100644 index e2f4f4160fe..00000000000 --- a/include/elf/arc.h +++ /dev/null @@ -1,56 +0,0 @@ -/* ARC ELF support for BFD. - Copyright 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. - Contributed by Doug Evans, (dje@cygnus.com) - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the ARC ELF ABI. */ - -#ifndef _ELF_ARC_H -#define _ELF_ARC_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ - -START_RELOC_NUMBERS (elf_arc_reloc_type) - RELOC_NUMBER (R_ARC_NONE, 0) - RELOC_NUMBER (R_ARC_32, 1) - RELOC_NUMBER (R_ARC_B26, 2) - RELOC_NUMBER (R_ARC_B22_PCREL, 3) -END_RELOC_NUMBERS (R_ARC_max) - -/* Processor specific flags for the ELF header e_flags field. */ - -/* Four bit ARC machine type field. */ - -#define EF_ARC_MACH 0x0000000f - -/* Various CPU types. */ - -#define E_ARC_MACH_ARC5 0 -#define E_ARC_MACH_ARC6 1 -#define E_ARC_MACH_ARC7 2 -#define E_ARC_MACH_ARC8 3 - -/* Leave bits 0xf0 alone in case we ever have more than 16 cpu types. */ - -/* File contains position independent code. */ - -#define EF_ARC_PIC 0x00000100 - -#endif /* _ELF_ARC_H */ diff --git a/include/elf/arm.h b/include/elf/arm.h deleted file mode 100644 index 6b7297733ef..00000000000 --- a/include/elf/arm.h +++ /dev/null @@ -1,284 +0,0 @@ -/* ARM ELF support for BFD. - Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 - Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_ARM_H -#define _ELF_ARM_H - -#include "elf/reloc-macros.h" - -/* Processor specific flags for the ELF header e_flags field. */ -#define EF_ARM_RELEXEC 0x01 -#define EF_ARM_HASENTRY 0x02 -#define EF_ARM_INTERWORK 0x04 -#define EF_ARM_APCS_26 0x08 -#define EF_ARM_APCS_FLOAT 0x10 -#define EF_ARM_PIC 0x20 -#define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use. */ -#define EF_ARM_NEW_ABI 0x80 -#define EF_ARM_OLD_ABI 0x100 -#define EF_ARM_SOFT_FLOAT 0x200 -#define EF_ARM_VFP_FLOAT 0x400 -#define EF_ARM_MAVERICK_FLOAT 0x800 - -/* Frame unwind information */ -#define PT_ARM_EXIDX (PT_LOPROC + 1) - -/* Other constants defined in the ARM ELF spec. version B-01. */ -#define EF_ARM_SYMSARESORTED 0x04 /* NB conflicts with EF_INTERWORK */ -#define EF_ARM_DYNSYMSUSESEGIDX 0x08 /* NB conflicts with EF_APCS26 */ -#define EF_ARM_MAPSYMSFIRST 0x10 /* NB conflicts with EF_APCS_FLOAT */ -#define EF_ARM_EABIMASK 0xFF000000 - -/* Constants defined in AAELF. */ -#define EF_ARM_BE8 0x00800000 -#define EF_ARM_LE8 0x00400000 - -#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) -#define EF_ARM_EABI_UNKNOWN 0x00000000 -#define EF_ARM_EABI_VER1 0x01000000 -#define EF_ARM_EABI_VER2 0x02000000 -#define EF_ARM_EABI_VER3 0x03000000 -#define EF_ARM_EABI_VER4 0x04000000 -#define EF_ARM_EABI_VER5 0x05000000 - -/* Local aliases for some flags to match names used by COFF port. */ -#define F_INTERWORK EF_ARM_INTERWORK -#define F_APCS26 EF_ARM_APCS_26 -#define F_APCS_FLOAT EF_ARM_APCS_FLOAT -#define F_PIC EF_ARM_PIC -#define F_SOFT_FLOAT EF_ARM_SOFT_FLOAT -#define F_VFP_FLOAT EF_ARM_VFP_FLOAT - -/* Additional symbol types for Thumb. */ -#define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */ -#define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */ - -/* Additional section types. */ -#define SHT_ARM_EXIDX 0x70000001 /* Section holds ARM unwind info. */ -#define SHT_ARM_PREEMPTMAP 0x70000002 /* Section pre-emption details. */ -#define SHT_ARM_ATTRIBUTES 0x70000003 /* Section holds attributes. */ - -/* ARM-specific values for sh_flags. */ -#define SHF_ENTRYSECT 0x10000000 /* Section contains an entry point. */ -#define SHF_COMDEF 0x80000000 /* Section may be multiply defined in the input to a link step. */ - -/* ARM-specific program header flags. */ -#define PF_ARM_SB 0x10000000 /* Segment contains the location addressed by the static base. */ -#define PF_ARM_PI 0x20000000 /* Segment is position-independent. */ -#define PF_ARM_ABS 0x40000000 /* Segment must be loaded at its base address. */ - -/* Relocation types. */ - -START_RELOC_NUMBERS (elf_arm_reloc_type) -/* AAELF official names and numbers. */ - RELOC_NUMBER (R_ARM_NONE, 0) - RELOC_NUMBER (R_ARM_PC24, 1) /* deprecated */ - RELOC_NUMBER (R_ARM_ABS32, 2) - RELOC_NUMBER (R_ARM_REL32, 3) - RELOC_NUMBER (R_ARM_LDR_PC_G0, 4) - RELOC_NUMBER (R_ARM_ABS16, 5) - RELOC_NUMBER (R_ARM_ABS12, 6) - RELOC_NUMBER (R_ARM_THM_ABS5, 7) - RELOC_NUMBER (R_ARM_ABS8, 8) - RELOC_NUMBER (R_ARM_SBREL32, 9) - RELOC_NUMBER (R_ARM_THM_CALL, 10) - RELOC_NUMBER (R_ARM_THM_PC8, 11) - RELOC_NUMBER (R_ARM_BREL_ADJ, 12) - RELOC_NUMBER (R_ARM_SWI24, 13) /* obsolete */ - RELOC_NUMBER (R_ARM_THM_SWI8, 14) /* obsolete */ - RELOC_NUMBER (R_ARM_XPC25, 15) /* obsolete */ - RELOC_NUMBER (R_ARM_THM_XPC22, 16) /* obsolete */ - RELOC_NUMBER (R_ARM_TLS_DTPMOD32, 17) - RELOC_NUMBER (R_ARM_TLS_DTPOFF32, 18) - RELOC_NUMBER (R_ARM_TLS_TPOFF32, 19) - RELOC_NUMBER (R_ARM_COPY, 20) /* Copy symbol at runtime. */ - RELOC_NUMBER (R_ARM_GLOB_DAT, 21) /* Create GOT entry. */ - RELOC_NUMBER (R_ARM_JUMP_SLOT, 22) /* Create PLT entry. */ - RELOC_NUMBER (R_ARM_RELATIVE, 23) /* Adjust by program base. */ - RELOC_NUMBER (R_ARM_GOTOFF32, 24) /* 32 bit offset to GOT. */ - RELOC_NUMBER (R_ARM_BASE_PREL, 25) /* 32 bit PC relative offset to GOT. */ - RELOC_NUMBER (R_ARM_GOT_BREL, 26) /* 32 bit GOT entry. */ - RELOC_NUMBER (R_ARM_PLT32, 27) /* deprecated - 32 bit PLT address. */ - RELOC_NUMBER (R_ARM_CALL, 28) - RELOC_NUMBER (R_ARM_JUMP24, 29) - RELOC_NUMBER (R_ARM_THM_JUMP24, 30) - RELOC_NUMBER (R_ARM_BASE_ABS, 31) - RELOC_NUMBER (R_ARM_ALU_PCREL7_0, 32) /* obsolete */ - RELOC_NUMBER (R_ARM_ALU_PCREL15_8, 33) /* obsolete */ - RELOC_NUMBER (R_ARM_ALU_PCREL23_15, 34) /* obsolete */ - RELOC_NUMBER (R_ARM_LDR_SBREL_11_0, 35) /* deprecated, should have _NC suffix */ - RELOC_NUMBER (R_ARM_ALU_SBREL_19_12, 36) /* deprecated, should have _NC suffix */ - RELOC_NUMBER (R_ARM_ALU_SBREL_27_20, 37) /* deprecated, should have _CK suffix */ - RELOC_NUMBER (R_ARM_TARGET1, 38) - RELOC_NUMBER (R_ARM_SBREL31, 39) /* deprecated */ - RELOC_NUMBER (R_ARM_V4BX, 40) - RELOC_NUMBER (R_ARM_TARGET2, 41) - RELOC_NUMBER (R_ARM_PREL31, 42) - RELOC_NUMBER (R_ARM_MOVW_ABS_NC, 43) - RELOC_NUMBER (R_ARM_MOVT_ABS, 44) - RELOC_NUMBER (R_ARM_MOVW_PREL_NC, 45) - RELOC_NUMBER (R_ARM_MOVT_PREL, 46) - RELOC_NUMBER (R_ARM_THM_MOVW_ABS_NC, 47) - RELOC_NUMBER (R_ARM_THM_MOVT_ABS, 48) - RELOC_NUMBER (R_ARM_THM_MOVW_PREL_NC, 49) - RELOC_NUMBER (R_ARM_THM_MOVT_PREL, 50) - RELOC_NUMBER (R_ARM_THM_JUMP19, 51) - RELOC_NUMBER (R_ARM_THM_JUMP6, 52) - RELOC_NUMBER (R_ARM_THM_ALU_PREL_11_0, 53) - RELOC_NUMBER (R_ARM_THM_PC12, 54) - RELOC_NUMBER (R_ARM_ABS32_NOI, 55) - RELOC_NUMBER (R_ARM_REL32_NOI, 56) - RELOC_NUMBER (R_ARM_ALU_PC_G0_NC, 57) - RELOC_NUMBER (R_ARM_ALU_PC_G0, 58) - RELOC_NUMBER (R_ARM_ALU_PC_G1_NC, 59) - RELOC_NUMBER (R_ARM_ALU_PC_G1, 60) - RELOC_NUMBER (R_ARM_ALU_PC_G2, 61) - RELOC_NUMBER (R_ARM_LDR_PC_G1, 62) - RELOC_NUMBER (R_ARM_LDR_PC_G2, 63) - RELOC_NUMBER (R_ARM_LDRS_PC_G0, 64) - RELOC_NUMBER (R_ARM_LDRS_PC_G1, 65) - RELOC_NUMBER (R_ARM_LDRS_PC_G2, 66) - RELOC_NUMBER (R_ARM_LDC_PC_G0, 67) - RELOC_NUMBER (R_ARM_LDC_PC_G1, 68) - RELOC_NUMBER (R_ARM_LDC_PC_G2, 69) - RELOC_NUMBER (R_ARM_ALU_SB_G0_NC, 70) - RELOC_NUMBER (R_ARM_ALU_SB_G0, 71) - RELOC_NUMBER (R_ARM_ALU_SB_G1_NC, 72) - RELOC_NUMBER (R_ARM_ALU_SB_G1, 73) - RELOC_NUMBER (R_ARM_ALU_SB_G2, 74) - RELOC_NUMBER (R_ARM_LDR_SB_G0, 75) - RELOC_NUMBER (R_ARM_LDR_SB_G1, 76) - RELOC_NUMBER (R_ARM_LDR_SB_G2, 77) - RELOC_NUMBER (R_ARM_LDRS_SB_G0, 78) - RELOC_NUMBER (R_ARM_LDRS_SB_G1, 79) - RELOC_NUMBER (R_ARM_LDRS_SB_G2, 80) - RELOC_NUMBER (R_ARM_LDC_SB_G0, 81) - RELOC_NUMBER (R_ARM_LDC_SB_G1, 82) - RELOC_NUMBER (R_ARM_LDC_SB_G2, 83) - RELOC_NUMBER (R_ARM_MOVW_BREL_NC, 84) - RELOC_NUMBER (R_ARM_MOVT_BREL, 85) - RELOC_NUMBER (R_ARM_MOVW_BREL, 86) - RELOC_NUMBER (R_ARM_THM_MOVW_BREL_NC, 87) - RELOC_NUMBER (R_ARM_THM_MOVT_BREL, 88) - RELOC_NUMBER (R_ARM_THM_MOVW_BREL, 89) - /* 90-93 unallocated */ - RELOC_NUMBER (R_ARM_PLT32_ABS, 94) - RELOC_NUMBER (R_ARM_GOT_ABS, 95) - RELOC_NUMBER (R_ARM_GOT_PREL, 96) - RELOC_NUMBER (R_ARM_GOT_BREL12, 97) - RELOC_NUMBER (R_ARM_GOTOFF12, 98) - RELOC_NUMBER (R_ARM_GOTRELAX, 99) - RELOC_NUMBER (R_ARM_GNU_VTENTRY, 100) /* deprecated - old C++ abi */ - RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 101) /* deprecated - old C++ abi */ - RELOC_NUMBER (R_ARM_THM_JUMP11, 102) - RELOC_NUMBER (R_ARM_THM_JUMP8, 103) - RELOC_NUMBER (R_ARM_TLS_GD32, 104) - RELOC_NUMBER (R_ARM_TLS_LDM32, 105) - RELOC_NUMBER (R_ARM_TLS_LDO32, 106) - RELOC_NUMBER (R_ARM_TLS_IE32, 107) - RELOC_NUMBER (R_ARM_TLS_LE32, 108) - RELOC_NUMBER (R_ARM_TLS_LDO12, 109) - RELOC_NUMBER (R_ARM_TLS_LE12, 110) - RELOC_NUMBER (R_ARM_TLS_IE12GP, 111) - /* 112 - 127 private range */ - RELOC_NUMBER (R_ARM_ME_TOO, 128) /* obsolete */ - - /* Extensions? R=read-only? */ - RELOC_NUMBER (R_ARM_RXPC25, 249) - RELOC_NUMBER (R_ARM_RSBREL32, 250) - RELOC_NUMBER (R_ARM_THM_RPC22, 251) - RELOC_NUMBER (R_ARM_RREL32, 252) - RELOC_NUMBER (R_ARM_RABS32, 253) - RELOC_NUMBER (R_ARM_RPC24, 254) - RELOC_NUMBER (R_ARM_RBASE, 255) - - /* Unofficial names for some of the relocs. */ - FAKE_RELOC (R_ARM_GOTOFF, R_ARM_GOTOFF32) /* 32 bit offset to GOT. */ - FAKE_RELOC (R_ARM_THM_PC22, R_ARM_THM_CALL) - FAKE_RELOC (R_ARM_THM_PC11, R_ARM_THM_JUMP11) - FAKE_RELOC (R_ARM_THM_PC9, R_ARM_THM_JUMP8) - - /* Relocs with both a different name, and (apparently) different meaning in - GNU usage. */ - FAKE_RELOC (R_ARM_GOTPC, R_ARM_BASE_PREL) /* 32 bit PC relative offset to GOT. */ - FAKE_RELOC (R_ARM_GOT32, R_ARM_GOT_BREL) /* 32 bit GOT entry. */ - FAKE_RELOC (R_ARM_ROSEGREL32, R_ARM_SBREL31) /* ??? */ - FAKE_RELOC (R_ARM_AMP_VCALL9, R_ARM_BREL_ADJ) /* Thumb-something. Not used. */ -END_RELOC_NUMBERS (R_ARM_max) - -#ifdef BFD_ARCH_SIZE -/* Routines for manipulating EABI object attributes. */ -void elf32_arm_add_eabi_attr_int (bfd *, int, unsigned int); -void elf32_arm_add_eabi_attr_string (bfd *, int, const char *); -void elf32_arm_add_eabi_attr_compat (bfd *, unsigned int, const char *); -int elf32_arm_get_eabi_attr_int (bfd *, int); - -void elf32_arm_set_eabi_attr_contents (bfd *, bfd_byte *, bfd_vma); -bfd_vma elf32_arm_eabi_attr_size (bfd *); - -enum -{ - Tag_NULL, - Tag_File, - Tag_Section, - Tag_Symbol, - Tag_CPU_raw_name, - Tag_CPU_name, - Tag_CPU_arch, - Tag_CPU_arch_profile, - Tag_ARM_ISA_use, - Tag_THUMB_ISA_use, - Tag_VFP_arch, - Tag_WMMX_arch, - Tag_NEON_arch, - Tag_PCS_config, - Tag_ABI_PCS_R9_use, - Tag_ABI_PCS_RW_data, - Tag_ABI_PCS_RO_data, - Tag_ABI_PCS_GOT_use, - Tag_ABI_PCS_wchar_t, - Tag_ABI_FP_rounding, - Tag_ABI_FP_denormal, - Tag_ABI_FP_exceptions, - Tag_ABI_FP_user_exceptions, - Tag_ABI_FP_number_model, - Tag_ABI_align8_needed, - Tag_ABI_align8_preserved, - Tag_ABI_enum_size, - Tag_ABI_HardFP_use, - Tag_ABI_VFP_args, - Tag_ABI_WMMX_args, - Tag_ABI_optimization_goals, - Tag_ABI_FP_optimization_goals, - Tag_compatibility, -}; - -#endif - -/* The name of the note section used to identify arm variants. */ -#define ARM_NOTE_SECTION ".note.gnu.arm.ident" - -/* Special section names. */ -#define ELF_STRING_ARM_unwind ".ARM.exidx" -#define ELF_STRING_ARM_unwind_info ".ARM.extab" -#define ELF_STRING_ARM_unwind_once ".gnu.linkonce.armexidx." -#define ELF_STRING_ARM_unwind_info_once ".gnu.linkonce.armextab." - -#endif /* _ELF_ARM_H */ diff --git a/include/elf/avr.h b/include/elf/avr.h deleted file mode 100644 index d2ffbe07f62..00000000000 --- a/include/elf/avr.h +++ /dev/null @@ -1,70 +0,0 @@ -/* AVR ELF support for BFD. - Copyright 1999, 2000, 2004, 2006 Free Software Foundation, Inc. - Contributed by Denis Chertykov - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., - 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_AVR_H -#define _ELF_AVR_H - -#include "elf/reloc-macros.h" - -/* Processor specific flags for the ELF header e_flags field. */ -#define EF_AVR_MACH 0xf - -/* If bit #7 is set, it is assumed that the elf file uses local symbols - as reference for the relocations so that linker relaxation is possible. */ -#define EF_AVR_LINKRELAX_PREPARED 0x80 - -#define E_AVR_MACH_AVR1 1 -#define E_AVR_MACH_AVR2 2 -#define E_AVR_MACH_AVR3 3 -#define E_AVR_MACH_AVR4 4 -#define E_AVR_MACH_AVR5 5 -#define E_AVR_MACH_AVR6 6 - -/* Relocations. */ -START_RELOC_NUMBERS (elf_avr_reloc_type) - RELOC_NUMBER (R_AVR_NONE, 0) - RELOC_NUMBER (R_AVR_32, 1) - RELOC_NUMBER (R_AVR_7_PCREL, 2) - RELOC_NUMBER (R_AVR_13_PCREL, 3) - RELOC_NUMBER (R_AVR_16, 4) - RELOC_NUMBER (R_AVR_16_PM, 5) - RELOC_NUMBER (R_AVR_LO8_LDI, 6) - RELOC_NUMBER (R_AVR_HI8_LDI, 7) - RELOC_NUMBER (R_AVR_HH8_LDI, 8) - RELOC_NUMBER (R_AVR_LO8_LDI_NEG, 9) - RELOC_NUMBER (R_AVR_HI8_LDI_NEG, 10) - RELOC_NUMBER (R_AVR_HH8_LDI_NEG, 11) - RELOC_NUMBER (R_AVR_LO8_LDI_PM, 12) - RELOC_NUMBER (R_AVR_HI8_LDI_PM, 13) - RELOC_NUMBER (R_AVR_HH8_LDI_PM, 14) - RELOC_NUMBER (R_AVR_LO8_LDI_PM_NEG, 15) - RELOC_NUMBER (R_AVR_HI8_LDI_PM_NEG, 16) - RELOC_NUMBER (R_AVR_HH8_LDI_PM_NEG, 17) - RELOC_NUMBER (R_AVR_CALL, 18) - RELOC_NUMBER (R_AVR_LDI, 19) - RELOC_NUMBER (R_AVR_6, 20) - RELOC_NUMBER (R_AVR_6_ADIW, 21) - RELOC_NUMBER (R_AVR_MS8_LDI, 22) - RELOC_NUMBER (R_AVR_MS8_LDI_NEG, 23) - RELOC_NUMBER (R_AVR_LO8_LDI_GS, 24) - RELOC_NUMBER (R_AVR_HI8_LDI_GS, 25) -END_RELOC_NUMBERS (R_AVR_max) - -#endif /* _ELF_AVR_H */ diff --git a/include/elf/bfin.h b/include/elf/bfin.h deleted file mode 100644 index 3c07cd166c8..00000000000 --- a/include/elf/bfin.h +++ /dev/null @@ -1,92 +0,0 @@ -/* Blackfin ELF support for BFD. - Copyright (C) 2005 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., -51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_BFIN_H -#define _ELF_BFIN_H - -#include "elf/reloc-macros.h" - -START_RELOC_NUMBERS (elf_bfin_reloc_type) - RELOC_NUMBER (R_unused0, 0x00) /* relocation type 0 is not defined*/ - RELOC_NUMBER (R_pcrel5m2, 0x01) /*LSETUP part a*/ - RELOC_NUMBER (R_unused1, 0x02) /* relocation type 2 is not defined*/ - RELOC_NUMBER (R_pcrel10, 0x03) /* type 3, 0x00) if cc jump */ - RELOC_NUMBER (R_pcrel12_jump, 0x04) /* type 4, 0x00) jump */ - RELOC_NUMBER (R_rimm16, 0x05) /* type 0x5, 0x00) rN = */ - RELOC_NUMBER (R_luimm16, 0x06) /* # 0x6, 0x00) preg.l= Load imm 16 to lower half */ - RELOC_NUMBER (R_huimm16, 0x07) /* # 0x7, 0x00) preg.h= Load imm 16 to upper half*/ - RELOC_NUMBER (R_pcrel12_jump_s, 0x08) /* # 0x8 jump.s */ - RELOC_NUMBER (R_pcrel24_jump_x, 0x09) /* # 0x9 jump.x */ - RELOC_NUMBER (R_pcrel24, 0x0a) /* # 0xa call , 0x00) not expandable*/ - RELOC_NUMBER (R_unusedb, 0x0b) /* # 0xb not generated */ - RELOC_NUMBER (R_unusedc, 0x0c) /* # 0xc not used */ - RELOC_NUMBER (R_pcrel24_jump_l, 0x0d) /*0xd jump.l */ - RELOC_NUMBER (R_pcrel24_call_x, 0x0e) /* 0xE, 0x00) call.x if is above 24 bit limit call through P1 */ - RELOC_NUMBER (R_var_eq_symb, 0x0f) /* 0xf, 0x00) linker should treat it same as 0x12 */ - RELOC_NUMBER (R_byte_data, 0x10) /* 0x10, 0x00) .byte var = symbol */ - RELOC_NUMBER (R_byte2_data, 0x11) /* 0x11, 0x00) .byte2 var = symbol */ - RELOC_NUMBER (R_byte4_data, 0x12) /* 0x12, 0x00) .byte4 var = symbol and .var var=symbol */ - RELOC_NUMBER (R_pcrel11, 0x13) /* 0x13, 0x00) lsetup part b */ - RELOC_NUMBER (R_BFIN_GOT17M4, 0x14) - RELOC_NUMBER (R_BFIN_GOTHI, 0x15) - RELOC_NUMBER (R_BFIN_GOTLO, 0x16) - RELOC_NUMBER (R_BFIN_FUNCDESC, 0x17) - RELOC_NUMBER (R_BFIN_FUNCDESC_GOT17M4, 0x18) - RELOC_NUMBER (R_BFIN_FUNCDESC_GOTHI, 0x19) - RELOC_NUMBER (R_BFIN_FUNCDESC_GOTLO, 0x1a) - RELOC_NUMBER (R_BFIN_FUNCDESC_VALUE, 0x1b) - RELOC_NUMBER (R_BFIN_FUNCDESC_GOTOFF17M4, 0x1c) - RELOC_NUMBER (R_BFIN_FUNCDESC_GOTOFFHI, 0x1d) - RELOC_NUMBER (R_BFIN_FUNCDESC_GOTOFFLO, 0x1e) - RELOC_NUMBER (R_BFIN_GOTOFF17M4, 0x1f) - RELOC_NUMBER (R_BFIN_GOTOFFHI, 0x20) - RELOC_NUMBER (R_BFIN_GOTOFFLO, 0x21) - - RELOC_NUMBER (R_push, 0xE0) - RELOC_NUMBER (R_const, 0xE1) - RELOC_NUMBER (R_add, 0xE2) - RELOC_NUMBER (R_sub, 0xE3) - RELOC_NUMBER (R_mult, 0xE4) - RELOC_NUMBER (R_div, 0xE5) - RELOC_NUMBER (R_mod, 0xE6) - RELOC_NUMBER (R_lshift, 0xE7) - RELOC_NUMBER (R_rshift, 0xE8) - RELOC_NUMBER (R_and, 0xE9) - RELOC_NUMBER (R_or, 0xEA) - RELOC_NUMBER (R_xor, 0xEB) - RELOC_NUMBER (R_land, 0xEC) - RELOC_NUMBER (R_lor, 0xED) - RELOC_NUMBER (R_len, 0xEE) - RELOC_NUMBER (R_neg, 0xEF) - RELOC_NUMBER (R_comp, 0xF0) - RELOC_NUMBER (R_page, 0xF1) - RELOC_NUMBER (R_hwpage, 0xF2) - RELOC_NUMBER (R_addr, 0xF3) - RELOC_NUMBER (R_pltpc, 0x40) /* PLT gnu only relocation */ - RELOC_NUMBER (R_got, 0x41) /* GOT gnu only relocation */ - RELOC_NUMBER (R_BFIN_GNU_VTINHERIT, 0x42) /* C++, gnu only */ - RELOC_NUMBER (R_BFIN_GNU_VTENTRY, 0x43) /* C++, gnu only */ -END_RELOC_NUMBERS (R_max) - -/* Processor specific flags for the ELF header e_flags field. */ -#define EF_BFIN_PIC 0x00000001 /* -fpic */ -#define EF_BFIN_FDPIC 0x00000002 /* -mfdpic */ - -#define EF_BFIN_PIC_FLAGS (EF_BFIN_PIC | EF_BFIN_FDPIC) -#endif /* _ELF_BFIN_H */ diff --git a/include/elf/common.h b/include/elf/common.h deleted file mode 100644 index 0380a8fd7f9..00000000000 --- a/include/elf/common.h +++ /dev/null @@ -1,769 +0,0 @@ -/* ELF support for BFD. - Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - - Written by Fred Fish @ Cygnus Support, from information published - in "UNIX System V Release 4, Programmers Guide: ANSI C and - Programming Support Tools". - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - - -/* This file is part of ELF support for BFD, and contains the portions - that are common to both the internal and external representations. - For example, ELFMAG0 is the byte 0x7F in both the internal (in-memory) - and external (in-file) representations. */ - -#ifndef _ELF_COMMON_H -#define _ELF_COMMON_H - -/* Fields in e_ident[]. */ - -#define EI_MAG0 0 /* File identification byte 0 index */ -#define ELFMAG0 0x7F /* Magic number byte 0 */ - -#define EI_MAG1 1 /* File identification byte 1 index */ -#define ELFMAG1 'E' /* Magic number byte 1 */ - -#define EI_MAG2 2 /* File identification byte 2 index */ -#define ELFMAG2 'L' /* Magic number byte 2 */ - -#define EI_MAG3 3 /* File identification byte 3 index */ -#define ELFMAG3 'F' /* Magic number byte 3 */ - -#define EI_CLASS 4 /* File class */ -#define ELFCLASSNONE 0 /* Invalid class */ -#define ELFCLASS32 1 /* 32-bit objects */ -#define ELFCLASS64 2 /* 64-bit objects */ - -#define EI_DATA 5 /* Data encoding */ -#define ELFDATANONE 0 /* Invalid data encoding */ -#define ELFDATA2LSB 1 /* 2's complement, little endian */ -#define ELFDATA2MSB 2 /* 2's complement, big endian */ - -#define EI_VERSION 6 /* File version */ - -#define EI_OSABI 7 /* Operating System/ABI indication */ -#define ELFOSABI_NONE 0 /* UNIX System V ABI */ -#define ELFOSABI_HPUX 1 /* HP-UX operating system */ -#define ELFOSABI_NETBSD 2 /* NetBSD */ -#define ELFOSABI_LINUX 3 /* GNU/Linux */ -#define ELFOSABI_HURD 4 /* GNU/Hurd */ -#define ELFOSABI_SOLARIS 6 /* Solaris */ -#define ELFOSABI_AIX 7 /* AIX */ -#define ELFOSABI_IRIX 8 /* IRIX */ -#define ELFOSABI_FREEBSD 9 /* FreeBSD */ -#define ELFOSABI_TRU64 10 /* TRU64 UNIX */ -#define ELFOSABI_MODESTO 11 /* Novell Modesto */ -#define ELFOSABI_OPENBSD 12 /* OpenBSD */ -#define ELFOSABI_OPENVMS 13 /* OpenVMS */ -#define ELFOSABI_NSK 14 /* Hewlett-Packard Non-Stop Kernel */ -#define ELFOSABI_AROS 15 /* Amiga Research OS */ -#define ELFOSABI_ARM 97 /* ARM */ -#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */ - -#define EI_ABIVERSION 8 /* ABI version */ - -#define EI_PAD 9 /* Start of padding bytes */ - - -/* Values for e_type, which identifies the object file type. */ - -#define ET_NONE 0 /* No file type */ -#define ET_REL 1 /* Relocatable file */ -#define ET_EXEC 2 /* Executable file */ -#define ET_DYN 3 /* Shared object file */ -#define ET_CORE 4 /* Core file */ -#define ET_LOOS 0xFE00 /* Operating system-specific */ -#define ET_HIOS 0xFEFF /* Operating system-specific */ -#define ET_LOPROC 0xFF00 /* Processor-specific */ -#define ET_HIPROC 0xFFFF /* Processor-specific */ - -/* Values for e_machine, which identifies the architecture. These numbers - are officially assigned by registry@caldera.com. See below for a list of - ad-hoc numbers used during initial development. */ - -#define EM_NONE 0 /* No machine */ -#define EM_M32 1 /* AT&T WE 32100 */ -#define EM_SPARC 2 /* SUN SPARC */ -#define EM_386 3 /* Intel 80386 */ -#define EM_68K 4 /* Motorola m68k family */ -#define EM_88K 5 /* Motorola m88k family */ -#define EM_486 6 /* Intel 80486 *//* Reserved for future use */ -#define EM_860 7 /* Intel 80860 */ -#define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */ -#define EM_S370 9 /* IBM System/370 */ -#define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian (Oct 4 1999 Draft) Deprecated */ - -#define EM_PARISC 15 /* HPPA */ - -#define EM_VPP550 17 /* Fujitsu VPP500 */ -#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */ -#define EM_960 19 /* Intel 80960 */ -#define EM_PPC 20 /* PowerPC */ -#define EM_PPC64 21 /* 64-bit PowerPC */ -#define EM_S390 22 /* IBM S/390 */ - -#define EM_V800 36 /* NEC V800 series */ -#define EM_FR20 37 /* Fujitsu FR20 */ -#define EM_RH32 38 /* TRW RH32 */ -#define EM_MCORE 39 /* Motorola M*Core */ /* May also be taken by Fujitsu MMA */ -#define EM_RCE 39 /* Old name for MCore */ -#define EM_ARM 40 /* ARM */ -#define EM_OLD_ALPHA 41 /* Digital Alpha */ -#define EM_SH 42 /* Renesas (formerly Hitachi) / SuperH SH */ -#define EM_SPARCV9 43 /* SPARC v9 64-bit */ -#define EM_TRICORE 44 /* Siemens Tricore embedded processor */ -#define EM_ARC 45 /* ARC Cores */ -#define EM_H8_300 46 /* Renesas (formerly Hitachi) H8/300 */ -#define EM_H8_300H 47 /* Renesas (formerly Hitachi) H8/300H */ -#define EM_H8S 48 /* Renesas (formerly Hitachi) H8S */ -#define EM_H8_500 49 /* Renesas (formerly Hitachi) H8/500 */ -#define EM_IA_64 50 /* Intel IA-64 Processor */ -#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 Multimedia Accelerator */ -#define EM_PCP 55 /* Siemens PCP */ -#define EM_NCPU 56 /* Sony nCPU embedded RISC processor */ -#define EM_NDR1 57 /* Denso NDR1 microprocesspr */ -#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 */ -#define EM_X86_64 62 /* Advanced Micro Devices X86-64 processor */ - -#define EM_PDP10 64 /* Digital Equipment Corp. PDP-10 */ -#define EM_PDP11 65 /* Digital Equipment Corp. PDP-11 */ -#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 cpu */ -#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 cpu */ -#define EM_FIREPATH 78 /* Element 14 64-bit DSP processor */ -#define EM_ZSP 79 /* LSI Logic's 16-bit DSP processor */ -#define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */ -#define EM_HUANY 81 /* Harvard's machine-independent format */ -#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 /* Renesas M32R (formerly 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_IP2K 101 /* Ubicom IP2022 micro controller */ -#define EM_CR 103 /* National Semiconductor CompactRISC */ -#define EM_MSP430 105 /* TI msp430 micro controller */ -#define EM_BLACKFIN 106 /* ADI Blackfin */ -#define EM_ALTERA_NIOS2 113 /* Altera Nios II soft-core processor */ -#define EM_CRX 114 /* National Semiconductor CRX */ - -/* If it is necessary to assign new unofficial EM_* values, please pick large - random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision - with official or non-GNU unofficial values. - - NOTE: Do not just increment the most recent number by one. - Somebody else somewhere will do exactly the same thing, and you - will have a collision. Instead, pick a random number. - - Normally, each entity or maintainer responsible for a machine with an - unofficial e_machine number should eventually ask registry@caldera.com for - an officially blessed number to be added to the list above. */ - -/* Old version of Sparc v9, from before the ABI; - This should be removed shortly. */ -#define EM_OLD_SPARCV9 11 - -/* Old version of PowerPC, this should be removed shortly. */ -#define EM_PPC_OLD 17 - -/* picoJava */ -#define EM_PJ_OLD 99 - -/* AVR magic number. Written in the absense of an ABI. */ -#define EM_AVR_OLD 0x1057 - -/* MSP430 magic number. Written in the absense of everything. */ -#define EM_MSP430_OLD 0x1059 - -/* Morpho MT. Written in the absense of an ABI. */ -#define EM_MT 0x2530 - -/* FR30 magic number - no EABI available. */ -#define EM_CYGNUS_FR30 0x3330 - -/* OpenRISC magic number. Written in the absense of an ABI. */ -#define EM_OPENRISC_OLD 0x3426 - -/* DLX magic number. Written in the absense of an ABI. */ -#define EM_DLX 0x5aa5 - -/* FRV magic number - no EABI available??. */ -#define EM_CYGNUS_FRV 0x5441 - -/* Infineon Technologies 16-bit microcontroller with C166-V2 core. */ -#define EM_XC16X 0x4688 - -/* D10V backend magic number. Written in the absence of an ABI. */ -#define EM_CYGNUS_D10V 0x7650 - -/* D30V backend magic number. Written in the absence of an ABI. */ -#define EM_CYGNUS_D30V 0x7676 - -/* Ubicom IP2xxx; Written in the absense of an ABI. */ -#define EM_IP2K_OLD 0x8217 - -/* (Deprecated) Temporary number for the OpenRISC processor. */ -#define EM_OR32 0x8472 - -/* Cygnus PowerPC ELF backend. Written in the absence of an ABI. */ -#define EM_CYGNUS_POWERPC 0x9025 - -/* Alpha backend magic number. Written in the absence of an ABI. */ -#define EM_ALPHA 0x9026 - -/* Cygnus M32R ELF backend. Written in the absence of an ABI. */ -#define EM_CYGNUS_M32R 0x9041 - -/* V850 backend magic number. Written in the absense of an ABI. */ -#define EM_CYGNUS_V850 0x9080 - -/* old S/390 backend magic number. Written in the absence of an ABI. */ -#define EM_S390_OLD 0xa390 - -/* Old, unofficial value for Xtensa. */ -#define EM_XTENSA_OLD 0xabc7 - -#define EM_XSTORMY16 0xad45 - -/* mn10200 and mn10300 backend magic numbers. - Written in the absense of an ABI. */ -#define EM_CYGNUS_MN10300 0xbeef -#define EM_CYGNUS_MN10200 0xdead - -/* Renesas M32C and M16C. */ -#define EM_M32C 0xFEB0 - -/* Vitesse IQ2000. */ -#define EM_IQ2000 0xFEBA - -/* NIOS magic number - no EABI available. */ -#define EM_NIOS32 0xFEBB - -/* See the above comment before you add a new EM_* value here. */ - -/* Values for e_version. */ - -#define EV_NONE 0 /* Invalid ELF version */ -#define EV_CURRENT 1 /* Current version */ - -/* Values for program header, p_type field. */ - -#define PT_NULL 0 /* Program header table entry unused */ -#define PT_LOAD 1 /* Loadable program segment */ -#define PT_DYNAMIC 2 /* Dynamic linking information */ -#define PT_INTERP 3 /* Program interpreter */ -#define PT_NOTE 4 /* Auxiliary information */ -#define PT_SHLIB 5 /* Reserved, unspecified semantics */ -#define PT_PHDR 6 /* Entry for header table itself */ -#define PT_TLS 7 /* Thread local storage segment */ -#define PT_LOOS 0x60000000 /* OS-specific */ -#define PT_HIOS 0x6fffffff /* OS-specific */ -#define PT_LOPROC 0x70000000 /* Processor-specific */ -#define PT_HIPROC 0x7FFFFFFF /* Processor-specific */ - -#define PT_GNU_EH_FRAME (PT_LOOS + 0x474e550) /* Frame unwind information */ -#define PT_SUNW_EH_FRAME PT_GNU_EH_FRAME /* Solaris uses the same value */ -#define PT_GNU_STACK (PT_LOOS + 0x474e551) /* Stack flags */ -#define PT_GNU_RELRO (PT_LOOS + 0x474e552) /* Read-only after relocation */ - -/* Program segment permissions, in program header p_flags field. */ - -#define PF_X (1 << 0) /* Segment is executable */ -#define PF_W (1 << 1) /* Segment is writable */ -#define PF_R (1 << 2) /* Segment is readable */ -/* #define PF_MASKOS 0x0F000000 *//* OS-specific reserved bits */ -#define PF_MASKOS 0x0FF00000 /* New value, Oct 4, 1999 Draft */ -#define PF_MASKPROC 0xF0000000 /* Processor-specific reserved bits */ - -/* Values for section header, sh_type field. */ - -#define SHT_NULL 0 /* Section header table entry unused */ -#define SHT_PROGBITS 1 /* Program specific (private) data */ -#define SHT_SYMTAB 2 /* Link editing symbol table */ -#define SHT_STRTAB 3 /* A string table */ -#define SHT_RELA 4 /* Relocation entries with addends */ -#define SHT_HASH 5 /* A symbol hash table */ -#define SHT_DYNAMIC 6 /* Information for dynamic linking */ -#define SHT_NOTE 7 /* Information that marks file */ -#define SHT_NOBITS 8 /* Section occupies no space in file */ -#define SHT_REL 9 /* Relocation entries, no addends */ -#define SHT_SHLIB 10 /* Reserved, unspecified semantics */ -#define SHT_DYNSYM 11 /* Dynamic linking symbol table */ - -#define SHT_INIT_ARRAY 14 /* Array of ptrs to init functions */ -#define SHT_FINI_ARRAY 15 /* Array of ptrs to finish functions */ -#define SHT_PREINIT_ARRAY 16 /* Array of ptrs to pre-init funcs */ -#define SHT_GROUP 17 /* Section contains a section group */ -#define SHT_SYMTAB_SHNDX 18 /* Indicies for SHN_XINDEX entries */ - -#define SHT_LOOS 0x60000000 /* First of OS specific semantics */ -#define SHT_HIOS 0x6fffffff /* Last of OS specific semantics */ - -#define SHT_GNU_HASH 0x6ffffff6 /* GNU style symbol hash table */ -#define SHT_GNU_LIBLIST 0x6ffffff7 /* List of prelink dependencies */ - -/* The next three section types are defined by Solaris, and are named - SHT_SUNW*. We use them in GNU code, so we also define SHT_GNU* - versions. */ -#define SHT_SUNW_verdef 0x6ffffffd /* Versions defined by file */ -#define SHT_SUNW_verneed 0x6ffffffe /* Versions needed by file */ -#define SHT_SUNW_versym 0x6fffffff /* Symbol versions */ - -#define SHT_GNU_verdef SHT_SUNW_verdef -#define SHT_GNU_verneed SHT_SUNW_verneed -#define SHT_GNU_versym SHT_SUNW_versym - -#define SHT_LOPROC 0x70000000 /* Processor-specific semantics, lo */ -#define SHT_HIPROC 0x7FFFFFFF /* Processor-specific semantics, hi */ -#define SHT_LOUSER 0x80000000 /* Application-specific semantics */ -/* #define SHT_HIUSER 0x8FFFFFFF *//* Application-specific semantics */ -#define SHT_HIUSER 0xFFFFFFFF /* New value, defined in Oct 4, 1999 Draft */ - -/* Values for section header, sh_flags field. */ - -#define SHF_WRITE (1 << 0) /* Writable data during execution */ -#define SHF_ALLOC (1 << 1) /* Occupies memory during execution */ -#define SHF_EXECINSTR (1 << 2) /* Executable machine instructions */ -#define SHF_MERGE (1 << 4) /* Data in this section can be merged */ -#define SHF_STRINGS (1 << 5) /* Contains null terminated character strings */ -#define SHF_INFO_LINK (1 << 6) /* sh_info holds section header table index */ -#define SHF_LINK_ORDER (1 << 7) /* Preserve section ordering when linking */ -#define SHF_OS_NONCONFORMING (1 << 8) /* OS specific processing required */ -#define SHF_GROUP (1 << 9) /* Member of a section group */ -#define SHF_TLS (1 << 10) /* Thread local storage section */ - -/* #define SHF_MASKOS 0x0F000000 *//* OS-specific semantics */ -#define SHF_MASKOS 0x0FF00000 /* New value, Oct 4, 1999 Draft */ -#define SHF_MASKPROC 0xF0000000 /* Processor-specific semantics */ - -/* Values of note segment descriptor types for core files. */ - -#define NT_PRSTATUS 1 /* Contains copy of prstatus struct */ -#define NT_FPREGSET 2 /* Contains copy of fpregset struct */ -#define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */ -#define NT_TASKSTRUCT 4 /* Contains copy of task struct */ -#define NT_AUXV 6 /* Contains copy of Elfxx_auxv_t */ -#define NT_PRXFPREG 0x46e62b7f /* Contains a user_xfpregs_struct; */ - /* note name must be "LINUX". */ - -/* Note segments for core files on dir-style procfs systems. */ - -#define NT_PSTATUS 10 /* Has a struct pstatus */ -#define NT_FPREGS 12 /* Has a struct fpregset */ -#define NT_PSINFO 13 /* Has a struct psinfo */ -#define NT_LWPSTATUS 16 /* Has a struct lwpstatus_t */ -#define NT_LWPSINFO 17 /* Has a struct lwpsinfo_t */ -#define NT_WIN32PSTATUS 18 /* Has a struct win32_pstatus */ - - -/* Note segments for core files on NetBSD systems. Note name - must start with "NetBSD-CORE". */ - -#define NT_NETBSDCORE_PROCINFO 1 /* Has a struct procinfo */ -#define NT_NETBSDCORE_FIRSTMACH 32 /* start of machdep note types */ - - -/* Values of note segment descriptor types for object files. */ - -#define NT_VERSION 1 /* Contains a version string. */ -#define NT_ARCH 2 /* Contains an architecture string. */ - -/* Values for GNU .note.ABI-tag notes. Note name is "GNU". */ - -#define NT_GNU_ABI_TAG 1 -#define GNU_ABI_TAG_LINUX 0 -#define GNU_ABI_TAG_HURD 1 -#define GNU_ABI_TAG_SOLARIS 2 -#define GNU_ABI_TAG_FREEBSD 3 -#define GNU_ABI_TAG_NETBSD 4 - -/* Values for NetBSD .note.netbsd.ident notes. Note name is "NetBSD". */ - -#define NT_NETBSD_IDENT 1 - -/* Values for OpenBSD .note.openbsd.ident notes. Note name is "OpenBSD". */ - -#define NT_OPENBSD_IDENT 1 - -/* Values for FreeBSD .note.ABI-tag notes. Note name is "FreeBSD". */ - -#define NT_FREEBSD_ABI_TAG 1 - -/* These three macros disassemble and assemble a symbol table st_info field, - which contains the symbol binding and symbol type. The STB_ and STT_ - defines identify the binding and type. */ - -#define ELF_ST_BIND(val) (((unsigned int)(val)) >> 4) -#define ELF_ST_TYPE(val) ((val) & 0xF) -#define ELF_ST_INFO(bind,type) (((bind) << 4) + ((type) & 0xF)) - -/* The 64bit and 32bit versions of these macros are identical, but - the ELF spec defines them, so here they are. */ -#define ELF32_ST_BIND ELF_ST_BIND -#define ELF32_ST_TYPE ELF_ST_TYPE -#define ELF32_ST_INFO ELF_ST_INFO -#define ELF64_ST_BIND ELF_ST_BIND -#define ELF64_ST_TYPE ELF_ST_TYPE -#define ELF64_ST_INFO ELF_ST_INFO - -/* This macro disassembles and assembles a symbol's visibility into - the st_other field. The STV_ defines specificy the actual visibility. */ - -#define ELF_ST_VISIBILITY(v) ((v) & 0x3) -/* The remaining bits in the st_other field are not currently used. - They should be set to zero. */ - -#define ELF32_ST_VISIBILITY ELF_ST_VISIBILITY -#define ELF64_ST_VISIBILITY ELF_ST_VISIBILITY - - -#define STN_UNDEF 0 /* Undefined symbol index */ - -#define STB_LOCAL 0 /* Symbol not visible outside obj */ -#define STB_GLOBAL 1 /* Symbol visible outside obj */ -#define STB_WEAK 2 /* Like globals, lower precedence */ -#define STB_LOOS 10 /* OS-specific semantics */ -#define STB_HIOS 12 /* OS-specific semantics */ -#define STB_LOPROC 13 /* Application-specific semantics */ -#define STB_HIPROC 15 /* Application-specific semantics */ - -#define STT_NOTYPE 0 /* Symbol type is unspecified */ -#define STT_OBJECT 1 /* Symbol is a data object */ -#define STT_FUNC 2 /* Symbol is a code object */ -#define STT_SECTION 3 /* Symbol associated with a section */ -#define STT_FILE 4 /* Symbol gives a file name */ -#define STT_COMMON 5 /* An uninitialised common block */ -#define STT_TLS 6 /* Thread local data object */ -#define STT_LOOS 10 /* OS-specific semantics */ -#define STT_HIOS 12 /* OS-specific semantics */ -#define STT_LOPROC 13 /* Application-specific semantics */ -#define STT_HIPROC 15 /* Application-specific semantics */ - -/* Special section indices, which may show up in st_shndx fields, among - other places. */ - -#define SHN_UNDEF 0 /* Undefined section reference */ -#define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */ -#define SHN_LOPROC 0xFF00 /* Begin range of appl-specific */ -#define SHN_HIPROC 0xFF1F /* End range of appl-specific */ -#define SHN_LOOS 0xFF20 /* OS specific semantics, lo */ -#define SHN_HIOS 0xFF3F /* OS specific semantics, hi */ -#define SHN_ABS 0xFFF1 /* Associated symbol is absolute */ -#define SHN_COMMON 0xFFF2 /* Associated symbol is in common */ -#define SHN_XINDEX 0xFFFF /* Section index is held elsewhere */ -#define SHN_HIRESERVE 0xFFFF /* End range of reserved indices */ -#define SHN_BAD ((unsigned) -1) /* Used internally by bfd */ - -/* The following constants control how a symbol may be accessed once it has - become part of an executable or shared library. */ - -#define STV_DEFAULT 0 /* Visibility is specified by binding type */ -#define STV_INTERNAL 1 /* OS specific version of STV_HIDDEN */ -#define STV_HIDDEN 2 /* Can only be seen inside currect component */ -#define STV_PROTECTED 3 /* Treat as STB_LOCAL inside current component */ - -/* Relocation info handling macros. */ - -#define ELF32_R_SYM(i) ((i) >> 8) -#define ELF32_R_TYPE(i) ((i) & 0xff) -#define ELF32_R_INFO(s,t) (((s) << 8) + ((t) & 0xff)) - -#define ELF64_R_SYM(i) ((i) >> 32) -#define ELF64_R_TYPE(i) ((i) & 0xffffffff) -#define ELF64_R_INFO(s,t) (((bfd_vma) (s) << 31 << 1) + (bfd_vma) (t)) - -/* Dynamic section tags. */ - -#define DT_NULL 0 -#define DT_NEEDED 1 -#define DT_PLTRELSZ 2 -#define DT_PLTGOT 3 -#define DT_HASH 4 -#define DT_STRTAB 5 -#define DT_SYMTAB 6 -#define DT_RELA 7 -#define DT_RELASZ 8 -#define DT_RELAENT 9 -#define DT_STRSZ 10 -#define DT_SYMENT 11 -#define DT_INIT 12 -#define DT_FINI 13 -#define DT_SONAME 14 -#define DT_RPATH 15 -#define DT_SYMBOLIC 16 -#define DT_REL 17 -#define DT_RELSZ 18 -#define DT_RELENT 19 -#define DT_PLTREL 20 -#define DT_DEBUG 21 -#define DT_TEXTREL 22 -#define DT_JMPREL 23 -#define DT_BIND_NOW 24 -#define DT_INIT_ARRAY 25 -#define DT_FINI_ARRAY 26 -#define DT_INIT_ARRAYSZ 27 -#define DT_FINI_ARRAYSZ 28 -#define DT_RUNPATH 29 -#define DT_FLAGS 30 -#define DT_ENCODING 31 -#define DT_PREINIT_ARRAY 32 -#define DT_PREINIT_ARRAYSZ 33 - -/* Note, the Oct 4, 1999 draft of the ELF ABI changed the values - for DT_LOOS and DT_HIOS. Some implementations however, use - values outside of the new range (see below). */ -#define OLD_DT_LOOS 0x60000000 -#define DT_LOOS 0x6000000d -#define DT_HIOS 0x6ffff000 -#define OLD_DT_HIOS 0x6fffffff - -#define DT_LOPROC 0x70000000 -#define DT_HIPROC 0x7fffffff - -/* The next four dynamic tags are used on Solaris. We support them - everywhere. Note these values lie outside of the (new) range for - OS specific values. This is a deliberate special case and we - maintain it for backwards compatability. */ -#define DT_VALRNGLO 0x6ffffd00 -#define DT_GNU_PRELINKED 0x6ffffdf5 -#define DT_GNU_CONFLICTSZ 0x6ffffdf6 -#define DT_GNU_LIBLISTSZ 0x6ffffdf7 -#define DT_CHECKSUM 0x6ffffdf8 -#define DT_PLTPADSZ 0x6ffffdf9 -#define DT_MOVEENT 0x6ffffdfa -#define DT_MOVESZ 0x6ffffdfb -#define DT_FEATURE 0x6ffffdfc -#define DT_POSFLAG_1 0x6ffffdfd -#define DT_SYMINSZ 0x6ffffdfe -#define DT_SYMINENT 0x6ffffdff -#define DT_VALRNGHI 0x6ffffdff - -#define DT_ADDRRNGLO 0x6ffffe00 -#define DT_GNU_HASH 0x6ffffef5 -#define DT_TLSDESC_PLT 0x6ffffef6 -#define DT_TLSDESC_GOT 0x6ffffef7 -#define DT_GNU_CONFLICT 0x6ffffef8 -#define DT_GNU_LIBLIST 0x6ffffef9 -#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 - -/* This tag is a GNU extension to the Solaris version scheme. */ -#define DT_VERSYM 0x6ffffff0 - -#define DT_LOPROC 0x70000000 -#define DT_HIPROC 0x7fffffff - -/* These section tags are used on Solaris. We support them - everywhere, and hope they do not conflict. */ - -#define DT_AUXILIARY 0x7ffffffd -#define DT_USED 0x7ffffffe -#define DT_FILTER 0x7fffffff - - -/* Values used in DT_FEATURE .dynamic entry. */ -#define DTF_1_PARINIT 0x00000001 -/* From - - http://docs.sun.com:80/ab2/coll.45.13/LLM/@Ab2PageView/21165?Ab2Lang=C&Ab2Enc=iso-8859-1 - - DTF_1_CONFEXP is the same as DTF_1_PARINIT. It is a typo. The value - defined here is the same as the one in on Solaris 8. */ -#define DTF_1_CONFEXP 0x00000002 - -/* Flag values used in the DT_POSFLAG_1 .dynamic entry. */ -#define DF_P1_LAZYLOAD 0x00000001 -#define DF_P1_GROUPPERM 0x00000002 - -/* Flag value in in the DT_FLAGS_1 .dynamic entry. */ -#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_CONLFAT 0x00002000 - -/* Flag values for the DT_FLAGS entry. */ -#define DF_ORIGIN (1 << 0) -#define DF_SYMBOLIC (1 << 1) -#define DF_TEXTREL (1 << 2) -#define DF_BIND_NOW (1 << 3) -#define DF_STATIC_TLS (1 << 4) - -/* These constants are used for the version number of a Elf32_Verdef - structure. */ - -#define VER_DEF_NONE 0 -#define VER_DEF_CURRENT 1 - -/* These constants appear in the vd_flags field of a Elf32_Verdef - structure. */ - -#define VER_FLG_BASE 0x1 -#define VER_FLG_WEAK 0x2 - -/* These special constants can be found in an Elf32_Versym field. */ - -#define VER_NDX_LOCAL 0 -#define VER_NDX_GLOBAL 1 - -/* These constants are used for the version number of a Elf32_Verneed - structure. */ - -#define VER_NEED_NONE 0 -#define VER_NEED_CURRENT 1 - -/* This flag appears in a Versym structure. It means that the symbol - is hidden, and is only visible with an explicit version number. - This is a GNU extension. */ - -#define VERSYM_HIDDEN 0x8000 - -/* This is the mask for the rest of the Versym information. */ - -#define VERSYM_VERSION 0x7fff - -/* This is a special token which appears as part of a symbol name. It - indictes that the rest of the name is actually the name of a - version node, and is not part of the actual name. This is a GNU - extension. For example, the symbol name `stat@ver2' is taken to - mean the symbol `stat' in version `ver2'. */ - -#define ELF_VER_CHR '@' - -/* Possible values for si_boundto. */ - -#define SYMINFO_BT_SELF 0xffff /* Symbol bound to self */ -#define SYMINFO_BT_PARENT 0xfffe /* Symbol bound to parent */ -#define SYMINFO_BT_LOWRESERVE 0xff00 /* Beginning of reserved entries */ - -/* Possible bitmasks for si_flags. */ - -#define SYMINFO_FLG_DIRECT 0x0001 /* Direct bound symbol */ -#define SYMINFO_FLG_PASSTHRU 0x0002 /* Pass-thru symbol for translator */ -#define SYMINFO_FLG_COPY 0x0004 /* Symbol is a copy-reloc */ -#define SYMINFO_FLG_LAZYLOAD 0x0008 /* Symbol bound to object to be lazy loaded */ - -/* Syminfo version values. */ - -#define SYMINFO_NONE 0 -#define SYMINFO_CURRENT 1 -#define SYMINFO_NUM 2 - -/* Section Group Flags. */ - -#define GRP_COMDAT 0x1 /* A COMDAT group */ - -/* Auxv a_type values. */ - -#define AT_NULL 0 /* End of vector */ -#define AT_IGNORE 1 /* Entry should be ignored */ -#define AT_EXECFD 2 /* File descriptor of program */ -#define AT_PHDR 3 /* Program headers for program */ -#define AT_PHENT 4 /* Size of program header entry */ -#define AT_PHNUM 5 /* Number of program headers */ -#define AT_PAGESZ 6 /* System page size */ -#define AT_BASE 7 /* Base address of interpreter */ -#define AT_FLAGS 8 /* Flags */ -#define AT_ENTRY 9 /* Entry point of program */ -#define AT_NOTELF 10 /* Program is not ELF */ -#define AT_UID 11 /* Real uid */ -#define AT_EUID 12 /* Effective uid */ -#define AT_GID 13 /* Real gid */ -#define AT_EGID 14 /* Effective gid */ -#define AT_CLKTCK 17 /* Frequency of times() */ -#define AT_PLATFORM 15 /* String identifying platform. */ -#define AT_HWCAP 16 /* Machine dependent hints about - processor capabilities. */ -#define AT_FPUCW 18 /* Used FPU control word. */ -#define AT_DCACHEBSIZE 19 /* Data cache block size. */ -#define AT_ICACHEBSIZE 20 /* Instruction cache block size. */ -#define AT_UCACHEBSIZE 21 /* Unified cache block size. */ -#define AT_IGNOREPPC 22 /* Entry should be ignored */ -#define AT_SECURE 23 /* Boolean, was exec setuid-like? */ -/* Pointer to the global system page used for system calls and other - nice things. */ -#define AT_SYSINFO 32 -#define AT_SYSINFO_EHDR 33 /* Pointer to ELF header of system-supplied DSO. */ - -#define AT_SUN_UID 2000 /* Effective user ID. */ -#define AT_SUN_RUID 2001 /* Real user ID. */ -#define AT_SUN_GID 2002 /* Effective group ID. */ -#define AT_SUN_RGID 2003 /* Real group ID. */ -#define AT_SUN_LDELF 2004 /* Dynamic linker's ELF header. */ -#define AT_SUN_LDSHDR 2005 /* Dynamic linker's section headers. */ -#define AT_SUN_LDNAME 2006 /* String giving name of dynamic linker. */ -#define AT_SUN_LPAGESZ 2007 /* Large pagesize. */ -#define AT_SUN_PLATFORM 2008 /* Platform name string. */ -#define AT_SUN_HWCAP 2009 /* Machine dependent hints about - processor capabilities. */ -#define AT_SUN_IFLUSH 2010 /* Should flush icache? */ -#define AT_SUN_CPU 2011 /* CPU name string. */ -#define AT_SUN_EMUL_ENTRY 2012 /* COFF entry point address. */ -#define AT_SUN_EMUL_EXECFD 2013 /* COFF executable file descriptor. */ -#define AT_SUN_EXECNAME 2014 /* Canonicalized file name given to execve. */ -#define AT_SUN_MMU 2015 /* String for name of MMU module. */ -#define AT_SUN_LDDATA 2016 /* Dynamic linker's data segment address. */ - - -#endif /* _ELF_COMMON_H */ diff --git a/include/elf/cr16c.h b/include/elf/cr16c.h deleted file mode 100644 index de66a496a7f..00000000000 --- a/include/elf/cr16c.h +++ /dev/null @@ -1,258 +0,0 @@ -/* CR16C ELF support for BFD. - Copyright 2004 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_CR16C_H -#define _ELF_CR16C_H - -#include "bfd.h" -#include "elf/reloc-macros.h" - -/* Creating indices for reloc_map_index array. */ -START_RELOC_NUMBERS (elf_cr16c_reloc_type) - RELOC_NUMBER (RINDEX_16C_NUM08, 0) - RELOC_NUMBER (RINDEX_16C_NUM08_C, 1) - RELOC_NUMBER (RINDEX_16C_NUM16, 2) - RELOC_NUMBER (RINDEX_16C_NUM16_C, 3) - RELOC_NUMBER (RINDEX_16C_NUM32, 4) - RELOC_NUMBER (RINDEX_16C_NUM32_C, 5) - RELOC_NUMBER (RINDEX_16C_DISP04, 6) - RELOC_NUMBER (RINDEX_16C_DISP04_C, 7) - RELOC_NUMBER (RINDEX_16C_DISP08, 8) - RELOC_NUMBER (RINDEX_16C_DISP08_C, 9) - RELOC_NUMBER (RINDEX_16C_DISP16, 10) - RELOC_NUMBER (RINDEX_16C_DISP16_C, 11) - RELOC_NUMBER (RINDEX_16C_DISP24, 12) - RELOC_NUMBER (RINDEX_16C_DISP24_C, 13) - RELOC_NUMBER (RINDEX_16C_DISP24a, 14) - RELOC_NUMBER (RINDEX_16C_DISP24a_C, 15) - RELOC_NUMBER (RINDEX_16C_REG04, 16) - RELOC_NUMBER (RINDEX_16C_REG04_C, 17) - RELOC_NUMBER (RINDEX_16C_REG04a, 18) - RELOC_NUMBER (RINDEX_16C_REG04a_C, 19) - RELOC_NUMBER (RINDEX_16C_REG14, 20) - RELOC_NUMBER (RINDEX_16C_REG14_C, 21) - RELOC_NUMBER (RINDEX_16C_REG16, 22) - RELOC_NUMBER (RINDEX_16C_REG16_C, 23) - RELOC_NUMBER (RINDEX_16C_REG20, 24) - RELOC_NUMBER (RINDEX_16C_REG20_C, 25) - RELOC_NUMBER (RINDEX_16C_ABS20, 26) - RELOC_NUMBER (RINDEX_16C_ABS20_C, 27) - RELOC_NUMBER (RINDEX_16C_ABS24, 28) - RELOC_NUMBER (RINDEX_16C_ABS24_C, 29) - RELOC_NUMBER (RINDEX_16C_IMM04, 30) - RELOC_NUMBER (RINDEX_16C_IMM04_C, 31) - RELOC_NUMBER (RINDEX_16C_IMM16, 32) - RELOC_NUMBER (RINDEX_16C_IMM16_C, 33) - RELOC_NUMBER (RINDEX_16C_IMM20, 34) - RELOC_NUMBER (RINDEX_16C_IMM20_C, 35) - RELOC_NUMBER (RINDEX_16C_IMM24, 36) - RELOC_NUMBER (RINDEX_16C_IMM24_C, 37) - RELOC_NUMBER (RINDEX_16C_IMM32, 38) - RELOC_NUMBER (RINDEX_16C_IMM32_C, 39) -END_RELOC_NUMBERS (RINDEX_16C_MAX) - -/* CR16C Relocation Types ('cr_reloc_type' entry in the reloc_map structure). - The relocation constant name is determined as follows : - - R_16C_[_C] - - Where : - - is one of the following: - NUM - R_NUMBER mnemonic, - DISP - R_16C_DISPL mnemonic, - REG - R_16C_REGREL mnemonic, - ABS - R_16C_ABS mnemonic, - IMM - R_16C_IMMED mnemonic, - stands for R_S_16C_ - _C means 'code label' and is only added when R_ADDRTYPE subfield - is of type R_CODE_ADDR. */ - -/* The table below shows what the hex digits in the definition of the - relocation type constants correspond to. - ------------------------------------------------------------------ - R_SIZESP R_FORMAT R_RELTO R_ADDRTYPE - ------------------------------------------------------------------ */ -/* R_S_16C_08 R_NUMBER R_ABS R_ADDRESS */ -#define R_16C_NUM08 0X0001 - -/* R_S_16C_08 R_NUMBER R_ABS R_CODE_ADDR */ -#define R_16C_NUM08_C 0X0006 - -/* R_S_16C_16 R_NUMBER R_ABS R_ADDRESS */ -#define R_16C_NUM16 0X1001 - -/* R_S_16C_16 R_NUMBER R_ABS R_CODE_ADDR */ -#define R_16C_NUM16_C 0X1006 - -/* R_S_16C_32 R_NUMBER R_ABS R_ADDRESS */ -#define R_16C_NUM32 0X2001 - -/* R_S_16C_32 R_NUMBER R_ABS R_CODE_ADDR */ -#define R_16C_NUM32_C 0X2006 - -/* R_S_16C_04 R_16C_DISPL R_PCREL R_ADDRESS */ -#define R_16C_DISP04 0X5411 - -/* R_S_16C_04 R_16C_DISPL R_PCREL R_CODE_ADDR */ -#define R_16C_DISP04_C 0X5416 - -/* R_S_16C_08 R_16C_DISPL R_PCREL R_ADDRESS */ -#define R_16C_DISP08 0X0411 - -/* R_S_16C_08 R_16C_DISPL R_PCREL R_CODE_ADDR */ -#define R_16C_DISP08_C 0X0416 - -/* R_S_16C_16 R_16C_DISPL R_PCREL R_ADDRESS */ -#define R_16C_DISP16 0X1411 - -/* R_S_16C_16 R_16C_DISPL R_PCREL R_CODE_ADDR */ -#define R_16C_DISP16_C 0X1416 - -/* R_S_16C_24 R_16C_DISPL R_PCREL R_ADDRESS */ -#define R_16C_DISP24 0X7411 - -/* R_S_16C_24 R_16C_DISPL R_PCREL R_CODE_ADDR */ -#define R_16C_DISP24_C 0X7416 - -/* R_S_16C_24a R_16C_DISPL R_PCREL R_ADDRESS */ -#define R_16C_DISP24a 0X6411 - -/* R_S_16C_24a R_16C_DISPL R_PCREL R_CODE_ADDR */ -#define R_16C_DISP24a_C 0X6416 - -/* R_S_16C_04 R_16C_REGREL R_ABS R_ADDRESS */ -#define R_16C_REG04 0X5201 - -/* R_S_16C_04 R_16C_REGREL R_ABS R_CODE_ADDR */ -#define R_16C_REG04_C 0X5206 - -/* R_S_16C_04_a R_16C_REGREL R_ABS R_ADDRESS */ -#define R_16C_REG04a 0X4201 - -/* R_S_16C_04_a R_16C_REGREL R_ABS R_CODE_ADDR */ -#define R_16C_REG04a_C 0X4206 - -/* R_S_16C_14 R_16C_REGREL R_ABS R_ADDRESS */ -#define R_16C_REG14 0X3201 - -/* R_S_16C_14 R_16C_REGREL R_ABS R_CODE_ADDR */ -#define R_16C_REG14_C 0X3206 - -/* R_S_16C_16 R_16C_REGREL R_ABS R_ADDRESS */ -#define R_16C_REG16 0X1201 - -/* R_S_16C_16 R_16C_REGREL R_ABS R_CODE_ADDR */ -#define R_16C_REG16_C 0X1206 - -/* R_S_16C_20 R_16C_REGREL R_ABS R_ADDRESS */ -#define R_16C_REG20 0X8201 - -/* R_S_16C_20 R_16C_REGREL R_ABS R_CODE_ADDR */ -#define R_16C_REG20_C 0X8206 - -/* R_S_16C_20 R_16C_ABS R_ABS R_ADDRESS */ -#define R_16C_ABS20 0X8101 - -/* R_S_16C_20 R_16C_ABS R_ABS R_CODE_ADDR */ -#define R_16C_ABS20_C 0X8106 - -/* R_S_16C_24 R_16C_ABS R_ABS R_ADDRESS */ -#define R_16C_ABS24 0X7101 - -/* R_S_16C_24 R_16C_ABS R_ABS R_CODE_ADDR */ -#define R_16C_ABS24_C 0X7106 - -/* R_S_16C_04 R_16C_IMMED R_ABS R_ADDRESS */ -#define R_16C_IMM04 0X5301 - -/* R_S_16C_04 R_16C_IMMED R_ABS R_CODE_ADDR */ -#define R_16C_IMM04_C 0X5306 - -/* R_S_16C_16 R_16C_IMMED R_ABS R_ADDRESS */ -#define R_16C_IMM16 0X1301 - -/* R_S_16C_16 R_16C_IMMED R_ABS R_CODE_ADDR */ -#define R_16C_IMM16_C 0X1306 - -/* R_S_16C_20 R_16C_IMMED R_ABS R_ADDRESS */ -#define R_16C_IMM20 0X8301 - -/* R_S_16C_20 R_16C_IMMED R_ABS R_CODE_ADDR */ -#define R_16C_IMM20_C 0X8306 - -/* R_S_16C_24 R_16C_IMMED R_ABS R_ADDRESS */ -#define R_16C_IMM24 0X7301 - -/* R_S_16C_24 R_16C_IMMED R_ABS R_CODE_ADDR */ -#define R_16C_IMM24_C 0X7306 - -/* R_S_16C_32 R_16C_IMMED R_ABS R_ADDRESS */ -#define R_16C_IMM32 0X2301 - -/* R_S_16C_32 R_16C_IMMED R_ABS R_CODE_ADDR */ -#define R_16C_IMM32_C 0X2306 - - -/* Relocation item type. */ -#define R_ADDRTYPE 0x000f -#define R_ADDRESS 0x0001 /* Take address of symbol. */ -#define R_CODE_ADDR 0x0006 /* Take address of symbol divided by 2. */ - -/* Relocation action. */ -#define R_RELTO 0x00f0 -#define R_ABS 0x0000 /* Keep symbol's address as such. */ -#define R_PCREL 0x0010 /* Subtract the pc address of hole. */ - -/* Relocation item data format. */ -#define R_FORMAT 0x0f00 -#define R_NUMBER 0x0000 /* Retain as two's complement value. */ -#define R_16C_DISPL 0x0400 /* CR16C displacement type. */ -#define R_16C_ABS 0x0100 /* CR16C absolute type. */ -#define R_16C_REGREL 0x0200 /* CR16C register-relative type. */ -#define R_16C_IMMED 0x0300 /* CR16C immediate type. */ - -/* Relocation item size. */ -#define R_SIZESP 0xf000 -#define R_S_16C_04 0x5000 -#define R_S_16C_04_a 0x4000 -#define R_S_16C_08 0x0000 -#define R_S_16C_14 0x3000 -#define R_S_16C_16 0x1000 -#define R_S_16C_20 0x8000 -#define R_S_16C_24_a 0x6000 -#define R_S_16C_24 0x7000 -#define R_S_16C_32 0x2000 - - -/* Processor specific section indices. These sections do not actually - exist. Symbols with a st_shndx field corresponding to one of these - values have a special meaning. */ - -/* Far common symbol. */ -#define SHN_CR16C_FCOMMON 0xff00 -#define SHN_CR16C_NCOMMON 0xff01 - -typedef struct reloc_map -{ - unsigned short cr_reloc_type; /* CR relocation type. */ - bfd_reloc_code_real_type bfd_reloc_enum; /* BFD relocation enum. */ -} RELOC_MAP; - -#endif /* _ELF_CR16C_H */ diff --git a/include/elf/cris.h b/include/elf/cris.h deleted file mode 100644 index 8225baa414a..00000000000 --- a/include/elf/cris.h +++ /dev/null @@ -1,113 +0,0 @@ -/* CRIS ELF support for BFD. - Copyright 2000, 2001, 2004 Free Software Foundation, Inc. - Contributed by Axis Communications AB, Lund, Sweden. - Written by Hans-Peter Nilsson. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., -51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_CRIS_H -#define _ELF_CRIS_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_cris_reloc_type) - RELOC_NUMBER (R_CRIS_NONE, 0) - RELOC_NUMBER (R_CRIS_8, 1) - RELOC_NUMBER (R_CRIS_16, 2) - RELOC_NUMBER (R_CRIS_32, 3) - - /* The "PC" position is the location right after the relocation. */ - RELOC_NUMBER (R_CRIS_8_PCREL, 4) - RELOC_NUMBER (R_CRIS_16_PCREL, 5) - RELOC_NUMBER (R_CRIS_32_PCREL, 6) - - RELOC_NUMBER (R_CRIS_GNU_VTINHERIT, 7) - RELOC_NUMBER (R_CRIS_GNU_VTENTRY, 8) - - /* Copy contents at dynlinking. Generated by the linker. - The BFD equivalent is BFD_RELOC_CRIS_COPY. */ - RELOC_NUMBER (R_CRIS_COPY, 9) - - /* Create GOT entry. Generated by the linker. - The BFD equivalent is BFD_RELOC_CRIS_GLOB_DAT. */ - RELOC_NUMBER (R_CRIS_GLOB_DAT, 10) - - /* Create PLT entry. Generated by the linker. - The BFD equivalent is BFD_RELOC_CRIS_JUMP_SLOT. */ - RELOC_NUMBER (R_CRIS_JUMP_SLOT, 11) - - /* Adjust by program base. Generated by the linker. - The BFD equivalent is BFD_RELOC_CRIS_RELATIVE. */ - RELOC_NUMBER (R_CRIS_RELATIVE, 12) - - /* A 16-bit offset to entry in GOT and request to create GOT entry for - that symbol. - The BFD equivalent is BFD_RELOC_CRIS_16_GOT. */ - RELOC_NUMBER (R_CRIS_16_GOT, 13) - - /* A 32-bit offset to entry in GOT and request to create GOT entry for - that symbol. - The BFD equivalent is BFD_RELOC_CRIS_32_GOT. */ - RELOC_NUMBER (R_CRIS_32_GOT, 14) - - /* A 16-bit offset to entry in PLT part of GOT and request to create PLT - entry for that symbol. - The BFD equivalent is BFD_RELOC_CRIS_16_GOTPLT. */ - RELOC_NUMBER (R_CRIS_16_GOTPLT, 15) - - /* A 32-bit offset to entry in PLT part of GOT and request to create PLT - entry for that symbol. - The BFD equivalent is BFD_RELOC_CRIS_32_GOTPLT. */ - RELOC_NUMBER (R_CRIS_32_GOTPLT, 16) - - /* A 32-bit offset from GOT to (local) symbol: no GOT entry should be - necessary. - The BFD equivalent is BFD_RELOC_CRIS_32_GOTREL. */ - RELOC_NUMBER (R_CRIS_32_GOTREL, 17) - - /* A 32-bit offset from GOT to entry for this symbol in PLT and request - to create PLT entry for symbol. - The BFD equivalent is BFD_RELOC_CRIS_32_GOTREL. */ - RELOC_NUMBER (R_CRIS_32_PLT_GOTREL, 18) - - /* A 32-bit offset from location after this relocation (addend specifies - offset) to entry for this symbol in PLT and request to create PLT - entry for symbol. - The BFD equivalent is BFD_RELOC_CRIS_32_PLT_PCREL. */ - RELOC_NUMBER (R_CRIS_32_PLT_PCREL, 19) - - /* No other relocs must be visible outside the assembler. */ - -END_RELOC_NUMBERS (R_CRIS_max) - -/* User symbols in this file have a leading underscore. */ -#define EF_CRIS_UNDERSCORE 0x00000001 - -/* This is a mask for different incompatible machine variants. */ -#define EF_CRIS_VARIANT_MASK 0x0000000e - -/* Variant 0; may contain v0..10 object. */ -#define EF_CRIS_VARIANT_ANY_V0_V10 0x00000000 - -/* Variant 1; contains v32 object. */ -#define EF_CRIS_VARIANT_V32 0x00000002 - -/* Variant 2; contains object compatible with v32 and v10. */ -#define EF_CRIS_VARIANT_COMMON_V10_V32 0x00000004 - -#endif /* _ELF_CRIS_H */ diff --git a/include/elf/crx.h b/include/elf/crx.h deleted file mode 100644 index 4893d48d3b4..00000000000 --- a/include/elf/crx.h +++ /dev/null @@ -1,53 +0,0 @@ -/* CRX ELF support for BFD. - Copyright 2004 Free Software Foundation, Inc. - Contributed by Tomer Levi, NSC, Israel. - Originally written for GAS 2.12 by Tomer Levi, NSC, Israel. - Updates, BFDizing, GNUifying and ELF support by Tomer Levi. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_CRX_H -#define _ELF_CRX_H - -#include "elf/reloc-macros.h" - -/* Creating indices for reloc_map_index array. */ -START_RELOC_NUMBERS(elf_crx_reloc_type) - RELOC_NUMBER (R_CRX_NONE, 0) - RELOC_NUMBER (R_CRX_REL4, 1) - RELOC_NUMBER (R_CRX_REL8, 2) - RELOC_NUMBER (R_CRX_REL8_CMP, 3) - RELOC_NUMBER (R_CRX_REL16, 4) - RELOC_NUMBER (R_CRX_REL24, 5) - RELOC_NUMBER (R_CRX_REL32, 6) - RELOC_NUMBER (R_CRX_REGREL12, 7) - RELOC_NUMBER (R_CRX_REGREL22, 8) - RELOC_NUMBER (R_CRX_REGREL28, 9) - RELOC_NUMBER (R_CRX_REGREL32, 10) - RELOC_NUMBER (R_CRX_ABS16, 11) - RELOC_NUMBER (R_CRX_ABS32, 12) - RELOC_NUMBER (R_CRX_NUM8, 13) - RELOC_NUMBER (R_CRX_NUM16, 14) - RELOC_NUMBER (R_CRX_NUM32, 15) - RELOC_NUMBER (R_CRX_IMM16, 16) - RELOC_NUMBER (R_CRX_IMM32, 17) - RELOC_NUMBER (R_CRX_SWITCH8, 18) - RELOC_NUMBER (R_CRX_SWITCH16, 19) - RELOC_NUMBER (R_CRX_SWITCH32, 20) -END_RELOC_NUMBERS(R_CRX_MAX) - -#endif /* _ELF_CRX_H */ diff --git a/include/elf/d10v.h b/include/elf/d10v.h deleted file mode 100644 index bc32d8e1ff2..00000000000 --- a/include/elf/d10v.h +++ /dev/null @@ -1,38 +0,0 @@ -/* d10v ELF support for BFD. - Copyright 1998, 2000 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_D10V_H -#define _ELF_D10V_H - -#include "elf/reloc-macros.h" - -/* Relocation types. */ -START_RELOC_NUMBERS (elf_d10v_reloc_type) - RELOC_NUMBER (R_D10V_NONE, 0) - RELOC_NUMBER (R_D10V_10_PCREL_R, 1) - RELOC_NUMBER (R_D10V_10_PCREL_L, 2) - RELOC_NUMBER (R_D10V_16, 3) - RELOC_NUMBER (R_D10V_18, 4) - RELOC_NUMBER (R_D10V_18_PCREL, 5) - RELOC_NUMBER (R_D10V_32, 6) - RELOC_NUMBER (R_D10V_GNU_VTINHERIT, 7) - RELOC_NUMBER (R_D10V_GNU_VTENTRY, 8) -END_RELOC_NUMBERS (R_D10V_max) - -#endif diff --git a/include/elf/d30v.h b/include/elf/d30v.h deleted file mode 100644 index 8483a785821..00000000000 --- a/include/elf/d30v.h +++ /dev/null @@ -1,42 +0,0 @@ -/* d30v ELF support for BFD. - Copyright 1998, 2000 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_D30V_H -#define _ELF_D30V_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_d30v_reloc_type) - RELOC_NUMBER (R_D30V_NONE, 0) - RELOC_NUMBER (R_D30V_6, 1) - RELOC_NUMBER (R_D30V_9_PCREL, 2) - RELOC_NUMBER (R_D30V_9_PCREL_R, 3) - RELOC_NUMBER (R_D30V_15, 4) - RELOC_NUMBER (R_D30V_15_PCREL, 5) - RELOC_NUMBER (R_D30V_15_PCREL_R, 6) - RELOC_NUMBER (R_D30V_21, 7) - RELOC_NUMBER (R_D30V_21_PCREL, 8) - RELOC_NUMBER (R_D30V_21_PCREL_R, 9) - RELOC_NUMBER (R_D30V_32, 10) - RELOC_NUMBER (R_D30V_32_PCREL, 11) - RELOC_NUMBER (R_D30V_32_NORMAL, 12) -END_RELOC_NUMBERS (R_D30V_max) - -#endif diff --git a/include/elf/dlx.h b/include/elf/dlx.h deleted file mode 100644 index eea5b80d607..00000000000 --- a/include/elf/dlx.h +++ /dev/null @@ -1,53 +0,0 @@ -/* DLX support for BFD. - Copyright 2002 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_DLX_H -#define _ELF_DLX_H - -#include "elf/reloc-macros.h" - -#if 0 -START_RELOC_NUMBERS (elf_dlx_reloc_type) - RELOC_NUMBER (R_DLX_NONE, 0) - RELOC_NUMBER (R_DLX_RELOC_16, 1) - RELOC_NUMBER (R_DLX_RELOC_26, 2) - RELOC_NUMBER (R_DLX_RELOC_32, 3) - RELOC_NUMBER (R_DLX_GNU_VTINHERIT, 4) - RELOC_NUMBER (R_DLX_GNU_VTENTRY, 5) - RELOC_NUMBER (R_DLX_RELOC_16_HI, 6) - RELOC_NUMBER (R_DLX_RELOC_16_LO, 7) - RELOC_NUMBER (R_DLX_RELOC_16_PCREL, 8) - RELOC_NUMBER (R_DLX_RELOC_26_PCREL, 9) -END_RELOC_NUMBERS (R_DLX_max) -#else -START_RELOC_NUMBERS (elf_dlx_reloc_type) - RELOC_NUMBER (R_DLX_NONE, 0) - RELOC_NUMBER (R_DLX_RELOC_8, 1) - RELOC_NUMBER (R_DLX_RELOC_16, 2) - RELOC_NUMBER (R_DLX_RELOC_32, 3) - RELOC_NUMBER (R_DLX_GNU_VTINHERIT, 4) - RELOC_NUMBER (R_DLX_GNU_VTENTRY, 5) - RELOC_NUMBER (R_DLX_RELOC_16_HI, 6) - RELOC_NUMBER (R_DLX_RELOC_16_LO, 7) - RELOC_NUMBER (R_DLX_RELOC_16_PCREL, 8) - RELOC_NUMBER (R_DLX_RELOC_26_PCREL, 9) -END_RELOC_NUMBERS (R_DLX_max) -#endif /* 0 */ - -#endif /* _ELF_DLX_H */ diff --git a/include/elf/dwarf.h b/include/elf/dwarf.h deleted file mode 100644 index 6f1bca37039..00000000000 --- a/include/elf/dwarf.h +++ /dev/null @@ -1,324 +0,0 @@ -/* Declarations and definitions of codes relating to the DWARF symbolic - debugging information format. - - Written by Ron Guilmette (rfg@netcom.com) - -Copyright 1992, 1993, 1995, 1999, 2005 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC 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, or (at your option) any later -version. - -GCC 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 GCC; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA -02110-1301, USA. */ - -/* This file is derived from the DWARF specification (a public document) - Revision 1.0.1 (April 8, 1992) developed by the UNIX International - Programming Languages Special Interest Group (UI/PLSIG) and distributed - by UNIX International. Copies of this specification are available from - UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. -*/ - -#ifndef _ELF_DWARF_H -#define _ELF_DWARF_H - -/* Tag names and codes. */ - -enum dwarf_tag { - TAG_padding = 0x0000, - TAG_array_type = 0x0001, - TAG_class_type = 0x0002, - TAG_entry_point = 0x0003, - TAG_enumeration_type = 0x0004, - TAG_formal_parameter = 0x0005, - TAG_global_subroutine = 0x0006, - TAG_global_variable = 0x0007, - /* 0x0008 -- reserved */ - /* 0x0009 -- reserved */ - TAG_label = 0x000a, - TAG_lexical_block = 0x000b, - TAG_local_variable = 0x000c, - TAG_member = 0x000d, - /* 0x000e -- reserved */ - TAG_pointer_type = 0x000f, - TAG_reference_type = 0x0010, - TAG_compile_unit = 0x0011, - TAG_string_type = 0x0012, - TAG_structure_type = 0x0013, - TAG_subroutine = 0x0014, - TAG_subroutine_type = 0x0015, - TAG_typedef = 0x0016, - TAG_union_type = 0x0017, - TAG_unspecified_parameters = 0x0018, - TAG_variant = 0x0019, - TAG_common_block = 0x001a, - TAG_common_inclusion = 0x001b, - TAG_inheritance = 0x001c, - TAG_inlined_subroutine = 0x001d, - TAG_module = 0x001e, - TAG_ptr_to_member_type = 0x001f, - TAG_set_type = 0x0020, - TAG_subrange_type = 0x0021, - TAG_with_stmt = 0x0022, - - /* GNU extensions */ - - TAG_format_label = 0x8000, /* for FORTRAN 77 and Fortran 90 */ - TAG_namelist = 0x8001, /* For Fortran 90 */ - TAG_function_template = 0x8002, /* for C++ */ - TAG_class_template = 0x8003 /* for C++ */ -}; - -#define TAG_lo_user 0x8000 /* implementation-defined range start */ -#define TAG_hi_user 0xffff /* implementation-defined range end */ -#define TAG_source_file TAG_compile_unit /* for backward compatibility */ - -/* Form names and codes. */ - -enum dwarf_form { - FORM_ADDR = 0x1, - FORM_REF = 0x2, - FORM_BLOCK2 = 0x3, - FORM_BLOCK4 = 0x4, - FORM_DATA2 = 0x5, - FORM_DATA4 = 0x6, - FORM_DATA8 = 0x7, - FORM_STRING = 0x8 -}; - -/* Attribute names and codes. */ - -enum dwarf_attribute { - AT_sibling = (0x0010|FORM_REF), - AT_location = (0x0020|FORM_BLOCK2), - AT_name = (0x0030|FORM_STRING), - AT_fund_type = (0x0050|FORM_DATA2), - AT_mod_fund_type = (0x0060|FORM_BLOCK2), - AT_user_def_type = (0x0070|FORM_REF), - AT_mod_u_d_type = (0x0080|FORM_BLOCK2), - AT_ordering = (0x0090|FORM_DATA2), - AT_subscr_data = (0x00a0|FORM_BLOCK2), - AT_byte_size = (0x00b0|FORM_DATA4), - AT_bit_offset = (0x00c0|FORM_DATA2), - AT_bit_size = (0x00d0|FORM_DATA4), - /* (0x00e0|FORM_xxxx) -- reserved */ - AT_element_list = (0x00f0|FORM_BLOCK4), - AT_stmt_list = (0x0100|FORM_DATA4), - AT_low_pc = (0x0110|FORM_ADDR), - AT_high_pc = (0x0120|FORM_ADDR), - AT_language = (0x0130|FORM_DATA4), - AT_member = (0x0140|FORM_REF), - AT_discr = (0x0150|FORM_REF), - AT_discr_value = (0x0160|FORM_BLOCK2), - /* (0x0170|FORM_xxxx) -- reserved */ - /* (0x0180|FORM_xxxx) -- reserved */ - AT_string_length = (0x0190|FORM_BLOCK2), - AT_common_reference = (0x01a0|FORM_REF), - AT_comp_dir = (0x01b0|FORM_STRING), - AT_const_value_string = (0x01c0|FORM_STRING), - AT_const_value_data2 = (0x01c0|FORM_DATA2), - AT_const_value_data4 = (0x01c0|FORM_DATA4), - AT_const_value_data8 = (0x01c0|FORM_DATA8), - AT_const_value_block2 = (0x01c0|FORM_BLOCK2), - AT_const_value_block4 = (0x01c0|FORM_BLOCK4), - AT_containing_type = (0x01d0|FORM_REF), - AT_default_value_addr = (0x01e0|FORM_ADDR), - AT_default_value_data2 = (0x01e0|FORM_DATA2), - AT_default_value_data4 = (0x01e0|FORM_DATA4), - AT_default_value_data8 = (0x01e0|FORM_DATA8), - AT_default_value_string = (0x01e0|FORM_STRING), - AT_friends = (0x01f0|FORM_BLOCK2), - AT_inline = (0x0200|FORM_STRING), - AT_is_optional = (0x0210|FORM_STRING), - AT_lower_bound_ref = (0x0220|FORM_REF), - AT_lower_bound_data2 = (0x0220|FORM_DATA2), - AT_lower_bound_data4 = (0x0220|FORM_DATA4), - AT_lower_bound_data8 = (0x0220|FORM_DATA8), - AT_private = (0x0240|FORM_STRING), - AT_producer = (0x0250|FORM_STRING), - AT_program = (0x0230|FORM_STRING), - AT_protected = (0x0260|FORM_STRING), - AT_prototyped = (0x0270|FORM_STRING), - AT_public = (0x0280|FORM_STRING), - AT_pure_virtual = (0x0290|FORM_STRING), - AT_return_addr = (0x02a0|FORM_BLOCK2), - AT_abstract_origin = (0x02b0|FORM_REF), - AT_start_scope = (0x02c0|FORM_DATA4), - AT_stride_size = (0x02e0|FORM_DATA4), - AT_upper_bound_ref = (0x02f0|FORM_REF), - AT_upper_bound_data2 = (0x02f0|FORM_DATA2), - AT_upper_bound_data4 = (0x02f0|FORM_DATA4), - AT_upper_bound_data8 = (0x02f0|FORM_DATA8), - AT_virtual = (0x0300|FORM_STRING), - - /* GNU extensions. */ - - AT_sf_names = (0x8000|FORM_DATA4), - AT_src_info = (0x8010|FORM_DATA4), - AT_mac_info = (0x8020|FORM_DATA4), - AT_src_coords = (0x8030|FORM_DATA4), - AT_body_begin = (0x8040|FORM_ADDR), - AT_body_end = (0x8050|FORM_ADDR) -}; - -#define AT_lo_user 0x2000 /* implementation-defined range start */ -#define AT_hi_user 0x3ff0 /* implementation-defined range end */ - -/* Location atom names and codes. */ - -enum dwarf_location_atom { - OP_REG = 0x01, - OP_BASEREG = 0x02, - OP_ADDR = 0x03, - OP_CONST = 0x04, - OP_DEREF2 = 0x05, - OP_DEREF4 = 0x06, - OP_ADD = 0x07, - - /* GNU extensions. */ - - OP_MULT = 0x80 -}; - -#define OP_LO_USER 0x80 /* implementation-defined range start */ -#define OP_HI_USER 0xff /* implementation-defined range end */ - -/* Fundamental type names and codes. */ - -enum dwarf_fundamental_type { - FT_char = 0x0001, - FT_signed_char = 0x0002, - FT_unsigned_char = 0x0003, - FT_short = 0x0004, - FT_signed_short = 0x0005, - FT_unsigned_short = 0x0006, - FT_integer = 0x0007, - FT_signed_integer = 0x0008, - FT_unsigned_integer = 0x0009, - FT_long = 0x000a, - FT_signed_long = 0x000b, - FT_unsigned_long = 0x000c, - FT_pointer = 0x000d, /* an alias for (void *) */ - FT_float = 0x000e, - FT_dbl_prec_float = 0x000f, - FT_ext_prec_float = 0x0010, /* breaks "classic" svr4 SDB */ - FT_complex = 0x0011, /* breaks "classic" svr4 SDB */ - FT_dbl_prec_complex = 0x0012, /* breaks "classic" svr4 SDB */ - /* 0x0013 -- reserved */ - FT_void = 0x0014, - FT_boolean = 0x0015, /* breaks "classic" svr4 SDB */ - FT_ext_prec_complex = 0x0016, /* breaks "classic" svr4 SDB */ - FT_label = 0x0017, - - /* GNU extensions - The low order byte must indicate the size (in bytes) for the type. - All of these types will probably break "classic" svr4 SDB. */ - - FT_long_long = 0x8008, - FT_signed_long_long = 0x8108, - FT_unsigned_long_long = 0x8208, - - FT_int8 = 0x9001, - FT_signed_int8 = 0x9101, - FT_unsigned_int8 = 0x9201, - FT_int16 = 0x9302, - FT_signed_int16 = 0x9402, - FT_unsigned_int16 = 0x9502, - FT_int32 = 0x9604, - FT_signed_int32 = 0x9704, - FT_unsigned_int32 = 0x9804, - FT_int64 = 0x9908, - FT_signed_int64 = 0x9a08, - FT_unsigned_int64 = 0x9b08, - FT_int128 = 0x9c10, - FT_signed_int128 = 0x9d10, - FT_unsigned_int128 = 0x9e10, - - FT_real32 = 0xa004, - FT_real64 = 0xa108, - FT_real96 = 0xa20c, - FT_real128 = 0xa310 -}; - -#define FT_lo_user 0x8000 /* implementation-defined range start */ -#define FT_hi_user 0xffff /* implementation defined range end */ - -/* Type modifier names and codes. */ - -enum dwarf_type_modifier { - MOD_pointer_to = 0x01, - MOD_reference_to = 0x02, - MOD_const = 0x03, - MOD_volatile = 0x04 -}; - -#define MOD_lo_user 0x80 /* implementation-defined range start */ -#define MOD_hi_user 0xff /* implementation-defined range end */ - -/* Array ordering names and codes. */ - -enum dwarf_array_dim_ordering { - ORD_row_major = 0, - ORD_col_major = 1 -}; - -/* Array subscript format names and codes. */ - -enum dwarf_subscr_data_formats { - FMT_FT_C_C = 0x0, - FMT_FT_C_X = 0x1, - FMT_FT_X_C = 0x2, - FMT_FT_X_X = 0x3, - FMT_UT_C_C = 0x4, - FMT_UT_C_X = 0x5, - FMT_UT_X_C = 0x6, - FMT_UT_X_X = 0x7, - FMT_ET = 0x8 -}; - -/* Derived from above for ease of use. */ - -#define FMT_CODE(_FUNDAMENTAL_TYPE_P, _LB_CONST_P, _UB_CONST_P) \ - (((_FUNDAMENTAL_TYPE_P) ? 0 : 4) \ - | ((_LB_CONST_P) ? 0 : 2) \ - | ((_UB_CONST_P) ? 0 : 1)) - -/* Source language names and codes. */ - -enum dwarf_source_language { - LANG_C89 = 0x00000001, - LANG_C = 0x00000002, - LANG_ADA83 = 0x00000003, - LANG_C_PLUS_PLUS = 0x00000004, - LANG_COBOL74 = 0x00000005, - LANG_COBOL85 = 0x00000006, - LANG_FORTRAN77 = 0x00000007, - LANG_FORTRAN90 = 0x00000008, - LANG_PASCAL83 = 0x00000009, - LANG_MODULA2 = 0x0000000a, - LANG_JAVA = 0x0000000b -}; - -#define LANG_lo_user 0x00008000 /* implementation-defined range start */ -#define LANG_hi_user 0x0000ffff /* implementation-defined range end */ - -/* Names and codes for GNU "macinfo" extension. */ - -enum dwarf_macinfo_record_type { - MACINFO_start = 's', - MACINFO_resume = 'r', - MACINFO_define = 'd', - MACINFO_undef = 'u' -}; - -#endif /* _ELF_DWARF_H */ diff --git a/include/elf/dwarf2.h b/include/elf/dwarf2.h deleted file mode 100644 index 264952af139..00000000000 --- a/include/elf/dwarf2.h +++ /dev/null @@ -1,836 +0,0 @@ -/* Declarations and definitions of codes relating to the DWARF2 and - DWARF3 symbolic debugging information formats. - Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002, - 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - Written by Gary Funck (gary@intrepid.com) The Ada Joint Program - Office (AJPO), Florida State University and Silicon Graphics Inc. - provided support for this effort -- June 21, 1995. - - Derived from the DWARF 1 implementation written by Ron Guilmette - (rfg@netcom.com), November 1990. - - This file is part of GCC. - - GCC 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, or (at your option) any later - version. - - GCC 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 GCC; see the file COPYING. If not, write to the Free - Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA - 02110-1301, USA. */ - -/* This file is derived from the DWARF specification (a public document) - Revision 2.0.0 (July 27, 1993) developed by the UNIX International - Programming Languages Special Interest Group (UI/PLSIG) and distributed - by UNIX International. Copies of this specification are available from - UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. - - This file also now contains definitions from the DWARF 3 specification. */ - -/* This file is shared between GCC and GDB, and should not contain - prototypes. */ - -#ifndef _ELF_DWARF2_H -#define _ELF_DWARF2_H - -/* Structure found in the .debug_line section. */ -typedef struct -{ - unsigned char li_length [4]; - unsigned char li_version [2]; - unsigned char li_prologue_length [4]; - unsigned char li_min_insn_length [1]; - unsigned char li_default_is_stmt [1]; - unsigned char li_line_base [1]; - unsigned char li_line_range [1]; - unsigned char li_opcode_base [1]; -} -DWARF2_External_LineInfo; - -typedef struct -{ - unsigned long li_length; - unsigned short li_version; - unsigned int li_prologue_length; - unsigned char li_min_insn_length; - unsigned char li_default_is_stmt; - int li_line_base; - unsigned char li_line_range; - unsigned char li_opcode_base; -} -DWARF2_Internal_LineInfo; - -/* Structure found in .debug_pubnames section. */ -typedef struct -{ - unsigned char pn_length [4]; - unsigned char pn_version [2]; - unsigned char pn_offset [4]; - unsigned char pn_size [4]; -} -DWARF2_External_PubNames; - -typedef struct -{ - unsigned long pn_length; - unsigned short pn_version; - unsigned long pn_offset; - unsigned long pn_size; -} -DWARF2_Internal_PubNames; - -/* Structure found in .debug_info section. */ -typedef struct -{ - unsigned char cu_length [4]; - unsigned char cu_version [2]; - unsigned char cu_abbrev_offset [4]; - unsigned char cu_pointer_size [1]; -} -DWARF2_External_CompUnit; - -typedef struct -{ - unsigned long cu_length; - unsigned short cu_version; - unsigned long cu_abbrev_offset; - unsigned char cu_pointer_size; -} -DWARF2_Internal_CompUnit; - -typedef struct -{ - unsigned char ar_length [4]; - unsigned char ar_version [2]; - unsigned char ar_info_offset [4]; - unsigned char ar_pointer_size [1]; - unsigned char ar_segment_size [1]; -} -DWARF2_External_ARange; - -typedef struct -{ - unsigned long ar_length; - unsigned short ar_version; - unsigned long ar_info_offset; - unsigned char ar_pointer_size; - unsigned char ar_segment_size; -} -DWARF2_Internal_ARange; - - -/* Tag names and codes. */ -enum dwarf_tag - { - DW_TAG_padding = 0x00, - DW_TAG_array_type = 0x01, - DW_TAG_class_type = 0x02, - DW_TAG_entry_point = 0x03, - DW_TAG_enumeration_type = 0x04, - DW_TAG_formal_parameter = 0x05, - DW_TAG_imported_declaration = 0x08, - DW_TAG_label = 0x0a, - DW_TAG_lexical_block = 0x0b, - DW_TAG_member = 0x0d, - DW_TAG_pointer_type = 0x0f, - DW_TAG_reference_type = 0x10, - DW_TAG_compile_unit = 0x11, - DW_TAG_string_type = 0x12, - DW_TAG_structure_type = 0x13, - DW_TAG_subroutine_type = 0x15, - DW_TAG_typedef = 0x16, - DW_TAG_union_type = 0x17, - DW_TAG_unspecified_parameters = 0x18, - DW_TAG_variant = 0x19, - DW_TAG_common_block = 0x1a, - DW_TAG_common_inclusion = 0x1b, - DW_TAG_inheritance = 0x1c, - DW_TAG_inlined_subroutine = 0x1d, - DW_TAG_module = 0x1e, - DW_TAG_ptr_to_member_type = 0x1f, - DW_TAG_set_type = 0x20, - DW_TAG_subrange_type = 0x21, - DW_TAG_with_stmt = 0x22, - DW_TAG_access_declaration = 0x23, - DW_TAG_base_type = 0x24, - DW_TAG_catch_block = 0x25, - DW_TAG_const_type = 0x26, - DW_TAG_constant = 0x27, - DW_TAG_enumerator = 0x28, - DW_TAG_file_type = 0x29, - DW_TAG_friend = 0x2a, - DW_TAG_namelist = 0x2b, - DW_TAG_namelist_item = 0x2c, - DW_TAG_packed_type = 0x2d, - DW_TAG_subprogram = 0x2e, - DW_TAG_template_type_param = 0x2f, - DW_TAG_template_value_param = 0x30, - DW_TAG_thrown_type = 0x31, - DW_TAG_try_block = 0x32, - DW_TAG_variant_part = 0x33, - DW_TAG_variable = 0x34, - DW_TAG_volatile_type = 0x35, - /* DWARF 3. */ - DW_TAG_dwarf_procedure = 0x36, - DW_TAG_restrict_type = 0x37, - DW_TAG_interface_type = 0x38, - DW_TAG_namespace = 0x39, - DW_TAG_imported_module = 0x3a, - DW_TAG_unspecified_type = 0x3b, - DW_TAG_partial_unit = 0x3c, - DW_TAG_imported_unit = 0x3d, - DW_TAG_condition = 0x3f, - DW_TAG_shared_type = 0x40, - /* SGI/MIPS Extensions. */ - DW_TAG_MIPS_loop = 0x4081, - /* HP extensions. See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz . */ - DW_TAG_HP_array_descriptor = 0x4090, - /* GNU extensions. */ - DW_TAG_format_label = 0x4101, /* For FORTRAN 77 and Fortran 90. */ - DW_TAG_function_template = 0x4102, /* For C++. */ - DW_TAG_class_template = 0x4103, /* For C++. */ - DW_TAG_GNU_BINCL = 0x4104, - DW_TAG_GNU_EINCL = 0x4105, - /* Extensions for UPC. See: http://upc.gwu.edu/~upc. */ - DW_TAG_upc_shared_type = 0x8765, - DW_TAG_upc_strict_type = 0x8766, - DW_TAG_upc_relaxed_type = 0x8767, - /* PGI (STMicroelectronics) extensions. No documentation available. */ - DW_TAG_PGI_kanji_type = 0xA000, - DW_TAG_PGI_interface_block = 0xA020 - }; - -#define DW_TAG_lo_user 0x4080 -#define DW_TAG_hi_user 0xffff - -/* Flag that tells whether entry has a child or not. */ -#define DW_children_no 0 -#define DW_children_yes 1 - -/* Form names and codes. */ -enum dwarf_form - { - DW_FORM_addr = 0x01, - DW_FORM_block2 = 0x03, - DW_FORM_block4 = 0x04, - DW_FORM_data2 = 0x05, - DW_FORM_data4 = 0x06, - DW_FORM_data8 = 0x07, - DW_FORM_string = 0x08, - DW_FORM_block = 0x09, - DW_FORM_block1 = 0x0a, - DW_FORM_data1 = 0x0b, - DW_FORM_flag = 0x0c, - DW_FORM_sdata = 0x0d, - DW_FORM_strp = 0x0e, - DW_FORM_udata = 0x0f, - DW_FORM_ref_addr = 0x10, - DW_FORM_ref1 = 0x11, - DW_FORM_ref2 = 0x12, - DW_FORM_ref4 = 0x13, - DW_FORM_ref8 = 0x14, - DW_FORM_ref_udata = 0x15, - DW_FORM_indirect = 0x16 - }; - -/* Attribute names and codes. */ -enum dwarf_attribute - { - DW_AT_sibling = 0x01, - DW_AT_location = 0x02, - DW_AT_name = 0x03, - DW_AT_ordering = 0x09, - DW_AT_subscr_data = 0x0a, - DW_AT_byte_size = 0x0b, - DW_AT_bit_offset = 0x0c, - DW_AT_bit_size = 0x0d, - DW_AT_element_list = 0x0f, - DW_AT_stmt_list = 0x10, - DW_AT_low_pc = 0x11, - DW_AT_high_pc = 0x12, - DW_AT_language = 0x13, - DW_AT_member = 0x14, - DW_AT_discr = 0x15, - DW_AT_discr_value = 0x16, - DW_AT_visibility = 0x17, - DW_AT_import = 0x18, - DW_AT_string_length = 0x19, - DW_AT_common_reference = 0x1a, - DW_AT_comp_dir = 0x1b, - DW_AT_const_value = 0x1c, - DW_AT_containing_type = 0x1d, - DW_AT_default_value = 0x1e, - DW_AT_inline = 0x20, - DW_AT_is_optional = 0x21, - DW_AT_lower_bound = 0x22, - DW_AT_producer = 0x25, - DW_AT_prototyped = 0x27, - DW_AT_return_addr = 0x2a, - DW_AT_start_scope = 0x2c, - DW_AT_stride_size = 0x2e, - DW_AT_upper_bound = 0x2f, - DW_AT_abstract_origin = 0x31, - DW_AT_accessibility = 0x32, - DW_AT_address_class = 0x33, - DW_AT_artificial = 0x34, - DW_AT_base_types = 0x35, - DW_AT_calling_convention = 0x36, - DW_AT_count = 0x37, - DW_AT_data_member_location = 0x38, - DW_AT_decl_column = 0x39, - DW_AT_decl_file = 0x3a, - DW_AT_decl_line = 0x3b, - DW_AT_declaration = 0x3c, - DW_AT_discr_list = 0x3d, - DW_AT_encoding = 0x3e, - DW_AT_external = 0x3f, - DW_AT_frame_base = 0x40, - DW_AT_friend = 0x41, - DW_AT_identifier_case = 0x42, - DW_AT_macro_info = 0x43, - DW_AT_namelist_items = 0x44, - DW_AT_priority = 0x45, - DW_AT_segment = 0x46, - DW_AT_specification = 0x47, - DW_AT_static_link = 0x48, - DW_AT_type = 0x49, - DW_AT_use_location = 0x4a, - DW_AT_variable_parameter = 0x4b, - DW_AT_virtuality = 0x4c, - DW_AT_vtable_elem_location = 0x4d, - /* DWARF 3 values. */ - DW_AT_allocated = 0x4e, - DW_AT_associated = 0x4f, - DW_AT_data_location = 0x50, - DW_AT_stride = 0x51, - DW_AT_entry_pc = 0x52, - DW_AT_use_UTF8 = 0x53, - DW_AT_extension = 0x54, - DW_AT_ranges = 0x55, - DW_AT_trampoline = 0x56, - DW_AT_call_column = 0x57, - DW_AT_call_file = 0x58, - DW_AT_call_line = 0x59, - DW_AT_description = 0x5a, - DW_AT_binary_scale = 0x5b, - DW_AT_decimal_scale = 0x5c, - DW_AT_small = 0x5d, - DW_AT_decimal_sign = 0x5e, - DW_AT_digit_count = 0x5f, - DW_AT_picture_string = 0x60, - DW_AT_mutable = 0x61, - DW_AT_threads_scaled = 0x62, - DW_AT_explicit = 0x63, - DW_AT_object_pointer = 0x64, - DW_AT_endianity = 0x65, - DW_AT_elemental = 0x66, - DW_AT_pure = 0x67, - DW_AT_recursive = 0x68, - /* SGI/MIPS extensions. */ - DW_AT_MIPS_fde = 0x2001, - DW_AT_MIPS_loop_begin = 0x2002, - DW_AT_MIPS_tail_loop_begin = 0x2003, - DW_AT_MIPS_epilog_begin = 0x2004, - DW_AT_MIPS_loop_unroll_factor = 0x2005, - DW_AT_MIPS_software_pipeline_depth = 0x2006, - DW_AT_MIPS_linkage_name = 0x2007, - DW_AT_MIPS_stride = 0x2008, - DW_AT_MIPS_abstract_name = 0x2009, - DW_AT_MIPS_clone_origin = 0x200a, - DW_AT_MIPS_has_inlines = 0x200b, - /* HP extensions. */ - DW_AT_HP_block_index = 0x2000, - DW_AT_HP_unmodifiable = 0x2001, /* Same as DW_AT_MIPS_fde. */ - DW_AT_HP_actuals_stmt_list = 0x2010, - DW_AT_HP_proc_per_section = 0x2011, - DW_AT_HP_raw_data_ptr = 0x2012, - DW_AT_HP_pass_by_reference = 0x2013, - DW_AT_HP_opt_level = 0x2014, - DW_AT_HP_prof_version_id = 0x2015, - DW_AT_HP_opt_flags = 0x2016, - DW_AT_HP_cold_region_low_pc = 0x2017, - DW_AT_HP_cold_region_high_pc = 0x2018, - DW_AT_HP_all_variables_modifiable = 0x2019, - DW_AT_HP_linkage_name = 0x201a, - DW_AT_HP_prof_flags = 0x201b, /* In comp unit of procs_info for -g. */ - /* GNU extensions. */ - DW_AT_sf_names = 0x2101, - DW_AT_src_info = 0x2102, - DW_AT_mac_info = 0x2103, - DW_AT_src_coords = 0x2104, - DW_AT_body_begin = 0x2105, - DW_AT_body_end = 0x2106, - DW_AT_GNU_vector = 0x2107, - /* VMS extensions. */ - DW_AT_VMS_rtnbeg_pd_address = 0x2201, - /* UPC extension. */ - DW_AT_upc_threads_scaled = 0x3210, - /* PGI (STMicroelectronics) extensions. */ - DW_AT_PGI_lbase = 0x3a00, - DW_AT_PGI_soffset = 0x3a01, - DW_AT_PGI_lstride = 0x3a02 - }; - -#define DW_AT_lo_user 0x2000 /* Implementation-defined range start. */ -#define DW_AT_hi_user 0x3ff0 /* Implementation-defined range end. */ - -/* Location atom names and codes. */ -enum dwarf_location_atom - { - DW_OP_addr = 0x03, - DW_OP_deref = 0x06, - DW_OP_const1u = 0x08, - DW_OP_const1s = 0x09, - DW_OP_const2u = 0x0a, - DW_OP_const2s = 0x0b, - DW_OP_const4u = 0x0c, - DW_OP_const4s = 0x0d, - DW_OP_const8u = 0x0e, - DW_OP_const8s = 0x0f, - DW_OP_constu = 0x10, - DW_OP_consts = 0x11, - DW_OP_dup = 0x12, - DW_OP_drop = 0x13, - DW_OP_over = 0x14, - DW_OP_pick = 0x15, - DW_OP_swap = 0x16, - DW_OP_rot = 0x17, - DW_OP_xderef = 0x18, - DW_OP_abs = 0x19, - DW_OP_and = 0x1a, - DW_OP_div = 0x1b, - DW_OP_minus = 0x1c, - DW_OP_mod = 0x1d, - DW_OP_mul = 0x1e, - DW_OP_neg = 0x1f, - DW_OP_not = 0x20, - DW_OP_or = 0x21, - DW_OP_plus = 0x22, - DW_OP_plus_uconst = 0x23, - DW_OP_shl = 0x24, - DW_OP_shr = 0x25, - DW_OP_shra = 0x26, - DW_OP_xor = 0x27, - DW_OP_bra = 0x28, - DW_OP_eq = 0x29, - DW_OP_ge = 0x2a, - DW_OP_gt = 0x2b, - DW_OP_le = 0x2c, - DW_OP_lt = 0x2d, - DW_OP_ne = 0x2e, - DW_OP_skip = 0x2f, - DW_OP_lit0 = 0x30, - DW_OP_lit1 = 0x31, - DW_OP_lit2 = 0x32, - DW_OP_lit3 = 0x33, - DW_OP_lit4 = 0x34, - DW_OP_lit5 = 0x35, - DW_OP_lit6 = 0x36, - DW_OP_lit7 = 0x37, - DW_OP_lit8 = 0x38, - DW_OP_lit9 = 0x39, - DW_OP_lit10 = 0x3a, - DW_OP_lit11 = 0x3b, - DW_OP_lit12 = 0x3c, - DW_OP_lit13 = 0x3d, - DW_OP_lit14 = 0x3e, - DW_OP_lit15 = 0x3f, - DW_OP_lit16 = 0x40, - DW_OP_lit17 = 0x41, - DW_OP_lit18 = 0x42, - DW_OP_lit19 = 0x43, - DW_OP_lit20 = 0x44, - DW_OP_lit21 = 0x45, - DW_OP_lit22 = 0x46, - DW_OP_lit23 = 0x47, - DW_OP_lit24 = 0x48, - DW_OP_lit25 = 0x49, - DW_OP_lit26 = 0x4a, - DW_OP_lit27 = 0x4b, - DW_OP_lit28 = 0x4c, - DW_OP_lit29 = 0x4d, - DW_OP_lit30 = 0x4e, - DW_OP_lit31 = 0x4f, - DW_OP_reg0 = 0x50, - DW_OP_reg1 = 0x51, - DW_OP_reg2 = 0x52, - DW_OP_reg3 = 0x53, - DW_OP_reg4 = 0x54, - DW_OP_reg5 = 0x55, - DW_OP_reg6 = 0x56, - DW_OP_reg7 = 0x57, - DW_OP_reg8 = 0x58, - DW_OP_reg9 = 0x59, - DW_OP_reg10 = 0x5a, - DW_OP_reg11 = 0x5b, - DW_OP_reg12 = 0x5c, - DW_OP_reg13 = 0x5d, - DW_OP_reg14 = 0x5e, - DW_OP_reg15 = 0x5f, - DW_OP_reg16 = 0x60, - DW_OP_reg17 = 0x61, - DW_OP_reg18 = 0x62, - DW_OP_reg19 = 0x63, - DW_OP_reg20 = 0x64, - DW_OP_reg21 = 0x65, - DW_OP_reg22 = 0x66, - DW_OP_reg23 = 0x67, - DW_OP_reg24 = 0x68, - DW_OP_reg25 = 0x69, - DW_OP_reg26 = 0x6a, - DW_OP_reg27 = 0x6b, - DW_OP_reg28 = 0x6c, - DW_OP_reg29 = 0x6d, - DW_OP_reg30 = 0x6e, - DW_OP_reg31 = 0x6f, - DW_OP_breg0 = 0x70, - DW_OP_breg1 = 0x71, - DW_OP_breg2 = 0x72, - DW_OP_breg3 = 0x73, - DW_OP_breg4 = 0x74, - DW_OP_breg5 = 0x75, - DW_OP_breg6 = 0x76, - DW_OP_breg7 = 0x77, - DW_OP_breg8 = 0x78, - DW_OP_breg9 = 0x79, - DW_OP_breg10 = 0x7a, - DW_OP_breg11 = 0x7b, - DW_OP_breg12 = 0x7c, - DW_OP_breg13 = 0x7d, - DW_OP_breg14 = 0x7e, - DW_OP_breg15 = 0x7f, - DW_OP_breg16 = 0x80, - DW_OP_breg17 = 0x81, - DW_OP_breg18 = 0x82, - DW_OP_breg19 = 0x83, - DW_OP_breg20 = 0x84, - DW_OP_breg21 = 0x85, - DW_OP_breg22 = 0x86, - DW_OP_breg23 = 0x87, - DW_OP_breg24 = 0x88, - DW_OP_breg25 = 0x89, - DW_OP_breg26 = 0x8a, - DW_OP_breg27 = 0x8b, - DW_OP_breg28 = 0x8c, - DW_OP_breg29 = 0x8d, - DW_OP_breg30 = 0x8e, - DW_OP_breg31 = 0x8f, - DW_OP_regx = 0x90, - DW_OP_fbreg = 0x91, - DW_OP_bregx = 0x92, - DW_OP_piece = 0x93, - DW_OP_deref_size = 0x94, - DW_OP_xderef_size = 0x95, - DW_OP_nop = 0x96, - /* DWARF 3 extensions. */ - DW_OP_push_object_address = 0x97, - DW_OP_call2 = 0x98, - DW_OP_call4 = 0x99, - DW_OP_call_ref = 0x9a, - DW_OP_form_tls_address = 0x9b, - DW_OP_call_frame_cfa = 0x9c, - DW_OP_bit_piece = 0x9d, - /* GNU extensions. */ - DW_OP_GNU_push_tls_address = 0xe0, - /* HP extensions. */ - DW_OP_HP_unknown = 0xe0, /* Ouch, the same as GNU_push_tls_address. */ - DW_OP_HP_is_value = 0xe1, - DW_OP_HP_fltconst4 = 0xe2, - DW_OP_HP_fltconst8 = 0xe3, - DW_OP_HP_mod_range = 0xe4, - DW_OP_HP_unmod_range = 0xe5, - DW_OP_HP_tls = 0xe6 - }; - -#define DW_OP_lo_user 0xe0 /* Implementation-defined range start. */ -#define DW_OP_hi_user 0xff /* Implementation-defined range end. */ - -/* Type encodings. */ -enum dwarf_type - { - DW_ATE_void = 0x0, - DW_ATE_address = 0x1, - DW_ATE_boolean = 0x2, - DW_ATE_complex_float = 0x3, - DW_ATE_float = 0x4, - DW_ATE_signed = 0x5, - DW_ATE_signed_char = 0x6, - DW_ATE_unsigned = 0x7, - DW_ATE_unsigned_char = 0x8, - /* DWARF 3. */ - DW_ATE_imaginary_float = 0x9, - DW_ATE_packed_decimal = 0xa, - DW_ATE_numeric_string = 0xb, - DW_ATE_edited = 0xc, - DW_ATE_signed_fixed = 0xd, - DW_ATE_unsigned_fixed = 0xe, - DW_ATE_decimal_float = 0xf, - /* HP extensions. */ - DW_ATE_HP_float80 = 0x80, /* Floating-point (80 bit). */ - DW_ATE_HP_complex_float80 = 0x81, /* Complex floating-point (80 bit). */ - DW_ATE_HP_float128 = 0x82, /* Floating-point (128 bit). */ - DW_ATE_HP_complex_float128 = 0x83, /* Complex floating-point (128 bit). */ - DW_ATE_HP_floathpintel = 0x84, /* Floating-point (82 bit IA64). */ - DW_ATE_HP_imaginary_float80 = 0x85, - DW_ATE_HP_imaginary_float128 = 0x86 - }; - -#define DW_ATE_lo_user 0x80 -#define DW_ATE_hi_user 0xff - -/* Decimal sign encodings. */ -enum dwarf_decimal_sign_encoding - { - /* DWARF 3. */ - DW_DS_unsigned = 0x01, - DW_DS_leading_overpunch = 0x02, - DW_DS_trailing_overpunch = 0x03, - DW_DS_leading_separate = 0x04, - DW_DS_trailing_separate = 0x05 - }; - -/* Endianity encodings. */ -enum dwarf_endianity_encoding - { - /* DWARF 3. */ - DW_END_default = 0x00, - DW_END_big = 0x01, - DW_END_little = 0x02 - }; - -#define DW_END_lo_user 0x40 -#define DW_END_hi_user 0xff - -/* Array ordering names and codes. */ -enum dwarf_array_dim_ordering - { - DW_ORD_row_major = 0, - DW_ORD_col_major = 1 - }; - -/* Access attribute. */ -enum dwarf_access_attribute - { - DW_ACCESS_public = 1, - DW_ACCESS_protected = 2, - DW_ACCESS_private = 3 - }; - -/* Visibility. */ -enum dwarf_visibility_attribute - { - DW_VIS_local = 1, - DW_VIS_exported = 2, - DW_VIS_qualified = 3 - }; - -/* Virtuality. */ -enum dwarf_virtuality_attribute - { - DW_VIRTUALITY_none = 0, - DW_VIRTUALITY_virtual = 1, - DW_VIRTUALITY_pure_virtual = 2 - }; - -/* Case sensitivity. */ -enum dwarf_id_case - { - DW_ID_case_sensitive = 0, - DW_ID_up_case = 1, - DW_ID_down_case = 2, - DW_ID_case_insensitive = 3 - }; - -/* Calling convention. */ -enum dwarf_calling_convention - { - DW_CC_normal = 0x1, - DW_CC_program = 0x2, - DW_CC_nocall = 0x3, - DW_CC_GNU_renesas_sh = 0x40 - }; - -#define DW_CC_lo_user 0x40 -#define DW_CC_hi_user 0xff - -/* Inline attribute. */ -enum dwarf_inline_attribute - { - DW_INL_not_inlined = 0, - DW_INL_inlined = 1, - DW_INL_declared_not_inlined = 2, - DW_INL_declared_inlined = 3 - }; - -/* Discriminant lists. */ -enum dwarf_discrim_list - { - DW_DSC_label = 0, - DW_DSC_range = 1 - }; - -/* Line number opcodes. */ -enum dwarf_line_number_ops - { - DW_LNS_extended_op = 0, - DW_LNS_copy = 1, - DW_LNS_advance_pc = 2, - DW_LNS_advance_line = 3, - DW_LNS_set_file = 4, - DW_LNS_set_column = 5, - DW_LNS_negate_stmt = 6, - DW_LNS_set_basic_block = 7, - DW_LNS_const_add_pc = 8, - DW_LNS_fixed_advance_pc = 9, - /* DWARF 3. */ - DW_LNS_set_prologue_end = 10, - DW_LNS_set_epilogue_begin = 11, - DW_LNS_set_isa = 12 - }; - -/* Line number extended opcodes. */ -enum dwarf_line_number_x_ops - { - DW_LNE_end_sequence = 1, - DW_LNE_set_address = 2, - DW_LNE_define_file = 3, - /* HP extensions. */ - DW_LNE_HP_negate_is_UV_update = 0x11, - DW_LNE_HP_push_context = 0x12, - DW_LNE_HP_pop_context = 0x13, - DW_LNE_HP_set_file_line_column = 0x14, - DW_LNE_HP_set_routine_name = 0x15, - DW_LNE_HP_set_sequence = 0x16, - DW_LNE_HP_negate_post_semantics = 0x17, - DW_LNE_HP_negate_function_exit = 0x18, - DW_LNE_HP_negate_front_end_logical = 0x19, - DW_LNE_HP_define_proc = 0x20 - }; - -#define DW_LNE_lo_user 0x80 -#define DW_LNE_hi_user 0xff - -/* Call frame information. */ -enum dwarf_call_frame_info - { - DW_CFA_advance_loc = 0x40, - DW_CFA_offset = 0x80, - DW_CFA_restore = 0xc0, - DW_CFA_nop = 0x00, - DW_CFA_set_loc = 0x01, - DW_CFA_advance_loc1 = 0x02, - DW_CFA_advance_loc2 = 0x03, - DW_CFA_advance_loc4 = 0x04, - DW_CFA_offset_extended = 0x05, - DW_CFA_restore_extended = 0x06, - DW_CFA_undefined = 0x07, - DW_CFA_same_value = 0x08, - DW_CFA_register = 0x09, - DW_CFA_remember_state = 0x0a, - DW_CFA_restore_state = 0x0b, - DW_CFA_def_cfa = 0x0c, - DW_CFA_def_cfa_register = 0x0d, - DW_CFA_def_cfa_offset = 0x0e, - /* DWARF 3. */ - DW_CFA_def_cfa_expression = 0x0f, - DW_CFA_expression = 0x10, - DW_CFA_offset_extended_sf = 0x11, - DW_CFA_def_cfa_sf = 0x12, - DW_CFA_def_cfa_offset_sf = 0x13, - DW_CFA_val_offset = 0x14, - DW_CFA_val_offset_sf = 0x15, - DW_CFA_val_expression = 0x16, - /* SGI/MIPS specific. */ - DW_CFA_MIPS_advance_loc8 = 0x1d, - /* GNU extensions. */ - DW_CFA_GNU_window_save = 0x2d, - DW_CFA_GNU_args_size = 0x2e, - DW_CFA_GNU_negative_offset_extended = 0x2f - }; - -#define DW_CIE_ID 0xffffffff -#define DW_CIE_VERSION 1 - -#define DW_CFA_extended 0 -#define DW_CFA_lo_user 0x1c -#define DW_CFA_hi_user 0x3f - -#define DW_CHILDREN_no 0x00 -#define DW_CHILDREN_yes 0x01 - -#define DW_ADDR_none 0 - -/* Source language names and codes. */ -enum dwarf_source_language - { - DW_LANG_C89 = 0x0001, - DW_LANG_C = 0x0002, - DW_LANG_Ada83 = 0x0003, - DW_LANG_C_plus_plus = 0x0004, - DW_LANG_Cobol74 = 0x0005, - DW_LANG_Cobol85 = 0x0006, - DW_LANG_Fortran77 = 0x0007, - DW_LANG_Fortran90 = 0x0008, - DW_LANG_Pascal83 = 0x0009, - DW_LANG_Modula2 = 0x000a, - /* DWARF 3. */ - DW_LANG_Java = 0x000b, - DW_LANG_C99 = 0x000c, - DW_LANG_Ada95 = 0x000d, - DW_LANG_Fortran95 = 0x000e, - DW_LANG_PLI = 0x000f, - DW_LANG_ObjC = 0x0010, - DW_LANG_ObjC_plus_plus = 0x0011, - DW_LANG_UPC = 0x0012, - DW_LANG_D = 0x0013, - /* MIPS. */ - DW_LANG_Mips_Assembler = 0x8001, - /* UPC. */ - DW_LANG_Upc = 0x8765 - }; - -#define DW_LANG_lo_user 0x8000 /* Implementation-defined range start. */ -#define DW_LANG_hi_user 0xffff /* Implementation-defined range start. */ - -/* Names and codes for macro information. */ -enum dwarf_macinfo_record_type - { - DW_MACINFO_define = 1, - DW_MACINFO_undef = 2, - DW_MACINFO_start_file = 3, - DW_MACINFO_end_file = 4, - DW_MACINFO_vendor_ext = 255 - }; - -/* @@@ For use with GNU frame unwind information. */ - -#define DW_EH_PE_absptr 0x00 -#define DW_EH_PE_omit 0xff - -#define DW_EH_PE_uleb128 0x01 -#define DW_EH_PE_udata2 0x02 -#define DW_EH_PE_udata4 0x03 -#define DW_EH_PE_udata8 0x04 -#define DW_EH_PE_sleb128 0x09 -#define DW_EH_PE_sdata2 0x0A -#define DW_EH_PE_sdata4 0x0B -#define DW_EH_PE_sdata8 0x0C -#define DW_EH_PE_signed 0x08 - -#define DW_EH_PE_pcrel 0x10 -#define DW_EH_PE_textrel 0x20 -#define DW_EH_PE_datarel 0x30 -#define DW_EH_PE_funcrel 0x40 -#define DW_EH_PE_aligned 0x50 - -#define DW_EH_PE_indirect 0x80 - -#endif /* _ELF_DWARF2_H */ diff --git a/include/elf/external.h b/include/elf/external.h deleted file mode 100644 index 5985e94b022..00000000000 --- a/include/elf/external.h +++ /dev/null @@ -1,279 +0,0 @@ -/* ELF support for BFD. - Copyright 1991, 1992, 1993, 1995, 1997, 1998, 1999, 2001, 2003, 2005 - Free Software Foundation, Inc. - - Written by Fred Fish @ Cygnus Support, from information published - in "UNIX System V Release 4, Programmers Guide: ANSI C and - Programming Support Tools". - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - - -/* This file is part of ELF support for BFD, and contains the portions - that describe how ELF is represented externally by the BFD library. - I.E. it describes the in-file representation of ELF. It requires - the elf/common.h file which contains the portions that are common to - both the internal and external representations. */ - -/* The 64-bit stuff is kind of random. Perhaps someone will publish a - spec someday. */ - -#ifndef _ELF_EXTERNAL_H -#define _ELF_EXTERNAL_H - -/* ELF Header (32-bit implementations) */ - -typedef struct { - unsigned char e_ident[16]; /* ELF "magic number" */ - unsigned char e_type[2]; /* Identifies object file type */ - unsigned char e_machine[2]; /* Specifies required architecture */ - unsigned char e_version[4]; /* Identifies object file version */ - unsigned char e_entry[4]; /* Entry point virtual address */ - unsigned char e_phoff[4]; /* Program header table file offset */ - unsigned char e_shoff[4]; /* Section header table file offset */ - unsigned char e_flags[4]; /* Processor-specific flags */ - unsigned char e_ehsize[2]; /* ELF header size in bytes */ - unsigned char e_phentsize[2]; /* Program header table entry size */ - unsigned char e_phnum[2]; /* Program header table entry count */ - unsigned char e_shentsize[2]; /* Section header table entry size */ - unsigned char e_shnum[2]; /* Section header table entry count */ - unsigned char e_shstrndx[2]; /* Section header string table index */ -} Elf32_External_Ehdr; - -typedef struct { - unsigned char e_ident[16]; /* ELF "magic number" */ - unsigned char e_type[2]; /* Identifies object file type */ - unsigned char e_machine[2]; /* Specifies required architecture */ - unsigned char e_version[4]; /* Identifies object file version */ - unsigned char e_entry[8]; /* Entry point virtual address */ - unsigned char e_phoff[8]; /* Program header table file offset */ - unsigned char e_shoff[8]; /* Section header table file offset */ - unsigned char e_flags[4]; /* Processor-specific flags */ - unsigned char e_ehsize[2]; /* ELF header size in bytes */ - unsigned char e_phentsize[2]; /* Program header table entry size */ - unsigned char e_phnum[2]; /* Program header table entry count */ - unsigned char e_shentsize[2]; /* Section header table entry size */ - unsigned char e_shnum[2]; /* Section header table entry count */ - unsigned char e_shstrndx[2]; /* Section header string table index */ -} Elf64_External_Ehdr; - -/* Program header */ - -typedef struct { - unsigned char p_type[4]; /* Identifies program segment type */ - unsigned char p_offset[4]; /* Segment file offset */ - unsigned char p_vaddr[4]; /* Segment virtual address */ - unsigned char p_paddr[4]; /* Segment physical address */ - unsigned char p_filesz[4]; /* Segment size in file */ - unsigned char p_memsz[4]; /* Segment size in memory */ - unsigned char p_flags[4]; /* Segment flags */ - unsigned char p_align[4]; /* Segment alignment, file & memory */ -} Elf32_External_Phdr; - -typedef struct { - unsigned char p_type[4]; /* Identifies program segment type */ - unsigned char p_flags[4]; /* Segment flags */ - unsigned char p_offset[8]; /* Segment file offset */ - unsigned char p_vaddr[8]; /* Segment virtual address */ - unsigned char p_paddr[8]; /* Segment physical address */ - unsigned char p_filesz[8]; /* Segment size in file */ - unsigned char p_memsz[8]; /* Segment size in memory */ - unsigned char p_align[8]; /* Segment alignment, file & memory */ -} Elf64_External_Phdr; - -/* Section header */ - -typedef struct { - unsigned char sh_name[4]; /* Section name, index in string tbl */ - unsigned char sh_type[4]; /* Type of section */ - unsigned char sh_flags[4]; /* Miscellaneous section attributes */ - unsigned char sh_addr[4]; /* Section virtual addr at execution */ - unsigned char sh_offset[4]; /* Section file offset */ - unsigned char sh_size[4]; /* Size of section in bytes */ - unsigned char sh_link[4]; /* Index of another section */ - unsigned char sh_info[4]; /* Additional section information */ - unsigned char sh_addralign[4]; /* Section alignment */ - unsigned char sh_entsize[4]; /* Entry size if section holds table */ -} Elf32_External_Shdr; - -typedef struct { - unsigned char sh_name[4]; /* Section name, index in string tbl */ - unsigned char sh_type[4]; /* Type of section */ - unsigned char sh_flags[8]; /* Miscellaneous section attributes */ - unsigned char sh_addr[8]; /* Section virtual addr at execution */ - unsigned char sh_offset[8]; /* Section file offset */ - unsigned char sh_size[8]; /* Size of section in bytes */ - unsigned char sh_link[4]; /* Index of another section */ - unsigned char sh_info[4]; /* Additional section information */ - unsigned char sh_addralign[8]; /* Section alignment */ - unsigned char sh_entsize[8]; /* Entry size if section holds table */ -} Elf64_External_Shdr; - -/* Symbol table entry */ - -typedef struct { - unsigned char st_name[4]; /* Symbol name, index in string tbl */ - unsigned char st_value[4]; /* Value of the symbol */ - unsigned char st_size[4]; /* Associated symbol size */ - unsigned char st_info[1]; /* Type and binding attributes */ - unsigned char st_other[1]; /* No defined meaning, 0 */ - unsigned char st_shndx[2]; /* Associated section index */ -} Elf32_External_Sym; - -typedef struct { - unsigned char st_name[4]; /* Symbol name, index in string tbl */ - unsigned char st_info[1]; /* Type and binding attributes */ - unsigned char st_other[1]; /* No defined meaning, 0 */ - unsigned char st_shndx[2]; /* Associated section index */ - unsigned char st_value[8]; /* Value of the symbol */ - unsigned char st_size[8]; /* Associated symbol size */ -} Elf64_External_Sym; - -typedef struct { - unsigned char est_shndx[4]; /* Section index */ -} Elf_External_Sym_Shndx; - -/* Note segments */ - -typedef struct { - unsigned char namesz[4]; /* Size of entry's owner string */ - unsigned char descsz[4]; /* Size of the note descriptor */ - unsigned char type[4]; /* Interpretation of the descriptor */ - char name[1]; /* Start of the name+desc data */ -} Elf_External_Note; - -/* Relocation Entries */ -typedef struct { - unsigned char r_offset[4]; /* Location at which to apply the action */ - unsigned char r_info[4]; /* index and type of relocation */ -} Elf32_External_Rel; - -typedef struct { - unsigned char r_offset[4]; /* Location at which to apply the action */ - unsigned char r_info[4]; /* index and type of relocation */ - unsigned char r_addend[4]; /* Constant addend used to compute value */ -} Elf32_External_Rela; - -typedef struct { - unsigned char r_offset[8]; /* Location at which to apply the action */ - unsigned char r_info[8]; /* index and type of relocation */ -} Elf64_External_Rel; - -typedef struct { - unsigned char r_offset[8]; /* Location at which to apply the action */ - unsigned char r_info[8]; /* index and type of relocation */ - unsigned char r_addend[8]; /* Constant addend used to compute value */ -} Elf64_External_Rela; - -/* dynamic section structure */ - -typedef struct { - unsigned char d_tag[4]; /* entry tag value */ - union { - unsigned char d_val[4]; - unsigned char d_ptr[4]; - } d_un; -} Elf32_External_Dyn; - -typedef struct { - unsigned char d_tag[8]; /* entry tag value */ - union { - unsigned char d_val[8]; - unsigned char d_ptr[8]; - } d_un; -} Elf64_External_Dyn; - -/* The version structures are currently size independent. They are - named without a 32 or 64. If that ever changes, these structures - will need to be renamed. */ - -/* This structure appears in a SHT_GNU_verdef section. */ - -typedef struct { - unsigned char vd_version[2]; - unsigned char vd_flags[2]; - unsigned char vd_ndx[2]; - unsigned char vd_cnt[2]; - unsigned char vd_hash[4]; - unsigned char vd_aux[4]; - unsigned char vd_next[4]; -} Elf_External_Verdef; - -/* This structure appears in a SHT_GNU_verdef section. */ - -typedef struct { - unsigned char vda_name[4]; - unsigned char vda_next[4]; -} Elf_External_Verdaux; - -/* This structure appears in a SHT_GNU_verneed section. */ - -typedef struct { - unsigned char vn_version[2]; - unsigned char vn_cnt[2]; - unsigned char vn_file[4]; - unsigned char vn_aux[4]; - unsigned char vn_next[4]; -} Elf_External_Verneed; - -/* This structure appears in a SHT_GNU_verneed section. */ - -typedef struct { - unsigned char vna_hash[4]; - unsigned char vna_flags[2]; - unsigned char vna_other[2]; - unsigned char vna_name[4]; - unsigned char vna_next[4]; -} Elf_External_Vernaux; - -/* This structure appears in a SHT_GNU_versym section. This is not a - standard ELF structure; ELF just uses Elf32_Half. */ - -typedef struct { - unsigned char vs_vers[2]; -} -#ifdef __GNUC__ - __attribute__ ((packed)) -#endif - Elf_External_Versym; - -/* Structure for syminfo section. */ -typedef struct -{ - unsigned char si_boundto[2]; - unsigned char si_flags[2]; -} Elf_External_Syminfo; - - -/* This structure appears on the stack and in NT_AUXV core file notes. */ -typedef struct -{ - unsigned char a_type[4]; - unsigned char a_val[4]; -} Elf32_External_Auxv; - -typedef struct -{ - unsigned char a_type[8]; - unsigned char a_val[8]; -} Elf64_External_Auxv; - -/* Size of SHT_GROUP section entry. */ - -#define GRP_ENTRY_SIZE 4 - -#endif /* _ELF_EXTERNAL_H */ diff --git a/include/elf/fr30.h b/include/elf/fr30.h deleted file mode 100644 index eb2b93795fc..00000000000 --- a/include/elf/fr30.h +++ /dev/null @@ -1,42 +0,0 @@ -/* FR30 ELF support for BFD. - Copyright 1998, 1999, 2000 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., -51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_FR30_H -#define _ELF_FR30_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_fr30_reloc_type) - RELOC_NUMBER (R_FR30_NONE, 0) - RELOC_NUMBER (R_FR30_8, 1) - RELOC_NUMBER (R_FR30_20, 2) - RELOC_NUMBER (R_FR30_32, 3) - RELOC_NUMBER (R_FR30_48, 4) - RELOC_NUMBER (R_FR30_6_IN_4, 5) - RELOC_NUMBER (R_FR30_8_IN_8, 6) - RELOC_NUMBER (R_FR30_9_IN_8, 7) - RELOC_NUMBER (R_FR30_10_IN_8, 8) - RELOC_NUMBER (R_FR30_9_PCREL, 9) - RELOC_NUMBER (R_FR30_12_PCREL, 10) - RELOC_NUMBER (R_FR30_GNU_VTINHERIT, 11) - RELOC_NUMBER (R_FR30_GNU_VTENTRY, 12) -END_RELOC_NUMBERS (R_FR30_max) - -#endif /* _ELF_FR30_H */ diff --git a/include/elf/frv.h b/include/elf/frv.h deleted file mode 100644 index f2b10974a83..00000000000 --- a/include/elf/frv.h +++ /dev/null @@ -1,130 +0,0 @@ -/* FRV ELF support for BFD. - Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., -51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_FRV_H -#define _ELF_FRV_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_frv_reloc_type) - RELOC_NUMBER (R_FRV_NONE, 0) - RELOC_NUMBER (R_FRV_32, 1) - RELOC_NUMBER (R_FRV_LABEL16, 2) - RELOC_NUMBER (R_FRV_LABEL24, 3) - RELOC_NUMBER (R_FRV_LO16, 4) - RELOC_NUMBER (R_FRV_HI16, 5) - RELOC_NUMBER (R_FRV_GPREL12, 6) - RELOC_NUMBER (R_FRV_GPRELU12, 7) - RELOC_NUMBER (R_FRV_GPREL32, 8) - RELOC_NUMBER (R_FRV_GPRELHI, 9) - RELOC_NUMBER (R_FRV_GPRELLO, 10) - RELOC_NUMBER (R_FRV_GOT12, 11) - RELOC_NUMBER (R_FRV_GOTHI, 12) - RELOC_NUMBER (R_FRV_GOTLO, 13) - RELOC_NUMBER (R_FRV_FUNCDESC, 14) - RELOC_NUMBER (R_FRV_FUNCDESC_GOT12, 15) - RELOC_NUMBER (R_FRV_FUNCDESC_GOTHI, 16) - RELOC_NUMBER (R_FRV_FUNCDESC_GOTLO, 17) - RELOC_NUMBER (R_FRV_FUNCDESC_VALUE, 18) - RELOC_NUMBER (R_FRV_FUNCDESC_GOTOFF12, 19) - RELOC_NUMBER (R_FRV_FUNCDESC_GOTOFFHI, 20) - RELOC_NUMBER (R_FRV_FUNCDESC_GOTOFFLO, 21) - RELOC_NUMBER (R_FRV_GOTOFF12, 22) - RELOC_NUMBER (R_FRV_GOTOFFHI, 23) - RELOC_NUMBER (R_FRV_GOTOFFLO, 24) - RELOC_NUMBER (R_FRV_GETTLSOFF, 25) - RELOC_NUMBER (R_FRV_TLSDESC_VALUE, 26) - RELOC_NUMBER (R_FRV_GOTTLSDESC12, 27) - RELOC_NUMBER (R_FRV_GOTTLSDESCHI, 28) - RELOC_NUMBER (R_FRV_GOTTLSDESCLO, 29) - RELOC_NUMBER (R_FRV_TLSMOFF12, 30) - RELOC_NUMBER (R_FRV_TLSMOFFHI, 31) - RELOC_NUMBER (R_FRV_TLSMOFFLO, 32) - RELOC_NUMBER (R_FRV_GOTTLSOFF12, 33) - RELOC_NUMBER (R_FRV_GOTTLSOFFHI, 34) - RELOC_NUMBER (R_FRV_GOTTLSOFFLO, 35) - RELOC_NUMBER (R_FRV_TLSOFF, 36) - RELOC_NUMBER (R_FRV_TLSDESC_RELAX, 37) - RELOC_NUMBER (R_FRV_GETTLSOFF_RELAX, 38) - RELOC_NUMBER (R_FRV_TLSOFF_RELAX, 39) - RELOC_NUMBER (R_FRV_TLSMOFF, 40) - RELOC_NUMBER (R_FRV_GNU_VTINHERIT, 200) - RELOC_NUMBER (R_FRV_GNU_VTENTRY, 201) -END_RELOC_NUMBERS(R_FRV_max) - -/* Processor specific flags for the ELF header e_flags field. */ - /* gpr support */ -#define EF_FRV_GPR_MASK 0x00000003 /* mask for # of gprs */ -#define EF_FRV_GPR_32 0x00000001 /* -mgpr-32 */ -#define EF_FRV_GPR_64 0x00000002 /* -mgpr-64 */ - - /* fpr support */ -#define EF_FRV_FPR_MASK 0x0000000c /* mask for # of fprs */ -#define EF_FRV_FPR_32 0x00000004 /* -mfpr-32 */ -#define EF_FRV_FPR_64 0x00000008 /* -mfpr-64 */ -#define EF_FRV_FPR_NONE 0x0000000c /* -msoft-float */ - - /* double word support */ -#define EF_FRV_DWORD_MASK 0x00000030 /* mask for dword support */ -#define EF_FRV_DWORD_YES 0x00000010 /* use double word insns */ -#define EF_FRV_DWORD_NO 0x00000020 /* don't use double word insn*/ - -#define EF_FRV_DOUBLE 0x00000040 /* -mdouble */ -#define EF_FRV_MEDIA 0x00000080 /* -mmedia */ - -#define EF_FRV_PIC 0x00000100 /* -fpic */ -#define EF_FRV_NON_PIC_RELOCS 0x00000200 /* used non pic safe relocs */ - -#define EF_FRV_MULADD 0x00000400 /* -mmuladd */ -#define EF_FRV_BIGPIC 0x00000800 /* -fPIC */ -#define EF_FRV_LIBPIC 0x00001000 /* -mlibrary-pic */ -#define EF_FRV_G0 0x00002000 /* -G 0, no small data ptr */ -#define EF_FRV_NOPACK 0x00004000 /* -mnopack */ -#define EF_FRV_FDPIC 0x00008000 /* -mfdpic */ - -#define EF_FRV_CPU_MASK 0xff000000 /* specific cpu bits */ -#define EF_FRV_CPU_GENERIC 0x00000000 /* generic FRV */ -#define EF_FRV_CPU_FR500 0x01000000 /* FRV500 */ -#define EF_FRV_CPU_FR300 0x02000000 /* FRV300 */ -#define EF_FRV_CPU_SIMPLE 0x03000000 /* SIMPLE */ -#define EF_FRV_CPU_TOMCAT 0x04000000 /* Tomcat, FR500 prototype */ -#define EF_FRV_CPU_FR400 0x05000000 /* FRV400 */ -#define EF_FRV_CPU_FR550 0x06000000 /* FRV550 */ -#define EF_FRV_CPU_FR405 0x07000000 -#define EF_FRV_CPU_FR450 0x08000000 - - /* Mask of PIC related bits */ -#define EF_FRV_PIC_FLAGS (EF_FRV_PIC | EF_FRV_LIBPIC | EF_FRV_BIGPIC \ - | EF_FRV_FDPIC) - - /* Mask of all flags */ -#define EF_FRV_ALL_FLAGS (EF_FRV_GPR_MASK | \ - EF_FRV_FPR_MASK | \ - EF_FRV_DWORD_MASK | \ - EF_FRV_DOUBLE | \ - EF_FRV_MEDIA | \ - EF_FRV_PIC_FLAGS | \ - EF_FRV_NON_PIC_RELOCS | \ - EF_FRV_MULADD | \ - EF_FRV_G0 | \ - EF_FRV_NOPACK | \ - EF_FRV_CPU_MASK) - -#endif /* _ELF_FRV_H */ diff --git a/include/elf/h8.h b/include/elf/h8.h deleted file mode 100644 index 1a115add169..00000000000 --- a/include/elf/h8.h +++ /dev/null @@ -1,100 +0,0 @@ -/* H8300/h8500 ELF support for BFD. - Copyright 2001, 2003 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_H8_H -#define _ELF_H8_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -/* Relocations 59..63 are GNU extensions. */ -START_RELOC_NUMBERS (elf_h8_reloc_type) - RELOC_NUMBER (R_H8_NONE, 0) - RELOC_NUMBER (R_H8_DIR32, 1) - RELOC_NUMBER (R_H8_DIR32_28, 2) - RELOC_NUMBER (R_H8_DIR32_24, 3) - RELOC_NUMBER (R_H8_DIR32_16, 4) - RELOC_NUMBER (R_H8_DIR32U, 6) - RELOC_NUMBER (R_H8_DIR32U_28, 7) - RELOC_NUMBER (R_H8_DIR32U_24, 8) - RELOC_NUMBER (R_H8_DIR32U_20, 9) - RELOC_NUMBER (R_H8_DIR32U_16, 10) - RELOC_NUMBER (R_H8_DIR24, 11) - RELOC_NUMBER (R_H8_DIR24_20, 12) - RELOC_NUMBER (R_H8_DIR24_16, 13) - RELOC_NUMBER (R_H8_DIR24U, 14) - RELOC_NUMBER (R_H8_DIR24U_20, 15) - RELOC_NUMBER (R_H8_DIR24U_16, 16) - RELOC_NUMBER (R_H8_DIR16, 17) - RELOC_NUMBER (R_H8_DIR16U, 18) - RELOC_NUMBER (R_H8_DIR16S_32, 19) - RELOC_NUMBER (R_H8_DIR16S_28, 20) - RELOC_NUMBER (R_H8_DIR16S_24, 21) - RELOC_NUMBER (R_H8_DIR16S_20, 22) - RELOC_NUMBER (R_H8_DIR16S, 23) - RELOC_NUMBER (R_H8_DIR8, 24) - RELOC_NUMBER (R_H8_DIR8U, 25) - RELOC_NUMBER (R_H8_DIR8Z_32, 26) - RELOC_NUMBER (R_H8_DIR8Z_28, 27) - RELOC_NUMBER (R_H8_DIR8Z_24, 28) - RELOC_NUMBER (R_H8_DIR8Z_20, 29) - RELOC_NUMBER (R_H8_DIR8Z_16, 30) - RELOC_NUMBER (R_H8_PCREL16, 31) - RELOC_NUMBER (R_H8_PCREL8, 32) - RELOC_NUMBER (R_H8_BPOS, 33) - FAKE_RELOC (R_H8_FIRST_INVALID_DIR_RELOC, 34) - FAKE_RELOC (R_H8_LAST_INVALID_DIR_RELOC, 58) - RELOC_NUMBER (R_H8_DIR16A8, 59) - RELOC_NUMBER (R_H8_DIR16R8, 60) - RELOC_NUMBER (R_H8_DIR24A8, 61) - RELOC_NUMBER (R_H8_DIR24R8, 62) - RELOC_NUMBER (R_H8_DIR32A16, 63) - RELOC_NUMBER (R_H8_ABS32, 65) - RELOC_NUMBER (R_H8_ABS32A16, 127) - RELOC_NUMBER (R_H8_SYM, 128) - RELOC_NUMBER (R_H8_OPneg, 129) - RELOC_NUMBER (R_H8_OPadd, 130) - RELOC_NUMBER (R_H8_OPsub, 131) - RELOC_NUMBER (R_H8_OPmul, 132) - RELOC_NUMBER (R_H8_OPdiv, 133) - RELOC_NUMBER (R_H8_OPshla, 134) - RELOC_NUMBER (R_H8_OPshra, 135) - RELOC_NUMBER (R_H8_OPsctsize, 136) - RELOC_NUMBER (R_H8_OPhword, 137) - RELOC_NUMBER (R_H8_OPlword, 138) - RELOC_NUMBER (R_H8_OPhigh, 139) - RELOC_NUMBER (R_H8_OPlow, 140) - RELOC_NUMBER (R_H8_OPscttop, 141) -END_RELOC_NUMBERS (R_H8_max) - -/* Machine variant if we know it. This field was invented at Cygnus, - but it is hoped that other vendors will adopt it. If some standard - is developed, this code should be changed to follow it. */ - -#define EF_H8_MACH 0x00FF0000 - -#define E_H8_MACH_H8300 0x00800000 -#define E_H8_MACH_H8300H 0x00810000 -#define E_H8_MACH_H8300S 0x00820000 -#define E_H8_MACH_H8300HN 0x00830000 -#define E_H8_MACH_H8300SN 0x00840000 -#define E_H8_MACH_H8300SX 0x00850000 -#define E_H8_MACH_H8300SXN 0x00860000 - -#endif diff --git a/include/elf/hppa.h b/include/elf/hppa.h deleted file mode 100644 index c9b3200ac9e..00000000000 --- a/include/elf/hppa.h +++ /dev/null @@ -1,634 +0,0 @@ -/* HPPA ELF support for BFD. - Copyright 1993, 1994, 1995, 1998, 1999, 2000, 2005, 2006 - Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the HPPA ELF ABI. Note - that most of this is not actually implemented by BFD. */ - -#ifndef _ELF_HPPA_H -#define _ELF_HPPA_H - -/* Processor specific flags for the ELF header e_flags field. */ - -/* Trap null address dereferences. */ -#define EF_PARISC_TRAPNIL 0x00010000 - -/* .PARISC.archext section is present. */ -#define EF_PARISC_EXT 0x00020000 - -/* Program expects little-endian mode. */ -#define EF_PARISC_LSB 0x00040000 - -/* Program expects wide mode. */ -#define EF_PARISC_WIDE 0x00080000 - -/* Do not allow kernel-assisted branch prediction. */ -#define EF_PARISC_NO_KABP 0x00100000 - -/* Allow lazy swap for dynamically allocated program segments. */ -#define EF_PARISC_LAZYSWAP 0x00400000 - -/* Architecture version */ -#define EF_PARISC_ARCH 0x0000ffff - -#define EFA_PARISC_1_0 0x020b -#define EFA_PARISC_1_1 0x0210 -#define EFA_PARISC_2_0 0x0214 - -/* Special section indices. */ -/* A symbol that has been declared as a tentative definition in an ANSI C - compilation. */ -#define SHN_PARISC_ANSI_COMMON 0xff00 - -/* A symbol that has been declared as a common block using the - huge memory model. */ -#define SHN_PARISC_HUGE_COMMON 0xff01 - -/* Processor specific section types. */ - -/* Section contains product specific extension bits. */ -#define SHT_PARISC_EXT 0x70000000 - -/* Section contains unwind table entries. */ -#define SHT_PARISC_UNWIND 0x70000001 - -/* Section contains debug information for optimized code. */ -#define SHT_PARISC_DOC 0x70000002 - -/* Section contains code annotations. */ -#define SHT_PARISC_ANNOT 0x70000003 - -/* DLKM special section. */ -#define SHT_PARISC_DLKM 0x70000004 - -/* These are strictly for compatibility with the older elf32-hppa - implementation. Hopefully we can eliminate them in the future. */ -/* Optional section holding argument location/relocation info. */ -#define SHT_PARISC_SYMEXTN SHT_LOPROC + 8 - -/* Option section for linker stubs. */ -#define SHT_PARISC_STUBS SHT_LOPROC + 9 - -/* Processor specific section flags. */ - -/* Section contains code compiled for static branch prediction. */ -#define SHF_PARISC_SBP 0x80000000 - -/* Section should be allocated from from GP. */ -#define SHF_PARISC_HUGE 0x40000000 - -/* Section should go near GP. */ -#define SHF_PARISC_SHORT 0x20000000 - -/* Section is weak ordered. */ -#define SHF_PARISC_WEAKORDER 0x10000000 - -/* Identifies the entry point of a millicode routine. */ -#define STT_PARISC_MILLI 13 - -/* ELF/HPPA relocation types */ - -/* Note: PA-ELF is defined to use only RELA relocations. */ -#include "elf/reloc-macros.h" - -START_RELOC_NUMBERS (elf_hppa_reloc_type) -RELOC_NUMBER (R_PARISC_NONE, 0) /* No reloc */ - -/* Data / Inst. Format Relocation Expression */ - -RELOC_NUMBER (R_PARISC_DIR32, 1) -/* 32-bit word symbol + addend */ - -RELOC_NUMBER (R_PARISC_DIR21L, 2) -/* long immediate (7) LR(symbol, addend) */ - -RELOC_NUMBER (R_PARISC_DIR17R, 3) -/* branch external (19) RR(symbol, addend) */ - -RELOC_NUMBER (R_PARISC_DIR17F, 4) -/* branch external (19) symbol + addend */ - -RELOC_NUMBER (R_PARISC_DIR14R, 6) -/* load/store (1) RR(symbol, addend) */ - -RELOC_NUMBER (R_PARISC_DIR14F, 7) -/* load/store (1) symbol, addend */ - -/* PC-relative relocation types - Typically used for calls. - Note PCREL17C and PCREL17F differ only in overflow handling. - PCREL17C never reports a relocation error. - - When supporting argument relocations, function calls must be - accompanied by parameter relocation information. This information is - carried in the ten high-order bits of the addend field. The remaining - 22 bits of of the addend field are sign-extended to form the Addend. - - Note the code to build argument relocations depends on the - addend being zero. A consequence of this limitation is GAS - can not perform relocation reductions for function symbols. */ - -RELOC_NUMBER (R_PARISC_PCREL12F, 8) -/* op & branch (17) symbol - PC - 8 + addend */ - -RELOC_NUMBER (R_PARISC_PCREL32, 9) -/* 32-bit word symbol - PC - 8 + addend */ - -RELOC_NUMBER (R_PARISC_PCREL21L, 10) -/* long immediate (7) L(symbol - PC - 8 + addend) */ - -RELOC_NUMBER (R_PARISC_PCREL17R, 11) -/* branch external (19) R(symbol - PC - 8 + addend) */ - -RELOC_NUMBER (R_PARISC_PCREL17F, 12) -/* branch (20) symbol - PC - 8 + addend */ - -RELOC_NUMBER (R_PARISC_PCREL17C, 13) -/* branch (20) symbol - PC - 8 + addend */ - -RELOC_NUMBER (R_PARISC_PCREL14R, 14) -/* load/store (1) R(symbol - PC - 8 + addend) */ - -RELOC_NUMBER (R_PARISC_PCREL14F, 15) -/* load/store (1) symbol - PC - 8 + addend */ - - -/* DP-relative relocation types. */ -RELOC_NUMBER (R_PARISC_DPREL21L, 18) -/* long immediate (7) LR(symbol - GP, addend) */ - -RELOC_NUMBER (R_PARISC_DPREL14WR, 19) -/* load/store mod. comp. (2) RR(symbol - GP, addend) */ - -RELOC_NUMBER (R_PARISC_DPREL14DR, 20) -/* load/store doubleword (3) RR(symbol - GP, addend) */ - -RELOC_NUMBER (R_PARISC_DPREL14R, 22) -/* load/store (1) RR(symbol - GP, addend) */ - -RELOC_NUMBER (R_PARISC_DPREL14F, 23) -/* load/store (1) symbol - GP + addend */ - - -/* Data linkage table (DLT) relocation types - - SOM DLT_REL fixup requests are used to for static data references - from position-independent code within shared libraries. They are - similar to the GOT relocation types in some SVR4 implementations. */ - -RELOC_NUMBER (R_PARISC_DLTREL21L, 26) -/* long immediate (7) LR(symbol - GP, addend) */ - -RELOC_NUMBER (R_PARISC_DLTREL14R, 30) -/* load/store (1) RR(symbol - GP, addend) */ - -RELOC_NUMBER (R_PARISC_DLTREL14F, 31) -/* load/store (1) symbol - GP + addend */ - - -/* DLT indirect relocation types */ -RELOC_NUMBER (R_PARISC_DLTIND21L, 34) -/* long immediate (7) L(ltoff(symbol + addend)) */ - -RELOC_NUMBER (R_PARISC_DLTIND14R, 38) -/* load/store (1) R(ltoff(symbol + addend)) */ - -RELOC_NUMBER (R_PARISC_DLTIND14F, 39) -/* load/store (1) ltoff(symbol + addend) */ - - -/* Base relative relocation types. Ugh. These imply lots of state */ -RELOC_NUMBER (R_PARISC_SETBASE, 40) -/* none no reloc; base := sym */ - -RELOC_NUMBER (R_PARISC_SECREL32, 41) -/* 32-bit word symbol - SECT + addend */ - -RELOC_NUMBER (R_PARISC_BASEREL21L, 42) -/* long immediate (7) LR(symbol - base, addend) */ - -RELOC_NUMBER (R_PARISC_BASEREL17R, 43) -/* branch external (19) RR(symbol - base, addend) */ - -RELOC_NUMBER (R_PARISC_BASEREL17F, 44) -/* branch external (19) symbol - base + addend */ - -RELOC_NUMBER (R_PARISC_BASEREL14R, 46) -/* load/store (1) RR(symbol - base, addend) */ - -RELOC_NUMBER (R_PARISC_BASEREL14F, 47) -/* load/store (1) symbol - base, addend */ - - -/* Segment relative relocation types. */ -RELOC_NUMBER (R_PARISC_SEGBASE, 48) -/* none no relocation; SB := sym */ - -RELOC_NUMBER (R_PARISC_SEGREL32, 49) -/* 32-bit word symbol - SB + addend */ - - -/* Offsets from the PLT. */ -RELOC_NUMBER (R_PARISC_PLTOFF21L, 50) -/* long immediate (7) LR(pltoff(symbol), addend) */ - -RELOC_NUMBER (R_PARISC_PLTOFF14R, 54) -/* load/store (1) RR(pltoff(symbol), addend) */ - -RELOC_NUMBER (R_PARISC_PLTOFF14F, 55) -/* load/store (1) pltoff(symbol) + addend */ - - -RELOC_NUMBER (R_PARISC_LTOFF_FPTR32, 57) -/* 32-bit word ltoff(fptr(symbol+addend)) */ - -RELOC_NUMBER (R_PARISC_LTOFF_FPTR21L, 58) -/* long immediate (7) L(ltoff(fptr(symbol+addend))) */ - -RELOC_NUMBER (R_PARISC_LTOFF_FPTR14R, 62) -/* load/store (1) R(ltoff(fptr(symbol+addend))) */ - - -RELOC_NUMBER (R_PARISC_FPTR64, 64) -/* 64-bit doubleword fptr(symbol+addend) */ - - -/* Plabel relocation types. */ -RELOC_NUMBER (R_PARISC_PLABEL32, 65) -/* 32-bit word fptr(symbol) */ - -RELOC_NUMBER (R_PARISC_PLABEL21L, 66) -/* long immediate (7) L(fptr(symbol)) */ - -RELOC_NUMBER (R_PARISC_PLABEL14R, 70) -/* load/store (1) R(fptr(symbol)) */ - - -/* PCREL relocations. */ -RELOC_NUMBER (R_PARISC_PCREL64, 72) -/* 64-bit doubleword symbol - PC - 8 + addend */ - -RELOC_NUMBER (R_PARISC_PCREL22C, 73) -/* branch & link (21) symbol - PC - 8 + addend */ - -RELOC_NUMBER (R_PARISC_PCREL22F, 74) -/* branch & link (21) symbol - PC - 8 + addend */ - -RELOC_NUMBER (R_PARISC_PCREL14WR, 75) -/* load/store mod. comp. (2) R(symbol - PC - 8 + addend) */ - -RELOC_NUMBER (R_PARISC_PCREL14DR, 76) -/* load/store doubleword (3) R(symbol - PC - 8 + addend) */ - -RELOC_NUMBER (R_PARISC_PCREL16F, 77) -/* load/store (1) symbol - PC - 8 + addend */ - -RELOC_NUMBER (R_PARISC_PCREL16WF, 78) -/* load/store mod. comp. (2) symbol - PC - 8 + addend */ - -RELOC_NUMBER (R_PARISC_PCREL16DF, 79) -/* load/store doubleword (3) symbol - PC - 8 + addend */ - - -RELOC_NUMBER (R_PARISC_DIR64, 80) -/* 64-bit doubleword symbol + addend */ - -RELOC_NUMBER (R_PARISC_DIR14WR, 83) -/* load/store mod. comp. (2) RR(symbol, addend) */ - -RELOC_NUMBER (R_PARISC_DIR14DR, 84) -/* load/store doubleword (3) RR(symbol, addend) */ - -RELOC_NUMBER (R_PARISC_DIR16F, 85) -/* load/store (1) symbol + addend */ - -RELOC_NUMBER (R_PARISC_DIR16WF, 86) -/* load/store mod. comp. (2) symbol + addend */ - -RELOC_NUMBER (R_PARISC_DIR16DF, 87) -/* load/store doubleword (3) symbol + addend */ - -RELOC_NUMBER (R_PARISC_GPREL64, 88) -/* 64-bit doubleword symbol - GP + addend */ - -RELOC_NUMBER (R_PARISC_DLTREL14WR, 91) -/* load/store mod. comp. (2) RR(symbol - GP, addend) */ - -RELOC_NUMBER (R_PARISC_DLTREL14DR, 92) -/* load/store doubleword (3) RR(symbol - GP, addend) */ - -RELOC_NUMBER (R_PARISC_GPREL16F, 93) -/* load/store (1) symbol - GP + addend */ - -RELOC_NUMBER (R_PARISC_GPREL16WF, 94) -/* load/store mod. comp. (2) symbol - GP + addend */ - -RELOC_NUMBER (R_PARISC_GPREL16DF, 95) -/* load/store doubleword (3) symbol - GP + addend */ - - -RELOC_NUMBER (R_PARISC_LTOFF64, 96) -/* 64-bit doubleword ltoff(symbol + addend) */ - -RELOC_NUMBER (R_PARISC_DLTIND14WR, 99) -/* load/store mod. comp. (2) R(ltoff(symbol + addend)) */ - -RELOC_NUMBER (R_PARISC_DLTIND14DR, 100) -/* load/store doubleword (3) R(ltoff(symbol + addend)) */ - -RELOC_NUMBER (R_PARISC_LTOFF16F, 101) -/* load/store (1) ltoff(symbol + addend) */ - -RELOC_NUMBER (R_PARISC_LTOFF16WF, 102) -/* load/store mod. comp. (2) ltoff(symbol + addend) */ - -RELOC_NUMBER (R_PARISC_LTOFF16DF, 103) -/* load/store doubleword (3) ltoff(symbol + addend) */ - - -RELOC_NUMBER (R_PARISC_SECREL64, 104) -/* 64-bit doubleword symbol - SECT + addend */ - -RELOC_NUMBER (R_PARISC_BASEREL14WR, 107) -/* load/store mod. comp. (2) RR(symbol - base, addend) */ - -RELOC_NUMBER (R_PARISC_BASEREL14DR, 108) -/* load/store doubleword (3) RR(symbol - base, addend) */ - - -RELOC_NUMBER (R_PARISC_SEGREL64, 112) -/* 64-bit doubleword symbol - SB + addend */ - -RELOC_NUMBER (R_PARISC_PLTOFF14WR, 115) -/* load/store mod. comp. (2) RR(pltoff(symbol), addend) */ - -RELOC_NUMBER (R_PARISC_PLTOFF14DR, 116) -/* load/store doubleword (3) RR(pltoff(symbol), addend) */ - -RELOC_NUMBER (R_PARISC_PLTOFF16F, 117) -/* load/store (1) pltoff(symbol) + addend */ - -RELOC_NUMBER (R_PARISC_PLTOFF16WF, 118) -/* load/store mod. comp. (2) pltoff(symbol) + addend */ - -RELOC_NUMBER (R_PARISC_PLTOFF16DF, 119) -/* load/store doubleword (3) pltoff(symbol) + addend */ - - -RELOC_NUMBER (R_PARISC_LTOFF_FPTR64, 120) -/* 64-bit doubleword ltoff(fptr(symbol+addend)) */ - -RELOC_NUMBER (R_PARISC_LTOFF_FPTR14WR, 123) -/* load/store mod. comp. (2) R(ltoff(fptr(symbol+addend))) */ - -RELOC_NUMBER (R_PARISC_LTOFF_FPTR14DR, 124) -/* load/store doubleword (3) R(ltoff(fptr(symbol+addend))) */ - -RELOC_NUMBER (R_PARISC_LTOFF_FPTR16F, 125) -/* load/store (1) ltoff(fptr(symbol+addend)) */ - -RELOC_NUMBER (R_PARISC_LTOFF_FPTR16WF, 126) -/* load/store mod. comp. (2) ltoff(fptr(symbol+addend)) */ - -RELOC_NUMBER (R_PARISC_LTOFF_FPTR16DF, 127) -/* load/store doubleword (3) ltoff(fptr(symbol+addend)) */ - - -RELOC_NUMBER (R_PARISC_COPY, 128) -/* data Dynamic relocations only */ - -RELOC_NUMBER (R_PARISC_IPLT, 129) -/* plt */ - -RELOC_NUMBER (R_PARISC_EPLT, 130) -/* plt */ - - -RELOC_NUMBER (R_PARISC_TPREL32, 153) -/* 32-bit word symbol - TP + addend */ - -RELOC_NUMBER (R_PARISC_TPREL21L, 154) -/* long immediate (7) LR(symbol - TP, addend) */ - -RELOC_NUMBER (R_PARISC_TPREL14R, 158) -/* load/store (1) RR(symbol - TP, addend) */ - - -RELOC_NUMBER (R_PARISC_LTOFF_TP21L, 162) -/* long immediate (7) L(ltoff(symbol - TP + addend)) */ - -RELOC_NUMBER (R_PARISC_LTOFF_TP14R, 166) -/* load/store (1) R(ltoff(symbol - TP + addend)) */ - -RELOC_NUMBER (R_PARISC_LTOFF_TP14F, 167) -/* load/store (1) ltoff(symbol - TP + addend) */ - - -RELOC_NUMBER (R_PARISC_TPREL64, 216) -/* 64-bit word symbol - TP + addend */ - -RELOC_NUMBER (R_PARISC_TPREL14WR, 219) -/* load/store mod. comp. (2) RR(symbol - TP, addend) */ - -RELOC_NUMBER (R_PARISC_TPREL14DR, 220) -/* load/store doubleword (3) RR(symbol - TP, addend) */ - -RELOC_NUMBER (R_PARISC_TPREL16F, 221) -/* load/store (1) symbol - TP + addend */ - -RELOC_NUMBER (R_PARISC_TPREL16WF, 222) -/* load/store mod. comp. (2) symbol - TP + addend */ - -RELOC_NUMBER (R_PARISC_TPREL16DF, 223) -/* load/store doubleword (3) symbol - TP + addend */ - - -RELOC_NUMBER (R_PARISC_LTOFF_TP64, 224) -/* 64-bit doubleword ltoff(symbol - TP + addend) */ - -RELOC_NUMBER (R_PARISC_LTOFF_TP14WR, 227) -/* load/store mod. comp. (2) R(ltoff(symbol - TP + addend)) */ - -RELOC_NUMBER (R_PARISC_LTOFF_TP14DR, 228) -/* load/store doubleword (3) R(ltoff(symbol - TP + addend)) */ - -RELOC_NUMBER (R_PARISC_LTOFF_TP16F, 229) -/* load/store (1) ltoff(symbol - TP + addend) */ - -RELOC_NUMBER (R_PARISC_LTOFF_TP16WF, 230) -/* load/store mod. comp. (2) ltoff(symbol - TP + addend) */ - -RELOC_NUMBER (R_PARISC_LTOFF_TP16DF, 231) -/* load/store doubleword (3) ltoff(symbol - TP + addend) */ - -RELOC_NUMBER (R_PARISC_GNU_VTENTRY, 232) -RELOC_NUMBER (R_PARISC_GNU_VTINHERIT, 233) - -RELOC_NUMBER (R_PARISC_TLS_GD21L, 234) -RELOC_NUMBER (R_PARISC_TLS_GD14R, 235) -RELOC_NUMBER (R_PARISC_TLS_GDCALL, 236) -RELOC_NUMBER (R_PARISC_TLS_LDM21L, 237) -RELOC_NUMBER (R_PARISC_TLS_LDM14R, 238) -RELOC_NUMBER (R_PARISC_TLS_LDMCALL, 239) -RELOC_NUMBER (R_PARISC_TLS_LDO21L, 240) -RELOC_NUMBER (R_PARISC_TLS_LDO14R, 241) -RELOC_NUMBER (R_PARISC_TLS_DTPMOD32, 242) -RELOC_NUMBER (R_PARISC_TLS_DTPMOD64, 243) -RELOC_NUMBER (R_PARISC_TLS_DTPOFF32, 244) -RELOC_NUMBER (R_PARISC_TLS_DTPOFF64, 245) - -END_RELOC_NUMBERS (R_PARISC_UNIMPLEMENTED) - -#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L -#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R -#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L -#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R -#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32 -#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64 - -#ifndef RELOC_MACROS_GEN_FUNC -typedef enum elf_hppa_reloc_type elf_hppa_reloc_type; -#endif - -#define PT_PARISC_ARCHEXT 0x70000000 -#define PT_PARISC_UNWIND 0x70000001 -#define PT_PARISC_WEAKORDER 0x70000002 - -/* Flag bits in sh_flags of ElfXX_Shdr. */ -#define SHF_HP_TLS 0x01000000 -#define SHF_HP_NEAR_SHARED 0x02000000 -#define SHF_HP_FAR_SHARED 0x04000000 -#define SHF_HP_COMDAT 0x08000000 -#define SHF_HP_CONST 0x00800000 - -/* Reserved section header indices. */ -#define SHN_TLS_COMMON (SHN_LOOS + 0x0) -#define SHN_NS_COMMON (SHN_LOOS + 0x1) -#define SHN_FS_COMMON (SHN_LOOS + 0x2) -#define SHN_NS_UNDEF (SHN_LOOS + 0x3) -#define SHN_FS_UNDEF (SHN_LOOS + 0x4) -#define SHN_HP_EXTERN (SHN_LOOS + 0x5) -#define SHN_HP_EXTHINT (SHN_LOOS + 0x6) -#define SHN_HP_UNDEF_BIND_IMM (SHN_LOOS + 0x7) - -/* Values of sh_type in ElfXX_Shdr. */ -#define SHT_HP_OVLBITS (SHT_LOOS + 0x0) -#define SHT_HP_DLKM (SHT_LOOS + 0x1) -#define SHT_HP_COMDAT (SHT_LOOS + 0x2) -#define SHT_HP_OBJDICT (SHT_LOOS + 0x3) -#define SHT_HP_ANNOT (SHT_LOOS + 0x4) - -/* Flag bits in p_flags of ElfXX_Phdr. */ -#define PF_HP_CODE 0x00040000 -#define PF_HP_MODIFY 0x00080000 -#define PF_HP_PAGE_SIZE 0x00100000 -#define PF_HP_FAR_SHARED 0x00200000 -#define PF_HP_NEAR_SHARED 0x00400000 -#define PF_HP_LAZYSWAP 0x00800000 -#define PF_HP_CODE_DEPR 0x01000000 -#define PF_HP_MODIFY_DEPR 0x02000000 -#define PF_HP_LAZYSWAP_DEPR 0x04000000 -#define PF_PARISC_SBP 0x08000000 -#define PF_HP_SBP 0x08000000 - - -/* Processor specific dynamic array tags. */ - -/* Arggh. HP's tools define these symbols based on the - old value of DT_LOOS. So we must do the same to be - compatible. */ -#define DT_HP_LOAD_MAP (OLD_DT_LOOS + 0x0) -#define DT_HP_DLD_FLAGS (OLD_DT_LOOS + 0x1) -#define DT_HP_DLD_HOOK (OLD_DT_LOOS + 0x2) -#define DT_HP_UX10_INIT (OLD_DT_LOOS + 0x3) -#define DT_HP_UX10_INITSZ (OLD_DT_LOOS + 0x4) -#define DT_HP_PREINIT (OLD_DT_LOOS + 0x5) -#define DT_HP_PREINITSZ (OLD_DT_LOOS + 0x6) -#define DT_HP_NEEDED (OLD_DT_LOOS + 0x7) -#define DT_HP_TIME_STAMP (OLD_DT_LOOS + 0x8) -#define DT_HP_CHECKSUM (OLD_DT_LOOS + 0x9) -#define DT_HP_GST_SIZE (OLD_DT_LOOS + 0xa) -#define DT_HP_GST_VERSION (OLD_DT_LOOS + 0xb) -#define DT_HP_GST_HASHVAL (OLD_DT_LOOS + 0xc) -#define DT_HP_EPLTREL (OLD_DT_LOOS + 0xd) -#define DT_HP_EPLTRELSZ (OLD_DT_LOOS + 0xe) -#define DT_HP_FILTERED (OLD_DT_LOOS + 0xf) -#define DT_HP_FILTER_TLS (OLD_DT_LOOS + 0x10) -#define DT_HP_COMPAT_FILTERED (OLD_DT_LOOS + 0x11) -#define DT_HP_LAZYLOAD (OLD_DT_LOOS + 0x12) -#define DT_HP_BIND_NOW_COUNT (OLD_DT_LOOS + 0x13) -#define DT_PLT (OLD_DT_LOOS + 0x14) -#define DT_PLT_SIZE (OLD_DT_LOOS + 0x15) -#define DT_DLT (OLD_DT_LOOS + 0x16) -#define DT_DLT_SIZE (OLD_DT_LOOS + 0x17) - -/* Values for DT_HP_DLD_FLAGS. */ -#define DT_HP_DEBUG_PRIVATE 0x00001 /* Map text private */ -#define DT_HP_DEBUG_CALLBACK 0x00002 /* Callback */ -#define DT_HP_DEBUG_CALLBACK_BOR 0x00004 /* BOR callback */ -#define DT_HP_NO_ENVVAR 0x00008 /* No env var */ -#define DT_HP_BIND_NOW 0x00010 /* Bind now */ -#define DT_HP_BIND_NONFATAL 0x00020 /* Bind non-fatal */ -#define DT_HP_BIND_VERBOSE 0x00040 /* Bind verbose */ -#define DT_HP_BIND_RESTRICTED 0x00080 /* Bind restricted */ -#define DT_HP_BIND_SYMBOLIC 0x00100 /* Bind symbolic */ -#define DT_HP_RPATH_FIRST 0x00200 /* RPATH first */ -#define DT_HP_BIND_DEPTH_FIRST 0x00400 /* Bind depth-first */ -#define DT_HP_GST 0x00800 /* Dld global sym table */ -#define DT_HP_SHLIB_FIXED 0x01000 /* shared vtable support */ -#define DT_HP_MERGE_SHLIB_SEG 0x02000 /* merge shlib data segs */ -#define DT_HP_NODELETE 0x04000 /* never unload */ -#define DT_HP_GROUP 0x08000 /* bind only within group */ -#define DT_HP_PROTECT_LINKAGE_TABLE 0x10000 /* protected linkage table */ - -/* Program header extensions. */ -#define PT_HP_TLS (PT_LOOS + 0x0) -#define PT_HP_CORE_NONE (PT_LOOS + 0x1) -#define PT_HP_CORE_VERSION (PT_LOOS + 0x2) -#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3) -#define PT_HP_CORE_COMM (PT_LOOS + 0x4) -#define PT_HP_CORE_PROC (PT_LOOS + 0x5) -#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6) -#define PT_HP_CORE_STACK (PT_LOOS + 0x7) -#define PT_HP_CORE_SHM (PT_LOOS + 0x8) -#define PT_HP_CORE_MMF (PT_LOOS + 0x9) -#define PT_HP_PARALLEL (PT_LOOS + 0x10) -#define PT_HP_FASTBIND (PT_LOOS + 0x11) -#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12) -#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13) -#define PT_HP_STACK (PT_LOOS + 0x14) -#define PT_HP_CORE_UTSNAME (PT_LOOS + 0x15) - -/* Binding information. */ -#define STB_HP_ALIAS (STB_LOOS + 0x0) - -/* Additional symbol types. */ -#define STT_HP_OPAQUE (STT_LOOS + 0x1) -#define STT_HP_STUB (STT_LOOS + 0x2) - -/* Note types. */ -#define NT_HP_COMPILER 1 -#define NT_HP_COPYRIGHT 2 -#define NT_HP_VERSION 3 -#define NT_HP_SRCFILE_INFO 4 -#define NT_HP_LINKER 5 -#define NT_HP_INSTRUMENTED 6 -#define NT_HP_UX_OPTIONS 7 - -#endif /* _ELF_HPPA_H */ diff --git a/include/elf/i370.h b/include/elf/i370.h deleted file mode 100644 index 27bfdccc81a..00000000000 --- a/include/elf/i370.h +++ /dev/null @@ -1,68 +0,0 @@ -/* i370 ELF support for BFD. - Copyright 2000, 2002 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the i370 ELF ABI. Note - that most of this is not actually implemented by BFD. */ - -#ifndef _ELF_I370_H -#define _ELF_I370_H - -#include "elf/reloc-macros.h" - -/* Processor specific section headers, sh_type field */ - -#define SHT_ORDERED SHT_HIPROC /* Link editor is to sort the \ - entries in this section \ - based on the address \ - specified in the associated \ - symbol table entry. */ - -#define EF_I370_RELOCATABLE 0x00010000 /* i370 -mrelocatable flag */ -#define EF_I370_RELOCATABLE_LIB 0x00008000 /* i370 -mrelocatable-lib flag */ -/* Processor specific section flags, sh_flags field */ - -#define SHF_EXCLUDE 0x80000000 /* Link editor is to exclude \ - this section from executable \ - and shared objects that it \ - builds when those objects \ - are not to be furhter \ - relocated. */ - -/* i370 relocations - Note that there is really just one relocation that we currently - support (and only one that we seem to need, at the moment), and - that is the 31-bit address relocation. Note that the 370/390 - only supports a 31-bit (2GB) address space. */ - -START_RELOC_NUMBERS (i370_reloc_type) - RELOC_NUMBER (R_I370_NONE, 0) - RELOC_NUMBER (R_I370_ADDR31, 1) - RELOC_NUMBER (R_I370_ADDR32, 2) - RELOC_NUMBER (R_I370_ADDR16, 3) - RELOC_NUMBER (R_I370_REL31, 4) - RELOC_NUMBER (R_I370_REL32, 5) - RELOC_NUMBER (R_I370_ADDR12, 6) - RELOC_NUMBER (R_I370_REL12, 7) - RELOC_NUMBER (R_I370_ADDR8, 8) - RELOC_NUMBER (R_I370_REL8, 9) - RELOC_NUMBER (R_I370_COPY, 10) - RELOC_NUMBER (R_I370_RELATIVE, 11) -END_RELOC_NUMBERS (R_I370_max) - -#endif /* _ELF_I370_H */ diff --git a/include/elf/i386.h b/include/elf/i386.h deleted file mode 100644 index e167871f34a..00000000000 --- a/include/elf/i386.h +++ /dev/null @@ -1,78 +0,0 @@ -/* ix86 ELF support for BFD. - Copyright 1998, 1999, 2000, 2002, 2004, 2005, 2006 - Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_I386_H -#define _ELF_I386_H - -#include "elf/reloc-macros.h" - -START_RELOC_NUMBERS (elf_i386_reloc_type) - RELOC_NUMBER (R_386_NONE, 0) /* No reloc */ - RELOC_NUMBER (R_386_32, 1) /* Direct 32 bit */ - RELOC_NUMBER (R_386_PC32, 2) /* PC relative 32 bit */ - RELOC_NUMBER (R_386_GOT32, 3) /* 32 bit GOT entry */ - RELOC_NUMBER (R_386_PLT32, 4) /* 32 bit PLT address */ - RELOC_NUMBER (R_386_COPY, 5) /* Copy symbol at runtime */ - RELOC_NUMBER (R_386_GLOB_DAT, 6) /* Create GOT entry */ - RELOC_NUMBER (R_386_JUMP_SLOT, 7) /* Create PLT entry */ - RELOC_NUMBER (R_386_RELATIVE, 8) /* Adjust by program base */ - RELOC_NUMBER (R_386_GOTOFF, 9) /* 32 bit offset to GOT */ - RELOC_NUMBER (R_386_GOTPC, 10) /* 32 bit PC relative offset to GOT */ - RELOC_NUMBER (R_386_32PLT, 11) /* Used by Sun */ - FAKE_RELOC (FIRST_INVALID_RELOC, 12) - FAKE_RELOC (LAST_INVALID_RELOC, 13) - RELOC_NUMBER (R_386_TLS_TPOFF,14) - RELOC_NUMBER (R_386_TLS_IE, 15) - RELOC_NUMBER (R_386_TLS_GOTIE,16) - RELOC_NUMBER (R_386_TLS_LE, 17) - RELOC_NUMBER (R_386_TLS_GD, 18) - RELOC_NUMBER (R_386_TLS_LDM, 19) - RELOC_NUMBER (R_386_16, 20) - RELOC_NUMBER (R_386_PC16, 21) - RELOC_NUMBER (R_386_8, 22) - RELOC_NUMBER (R_386_PC8, 23) - RELOC_NUMBER (R_386_TLS_GD_32, 24) - RELOC_NUMBER (R_386_TLS_GD_PUSH, 25) - RELOC_NUMBER (R_386_TLS_GD_CALL, 26) - RELOC_NUMBER (R_386_TLS_GD_POP, 27) - RELOC_NUMBER (R_386_TLS_LDM_32, 28) - RELOC_NUMBER (R_386_TLS_LDM_PUSH, 29) - RELOC_NUMBER (R_386_TLS_LDM_CALL, 30) - RELOC_NUMBER (R_386_TLS_LDM_POP, 31) - RELOC_NUMBER (R_386_TLS_LDO_32, 32) - RELOC_NUMBER (R_386_TLS_IE_32, 33) - RELOC_NUMBER (R_386_TLS_LE_32, 34) - RELOC_NUMBER (R_386_TLS_DTPMOD32, 35) - RELOC_NUMBER (R_386_TLS_DTPOFF32, 36) - RELOC_NUMBER (R_386_TLS_TPOFF32, 37) -/* 38 */ - RELOC_NUMBER (R_386_TLS_GOTDESC, 39) - RELOC_NUMBER (R_386_TLS_DESC_CALL,40) - RELOC_NUMBER (R_386_TLS_DESC, 41) - - /* Used by Intel. */ - RELOC_NUMBER (R_386_USED_BY_INTEL_200, 200) - - /* These are GNU extensions to enable C++ vtable garbage collection. */ - RELOC_NUMBER (R_386_GNU_VTINHERIT, 250) - RELOC_NUMBER (R_386_GNU_VTENTRY, 251) -END_RELOC_NUMBERS (R_386_max) - -#endif diff --git a/include/elf/i860.h b/include/elf/i860.h deleted file mode 100644 index 9e76dcda77b..00000000000 --- a/include/elf/i860.h +++ /dev/null @@ -1,66 +0,0 @@ -/* i860 ELF support for BFD. - Copyright 2000 Free Software Foundation, Inc. - - Contributed by Jason Eckhardt . - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_I860_H -#define _ELF_I860_H - -/* Note: i860 ELF is defined to use only RELA relocations. */ - -#include "elf/reloc-macros.h" - -START_RELOC_NUMBERS (elf_i860_reloc_type) - RELOC_NUMBER (R_860_NONE, 0x00) /* No reloc */ - RELOC_NUMBER (R_860_32, 0x01) /* S+A */ - RELOC_NUMBER (R_860_COPY, 0x02) /* No calculation */ - RELOC_NUMBER (R_860_GLOB_DAT, 0x03) /* S, Create GOT entry */ - RELOC_NUMBER (R_860_JUMP_SLOT, 0x04) /* S+A, Create PLT entry */ - RELOC_NUMBER (R_860_RELATIVE, 0x05) /* B+A, Adj by program base */ - RELOC_NUMBER (R_860_PC26, 0x30) /* (S+A-P) >> 2 */ - RELOC_NUMBER (R_860_PLT26, 0x31) /* (L+A-P) >> 2 */ - RELOC_NUMBER (R_860_PC16, 0x32) /* (S+A-P) >> 2 */ - RELOC_NUMBER (R_860_LOW0, 0x40) /* S+A */ - RELOC_NUMBER (R_860_SPLIT0, 0x42) /* S+A */ - RELOC_NUMBER (R_860_LOW1, 0x44) /* S+A */ - RELOC_NUMBER (R_860_SPLIT1, 0x46) /* S+A */ - RELOC_NUMBER (R_860_LOW2, 0x48) /* S+A */ - RELOC_NUMBER (R_860_SPLIT2, 0x4A) /* S+A */ - RELOC_NUMBER (R_860_LOW3, 0x4C) /* S+A */ - RELOC_NUMBER (R_860_LOGOT0, 0x50) /* G */ - RELOC_NUMBER (R_860_SPGOT0, 0x52) /* G */ - RELOC_NUMBER (R_860_LOGOT1, 0x54) /* G */ - RELOC_NUMBER (R_860_SPGOT1, 0x56) /* G */ - RELOC_NUMBER (R_860_LOGOTOFF0, 0x60) /* O */ - RELOC_NUMBER (R_860_SPGOTOFF0, 0x62) /* O */ - RELOC_NUMBER (R_860_LOGOTOFF1, 0x64) /* O */ - RELOC_NUMBER (R_860_SPGOTOFF1, 0x66) /* O */ - RELOC_NUMBER (R_860_LOGOTOFF2, 0x68) /* O */ - RELOC_NUMBER (R_860_LOGOTOFF3, 0x6C) /* O */ - RELOC_NUMBER (R_860_LOPC, 0x70) /* (S+A-P) >> 2 */ - RELOC_NUMBER (R_860_HIGHADJ, 0x80) /* hiadj(S+A) */ - RELOC_NUMBER (R_860_HAGOT, 0x90) /* hiadj(G) */ - RELOC_NUMBER (R_860_HAGOTOFF, 0xA0) /* hiadj(O) */ - RELOC_NUMBER (R_860_HAPC, 0xB0) /* hiadj((S+A-P) >> 2) */ - RELOC_NUMBER (R_860_HIGH, 0xC0) /* (S+A) >> 16 */ - RELOC_NUMBER (R_860_HIGOT, 0xD0) /* G >> 16 */ - RELOC_NUMBER (R_860_HIGOTOFF, 0xE0) /* O */ -END_RELOC_NUMBERS (R_860_max) - -#endif diff --git a/include/elf/i960.h b/include/elf/i960.h deleted file mode 100644 index b96aae9d382..00000000000 --- a/include/elf/i960.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Intel 960 ELF support for BFD. - Copyright 1999, 2000 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_I960_H -#define _ELF_I960_H - -#include "elf/reloc-macros.h" - - -START_RELOC_NUMBERS (elf_i960_reloc_type) - RELOC_NUMBER (R_960_NONE, 0) - RELOC_NUMBER (R_960_12, 1) - RELOC_NUMBER (R_960_32, 2) - RELOC_NUMBER (R_960_IP24, 3) - RELOC_NUMBER (R_960_SUB, 4) - RELOC_NUMBER (R_960_OPTCALL, 5) - RELOC_NUMBER (R_960_OPTCALLX, 6) - RELOC_NUMBER (R_960_OPTCALLXA, 7) -END_RELOC_NUMBERS (R_960_max) - -#endif /* _ELF_I960_H */ diff --git a/include/elf/ia64.h b/include/elf/ia64.h deleted file mode 100644 index c63edc31561..00000000000 --- a/include/elf/ia64.h +++ /dev/null @@ -1,219 +0,0 @@ -/* IA-64 ELF support for BFD. - Copyright 1998, 1999, 2000, 2001, 2002, 2003 - Free Software Foundation, Inc. - Contributed by David Mosberger-Tang - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_IA64_H -#define _ELF_IA64_H - -/* Bits in the e_flags field of the Elf64_Ehdr: */ - -#define EF_IA_64_MASKOS 0x0000000f /* OS-specific flags. */ -#define EF_IA_64_ARCH 0xff000000 /* Arch. version mask. */ - -/* ??? These four definitions are not part of the SVR4 ABI. - They were present in David's initial code drop, so it is probable - that they are used by HP/UX. */ -#define EF_IA_64_TRAPNIL (1 << 0) /* Trap NIL pointer dereferences. */ -#define EF_IA_64_EXT (1 << 2) /* Program uses arch. extensions. */ -#define EF_IA_64_BE (1 << 3) /* PSR BE bit set (big-endian). */ -#define EFA_IA_64_EAS2_3 0x23000000 /* IA64 EAS 2.3. */ - -#define EF_IA_64_ABI64 (1 << 4) /* 64-bit ABI. */ -/* Not used yet. */ -#define EF_IA_64_REDUCEDFP (1 << 5) /* Only FP6-FP11 used. */ -#define EF_IA_64_CONS_GP (1 << 6) /* gp as program wide constant. */ -#define EF_IA_64_NOFUNCDESC_CONS_GP (1 << 7) /* And no function descriptors. */ -/* Not used yet. */ -#define EF_IA_64_ABSOLUTE (1 << 8) /* Load at absolute addresses. */ - -#define ELF_STRING_ia64_archext ".IA_64.archext" -#define ELF_STRING_ia64_pltoff ".IA_64.pltoff" -#define ELF_STRING_ia64_unwind ".IA_64.unwind" -#define ELF_STRING_ia64_unwind_info ".IA_64.unwind_info" -#define ELF_STRING_ia64_unwind_once ".gnu.linkonce.ia64unw." -#define ELF_STRING_ia64_unwind_info_once ".gnu.linkonce.ia64unwi." -/* .IA_64.unwind_hdr is only used by HP-UX. */ -#define ELF_STRING_ia64_unwind_hdr ".IA_64.unwind_hdr" - -/* Bits in the sh_flags field of Elf64_Shdr: */ - -#define SHF_IA_64_SHORT 0x10000000 /* Section near gp. */ -#define SHF_IA_64_NORECOV 0x20000000 /* Spec insns w/o recovery. */ - -#define SHF_IA_64_HP_TLS 0x01000000 /* HP specific TLS flag. */ - -/* Possible values for sh_type in Elf64_Shdr: */ - -#define SHT_IA_64_EXT (SHT_LOPROC + 0) /* Extension bits. */ -#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) /* Unwind bits. */ -#define SHT_IA_64_LOPSREG (SHT_LOPROC + 0x8000000) -/* ABI says (SHT_LOPROC + 0xfffffff) but I think it's a typo -- this makes sense. */ -#define SHT_IA_64_HIPSREG (SHT_LOPROC + 0x8ffffff) -#define SHT_IA_64_PRIORITY_INIT (SHT_LOPROC + 0x9000000) - -/* SHT_IA_64_HP_OPT_ANOT is only generated by HPUX compilers for its - optimization annotation section. GCC does not generate it but we - want readelf to know what they are. Do not use two capital Ns in - annotate or sed will turn it into 32 or 64 during the build. */ -#define SHT_IA_64_HP_OPT_ANOT 0x60000004 - -/* Bits in the p_flags field of Elf64_Phdr: */ - -#define PF_IA_64_NORECOV 0x80000000 - -/* Possible values for p_type in Elf64_Phdr: */ - -#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) /* Arch extension bits, */ -#define PT_IA_64_UNWIND (PT_LOPROC + 1) /* IA64 unwind bits. */ - -/* HP-UX specific values for p_type in Elf64_Phdr. - These values are currently just used to make - readelf more usable on HP-UX. */ - -#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12) -#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13) -#define PT_IA_64_HP_STACK (PT_LOOS + 0x14) - -/* Possible values for d_tag in Elf64_Dyn: */ - -#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) - -/* This section only used by HP-UX, The HP linker gives weak symbols - precedence over regular common symbols. We want common to override - weak. Using this common instead of SHN_COMMON does that. */ -#define SHN_IA_64_ANSI_COMMON 0xFF00 - -/* IA64-specific relocation types: */ - -/* Relocs apply to specific instructions within a bundle. The least - significant 2 bits of the address indicate which instruction in the - bundle the reloc refers to (0=first slot, 1=second slow, 2=third - slot, 3=undefined) and the remaining bits give the address of the - bundle (16 byte aligned). - - The top 5 bits of the reloc code specifies the expression type, the - low 3 bits the format of the data word being relocated. */ - -#include "elf/reloc-macros.h" - -START_RELOC_NUMBERS (elf_ia64_reloc_type) - RELOC_NUMBER (R_IA64_NONE, 0x00) /* none */ - - RELOC_NUMBER (R_IA64_IMM14, 0x21) /* symbol + addend, add imm14 */ - RELOC_NUMBER (R_IA64_IMM22, 0x22) /* symbol + addend, add imm22 */ - RELOC_NUMBER (R_IA64_IMM64, 0x23) /* symbol + addend, mov imm64 */ - RELOC_NUMBER (R_IA64_DIR32MSB, 0x24) /* symbol + addend, data4 MSB */ - RELOC_NUMBER (R_IA64_DIR32LSB, 0x25) /* symbol + addend, data4 LSB */ - RELOC_NUMBER (R_IA64_DIR64MSB, 0x26) /* symbol + addend, data8 MSB */ - RELOC_NUMBER (R_IA64_DIR64LSB, 0x27) /* symbol + addend, data8 LSB */ - - RELOC_NUMBER (R_IA64_GPREL22, 0x2a) /* @gprel(sym+add), add imm22 */ - RELOC_NUMBER (R_IA64_GPREL64I, 0x2b) /* @gprel(sym+add), mov imm64 */ - RELOC_NUMBER (R_IA64_GPREL32MSB, 0x2c) /* @gprel(sym+add), data4 MSB */ - RELOC_NUMBER (R_IA64_GPREL32LSB, 0x2d) /* @gprel(sym+add), data4 LSB */ - RELOC_NUMBER (R_IA64_GPREL64MSB, 0x2e) /* @gprel(sym+add), data8 MSB */ - RELOC_NUMBER (R_IA64_GPREL64LSB, 0x2f) /* @gprel(sym+add), data8 LSB */ - - RELOC_NUMBER (R_IA64_LTOFF22, 0x32) /* @ltoff(sym+add), add imm22 */ - RELOC_NUMBER (R_IA64_LTOFF64I, 0x33) /* @ltoff(sym+add), mov imm64 */ - - RELOC_NUMBER (R_IA64_PLTOFF22, 0x3a) /* @pltoff(sym+add), add imm22 */ - RELOC_NUMBER (R_IA64_PLTOFF64I, 0x3b) /* @pltoff(sym+add), mov imm64 */ - RELOC_NUMBER (R_IA64_PLTOFF64MSB, 0x3e) /* @pltoff(sym+add), data8 MSB */ - RELOC_NUMBER (R_IA64_PLTOFF64LSB, 0x3f) /* @pltoff(sym+add), data8 LSB */ - - RELOC_NUMBER (R_IA64_FPTR64I, 0x43) /* @fptr(sym+add), mov imm64 */ - RELOC_NUMBER (R_IA64_FPTR32MSB, 0x44) /* @fptr(sym+add), data4 MSB */ - RELOC_NUMBER (R_IA64_FPTR32LSB, 0x45) /* @fptr(sym+add), data4 LSB */ - RELOC_NUMBER (R_IA64_FPTR64MSB, 0x46) /* @fptr(sym+add), data8 MSB */ - RELOC_NUMBER (R_IA64_FPTR64LSB, 0x47) /* @fptr(sym+add), data8 LSB */ - - RELOC_NUMBER (R_IA64_PCREL60B, 0x48) /* @pcrel(sym+add), brl */ - RELOC_NUMBER (R_IA64_PCREL21B, 0x49) /* @pcrel(sym+add), ptb, call */ - RELOC_NUMBER (R_IA64_PCREL21M, 0x4a) /* @pcrel(sym+add), chk.s */ - RELOC_NUMBER (R_IA64_PCREL21F, 0x4b) /* @pcrel(sym+add), fchkf */ - RELOC_NUMBER (R_IA64_PCREL32MSB, 0x4c) /* @pcrel(sym+add), data4 MSB */ - RELOC_NUMBER (R_IA64_PCREL32LSB, 0x4d) /* @pcrel(sym+add), data4 LSB */ - RELOC_NUMBER (R_IA64_PCREL64MSB, 0x4e) /* @pcrel(sym+add), data8 MSB */ - RELOC_NUMBER (R_IA64_PCREL64LSB, 0x4f) /* @pcrel(sym+add), data8 LSB */ - - RELOC_NUMBER (R_IA64_LTOFF_FPTR22, 0x52) /* @ltoff(@fptr(s+a)), imm22 */ - RELOC_NUMBER (R_IA64_LTOFF_FPTR64I, 0x53) /* @ltoff(@fptr(s+a)), imm64 */ - RELOC_NUMBER (R_IA64_LTOFF_FPTR32MSB, 0x54) /* @ltoff(@fptr(s+a)), 4 MSB */ - RELOC_NUMBER (R_IA64_LTOFF_FPTR32LSB, 0x55) /* @ltoff(@fptr(s+a)), 4 LSB */ - RELOC_NUMBER (R_IA64_LTOFF_FPTR64MSB, 0x56) /* @ltoff(@fptr(s+a)), 8 MSB */ - RELOC_NUMBER (R_IA64_LTOFF_FPTR64LSB, 0x57) /* @ltoff(@fptr(s+a)), 8 LSB */ - - RELOC_NUMBER (R_IA64_SEGREL32MSB, 0x5c) /* @segrel(sym+add), data4 MSB */ - RELOC_NUMBER (R_IA64_SEGREL32LSB, 0x5d) /* @segrel(sym+add), data4 LSB */ - RELOC_NUMBER (R_IA64_SEGREL64MSB, 0x5e) /* @segrel(sym+add), data8 MSB */ - RELOC_NUMBER (R_IA64_SEGREL64LSB, 0x5f) /* @segrel(sym+add), data8 LSB */ - - RELOC_NUMBER (R_IA64_SECREL32MSB, 0x64) /* @secrel(sym+add), data4 MSB */ - RELOC_NUMBER (R_IA64_SECREL32LSB, 0x65) /* @secrel(sym+add), data4 LSB */ - RELOC_NUMBER (R_IA64_SECREL64MSB, 0x66) /* @secrel(sym+add), data8 MSB */ - RELOC_NUMBER (R_IA64_SECREL64LSB, 0x67) /* @secrel(sym+add), data8 LSB */ - - RELOC_NUMBER (R_IA64_REL32MSB, 0x6c) /* data 4 + REL */ - RELOC_NUMBER (R_IA64_REL32LSB, 0x6d) /* data 4 + REL */ - RELOC_NUMBER (R_IA64_REL64MSB, 0x6e) /* data 8 + REL */ - RELOC_NUMBER (R_IA64_REL64LSB, 0x6f) /* data 8 + REL */ - - RELOC_NUMBER (R_IA64_LTV32MSB, 0x74) /* symbol + addend, data4 MSB */ - RELOC_NUMBER (R_IA64_LTV32LSB, 0x75) /* symbol + addend, data4 LSB */ - RELOC_NUMBER (R_IA64_LTV64MSB, 0x76) /* symbol + addend, data8 MSB */ - RELOC_NUMBER (R_IA64_LTV64LSB, 0x77) /* symbol + addend, data8 LSB */ - - RELOC_NUMBER (R_IA64_PCREL21BI, 0x79) /* @pcrel(sym+add), ptb, call */ - RELOC_NUMBER (R_IA64_PCREL22, 0x7a) /* @pcrel(sym+add), imm22 */ - RELOC_NUMBER (R_IA64_PCREL64I, 0x7b) /* @pcrel(sym+add), imm64 */ - - RELOC_NUMBER (R_IA64_IPLTMSB, 0x80) /* dynamic reloc, imported PLT, MSB */ - RELOC_NUMBER (R_IA64_IPLTLSB, 0x81) /* dynamic reloc, imported PLT, LSB */ - RELOC_NUMBER (R_IA64_COPY, 0x84) /* dynamic reloc, data copy */ - RELOC_NUMBER (R_IA64_LTOFF22X, 0x86) /* LTOFF22, relaxable. */ - RELOC_NUMBER (R_IA64_LDXMOV, 0x87) /* Use of LTOFF22X. */ - - RELOC_NUMBER (R_IA64_TPREL14, 0x91) /* @tprel(sym+add), add imm14 */ - RELOC_NUMBER (R_IA64_TPREL22, 0x92) /* @tprel(sym+add), add imm22 */ - RELOC_NUMBER (R_IA64_TPREL64I, 0x93) /* @tprel(sym+add), add imm64 */ - RELOC_NUMBER (R_IA64_TPREL64MSB, 0x96) /* @tprel(sym+add), data8 MSB */ - RELOC_NUMBER (R_IA64_TPREL64LSB, 0x97) /* @tprel(sym+add), data8 LSB */ - - RELOC_NUMBER (R_IA64_LTOFF_TPREL22, 0x9a) /* @ltoff(@tprel(s+a)), add imm22 */ - - RELOC_NUMBER (R_IA64_DTPMOD64MSB, 0xa6) /* @dtpmod(sym+add), data8 MSB */ - RELOC_NUMBER (R_IA64_DTPMOD64LSB, 0xa7) /* @dtpmod(sym+add), data8 LSB */ - RELOC_NUMBER (R_IA64_LTOFF_DTPMOD22, 0xaa) /* @ltoff(@dtpmod(s+a)), imm22 */ - - RELOC_NUMBER (R_IA64_DTPREL14, 0xb1) /* @dtprel(sym+add), imm14 */ - RELOC_NUMBER (R_IA64_DTPREL22, 0xb2) /* @dtprel(sym+add), imm22 */ - RELOC_NUMBER (R_IA64_DTPREL64I, 0xb3) /* @dtprel(sym+add), imm64 */ - RELOC_NUMBER (R_IA64_DTPREL32MSB, 0xb4) /* @dtprel(sym+add), data4 MSB */ - RELOC_NUMBER (R_IA64_DTPREL32LSB, 0xb5) /* @dtprel(sym+add), data4 LSB */ - RELOC_NUMBER (R_IA64_DTPREL64MSB, 0xb6) /* @dtprel(sym+add), data8 MSB */ - RELOC_NUMBER (R_IA64_DTPREL64LSB, 0xb7) /* @dtprel(sym+add), data8 LSB */ - - RELOC_NUMBER (R_IA64_LTOFF_DTPREL22, 0xba) /* @ltoff(@dtprel(s+a)), imm22 */ - - FAKE_RELOC (R_IA64_MAX_RELOC_CODE, 0xba) -END_RELOC_NUMBERS (R_IA64_max) - -#endif /* _ELF_IA64_H */ diff --git a/include/elf/internal.h b/include/elf/internal.h deleted file mode 100644 index d368a3fa6e7..00000000000 --- a/include/elf/internal.h +++ /dev/null @@ -1,297 +0,0 @@ -/* ELF support for BFD. - Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002, - 2003, 2006 Free Software Foundation, Inc. - - Written by Fred Fish @ Cygnus Support, from information published - in "UNIX System V Release 4, Programmers Guide: ANSI C and - Programming Support Tools". - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - - -/* This file is part of ELF support for BFD, and contains the portions - that describe how ELF is represented internally in the BFD library. - I.E. it describes the in-memory representation of ELF. It requires - the elf-common.h file which contains the portions that are common to - both the internal and external representations. */ - - -/* NOTE that these structures are not kept in the same order as they appear - in the object file. In some cases they've been reordered for more optimal - packing under various circumstances. */ - -#ifndef _ELF_INTERNAL_H -#define _ELF_INTERNAL_H - -/* ELF Header */ - -#define EI_NIDENT 16 /* Size of e_ident[] */ - -typedef struct elf_internal_ehdr { - unsigned char e_ident[EI_NIDENT]; /* ELF "magic number" */ - bfd_vma e_entry; /* Entry point virtual address */ - bfd_size_type e_phoff; /* Program header table file offset */ - bfd_size_type e_shoff; /* Section header table file offset */ - unsigned long e_version; /* Identifies object file version */ - unsigned long e_flags; /* Processor-specific flags */ - unsigned short e_type; /* Identifies object file type */ - unsigned short e_machine; /* Specifies required architecture */ - unsigned int e_ehsize; /* ELF header size in bytes */ - unsigned int e_phentsize; /* Program header table entry size */ - unsigned int e_phnum; /* Program header table entry count */ - unsigned int e_shentsize; /* Section header table entry size */ - unsigned int e_shnum; /* Section header table entry count */ - unsigned int e_shstrndx; /* Section header string table index */ -} Elf_Internal_Ehdr; - -/* Program header */ - -struct elf_internal_phdr { - unsigned long p_type; /* Identifies program segment type */ - unsigned long p_flags; /* Segment flags */ - bfd_vma p_offset; /* Segment file offset */ - bfd_vma p_vaddr; /* Segment virtual address */ - bfd_vma p_paddr; /* Segment physical address */ - bfd_vma p_filesz; /* Segment size in file */ - bfd_vma p_memsz; /* Segment size in memory */ - bfd_vma p_align; /* Segment alignment, file & memory */ -}; - -typedef struct elf_internal_phdr Elf_Internal_Phdr; - -/* Section header */ - -typedef struct elf_internal_shdr { - unsigned int sh_name; /* Section name, index in string tbl */ - unsigned int sh_type; /* Type of section */ - bfd_vma sh_flags; /* Miscellaneous section attributes */ - bfd_vma sh_addr; /* Section virtual addr at execution */ - bfd_size_type sh_size; /* Size of section in bytes */ - bfd_size_type sh_entsize; /* Entry size if section holds table */ - unsigned long sh_link; /* Index of another section */ - unsigned long sh_info; /* Additional section information */ - file_ptr sh_offset; /* Section file offset */ - unsigned int sh_addralign; /* Section alignment */ - - /* The internal rep also has some cached info associated with it. */ - asection * bfd_section; /* Associated BFD section. */ - unsigned char *contents; /* Section contents. */ -} Elf_Internal_Shdr; - -/* Symbol table entry */ - -struct elf_internal_sym { - bfd_vma st_value; /* Value of the symbol */ - bfd_vma st_size; /* Associated symbol size */ - unsigned long st_name; /* Symbol name, index in string tbl */ - unsigned char st_info; /* Type and binding attributes */ - unsigned char st_other; /* Visibilty, and target specific */ - unsigned int st_shndx; /* Associated section index */ -}; - -typedef struct elf_internal_sym Elf_Internal_Sym; - -/* Note segments */ - -typedef struct elf_internal_note { - unsigned long namesz; /* Size of entry's owner string */ - unsigned long descsz; /* Size of the note descriptor */ - unsigned long type; /* Interpretation of the descriptor */ - char * namedata; /* Start of the name+desc data */ - char * descdata; /* Start of the desc data */ - bfd_vma descpos; /* File offset of the descdata */ -} Elf_Internal_Note; - -/* Relocation Entries */ - -typedef struct elf_internal_rela { - bfd_vma r_offset; /* Location at which to apply the action */ - bfd_vma r_info; /* Index and Type of relocation */ - bfd_vma r_addend; /* Constant addend used to compute value */ -} Elf_Internal_Rela; - -/* dynamic section structure */ - -typedef struct elf_internal_dyn { - /* This needs to support 64-bit values in elf64. */ - bfd_vma d_tag; /* entry tag value */ - union { - /* This needs to support 64-bit values in elf64. */ - bfd_vma d_val; - bfd_vma d_ptr; - } d_un; -} Elf_Internal_Dyn; - -/* This structure appears in a SHT_GNU_verdef section. */ - -typedef struct elf_internal_verdef { - unsigned short vd_version; /* Version number of structure. */ - unsigned short vd_flags; /* Flags (VER_FLG_*). */ - unsigned short vd_ndx; /* Version index. */ - unsigned short vd_cnt; /* Number of verdaux entries. */ - unsigned long vd_hash; /* Hash of name. */ - unsigned long vd_aux; /* Offset to verdaux entries. */ - unsigned long vd_next; /* Offset to next verdef. */ - - /* These fields are set up when BFD reads in the structure. FIXME: - It would be cleaner to store these in a different structure. */ - bfd *vd_bfd; /* BFD. */ - const char *vd_nodename; /* Version name. */ - struct elf_internal_verdef *vd_nextdef; /* vd_next as pointer. */ - struct elf_internal_verdaux *vd_auxptr; /* vd_aux as pointer. */ - unsigned int vd_exp_refno; /* Used by the linker. */ -} Elf_Internal_Verdef; - -/* This structure appears in a SHT_GNU_verdef section. */ - -typedef struct elf_internal_verdaux { - unsigned long vda_name; /* String table offset of name. */ - unsigned long vda_next; /* Offset to next verdaux. */ - - /* These fields are set up when BFD reads in the structure. FIXME: - It would be cleaner to store these in a different structure. */ - const char *vda_nodename; /* vda_name as pointer. */ - struct elf_internal_verdaux *vda_nextptr; /* vda_next as pointer. */ -} Elf_Internal_Verdaux; - -/* This structure appears in a SHT_GNU_verneed section. */ - -typedef struct elf_internal_verneed { - unsigned short vn_version; /* Version number of structure. */ - unsigned short vn_cnt; /* Number of vernaux entries. */ - unsigned long vn_file; /* String table offset of library name. */ - unsigned long vn_aux; /* Offset to vernaux entries. */ - unsigned long vn_next; /* Offset to next verneed. */ - - /* These fields are set up when BFD reads in the structure. FIXME: - It would be cleaner to store these in a different structure. */ - bfd *vn_bfd; /* BFD. */ - const char *vn_filename; /* vn_file as pointer. */ - struct elf_internal_vernaux *vn_auxptr; /* vn_aux as pointer. */ - struct elf_internal_verneed *vn_nextref; /* vn_nextref as pointer. */ -} Elf_Internal_Verneed; - -/* This structure appears in a SHT_GNU_verneed section. */ - -typedef struct elf_internal_vernaux { - unsigned long vna_hash; /* Hash of dependency name. */ - unsigned short vna_flags; /* Flags (VER_FLG_*). */ - unsigned short vna_other; /* Unused. */ - unsigned long vna_name; /* String table offset to version name. */ - unsigned long vna_next; /* Offset to next vernaux. */ - - /* These fields are set up when BFD reads in the structure. FIXME: - It would be cleaner to store these in a different structure. */ - const char *vna_nodename; /* vna_name as pointer. */ - struct elf_internal_vernaux *vna_nextptr; /* vna_next as pointer. */ -} Elf_Internal_Vernaux; - -/* This structure appears in a SHT_GNU_versym section. This is not a - standard ELF structure; ELF just uses Elf32_Half. */ - -typedef struct elf_internal_versym { - unsigned short vs_vers; -} Elf_Internal_Versym; - -/* Structure for syminfo section. */ -typedef struct -{ - unsigned short int si_boundto; - unsigned short int si_flags; -} Elf_Internal_Syminfo; - -/* This structure appears on the stack and in NT_AUXV core file notes. */ -typedef struct -{ - bfd_vma a_type; - bfd_vma a_val; -} Elf_Internal_Auxv; - - -/* This structure is used to describe how sections should be assigned - to program segments. */ - -struct elf_segment_map -{ - /* Next program segment. */ - struct elf_segment_map *next; - /* Program segment type. */ - unsigned long p_type; - /* Program segment flags. */ - unsigned long p_flags; - /* Program segment physical address. */ - bfd_vma p_paddr; - /* Program segment alignment. */ - bfd_vma p_align; - /* Whether the p_flags field is valid; if not, the flags are based - on the section flags. */ - unsigned int p_flags_valid : 1; - /* Whether the p_paddr field is valid; if not, the physical address - is based on the section lma values. */ - unsigned int p_paddr_valid : 1; - /* Whether the p_align field is valid; if not, PT_LOAD segment - alignment is based on the default maximum page size. */ - unsigned int p_align_valid : 1; - /* Whether this segment includes the file header. */ - unsigned int includes_filehdr : 1; - /* Whether this segment includes the program headers. */ - unsigned int includes_phdrs : 1; - /* Number of sections (may be 0). */ - unsigned int count; - /* Sections. Actual number of elements is in count field. */ - asection *sections[1]; -}; - -/* .tbss is special. It doesn't contribute memory space to normal - segments and it doesn't take file space in normal segments. */ -#define ELF_SECTION_SIZE(sec_hdr, segment) \ - (((sec_hdr->sh_flags & SHF_TLS) == 0 \ - || sec_hdr->sh_type != SHT_NOBITS \ - || segment->p_type == PT_TLS) ? sec_hdr->sh_size : 0) - -/* Decide if the given sec_hdr is in the given segment. PT_TLS segment - contains only SHF_TLS sections. Only PT_LOAD and PT_TLS segments - can contain SHF_TLS sections. */ -#define ELF_IS_SECTION_IN_SEGMENT(sec_hdr, segment) \ - (((((sec_hdr->sh_flags & SHF_TLS) != 0) \ - && (segment->p_type == PT_TLS \ - || segment->p_type == PT_LOAD)) \ - || ((sec_hdr->sh_flags & SHF_TLS) == 0 \ - && segment->p_type != PT_TLS)) \ - /* Compare allocated sec_hdrs by VMA, unallocated sec_hdrs \ - by file offset. */ \ - && (sec_hdr->sh_flags & SHF_ALLOC \ - ? (sec_hdr->sh_addr >= segment->p_vaddr \ - && (sec_hdr->sh_addr \ - + ELF_SECTION_SIZE(sec_hdr, segment) \ - <= segment->p_vaddr + segment->p_memsz)) \ - : ((bfd_vma) sec_hdr->sh_offset >= segment->p_offset \ - && (sec_hdr->sh_offset \ - + ELF_SECTION_SIZE(sec_hdr, segment) \ - <= segment->p_offset + segment->p_filesz)))) - -/* Decide if the given sec_hdr is in the given segment in file. */ -#define ELF_IS_SECTION_IN_SEGMENT_FILE(sec_hdr, segment) \ - (sec_hdr->sh_size > 0 \ - && ELF_IS_SECTION_IN_SEGMENT (sec_hdr, segment)) - -/* Decide if the given sec_hdr is in the given segment in memory. */ -#define ELF_IS_SECTION_IN_SEGMENT_MEMORY(sec_hdr, segment) \ - (ELF_SECTION_SIZE(sec_hdr, segment) > 0 \ - && ELF_IS_SECTION_IN_SEGMENT (sec_hdr, segment)) - -#endif /* _ELF_INTERNAL_H */ diff --git a/include/elf/ip2k.h b/include/elf/ip2k.h deleted file mode 100644 index 83fe1d41223..00000000000 --- a/include/elf/ip2k.h +++ /dev/null @@ -1,62 +0,0 @@ -/* IP2xxx ELF support for BFD. - Copyright (C) 2000, 2002 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., - 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_IP2K_H -#define _ELF_IP2K_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_ip2k_reloc_type) - RELOC_NUMBER (R_IP2K_NONE, 0) - RELOC_NUMBER (R_IP2K_16, 1) - RELOC_NUMBER (R_IP2K_32, 2) - RELOC_NUMBER (R_IP2K_FR9, 3) - RELOC_NUMBER (R_IP2K_BANK, 4) - RELOC_NUMBER (R_IP2K_ADDR16CJP, 5) - RELOC_NUMBER (R_IP2K_PAGE3, 6) - RELOC_NUMBER (R_IP2K_LO8DATA, 7) - RELOC_NUMBER (R_IP2K_HI8DATA, 8) - RELOC_NUMBER (R_IP2K_LO8INSN, 9) - RELOC_NUMBER (R_IP2K_HI8INSN, 10) - RELOC_NUMBER (R_IP2K_PC_SKIP, 11) - RELOC_NUMBER (R_IP2K_TEXT, 12) - RELOC_NUMBER (R_IP2K_FR_OFFSET, 13) - RELOC_NUMBER (R_IP2K_EX8DATA, 14) -END_RELOC_NUMBERS(R_IP2K_max) - - -/* Define the data & instruction memory discriminator. In a linked - executable, an symbol should be deemed to point to an instruction - if ((address & IP2K_INSN_MASK) == IP2K_INSN_VALUE), and similarly - for the data space. See also `ld/emulparams/elf32ip2k.sh'. */ -/* ??? Consider extending the _MASK values to include all the - intermediate bits that must be zero due to the limited physical - memory size on the IP2K. */ - -#define IP2K_DATA_MASK 0xff000000 -#define IP2K_DATA_VALUE 0x01000000 -#define IP2K_INSN_MASK 0xff000000 -#define IP2K_INSN_VALUE 0x02000000 - -/* The location of the memory mapped hardware stack. */ -#define IP2K_STACK_VALUE 0x0f000000 -#define IP2K_STACK_SIZE 0x20 - -#endif /* _ELF_IP2K_H */ diff --git a/include/elf/iq2000.h b/include/elf/iq2000.h deleted file mode 100644 index 012f2538efa..00000000000 --- a/include/elf/iq2000.h +++ /dev/null @@ -1,58 +0,0 @@ -/* IQ2000 ELF support for BFD. - Copyright (C) 2002, 2003 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., -51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_IQ2000_H -#define _ELF_IQ2000_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_iq2000_reloc_type) - RELOC_NUMBER (R_IQ2000_NONE, 0) - RELOC_NUMBER (R_IQ2000_16, 1) - RELOC_NUMBER (R_IQ2000_32, 2) - RELOC_NUMBER (R_IQ2000_26, 3) - RELOC_NUMBER (R_IQ2000_PC16, 4) - RELOC_NUMBER (R_IQ2000_HI16, 5) - RELOC_NUMBER (R_IQ2000_LO16, 6) - RELOC_NUMBER (R_IQ2000_OFFSET_16, 7) - RELOC_NUMBER (R_IQ2000_OFFSET_21, 8) - RELOC_NUMBER (R_IQ2000_UHI16, 9) - RELOC_NUMBER (R_IQ2000_32_DEBUG, 10) - RELOC_NUMBER (R_IQ2000_GNU_VTINHERIT, 200) - RELOC_NUMBER (R_IQ2000_GNU_VTENTRY, 201) -END_RELOC_NUMBERS(R_IQ2000_max) - -#define EF_IQ2000_CPU_IQ2000 0x00000001 /* default */ -#define EF_IQ2000_CPU_IQ10 0x00000002 /* IQ10 */ -#define EF_IQ2000_CPU_MASK 0x00000003 /* specific cpu bits */ -#define EF_IQ2000_ALL_FLAGS (EF_IQ2000_CPU_MASK) - -/* Define the data & instruction memory discriminator. In a linked - executable, an symbol should be deemed to point to an instruction - if ((address & IQ2000_INSN_MASK) == IQ2000_INSN_VALUE), and similarly - for the data space. */ - -#define IQ2000_DATA_MASK 0x80000000 -#define IQ2000_DATA_VALUE 0x00000000 -#define IQ2000_INSN_MASK 0x80000000 -#define IQ2000_INSN_VALUE 0x80000000 - - -#endif /* _ELF_IQ2000_H */ diff --git a/include/elf/m32c.h b/include/elf/m32c.h deleted file mode 100644 index 143773beda6..00000000000 --- a/include/elf/m32c.h +++ /dev/null @@ -1,67 +0,0 @@ -/* M32C ELF support for BFD. - Copyright (C) 2004 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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. */ - -#ifndef _ELF_M32C_H -#define _ELF_M32C_H - -#include "elf/reloc-macros.h" - - /* Relocations. */ - START_RELOC_NUMBERS (elf_m32c_reloc_type) - RELOC_NUMBER (R_M32C_NONE, 0) - RELOC_NUMBER (R_M32C_16, 1) - RELOC_NUMBER (R_M32C_24, 2) - RELOC_NUMBER (R_M32C_32, 3) - RELOC_NUMBER (R_M32C_8_PCREL, 4) - RELOC_NUMBER (R_M32C_16_PCREL, 5) - - /* 8 bit unsigned address, used for dsp8[a0] etc */ - RELOC_NUMBER (R_M32C_8, 6) - /* Bits 0..15 of an address, for SMOVF's A0, A1A0, etc. */ - RELOC_NUMBER (R_M32C_LO16, 7) - /* Bits 16..23 of an address, for SMOVF's R1H etc. */ - RELOC_NUMBER (R_M32C_HI8, 8) - /* Bits 16..31 of an address, for LDE's A1A0 etc. */ - RELOC_NUMBER (R_M32C_HI16, 9) - - /* These are relocs we need when relaxing. */ - /* Marks various jump opcodes. */ - RELOC_NUMBER (R_M32C_RL_JUMP, 10) - /* Marks standard one-address form. */ - RELOC_NUMBER (R_M32C_RL_1ADDR, 11) - /* Marks standard two-address form. */ - RELOC_NUMBER (R_M32C_RL_2ADDR, 12) - - END_RELOC_NUMBERS (R_M32C_max) - -#define EF_M32C_CPU_M16C 0x00000075 /* default */ -#define EF_M32C_CPU_M32C 0x00000078 /* m32c */ -#define EF_M32C_CPU_MASK 0x0000007F /* specific cpu bits */ -#define EF_M32C_ALL_FLAGS (EF_M32C_CPU_MASK) - -/* Define the data & instruction memory discriminator. In a linked - executable, an symbol should be deemed to point to an instruction - if ((address & M16C_INSN_MASK) == M16C_INSN_VALUE), and similarly - for the data space. See also `ld/emulparams/elf32m32c.sh'. */ -#define M32C_DATA_MASK 0xffc00000 -#define M32C_DATA_VALUE 0x00000000 -#define M32C_INSN_MASK 0xffc00000 -#define M32C_INSN_VALUE 0x00400000 - -#endif /* _ELF_M32C_H */ diff --git a/include/elf/m32r.h b/include/elf/m32r.h deleted file mode 100644 index d648df90410..00000000000 --- a/include/elf/m32r.h +++ /dev/null @@ -1,122 +0,0 @@ -/* M32R ELF support for BFD. - Copyright 1996, 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., - 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_M32R_H -#define _ELF_M32R_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_m32r_reloc_type) - RELOC_NUMBER (R_M32R_NONE, 0) - /* REL relocations */ - RELOC_NUMBER (R_M32R_16, 1) /* For backwards compatibility. */ - RELOC_NUMBER (R_M32R_32, 2) /* For backwards compatibility. */ - RELOC_NUMBER (R_M32R_24, 3) /* For backwards compatibility. */ - RELOC_NUMBER (R_M32R_10_PCREL, 4) /* For backwards compatibility. */ - RELOC_NUMBER (R_M32R_18_PCREL, 5) /* For backwards compatibility. */ - RELOC_NUMBER (R_M32R_26_PCREL, 6) /* For backwards compatibility. */ - RELOC_NUMBER (R_M32R_HI16_ULO, 7) /* For backwards compatibility. */ - RELOC_NUMBER (R_M32R_HI16_SLO, 8) /* For backwards compatibility. */ - RELOC_NUMBER (R_M32R_LO16, 9) /* For backwards compatibility. */ - RELOC_NUMBER (R_M32R_SDA16, 10) /* For backwards compatibility. */ - RELOC_NUMBER (R_M32R_GNU_VTINHERIT, 11)/* For backwards compatibility. */ - RELOC_NUMBER (R_M32R_GNU_VTENTRY, 12) /* For backwards compatibility. */ - - /* RELA relocations */ - RELOC_NUMBER (R_M32R_16_RELA, 33) - RELOC_NUMBER (R_M32R_32_RELA, 34) - RELOC_NUMBER (R_M32R_24_RELA, 35) - RELOC_NUMBER (R_M32R_10_PCREL_RELA, 36) - RELOC_NUMBER (R_M32R_18_PCREL_RELA, 37) - RELOC_NUMBER (R_M32R_26_PCREL_RELA, 38) - RELOC_NUMBER (R_M32R_HI16_ULO_RELA, 39) - RELOC_NUMBER (R_M32R_HI16_SLO_RELA, 40) - RELOC_NUMBER (R_M32R_LO16_RELA, 41) - RELOC_NUMBER (R_M32R_SDA16_RELA, 42) - RELOC_NUMBER (R_M32R_RELA_GNU_VTINHERIT, 43) - RELOC_NUMBER (R_M32R_RELA_GNU_VTENTRY, 44) - - RELOC_NUMBER (R_M32R_REL32, 45) - - RELOC_NUMBER (R_M32R_GOT24, 48) - RELOC_NUMBER (R_M32R_26_PLTREL, 49) - RELOC_NUMBER (R_M32R_COPY, 50) - RELOC_NUMBER (R_M32R_GLOB_DAT, 51) - RELOC_NUMBER (R_M32R_JMP_SLOT, 52) - RELOC_NUMBER (R_M32R_RELATIVE, 53) - RELOC_NUMBER (R_M32R_GOTOFF, 54) - RELOC_NUMBER (R_M32R_GOTPC24, 55) - RELOC_NUMBER (R_M32R_GOT16_HI_ULO, 56) - RELOC_NUMBER (R_M32R_GOT16_HI_SLO, 57) - RELOC_NUMBER (R_M32R_GOT16_LO, 58) - RELOC_NUMBER (R_M32R_GOTPC_HI_ULO, 59) - RELOC_NUMBER (R_M32R_GOTPC_HI_SLO, 60) - RELOC_NUMBER (R_M32R_GOTPC_LO, 61) - RELOC_NUMBER (R_M32R_GOTOFF_HI_ULO, 62) - RELOC_NUMBER (R_M32R_GOTOFF_HI_SLO, 63) - RELOC_NUMBER (R_M32R_GOTOFF_LO, 64) - -END_RELOC_NUMBERS (R_M32R_max) - -/* Processor specific section indices. These sections do not actually - exist. Symbols with a st_shndx field corresponding to one of these - values have a special meaning. */ - -/* Small common symbol. */ -#define SHN_M32R_SCOMMON 0xff00 - -/* Processor specific section flags. */ - -/* This section contains sufficient relocs to be relaxed. - When relaxing, even relocs of branch instructions the assembler could - complete must be present because relaxing may cause the branch target to - move. */ -#define SHF_M32R_CAN_RELAX 0x10000000 - -/* Processor specific flags for the ELF header e_flags field. */ - -/* Two bit m32r architecture field. */ -#define EF_M32R_ARCH 0x30000000 - -/* m32r code. */ -#define E_M32R_ARCH 0x00000000 -/* m32rx code. */ -#define E_M32RX_ARCH 0x10000000 -/* m32r2 code. */ -#define E_M32R2_ARCH 0x20000000 - -/* 12 bit m32r new instructions field. */ -#define EF_M32R_INST 0x0FFF0000 -/* Parallel instructions. */ -#define E_M32R_HAS_PARALLEL 0x00010000 -/* Hidden instructions for m32rx: - jc, jnc, macwhi-a, macwlo-a, mulwhi-a, mulwlo-a, sth+, shb+, sat, pcmpbz, - sc, snc. */ -#define E_M32R_HAS_HIDDEN_INST 0x00020000 -/* New bit instructions: - clrpsw, setpsw, bset, bclr, btst. */ -#define E_M32R_HAS_BIT_INST 0x00040000 -/* Floating point instructions. */ -#define E_M32R_HAS_FLOAT_INST 0x00080000 - -/* 4 bit m32r ignore to check field. */ -#define EF_M32R_IGNORE 0x0000000F - -#endif diff --git a/include/elf/m68hc11.h b/include/elf/m68hc11.h deleted file mode 100644 index 1cd4600519c..00000000000 --- a/include/elf/m68hc11.h +++ /dev/null @@ -1,95 +0,0 @@ -/* m68hc11 & m68hc12 ELF support for BFD. - Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_M68HC11_H -#define _ELF_M68HC11_H - -#include "elf/reloc-macros.h" - -/* Relocation types. */ -START_RELOC_NUMBERS (elf_m68hc11_reloc_type) - RELOC_NUMBER (R_M68HC11_NONE, 0) - RELOC_NUMBER (R_M68HC11_8, 1) - RELOC_NUMBER (R_M68HC11_HI8, 2) - RELOC_NUMBER (R_M68HC11_LO8, 3) - RELOC_NUMBER (R_M68HC11_PCREL_8, 4) - RELOC_NUMBER (R_M68HC11_16, 5) - RELOC_NUMBER (R_M68HC11_32, 6) - RELOC_NUMBER (R_M68HC11_3B, 7) - RELOC_NUMBER (R_M68HC11_PCREL_16, 8) - - /* These are GNU extensions to enable C++ vtable garbage collection. */ - RELOC_NUMBER (R_M68HC11_GNU_VTINHERIT, 9) - RELOC_NUMBER (R_M68HC11_GNU_VTENTRY, 10) - - RELOC_NUMBER (R_M68HC11_24, 11) - RELOC_NUMBER (R_M68HC11_LO16, 12) - RELOC_NUMBER (R_M68HC11_PAGE, 13) - - /* GNU extension for linker relaxation. - Mark beginning of a jump instruction (any form). */ - RELOC_NUMBER (R_M68HC11_RL_JUMP, 20) - - /* Mark beginning of Gcc relaxation group instruction. */ - RELOC_NUMBER (R_M68HC11_RL_GROUP, 21) -END_RELOC_NUMBERS (R_M68HC11_max) - -/* Processor specific flags for the ELF header e_flags field. */ - -/* ABI identification. */ -#define EF_M68HC11_ABI 0x00000000F - -/* Integers are 32-bit long. */ -#define E_M68HC11_I32 0x000000001 - -/* Doubles are 64-bit long. */ -#define E_M68HC11_F64 0x000000002 - -/* Uses 68HC12 memory banks. */ -#define E_M68HC12_BANKS 0x000000004 - -#define EF_M68HC11_MACH_MASK 0xF0 -#define EF_M68HC11_GENERIC 0x00 /* Generic 68HC12/backward compatibility. */ -#define EF_M68HC12_MACH 0x10 /* 68HC12 microcontroller. */ -#define EF_M68HCS12_MACH 0x20 /* 68HCS12 microcontroller. */ -#define EF_M68HC11_MACH(mach) ((mach) & EF_M68HC11_MACH_MASK) - -/* True if we can merge machines. A generic HC12 can work on any proc - but once we have specific code, merge is not possible. */ -#define EF_M68HC11_CAN_MERGE_MACH(mach1, mach2) \ - ((EF_M68HC11_MACH (mach1) == EF_M68HC11_MACH (mach2)) \ - || (EF_M68HC11_MACH (mach1) == EF_M68HC11_GENERIC) \ - || (EF_M68HC11_MACH (mach2) == EF_M68HC11_GENERIC)) - -#define EF_M68HC11_MERGE_MACH(mach1, mach2) \ - (((EF_M68HC11_MACH (mach1) == EF_M68HC11_MACH (mach2)) \ - || (EF_M68HC11_MACH (mach1) == EF_M68HC11_GENERIC)) ? \ - EF_M68HC11_MACH (mach2) : EF_M68HC11_MACH (mach1)) - - -/* Special values for the st_other field in the symbol table. These - are used for 68HC12 to identify far functions (must be called with - 'call' and returns with 'rtc'). */ -#define STO_M68HC12_FAR 0x80 - -/* Identify interrupt handlers. This is used by the debugger to - correctly compute the stack frame. */ -#define STO_M68HC12_INTERRUPT 0x40 - -#endif diff --git a/include/elf/m68k.h b/include/elf/m68k.h deleted file mode 100644 index 08d0c441988..00000000000 --- a/include/elf/m68k.h +++ /dev/null @@ -1,75 +0,0 @@ -/* MC68k ELF support for BFD. - Copyright 1998, 1999, 2000, 2002, 2005, 2006 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_M68K_H -#define _ELF_M68K_H - -#include "elf/reloc-macros.h" - -/* Relocation types. */ -START_RELOC_NUMBERS (elf_m68k_reloc_type) - RELOC_NUMBER (R_68K_NONE, 0) /* No reloc */ - RELOC_NUMBER (R_68K_32, 1) /* Direct 32 bit */ - RELOC_NUMBER (R_68K_16, 2) /* Direct 16 bit */ - RELOC_NUMBER (R_68K_8, 3) /* Direct 8 bit */ - RELOC_NUMBER (R_68K_PC32, 4) /* PC relative 32 bit */ - RELOC_NUMBER (R_68K_PC16, 5) /* PC relative 16 bit */ - RELOC_NUMBER (R_68K_PC8, 6) /* PC relative 8 bit */ - RELOC_NUMBER (R_68K_GOT32, 7) /* 32 bit PC relative GOT entry */ - RELOC_NUMBER (R_68K_GOT16, 8) /* 16 bit PC relative GOT entry */ - RELOC_NUMBER (R_68K_GOT8, 9) /* 8 bit PC relative GOT entry */ - RELOC_NUMBER (R_68K_GOT32O, 10) /* 32 bit GOT offset */ - RELOC_NUMBER (R_68K_GOT16O, 11) /* 16 bit GOT offset */ - RELOC_NUMBER (R_68K_GOT8O, 12) /* 8 bit GOT offset */ - RELOC_NUMBER (R_68K_PLT32, 13) /* 32 bit PC relative PLT address */ - RELOC_NUMBER (R_68K_PLT16, 14) /* 16 bit PC relative PLT address */ - RELOC_NUMBER (R_68K_PLT8, 15) /* 8 bit PC relative PLT address */ - RELOC_NUMBER (R_68K_PLT32O, 16) /* 32 bit PLT offset */ - RELOC_NUMBER (R_68K_PLT16O, 17) /* 16 bit PLT offset */ - RELOC_NUMBER (R_68K_PLT8O, 18) /* 8 bit PLT offset */ - RELOC_NUMBER (R_68K_COPY, 19) /* Copy symbol at runtime */ - RELOC_NUMBER (R_68K_GLOB_DAT, 20) /* Create GOT entry */ - RELOC_NUMBER (R_68K_JMP_SLOT, 21) /* Create PLT entry */ - RELOC_NUMBER (R_68K_RELATIVE, 22) /* Adjust by program base */ - /* These are GNU extensions to enable C++ vtable garbage collection. */ - RELOC_NUMBER (R_68K_GNU_VTINHERIT, 23) - RELOC_NUMBER (R_68K_GNU_VTENTRY, 24) -END_RELOC_NUMBERS (R_68K_max) - -#define EF_M68K_CPU32 0x00810000 -#define EF_M68K_M68000 0x01000000 -#define EF_M68K_CFV4E 0x00008000 - -/* We use the bottom 8 bits to encode information about the - coldfire variant. */ -#define EF_M68K_ISA_MASK 0x0F /* Which ISA */ -#define EF_M68K_ISA_A_NODIV 0x01 /* ISA A except for div */ -#define EF_M68K_ISA_A 0x02 -#define EF_M68K_ISA_A_PLUS 0x03 -#define EF_M68K_ISA_B_NOUSP 0x04 /* ISA_B except for USP */ -#define EF_M68K_ISA_B 0x05 -#define EF_M68K_ISA_C 0x06 -#define EF_M68K_MAC_MASK 0x30 -#define EF_M68K_MAC 0x10 /* MAC */ -#define EF_M68K_EMAC 0x20 /* EMAC */ -#define EF_M68K_EMAC_B 0x30 /* EMAC_B */ -#define EF_M68K_FLOAT 0x40 /* Has float insns */ -#define EF_M68K_CF_MASK 0xFF - -#endif diff --git a/include/elf/mcore.h b/include/elf/mcore.h deleted file mode 100644 index 5600df7e863..00000000000 --- a/include/elf/mcore.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Motorola MCore support for BFD. - Copyright 1995, 1999, 2000 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the MCore ELF ABI. */ -#ifndef _ELF_MORE_H -#define _ELF_MORE_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_mcore_reloc_type) - RELOC_NUMBER (R_MCORE_NONE, 0) - RELOC_NUMBER (R_MCORE_ADDR32, 1) - RELOC_NUMBER (R_MCORE_PCRELIMM8BY4, 2) - RELOC_NUMBER (R_MCORE_PCRELIMM11BY2, 3) - RELOC_NUMBER (R_MCORE_PCRELIMM4BY2, 4) - RELOC_NUMBER (R_MCORE_PCREL32, 5) - RELOC_NUMBER (R_MCORE_PCRELJSR_IMM11BY2, 6) - RELOC_NUMBER (R_MCORE_GNU_VTINHERIT, 7) - RELOC_NUMBER (R_MCORE_GNU_VTENTRY, 8) - RELOC_NUMBER (R_MCORE_RELATIVE, 9) - RELOC_NUMBER (R_MCORE_COPY, 10) - RELOC_NUMBER (R_MCORE_GLOB_DAT, 11) - RELOC_NUMBER (R_MCORE_JUMP_SLOT, 12) -END_RELOC_NUMBERS (R_MCORE_max) - -/* Section Attributes. */ -#define SHF_MCORE_NOREAD 0x80000000 - -#endif /* _ELF_MCORE_H */ diff --git a/include/elf/mips.h b/include/elf/mips.h deleted file mode 100644 index f22bd4d4213..00000000000 --- a/include/elf/mips.h +++ /dev/null @@ -1,1008 +0,0 @@ -/* MIPS ELF support for BFD. - Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005 - Free Software Foundation, Inc. - - By Ian Lance Taylor, Cygnus Support, , from - information in the System V Application Binary Interface, MIPS - Processor Supplement. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the MIPS ELF ABI. Note - that most of this is not actually implemented by BFD. */ - -#ifndef _ELF_MIPS_H -#define _ELF_MIPS_H - -#include "elf/reloc-macros.h" - -/* Relocation types. */ -START_RELOC_NUMBERS (elf_mips_reloc_type) - RELOC_NUMBER (R_MIPS_NONE, 0) - RELOC_NUMBER (R_MIPS_16, 1) - RELOC_NUMBER (R_MIPS_32, 2) /* In Elf 64: alias R_MIPS_ADD */ - RELOC_NUMBER (R_MIPS_REL32, 3) /* In Elf 64: alias R_MIPS_REL */ - RELOC_NUMBER (R_MIPS_26, 4) - RELOC_NUMBER (R_MIPS_HI16, 5) - RELOC_NUMBER (R_MIPS_LO16, 6) - RELOC_NUMBER (R_MIPS_GPREL16, 7) /* In Elf 64: alias R_MIPS_GPREL */ - RELOC_NUMBER (R_MIPS_LITERAL, 8) - RELOC_NUMBER (R_MIPS_GOT16, 9) /* In Elf 64: alias R_MIPS_GOT */ - RELOC_NUMBER (R_MIPS_PC16, 10) - RELOC_NUMBER (R_MIPS_CALL16, 11) /* In Elf 64: alias R_MIPS_CALL */ - RELOC_NUMBER (R_MIPS_GPREL32, 12) - /* The remaining relocs are defined on Irix, although they are not - in the MIPS ELF ABI. */ - RELOC_NUMBER (R_MIPS_UNUSED1, 13) - RELOC_NUMBER (R_MIPS_UNUSED2, 14) - RELOC_NUMBER (R_MIPS_UNUSED3, 15) - RELOC_NUMBER (R_MIPS_SHIFT5, 16) - RELOC_NUMBER (R_MIPS_SHIFT6, 17) - RELOC_NUMBER (R_MIPS_64, 18) - RELOC_NUMBER (R_MIPS_GOT_DISP, 19) - RELOC_NUMBER (R_MIPS_GOT_PAGE, 20) - RELOC_NUMBER (R_MIPS_GOT_OFST, 21) - RELOC_NUMBER (R_MIPS_GOT_HI16, 22) - RELOC_NUMBER (R_MIPS_GOT_LO16, 23) - RELOC_NUMBER (R_MIPS_SUB, 24) - RELOC_NUMBER (R_MIPS_INSERT_A, 25) - RELOC_NUMBER (R_MIPS_INSERT_B, 26) - RELOC_NUMBER (R_MIPS_DELETE, 27) - RELOC_NUMBER (R_MIPS_HIGHER, 28) - RELOC_NUMBER (R_MIPS_HIGHEST, 29) - RELOC_NUMBER (R_MIPS_CALL_HI16, 30) - RELOC_NUMBER (R_MIPS_CALL_LO16, 31) - RELOC_NUMBER (R_MIPS_SCN_DISP, 32) - RELOC_NUMBER (R_MIPS_REL16, 33) - RELOC_NUMBER (R_MIPS_ADD_IMMEDIATE, 34) - RELOC_NUMBER (R_MIPS_PJUMP, 35) - RELOC_NUMBER (R_MIPS_RELGOT, 36) - RELOC_NUMBER (R_MIPS_JALR, 37) - /* TLS relocations. */ - RELOC_NUMBER (R_MIPS_TLS_DTPMOD32, 38) - RELOC_NUMBER (R_MIPS_TLS_DTPREL32, 39) - RELOC_NUMBER (R_MIPS_TLS_DTPMOD64, 40) - RELOC_NUMBER (R_MIPS_TLS_DTPREL64, 41) - RELOC_NUMBER (R_MIPS_TLS_GD, 42) - RELOC_NUMBER (R_MIPS_TLS_LDM, 43) - RELOC_NUMBER (R_MIPS_TLS_DTPREL_HI16, 44) - RELOC_NUMBER (R_MIPS_TLS_DTPREL_LO16, 45) - RELOC_NUMBER (R_MIPS_TLS_GOTTPREL, 46) - RELOC_NUMBER (R_MIPS_TLS_TPREL32, 47) - RELOC_NUMBER (R_MIPS_TLS_TPREL64, 48) - RELOC_NUMBER (R_MIPS_TLS_TPREL_HI16, 49) - RELOC_NUMBER (R_MIPS_TLS_TPREL_LO16, 50) - FAKE_RELOC (R_MIPS_max, 51) - /* These relocs are used for the mips16. */ - FAKE_RELOC (R_MIPS16_min, 100) - RELOC_NUMBER (R_MIPS16_26, 100) - RELOC_NUMBER (R_MIPS16_GPREL, 101) - RELOC_NUMBER (R_MIPS16_GOT16, 102) - RELOC_NUMBER (R_MIPS16_CALL16, 103) - RELOC_NUMBER (R_MIPS16_HI16, 104) - RELOC_NUMBER (R_MIPS16_LO16, 105) - FAKE_RELOC (R_MIPS16_max, 106) - /* These relocations are specific to VxWorks. */ - RELOC_NUMBER (R_MIPS_COPY, 126) - RELOC_NUMBER (R_MIPS_JUMP_SLOT, 127) - /* This was a GNU extension used by embedded-PIC. It was co-opted by - mips-linux for exception-handling data. It is no longer used, but - should continue to be supported by the linker for backward - compatibility. (GCC stopped using it in May, 2004.) */ - RELOC_NUMBER (R_MIPS_PC32, 248) - /* FIXME: this relocation is used internally by gas. */ - RELOC_NUMBER (R_MIPS_GNU_REL16_S2, 250) - /* These are GNU extensions to enable C++ vtable garbage collection. */ - RELOC_NUMBER (R_MIPS_GNU_VTINHERIT, 253) - RELOC_NUMBER (R_MIPS_GNU_VTENTRY, 254) -END_RELOC_NUMBERS (R_MIPS_maxext) - -/* Processor specific flags for the ELF header e_flags field. */ - -/* At least one .noreorder directive appears in the source. */ -#define EF_MIPS_NOREORDER 0x00000001 - -/* File contains position independent code. */ -#define EF_MIPS_PIC 0x00000002 - -/* Code in file uses the standard calling sequence for calling - position independent code. */ -#define EF_MIPS_CPIC 0x00000004 - -/* ??? Unknown flag, set in IRIX 6's BSDdup2.o in libbsd.a. */ -#define EF_MIPS_XGOT 0x00000008 - -/* Code in file uses UCODE (obsolete) */ -#define EF_MIPS_UCODE 0x00000010 - -/* Code in file uses new ABI (-n32 on Irix 6). */ -#define EF_MIPS_ABI2 0x00000020 - -/* Process the .MIPS.options section first by ld */ -#define EF_MIPS_OPTIONS_FIRST 0x00000080 - -/* Architectural Extensions used by this file */ -#define EF_MIPS_ARCH_ASE 0x0f000000 - -/* Use MDMX multimedia extensions */ -#define EF_MIPS_ARCH_ASE_MDMX 0x08000000 - -/* Use MIPS-16 ISA extensions */ -#define EF_MIPS_ARCH_ASE_M16 0x04000000 - -/* Indicates code compiled for a 64-bit machine in 32-bit mode. - (regs are 32-bits wide.) */ -#define EF_MIPS_32BITMODE 0x00000100 - -/* Four bit MIPS architecture field. */ -#define EF_MIPS_ARCH 0xf0000000 - -/* -mips1 code. */ -#define E_MIPS_ARCH_1 0x00000000 - -/* -mips2 code. */ -#define E_MIPS_ARCH_2 0x10000000 - -/* -mips3 code. */ -#define E_MIPS_ARCH_3 0x20000000 - -/* -mips4 code. */ -#define E_MIPS_ARCH_4 0x30000000 - -/* -mips5 code. */ -#define E_MIPS_ARCH_5 0x40000000 - -/* -mips32 code. */ -#define E_MIPS_ARCH_32 0x50000000 - -/* -mips64 code. */ -#define E_MIPS_ARCH_64 0x60000000 - -/* -mips32r2 code. */ -#define E_MIPS_ARCH_32R2 0x70000000 - -/* -mips64r2 code. */ -#define E_MIPS_ARCH_64R2 0x80000000 - -/* The ABI of the file. Also see EF_MIPS_ABI2 above. */ -#define EF_MIPS_ABI 0x0000F000 - -/* The original o32 abi. */ -#define E_MIPS_ABI_O32 0x00001000 - -/* O32 extended to work on 64 bit architectures */ -#define E_MIPS_ABI_O64 0x00002000 - -/* EABI in 32 bit mode */ -#define E_MIPS_ABI_EABI32 0x00003000 - -/* EABI in 64 bit mode */ -#define E_MIPS_ABI_EABI64 0x00004000 - - -/* Machine variant if we know it. This field was invented at Cygnus, - but it is hoped that other vendors will adopt it. If some standard - is developed, this code should be changed to follow it. */ - -#define EF_MIPS_MACH 0x00FF0000 - -/* Cygnus is choosing values between 80 and 9F; - 00 - 7F should be left for a future standard; - the rest are open. */ - -#define E_MIPS_MACH_3900 0x00810000 -#define E_MIPS_MACH_4010 0x00820000 -#define E_MIPS_MACH_4100 0x00830000 -#define E_MIPS_MACH_4650 0x00850000 -#define E_MIPS_MACH_4120 0x00870000 -#define E_MIPS_MACH_4111 0x00880000 -#define E_MIPS_MACH_SB1 0x008a0000 -#define E_MIPS_MACH_5400 0x00910000 -#define E_MIPS_MACH_5500 0x00980000 -#define E_MIPS_MACH_9000 0x00990000 - -/* Processor specific section indices. These sections do not actually - exist. Symbols with a st_shndx field corresponding to one of these - values have a special meaning. */ - -/* Defined and allocated common symbol. Value is virtual address. If - relocated, alignment must be preserved. */ -#define SHN_MIPS_ACOMMON 0xff00 - -/* Defined and allocated text symbol. Value is virtual address. - Occur in the dynamic symbol table of Alpha OSF/1 and Irix 5 executables. */ -#define SHN_MIPS_TEXT 0xff01 - -/* Defined and allocated data symbol. Value is virtual address. - Occur in the dynamic symbol table of Alpha OSF/1 and Irix 5 executables. */ -#define SHN_MIPS_DATA 0xff02 - -/* Small common symbol. */ -#define SHN_MIPS_SCOMMON 0xff03 - -/* Small undefined symbol. */ -#define SHN_MIPS_SUNDEFINED 0xff04 - -/* Processor specific section types. */ - -/* Section contains the set of dynamic shared objects used when - statically linking. */ -#define SHT_MIPS_LIBLIST 0x70000000 - -/* I'm not sure what this is, but it's used on Irix 5. */ -#define SHT_MIPS_MSYM 0x70000001 - -/* Section contains list of symbols whose definitions conflict with - symbols defined in shared objects. */ -#define SHT_MIPS_CONFLICT 0x70000002 - -/* Section contains the global pointer table. */ -#define SHT_MIPS_GPTAB 0x70000003 - -/* Section contains microcode information. The exact format is - unspecified. */ -#define SHT_MIPS_UCODE 0x70000004 - -/* Section contains some sort of debugging information. The exact - format is unspecified. It's probably ECOFF symbols. */ -#define SHT_MIPS_DEBUG 0x70000005 - -/* Section contains register usage information. */ -#define SHT_MIPS_REGINFO 0x70000006 - -/* ??? */ -#define SHT_MIPS_PACKAGE 0x70000007 - -/* ??? */ -#define SHT_MIPS_PACKSYM 0x70000008 - -/* ??? */ -#define SHT_MIPS_RELD 0x70000009 - -/* Section contains interface information. */ -#define SHT_MIPS_IFACE 0x7000000b - -/* Section contains description of contents of another section. */ -#define SHT_MIPS_CONTENT 0x7000000c - -/* Section contains miscellaneous options. */ -#define SHT_MIPS_OPTIONS 0x7000000d - -/* ??? */ -#define SHT_MIPS_SHDR 0x70000010 - -/* ??? */ -#define SHT_MIPS_FDESC 0x70000011 - -/* ??? */ -#define SHT_MIPS_EXTSYM 0x70000012 - -/* ??? */ -#define SHT_MIPS_DENSE 0x70000013 - -/* ??? */ -#define SHT_MIPS_PDESC 0x70000014 - -/* ??? */ -#define SHT_MIPS_LOCSYM 0x70000015 - -/* ??? */ -#define SHT_MIPS_AUXSYM 0x70000016 - -/* ??? */ -#define SHT_MIPS_OPTSYM 0x70000017 - -/* ??? */ -#define SHT_MIPS_LOCSTR 0x70000018 - -/* ??? */ -#define SHT_MIPS_LINE 0x70000019 - -/* ??? */ -#define SHT_MIPS_RFDESC 0x7000001a - -/* Delta C++: symbol table */ -#define SHT_MIPS_DELTASYM 0x7000001b - -/* Delta C++: instance table */ -#define SHT_MIPS_DELTAINST 0x7000001c - -/* Delta C++: class table */ -#define SHT_MIPS_DELTACLASS 0x7000001d - -/* DWARF debugging section. */ -#define SHT_MIPS_DWARF 0x7000001e - -/* Delta C++: declarations */ -#define SHT_MIPS_DELTADECL 0x7000001f - -/* List of libraries the binary depends on. Includes a time stamp, version - number. */ -#define SHT_MIPS_SYMBOL_LIB 0x70000020 - -/* Events section. */ -#define SHT_MIPS_EVENTS 0x70000021 - -/* ??? */ -#define SHT_MIPS_TRANSLATE 0x70000022 - -/* Special pixie sections */ -#define SHT_MIPS_PIXIE 0x70000023 - -/* Address translation table (for debug info) */ -#define SHT_MIPS_XLATE 0x70000024 - -/* SGI internal address translation table (for debug info) */ -#define SHT_MIPS_XLATE_DEBUG 0x70000025 - -/* Intermediate code */ -#define SHT_MIPS_WHIRL 0x70000026 - -/* C++ exception handling region info */ -#define SHT_MIPS_EH_REGION 0x70000027 - -/* Obsolete address translation table (for debug info) */ -#define SHT_MIPS_XLATE_OLD 0x70000028 - -/* Runtime procedure descriptor table exception information (ucode) ??? */ -#define SHT_MIPS_PDR_EXCEPTION 0x70000029 - - -/* A section of type SHT_MIPS_LIBLIST contains an array of the - following structure. The sh_link field is the section index of the - string table. The sh_info field is the number of entries in the - section. */ -typedef struct -{ - /* String table index for name of shared object. */ - unsigned long l_name; - /* Time stamp. */ - unsigned long l_time_stamp; - /* Checksum of symbol names and common sizes. */ - unsigned long l_checksum; - /* String table index for version. */ - unsigned long l_version; - /* Flags. */ - unsigned long l_flags; -} Elf32_Lib; - -/* The external version of Elf32_Lib. */ -typedef struct -{ - unsigned char l_name[4]; - unsigned char l_time_stamp[4]; - unsigned char l_checksum[4]; - unsigned char l_version[4]; - unsigned char l_flags[4]; -} Elf32_External_Lib; - -/* The l_flags field of an Elf32_Lib structure may contain the - following flags. */ - -/* Require an exact match at runtime. */ -#define LL_EXACT_MATCH 0x00000001 - -/* Ignore version incompatibilities at runtime. */ -#define LL_IGNORE_INT_VER 0x00000002 - -/* Require matching minor version number. */ -#define LL_REQUIRE_MINOR 0x00000004 - -/* ??? */ -#define LL_EXPORTS 0x00000008 - -/* Delay loading of this library until really needed. */ -#define LL_DELAY_LOAD 0x00000010 - -/* ??? Delta C++ stuff ??? */ -#define LL_DELTA 0x00000020 - - -/* A section of type SHT_MIPS_CONFLICT is an array of indices into the - .dynsym section. Each element has the following type. */ -typedef unsigned long Elf32_Conflict; -typedef unsigned char Elf32_External_Conflict[4]; - -typedef unsigned long Elf64_Conflict; -typedef unsigned char Elf64_External_Conflict[8]; - -/* A section of type SHT_MIPS_GPTAB contains information about how - much GP space would be required for different -G arguments. This - information is only used so that the linker can provide informative - suggestions as to the best -G value to use. The sh_info field is - the index of the section for which this information applies. The - contents of the section are an array of the following union. The - first element uses the gt_header field. The remaining elements use - the gt_entry field. */ -typedef union -{ - struct - { - /* -G value actually used for this object file. */ - unsigned long gt_current_g_value; - /* Unused. */ - unsigned long gt_unused; - } gt_header; - struct - { - /* If this -G argument has been used... */ - unsigned long gt_g_value; - /* ...this many GP section bytes would be required. */ - unsigned long gt_bytes; - } gt_entry; -} Elf32_gptab; - -/* The external version of Elf32_gptab. */ - -typedef union -{ - struct - { - unsigned char gt_current_g_value[4]; - unsigned char gt_unused[4]; - } gt_header; - struct - { - unsigned char gt_g_value[4]; - unsigned char gt_bytes[4]; - } gt_entry; -} Elf32_External_gptab; - -/* A section of type SHT_MIPS_REGINFO contains the following - structure. */ -typedef struct -{ - /* Mask of general purpose registers used. */ - unsigned long ri_gprmask; - /* Mask of co-processor registers used. */ - unsigned long ri_cprmask[4]; - /* GP register value for this object file. */ - long ri_gp_value; -} Elf32_RegInfo; - -/* The external version of the Elf_RegInfo structure. */ -typedef struct -{ - unsigned char ri_gprmask[4]; - unsigned char ri_cprmask[4][4]; - unsigned char ri_gp_value[4]; -} Elf32_External_RegInfo; - -/* MIPS ELF .reginfo swapping routines. */ -extern void bfd_mips_elf32_swap_reginfo_in - (bfd *, const Elf32_External_RegInfo *, Elf32_RegInfo *); -extern void bfd_mips_elf32_swap_reginfo_out - (bfd *, const Elf32_RegInfo *, Elf32_External_RegInfo *); - -/* Processor specific section flags. */ - -/* This section must be in the global data area. */ -#define SHF_MIPS_GPREL 0x10000000 - -/* This section should be merged. */ -#define SHF_MIPS_MERGE 0x20000000 - -/* This section contains address data of size implied by section - element size. */ -#define SHF_MIPS_ADDR 0x40000000 - -/* This section contains string data. */ -#define SHF_MIPS_STRING 0x80000000 - -/* This section may not be stripped. */ -#define SHF_MIPS_NOSTRIP 0x08000000 - -/* This section is local to threads. */ -#define SHF_MIPS_LOCAL 0x04000000 - -/* Linker should generate implicit weak names for this section. */ -#define SHF_MIPS_NAMES 0x02000000 - -/* Section contais text/data which may be replicated in other sections. - Linker should retain only one copy. */ -#define SHF_MIPS_NODUPES 0x01000000 - -/* Processor specific program header types. */ - -/* Register usage information. Identifies one .reginfo section. */ -#define PT_MIPS_REGINFO 0x70000000 - -/* Runtime procedure table. */ -#define PT_MIPS_RTPROC 0x70000001 - -/* .MIPS.options section. */ -#define PT_MIPS_OPTIONS 0x70000002 - -/* Processor specific dynamic array tags. */ - -/* 32 bit version number for runtime linker interface. */ -#define DT_MIPS_RLD_VERSION 0x70000001 - -/* Time stamp. */ -#define DT_MIPS_TIME_STAMP 0x70000002 - -/* Checksum of external strings and common sizes. */ -#define DT_MIPS_ICHECKSUM 0x70000003 - -/* Index of version string in string table. */ -#define DT_MIPS_IVERSION 0x70000004 - -/* 32 bits of flags. */ -#define DT_MIPS_FLAGS 0x70000005 - -/* Base address of the segment. */ -#define DT_MIPS_BASE_ADDRESS 0x70000006 - -/* ??? */ -#define DT_MIPS_MSYM 0x70000007 - -/* Address of .conflict section. */ -#define DT_MIPS_CONFLICT 0x70000008 - -/* Address of .liblist section. */ -#define DT_MIPS_LIBLIST 0x70000009 - -/* Number of local global offset table entries. */ -#define DT_MIPS_LOCAL_GOTNO 0x7000000a - -/* Number of entries in the .conflict section. */ -#define DT_MIPS_CONFLICTNO 0x7000000b - -/* Number of entries in the .liblist section. */ -#define DT_MIPS_LIBLISTNO 0x70000010 - -/* Number of entries in the .dynsym section. */ -#define DT_MIPS_SYMTABNO 0x70000011 - -/* Index of first external dynamic symbol not referenced locally. */ -#define DT_MIPS_UNREFEXTNO 0x70000012 - -/* Index of first dynamic symbol in global offset table. */ -#define DT_MIPS_GOTSYM 0x70000013 - -/* Number of page table entries in global offset table. */ -#define DT_MIPS_HIPAGENO 0x70000014 - -/* Address of run time loader map, used for debugging. */ -#define DT_MIPS_RLD_MAP 0x70000016 - -/* Delta C++ class definition. */ -#define DT_MIPS_DELTA_CLASS 0x70000017 - -/* Number of entries in DT_MIPS_DELTA_CLASS. */ -#define DT_MIPS_DELTA_CLASS_NO 0x70000018 - -/* Delta C++ class instances. */ -#define DT_MIPS_DELTA_INSTANCE 0x70000019 - -/* Number of entries in DT_MIPS_DELTA_INSTANCE. */ -#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a - -/* Delta relocations. */ -#define DT_MIPS_DELTA_RELOC 0x7000001b - -/* Number of entries in DT_MIPS_DELTA_RELOC. */ -#define DT_MIPS_DELTA_RELOC_NO 0x7000001c - -/* Delta symbols that Delta relocations refer to. */ -#define DT_MIPS_DELTA_SYM 0x7000001d - -/* Number of entries in DT_MIPS_DELTA_SYM. */ -#define DT_MIPS_DELTA_SYM_NO 0x7000001e - -/* Delta symbols that hold class declarations. */ -#define DT_MIPS_DELTA_CLASSSYM 0x70000020 - -/* Number of entries in DT_MIPS_DELTA_CLASSSYM. */ -#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 - -/* Flags indicating information about C++ flavor. */ -#define DT_MIPS_CXX_FLAGS 0x70000022 - -/* Pixie information (???). */ -#define DT_MIPS_PIXIE_INIT 0x70000023 - -/* Address of .MIPS.symlib */ -#define DT_MIPS_SYMBOL_LIB 0x70000024 - -/* The GOT index of the first PTE for a segment */ -#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025 - -/* The GOT index of the first PTE for a local symbol */ -#define DT_MIPS_LOCAL_GOTIDX 0x70000026 - -/* The GOT index of the first PTE for a hidden symbol */ -#define DT_MIPS_HIDDEN_GOTIDX 0x70000027 - -/* The GOT index of the first PTE for a protected symbol */ -#define DT_MIPS_PROTECTED_GOTIDX 0x70000028 - -/* Address of `.MIPS.options'. */ -#define DT_MIPS_OPTIONS 0x70000029 - -/* Address of `.interface'. */ -#define DT_MIPS_INTERFACE 0x7000002a - -/* ??? */ -#define DT_MIPS_DYNSTR_ALIGN 0x7000002b - -/* Size of the .interface section. */ -#define DT_MIPS_INTERFACE_SIZE 0x7000002c - -/* Size of rld_text_resolve function stored in the GOT. */ -#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d - -/* Default suffix of DSO to be added by rld on dlopen() calls. */ -#define DT_MIPS_PERF_SUFFIX 0x7000002e - -/* Size of compact relocation section (O32). */ -#define DT_MIPS_COMPACT_SIZE 0x7000002f - -/* GP value for auxiliary GOTs. */ -#define DT_MIPS_GP_VALUE 0x70000030 - -/* Address of auxiliary .dynamic. */ -#define DT_MIPS_AUX_DYNAMIC 0x70000031 - -/* Flags which may appear in a DT_MIPS_FLAGS entry. */ - -/* No flags. */ -#define RHF_NONE 0x00000000 - -/* Uses shortcut pointers. */ -#define RHF_QUICKSTART 0x00000001 - -/* Hash size is not a power of two. */ -#define RHF_NOTPOT 0x00000002 - -/* Ignore LD_LIBRARY_PATH. */ -#define RHS_NO_LIBRARY_REPLACEMENT 0x00000004 - -/* DSO address may not be relocated. */ -#define RHF_NO_MOVE 0x00000008 - -/* SGI specific features. */ -#define RHF_SGI_ONLY 0x00000010 - -/* Guarantee that .init will finish executing before any non-init - code in DSO is called. */ -#define RHF_GUARANTEE_INIT 0x00000020 - -/* Contains Delta C++ code. */ -#define RHF_DELTA_C_PLUS_PLUS 0x00000040 - -/* Guarantee that .init will start executing before any non-init - code in DSO is called. */ -#define RHF_GUARANTEE_START_INIT 0x00000080 - -/* Generated by pixie. */ -#define RHF_PIXIE 0x00000100 - -/* Delay-load DSO by default. */ -#define RHF_DEFAULT_DELAY_LOAD 0x00000200 - -/* Object may be requickstarted */ -#define RHF_REQUICKSTART 0x00000400 - -/* Object has been requickstarted */ -#define RHF_REQUICKSTARTED 0x00000800 - -/* Generated by cord. */ -#define RHF_CORD 0x00001000 - -/* Object contains no unresolved undef symbols. */ -#define RHF_NO_UNRES_UNDEF 0x00002000 - -/* Symbol table is in a safe order. */ -#define RHF_RLD_ORDER_SAFE 0x00004000 - -/* Special values for the st_other field in the symbol table. These - are used in an Irix 5 dynamic symbol table. */ - -#define STO_DEFAULT STV_DEFAULT -#define STO_INTERNAL STV_INTERNAL -#define STO_HIDDEN STV_HIDDEN -#define STO_PROTECTED STV_PROTECTED - -/* This value is used for a mips16 .text symbol. */ -#define STO_MIPS16 0xf0 - -/* This bit is used on Irix to indicate a symbol whose definition - is optional - if, at final link time, it cannot be found, no - error message should be produced. */ -#define STO_OPTIONAL (1 << 2) -/* A macro to examine the STO_OPTIONAL bit. */ -#define ELF_MIPS_IS_OPTIONAL(other) ((other) & STO_OPTIONAL) - -/* The 64-bit MIPS ELF ABI uses an unusual reloc format. Each - relocation entry specifies up to three actual relocations, all at - the same address. The first relocation which required a symbol - uses the symbol in the r_sym field. The second relocation which - requires a symbol uses the symbol in the r_ssym field. If all - three relocations require a symbol, the third one uses a zero - value. */ - -/* An entry in a 64 bit SHT_REL section. */ - -typedef struct -{ - /* Address of relocation. */ - unsigned char r_offset[8]; - /* Symbol index. */ - unsigned char r_sym[4]; - /* Special symbol. */ - unsigned char r_ssym[1]; - /* Third relocation. */ - unsigned char r_type3[1]; - /* Second relocation. */ - unsigned char r_type2[1]; - /* First relocation. */ - unsigned char r_type[1]; -} Elf64_Mips_External_Rel; - -typedef struct -{ - /* Address of relocation. */ - bfd_vma r_offset; - /* Symbol index. */ - unsigned long r_sym; - /* Special symbol. */ - unsigned char r_ssym; - /* Third relocation. */ - unsigned char r_type3; - /* Second relocation. */ - unsigned char r_type2; - /* First relocation. */ - unsigned char r_type; -} Elf64_Mips_Internal_Rel; - -/* An entry in a 64 bit SHT_RELA section. */ - -typedef struct -{ - /* Address of relocation. */ - unsigned char r_offset[8]; - /* Symbol index. */ - unsigned char r_sym[4]; - /* Special symbol. */ - unsigned char r_ssym[1]; - /* Third relocation. */ - unsigned char r_type3[1]; - /* Second relocation. */ - unsigned char r_type2[1]; - /* First relocation. */ - unsigned char r_type[1]; - /* Addend. */ - unsigned char r_addend[8]; -} Elf64_Mips_External_Rela; - -typedef struct -{ - /* Address of relocation. */ - bfd_vma r_offset; - /* Symbol index. */ - unsigned long r_sym; - /* Special symbol. */ - unsigned char r_ssym; - /* Third relocation. */ - unsigned char r_type3; - /* Second relocation. */ - unsigned char r_type2; - /* First relocation. */ - unsigned char r_type; - /* Addend. */ - bfd_signed_vma r_addend; -} Elf64_Mips_Internal_Rela; - -/* MIPS ELF 64 relocation info access macros. */ -#define ELF64_MIPS_R_SSYM(i) (((i) >> 24) & 0xff) -#define ELF64_MIPS_R_TYPE3(i) (((i) >> 16) & 0xff) -#define ELF64_MIPS_R_TYPE2(i) (((i) >> 8) & 0xff) -#define ELF64_MIPS_R_TYPE(i) ((i) & 0xff) - -/* Values found in the r_ssym field of a relocation entry. */ - -/* No relocation. */ -#define RSS_UNDEF 0 - -/* Value of GP. */ -#define RSS_GP 1 - -/* Value of GP in object being relocated. */ -#define RSS_GP0 2 - -/* Address of location being relocated. */ -#define RSS_LOC 3 - -/* A SHT_MIPS_OPTIONS section contains a series of options, each of - which starts with this header. */ - -typedef struct -{ - /* Type of option. */ - unsigned char kind[1]; - /* Size of option descriptor, including header. */ - unsigned char size[1]; - /* Section index of affected section, or 0 for global option. */ - unsigned char section[2]; - /* Information specific to this kind of option. */ - unsigned char info[4]; -} Elf_External_Options; - -typedef struct -{ - /* Type of option. */ - unsigned char kind; - /* Size of option descriptor, including header. */ - unsigned char size; - /* Section index of affected section, or 0 for global option. */ - unsigned short section; - /* Information specific to this kind of option. */ - unsigned long info; -} Elf_Internal_Options; - -/* MIPS ELF option header swapping routines. */ -extern void bfd_mips_elf_swap_options_in - (bfd *, const Elf_External_Options *, Elf_Internal_Options *); -extern void bfd_mips_elf_swap_options_out - (bfd *, const Elf_Internal_Options *, Elf_External_Options *); - -/* Values which may appear in the kind field of an Elf_Options - structure. */ - -/* Undefined. */ -#define ODK_NULL 0 - -/* Register usage and GP value. */ -#define ODK_REGINFO 1 - -/* Exception processing information. */ -#define ODK_EXCEPTIONS 2 - -/* Section padding information. */ -#define ODK_PAD 3 - -/* Hardware workarounds performed. */ -#define ODK_HWPATCH 4 - -/* Fill value used by the linker. */ -#define ODK_FILL 5 - -/* Reserved space for desktop tools. */ -#define ODK_TAGS 6 - -/* Hardware workarounds, AND bits when merging. */ -#define ODK_HWAND 7 - -/* Hardware workarounds, OR bits when merging. */ -#define ODK_HWOR 8 - -/* GP group to use for text/data sections. */ -#define ODK_GP_GROUP 9 - -/* ID information. */ -#define ODK_IDENT 10 - -/* In the 32 bit ABI, an ODK_REGINFO option is just a Elf32_RegInfo - structure. In the 64 bit ABI, it is the following structure. The - info field of the options header is not used. */ - -typedef struct -{ - /* Mask of general purpose registers used. */ - unsigned char ri_gprmask[4]; - /* Padding. */ - unsigned char ri_pad[4]; - /* Mask of co-processor registers used. */ - unsigned char ri_cprmask[4][4]; - /* GP register value for this object file. */ - unsigned char ri_gp_value[8]; -} Elf64_External_RegInfo; - -typedef struct -{ - /* Mask of general purpose registers used. */ - unsigned long ri_gprmask; - /* Padding. */ - unsigned long ri_pad; - /* Mask of co-processor registers used. */ - unsigned long ri_cprmask[4]; - /* GP register value for this object file. */ - bfd_vma ri_gp_value; -} Elf64_Internal_RegInfo; - -typedef struct -{ - /* The hash value computed from the name of the corresponding - dynamic symbol. */ - unsigned char ms_hash_value[4]; - /* Contains both the dynamic relocation index and the symbol flags - field. The macros ELF32_MS_REL_INDEX and ELF32_MS_FLAGS are used - to access the individual values. The dynamic relocation index - identifies the first entry in the .rel.dyn section that - references the dynamic symbol corresponding to this msym entry. - If the index is 0, no dynamic relocations are associated with the - symbol. The symbol flags field is reserved for future use. */ - unsigned char ms_info[4]; -} Elf32_External_Msym; - -typedef struct -{ - /* The hash value computed from the name of the corresponding - dynamic symbol. */ - unsigned long ms_hash_value; - /* Contains both the dynamic relocation index and the symbol flags - field. The macros ELF32_MS_REL_INDEX and ELF32_MS_FLAGS are used - to access the individual values. The dynamic relocation index - identifies the first entry in the .rel.dyn section that - references the dynamic symbol corresponding to this msym entry. - If the index is 0, no dynamic relocations are associated with the - symbol. The symbol flags field is reserved for future use. */ - unsigned long ms_info; -} Elf32_Internal_Msym; - -#define ELF32_MS_REL_INDEX(i) ((i) >> 8) -#define ELF32_MS_FLAGS(i) (i) & 0xff) -#define ELF32_MS_INFO(r, f) (((r) << 8) + ((f) & 0xff)) - -/* MIPS ELF reginfo swapping routines. */ -extern void bfd_mips_elf64_swap_reginfo_in - (bfd *, const Elf64_External_RegInfo *, Elf64_Internal_RegInfo *); -extern void bfd_mips_elf64_swap_reginfo_out - (bfd *, const Elf64_Internal_RegInfo *, Elf64_External_RegInfo *); - -/* Masks for the info work of an ODK_EXCEPTIONS descriptor. */ -#define OEX_FPU_MIN 0x1f /* FPEs which must be enabled. */ -#define OEX_FPU_MAX 0x1f00 /* FPEs which may be enabled. */ -#define OEX_PAGE0 0x10000 /* Page zero must be mapped. */ -#define OEX_SMM 0x20000 /* Force sequential memory mode. */ -#define OEX_FPDBUG 0x40000 /* Force precise floating-point - exceptions (debug mode). */ -#define OEX_DISMISS 0x80000 /* Dismiss invalid address faults. */ - -/* Masks of the FP exceptions for OEX_FPU_MIN and OEX_FPU_MAX. */ -#define OEX_FPU_INVAL 0x10 /* Invalid operation exception. */ -#define OEX_FPU_DIV0 0x08 /* Division by zero exception. */ -#define OEX_FPU_OFLO 0x04 /* Overflow exception. */ -#define OEX_FPU_UFLO 0x02 /* Underflow exception. */ -#define OEX_FPU_INEX 0x01 /* Inexact exception. */ - -/* Masks for the info word of an ODK_PAD descriptor. */ -#define OPAD_PREFIX 0x01 -#define OPAD_POSTFIX 0x02 -#define OPAD_SYMBOL 0x04 - -/* Masks for the info word of an ODK_HWPATCH descriptor. */ -#define OHW_R4KEOP 0x00000001 /* R4000 end-of-page patch. */ -#define OHW_R8KPFETCH 0x00000002 /* May need R8000 prefetch patch. */ -#define OHW_R5KEOP 0x00000004 /* R5000 end-of-page patch. */ -#define OHW_R5KCVTL 0x00000008 /* R5000 cvt.[ds].l bug - (clean == 1). */ -#define OHW_R10KLDL 0x00000010 /* Needs R10K misaligned - load patch. */ - -/* Masks for the info word of an ODK_IDENT/ODK_GP_GROUP descriptor. */ -#define OGP_GROUP 0x0000ffff /* GP group number. */ -#define OGP_SELF 0xffff0000 /* Self-contained GP groups. */ - -/* Masks for the info word of an ODK_HWAND/ODK_HWOR descriptor. */ -#define OHWA0_R4KEOP_CHECKED 0x00000001 -#define OHWA0_R4KEOP_CLEAN 0x00000002 - - -#endif /* _ELF_MIPS_H */ diff --git a/include/elf/mmix.h b/include/elf/mmix.h deleted file mode 100644 index 9661e87b552..00000000000 --- a/include/elf/mmix.h +++ /dev/null @@ -1,171 +0,0 @@ -/* MMIX support for BFD. - Copyright 2001, 2002, 2003 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the MMIX ELF ABI. */ -#ifndef ELF_MMIX_H -#define ELF_MMIX_H - -#include "elf/reloc-macros.h" - -/* Relocations. See the reloc table in bfd/elf64-mmix.c for details. */ -START_RELOC_NUMBERS (elf_mmix_reloc_type) - RELOC_NUMBER (R_MMIX_NONE, 0) - - /* Standard absolute relocations. */ - RELOC_NUMBER (R_MMIX_8, 1) - RELOC_NUMBER (R_MMIX_16, 2) - RELOC_NUMBER (R_MMIX_24, 3) - RELOC_NUMBER (R_MMIX_32, 4) - RELOC_NUMBER (R_MMIX_64, 5) - - /* Standard relative relocations. */ - RELOC_NUMBER (R_MMIX_PC_8, 6) - RELOC_NUMBER (R_MMIX_PC_16, 7) - RELOC_NUMBER (R_MMIX_PC_24, 8) - RELOC_NUMBER (R_MMIX_PC_32, 9) - RELOC_NUMBER (R_MMIX_PC_64, 10) - - /* GNU extensions for C++ vtables. */ - RELOC_NUMBER (R_MMIX_GNU_VTINHERIT, 11) - RELOC_NUMBER (R_MMIX_GNU_VTENTRY, 12) - - /* A GETA instruction. */ - RELOC_NUMBER (R_MMIX_GETA, 13) - RELOC_NUMBER (R_MMIX_GETA_1, 14) - RELOC_NUMBER (R_MMIX_GETA_2, 15) - RELOC_NUMBER (R_MMIX_GETA_3, 16) - - /* A conditional branch instruction. */ - RELOC_NUMBER (R_MMIX_CBRANCH, 17) - RELOC_NUMBER (R_MMIX_CBRANCH_J, 18) - RELOC_NUMBER (R_MMIX_CBRANCH_1, 19) - RELOC_NUMBER (R_MMIX_CBRANCH_2, 20) - RELOC_NUMBER (R_MMIX_CBRANCH_3, 21) - - /* A PUSHJ instruction. */ - RELOC_NUMBER (R_MMIX_PUSHJ, 22) - RELOC_NUMBER (R_MMIX_PUSHJ_1, 23) - RELOC_NUMBER (R_MMIX_PUSHJ_2, 24) - RELOC_NUMBER (R_MMIX_PUSHJ_3, 25) - - /* A JMP instruction. */ - RELOC_NUMBER (R_MMIX_JMP, 26) - RELOC_NUMBER (R_MMIX_JMP_1, 27) - RELOC_NUMBER (R_MMIX_JMP_2, 28) - RELOC_NUMBER (R_MMIX_JMP_3, 29) - - /* A relative address such as in a GETA or a branch. */ - RELOC_NUMBER (R_MMIX_ADDR19, 30) - - /* A relative address such as in a JMP (only). */ - RELOC_NUMBER (R_MMIX_ADDR27, 31) - - /* A general register or a number 0..255. */ - RELOC_NUMBER (R_MMIX_REG_OR_BYTE, 32) - - /* A general register. */ - RELOC_NUMBER (R_MMIX_REG, 33) - - /* A global register and an offset, the global register (allocated at - link time) contents plus the offset made equivalent to the relocation - expression at link time. The relocation must point at the Y field of - an instruction. */ - RELOC_NUMBER (R_MMIX_BASE_PLUS_OFFSET, 34) - - /* A LOCAL assertion. */ - RELOC_NUMBER (R_MMIX_LOCAL, 35) - - /* A PUSHJ instruction, generating a stub if it does not reach. */ - RELOC_NUMBER (R_MMIX_PUSHJ_STUBBABLE, 36) -END_RELOC_NUMBERS (R_MMIX_max) - - -/* Section Attributes. */ -/* A section containing necessary information for relaxation. */ -#define SHF_MMIX_CANRELAX 0x80000000 - -/* Symbol attributes. */ -/* A symbol with this section-index is a register. */ -#define SHN_REGISTER SHN_LOPROC - -/* This section holds contents for each initialized register, at VMA - regno*8. A symbol relative to this section will be transformed to an - absolute symbol with the value corresponding to the register number at - final link time. A symbol with a value outside the inclusive range - 32*8 .. 254*8 is an error. It is highly recommended to only use an - upper bound of 253*8 or lower as specified in the (currently - unspecified) ABI. */ -#define MMIX_REG_CONTENTS_SECTION_NAME ".MMIX.reg_contents" - -/* At link time, a section by this name is created, expected to be - included in MMIX_REG_CONTENTS_SECTION_NAME in the output. */ -#define MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME \ - ".MMIX.reg_contents.linker_allocated" - -/* This is a faked section holding symbols with SHN_REGISTER. Don't - confuse it with MMIX_REG_CONTENTS_SECTION_NAME; this one has no - contents, just values. It is an error for a value in this section to - be outside the range 32..255 and it must never become an actual section - in an object file. */ -#define MMIX_REG_SECTION_NAME "*REG*" - -/* Appended with a number N=0..65535, this is a representation of the - mmixal "BSPEC N" ... "ESPEC" directive pair; the contents go into an - ELF section by name ".MMIX.spec_data.N". */ -#define MMIX_OTHER_SPEC_SECTION_PREFIX ".MMIX.spec_data." - -/* A section SECNAME is noted to start at "__.MMIX.start.SECNAME" by the - presence of this symbol. Currently only implemented for ".text" - through the symbol "__.MMIX.start..text". */ -#define MMIX_LOC_SECTION_START_SYMBOL_PREFIX "__.MMIX.start." - -/* This symbol is always a function. */ -#define MMIX_START_SYMBOL_NAME "Main" - - -/* We smuggle in a few MMO specifics here. We don't make a specific MMO - file, since we can't reasonably support MMO without ELF; we have to - include this file anyway. */ - -#define MMO_TEXT_SECTION_NAME ".text" -#define MMO_DATA_SECTION_NAME ".data" - -/* A definition for the flags we put in spec data in files. A copy of our - own of some flags to keep immune to BFD flag changes. See section.c of - 2001-07-18 for flag documentation. */ -#define MMO_SEC_ALLOC 0x001 -#define MMO_SEC_LOAD 0x002 -#define MMO_SEC_RELOC 0x004 -#define MMO_SEC_READONLY 0x010 -#define MMO_SEC_CODE 0x020 -#define MMO_SEC_DATA 0x040 -#define MMO_SEC_NEVER_LOAD 0x400 -#define MMO_SEC_IS_COMMON 0x8000 -#define MMO_SEC_DEBUGGING 0x10000 - -#ifdef BFD_ARCH_SIZE -extern bfd_boolean _bfd_mmix_before_linker_allocation - (bfd *, struct bfd_link_info *); -extern bfd_boolean _bfd_mmix_after_linker_allocation - (bfd *, struct bfd_link_info *); -extern bfd_boolean _bfd_mmix_check_all_relocs - (bfd *, struct bfd_link_info *); -#endif - -#endif /* ELF_MMIX_H */ diff --git a/include/elf/mn10200.h b/include/elf/mn10200.h deleted file mode 100644 index 8461588e3b0..00000000000 --- a/include/elf/mn10200.h +++ /dev/null @@ -1,39 +0,0 @@ -/* MN10200 ELF support for BFD. - Copyright 1998, 2000 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the MN10200 ELF ABI. */ - -#ifndef _ELF_MN10200_H -#define _ELF_MN10200_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_mn10200_reloc_type) - RELOC_NUMBER (R_MN10200_NONE, 0) - RELOC_NUMBER (R_MN10200_32, 1) - RELOC_NUMBER (R_MN10200_16, 2) - RELOC_NUMBER (R_MN10200_8, 3) - RELOC_NUMBER (R_MN10200_24, 4) - RELOC_NUMBER (R_MN10200_PCREL8, 5) - RELOC_NUMBER (R_MN10200_PCREL16, 6) - RELOC_NUMBER (R_MN10200_PCREL24, 7) -END_RELOC_NUMBERS (R_MN10200_max) - -#endif /* _ELF_MN10200_H */ diff --git a/include/elf/mn10300.h b/include/elf/mn10300.h deleted file mode 100644 index d241e9c61b8..00000000000 --- a/include/elf/mn10300.h +++ /dev/null @@ -1,68 +0,0 @@ -/* MN10300 ELF support for BFD. - Copyright 1998, 1999, 2000, 2003 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the MN10300 ELF ABI. */ - -#ifndef _ELF_MN10300_H -#define _ELF_MN10300_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_mn10300_reloc_type) - RELOC_NUMBER (R_MN10300_NONE, 0) - RELOC_NUMBER (R_MN10300_32, 1) - RELOC_NUMBER (R_MN10300_16, 2) - RELOC_NUMBER (R_MN10300_8, 3) - RELOC_NUMBER (R_MN10300_PCREL32, 4) - RELOC_NUMBER (R_MN10300_PCREL16, 5) - RELOC_NUMBER (R_MN10300_PCREL8, 6) - RELOC_NUMBER (R_MN10300_GNU_VTINHERIT, 7) - RELOC_NUMBER (R_MN10300_GNU_VTENTRY, 8) - RELOC_NUMBER (R_MN10300_24, 9) - RELOC_NUMBER (R_MN10300_GOTPC32, 10) - RELOC_NUMBER (R_MN10300_GOTPC16, 11) - RELOC_NUMBER (R_MN10300_GOTOFF32, 12) - RELOC_NUMBER (R_MN10300_GOTOFF24, 13) - RELOC_NUMBER (R_MN10300_GOTOFF16, 14) - RELOC_NUMBER (R_MN10300_PLT32, 15) - RELOC_NUMBER (R_MN10300_PLT16, 16) - RELOC_NUMBER (R_MN10300_GOT32, 17) - RELOC_NUMBER (R_MN10300_GOT24, 18) - RELOC_NUMBER (R_MN10300_GOT16, 19) - RELOC_NUMBER (R_MN10300_COPY, 20) - RELOC_NUMBER (R_MN10300_GLOB_DAT, 21) - RELOC_NUMBER (R_MN10300_JMP_SLOT, 22) - RELOC_NUMBER (R_MN10300_RELATIVE, 23) -END_RELOC_NUMBERS (R_MN10300_MAX) - -/* Machine variant if we know it. This field was invented at Cygnus, - but it is hoped that other vendors will adopt it. If some standard - is developed, this code should be changed to follow it. */ - -#define EF_MN10300_MACH 0x00FF0000 - -/* Cygnus is choosing values between 80 and 9F; - 00 - 7F should be left for a future standard; - the rest are open. */ - -#define E_MN10300_MACH_MN10300 0x00810000 -#define E_MN10300_MACH_AM33 0x00820000 -#define E_MN10300_MACH_AM33_2 0x00830000 -#endif /* _ELF_MN10300_H */ diff --git a/include/elf/msp430.h b/include/elf/msp430.h deleted file mode 100644 index ff16ba2d260..00000000000 --- a/include/elf/msp430.h +++ /dev/null @@ -1,58 +0,0 @@ -/* MSP430 ELF support for BFD. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. - Contributed by Dmitry Diky - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., - 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_MSP430_H -#define _ELF_MSP430_H - -#include "elf/reloc-macros.h" - -/* Processor specific flags for the ELF header e_flags field. */ -#define EF_MSP430_MACH 0xff - -#define E_MSP430_MACH_MSP430x11 11 -#define E_MSP430_MACH_MSP430x11x1 110 -#define E_MSP430_MACH_MSP430x12 12 -#define E_MSP430_MACH_MSP430x13 13 -#define E_MSP430_MACH_MSP430x14 14 -#define E_MSP430_MACH_MSP430x15 15 -#define E_MSP430_MACH_MSP430x16 16 -#define E_MSP430_MACH_MSP430x31 31 -#define E_MSP430_MACH_MSP430x32 32 -#define E_MSP430_MACH_MSP430x33 33 -#define E_MSP430_MACH_MSP430x41 41 -#define E_MSP430_MACH_MSP430x42 42 -#define E_MSP430_MACH_MSP430x43 43 -#define E_MSP430_MACH_MSP430x44 44 - -/* Relocations. */ -START_RELOC_NUMBERS (elf_msp430_reloc_type) - RELOC_NUMBER (R_MSP430_NONE, 0) - RELOC_NUMBER (R_MSP430_32, 1) - RELOC_NUMBER (R_MSP430_10_PCREL, 2) - RELOC_NUMBER (R_MSP430_16, 3) - RELOC_NUMBER (R_MSP430_16_PCREL, 4) - RELOC_NUMBER (R_MSP430_16_BYTE, 5) - RELOC_NUMBER (R_MSP430_16_PCREL_BYTE, 6) - RELOC_NUMBER (R_MSP430_2X_PCREL, 7) - RELOC_NUMBER (R_MSP430_RL_PCREL, 8) - -END_RELOC_NUMBERS (R_MSP430_max) - -#endif /* _ELF_MSP430_H */ diff --git a/include/elf/mt.h b/include/elf/mt.h deleted file mode 100644 index 974c2def6a1..00000000000 --- a/include/elf/mt.h +++ /dev/null @@ -1,46 +0,0 @@ -/* MS1 ELF support for BFD. - Copyright (C) 2000, 2005 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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. */ - -#ifndef _ELF_MT_H -#define _ELF_MT_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_mt_reloc_type) - RELOC_NUMBER (R_MT_NONE, 0) - RELOC_NUMBER (R_MT_16, 1) - RELOC_NUMBER (R_MT_32, 2) - RELOC_NUMBER (R_MT_32_PCREL, 3) - RELOC_NUMBER (R_MT_PC16, 4) - RELOC_NUMBER (R_MT_HI16, 5) - RELOC_NUMBER (R_MT_LO16, 6) -END_RELOC_NUMBERS(R_MT_max) - -#define EF_MT_CPU_MRISC 0x00000001 /* default */ -#define EF_MT_CPU_MRISC2 0x00000002 /* MRISC2 */ -#define EF_MT_CPU_MS2 0x00000003 /* MS2 */ -#define EF_MT_CPU_MASK 0x00000003 /* specific cpu bits */ -#define EF_MT_ALL_FLAGS (EF_MT_CPU_MASK) - -/* The location of the memory mapped hardware stack. */ -#define MT_STACK_VALUE 0x0f000000 -#define MT_STACK_SIZE 0x20 - -#endif /* _ELF_MT_H */ diff --git a/include/elf/openrisc.h b/include/elf/openrisc.h deleted file mode 100644 index 326834e34d9..00000000000 --- a/include/elf/openrisc.h +++ /dev/null @@ -1,39 +0,0 @@ -/* OpenRISC ELF support for BFD. - Copyright 2001 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., -51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_OPENRISC_H -#define _ELF_OPENRISC_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_openrisc_reloc_type) - RELOC_NUMBER (R_OPENRISC_NONE, 0) - RELOC_NUMBER (R_OPENRISC_INSN_REL_26, 1) - RELOC_NUMBER (R_OPENRISC_INSN_ABS_26, 2) - RELOC_NUMBER (R_OPENRISC_LO_16_IN_INSN, 3) - RELOC_NUMBER (R_OPENRISC_HI_16_IN_INSN, 4) - RELOC_NUMBER (R_OPENRISC_8, 5) - RELOC_NUMBER (R_OPENRISC_16, 6) - RELOC_NUMBER (R_OPENRISC_32, 7) - RELOC_NUMBER (R_OPENRISC_GNU_VTINHERIT, 8) - RELOC_NUMBER (R_OPENRISC_GNU_VTENTRY, 9) -END_RELOC_NUMBERS (R_OPENRISC_max) - -#endif /* _ELF_OPENRISC_H */ diff --git a/include/elf/or32.h b/include/elf/or32.h deleted file mode 100644 index bc308e751e6..00000000000 --- a/include/elf/or32.h +++ /dev/null @@ -1,62 +0,0 @@ -/* OR1K ELF support for BFD. Derived from ppc.h. - Copyright (C) 2002 Free Software Foundation, Inc. - Contributed by Ivan Guzvinec - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_OR1K_H -#define _ELF_OR1K_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_or32_reloc_type) - RELOC_NUMBER (R_OR32_NONE, 0) - RELOC_NUMBER (R_OR32_32, 1) - RELOC_NUMBER (R_OR32_16, 2) - RELOC_NUMBER (R_OR32_8, 3) - RELOC_NUMBER (R_OR32_CONST, 4) - RELOC_NUMBER (R_OR32_CONSTH, 5) - RELOC_NUMBER (R_OR32_JUMPTARG, 6) - RELOC_NUMBER (R_OR32_GNU_VTENTRY, 7) - RELOC_NUMBER (R_OR32_GNU_VTINHERIT, 8) -END_RELOC_NUMBERS (R_OR32_max) - -/* Four bit OR32 machine type field. */ -#define EF_OR32_MACH 0x0000000f - -/* Various CPU types. */ -#define E_OR32_MACH_BASE 0x00000000 -#define E_OR32_MACH_UNUSED1 0x00000001 -#define E_OR32_MACH_UNUSED2 0x00000002 -#define E_OR32_MACH_UNUSED4 0x00000003 - -/* Processor specific section headers, sh_type field */ -#define SHT_ORDERED SHT_HIPROC /* Link editor is to sort the \ - entries in this section \ - based on the address \ - specified in the associated \ - symbol table entry. */ - -/* Processor specific section flags, sh_flags field */ -#define SHF_EXCLUDE 0x80000000 /* Link editor is to exclude \ - this section from executable \ - and shared objects that it \ - builds when those objects \ - are not to be furhter \ - relocated. */ -#endif /* _ELF_OR1K_H */ diff --git a/include/elf/pj.h b/include/elf/pj.h deleted file mode 100644 index 45cc7b36a55..00000000000 --- a/include/elf/pj.h +++ /dev/null @@ -1,44 +0,0 @@ -/* picoJava ELF support for BFD. - Copyright 1999, 2000 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_PJ_H -#define _ELF_PJ_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ - -START_RELOC_NUMBERS (elf_pj_reloc_type) - RELOC_NUMBER (R_PJ_NONE, 0) - RELOC_NUMBER (R_PJ_DATA_DIR32, 1) - RELOC_NUMBER (R_PJ_CODE_REL32, 2) - RELOC_NUMBER (R_PJ_CODE_REL16, 3) - RELOC_NUMBER (R_PJ_CODE_DIR32, 6) - RELOC_NUMBER (R_PJ_CODE_DIR16, 7) - RELOC_NUMBER (R_PJ_CODE_LO16, 13) - RELOC_NUMBER (R_PJ_CODE_HI16, 14) - RELOC_NUMBER (R_PJ_GNU_VTINHERIT, 15) - RELOC_NUMBER (R_PJ_GNU_VTENTRY, 16) -END_RELOC_NUMBERS (R_PJ_max) - -#define EF_PICOJAVA_ARCH 0x0000000f -#define EF_PICOJAVA_NEWCALLS 0x00000010 -#define EF_PICOJAVA_GNUCALLS 0x00000020 /* The (currently) non standard GNU calling convention */ - -#endif diff --git a/include/elf/ppc.h b/include/elf/ppc.h deleted file mode 100644 index ca5035274d9..00000000000 --- a/include/elf/ppc.h +++ /dev/null @@ -1,174 +0,0 @@ -/* PPC ELF support for BFD. - Copyright 1995, 1996, 1998, 2000, 2001, 2002, 2003, 2005 - Free Software Foundation, Inc. - - By Michael Meissner, Cygnus Support, , from information - in the System V Application Binary Interface, PowerPC Processor Supplement - and the PowerPC Embedded Application Binary Interface (eabi). - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the PPC ELF ABI. Note - that most of this is not actually implemented by BFD. */ - -#ifndef _ELF_PPC_H -#define _ELF_PPC_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_ppc_reloc_type) - RELOC_NUMBER (R_PPC_NONE, 0) - RELOC_NUMBER (R_PPC_ADDR32, 1) - RELOC_NUMBER (R_PPC_ADDR24, 2) - RELOC_NUMBER (R_PPC_ADDR16, 3) - RELOC_NUMBER (R_PPC_ADDR16_LO, 4) - RELOC_NUMBER (R_PPC_ADDR16_HI, 5) - RELOC_NUMBER (R_PPC_ADDR16_HA, 6) - RELOC_NUMBER (R_PPC_ADDR14, 7) - RELOC_NUMBER (R_PPC_ADDR14_BRTAKEN, 8) - RELOC_NUMBER (R_PPC_ADDR14_BRNTAKEN, 9) - RELOC_NUMBER (R_PPC_REL24, 10) - RELOC_NUMBER (R_PPC_REL14, 11) - RELOC_NUMBER (R_PPC_REL14_BRTAKEN, 12) - RELOC_NUMBER (R_PPC_REL14_BRNTAKEN, 13) - RELOC_NUMBER (R_PPC_GOT16, 14) - RELOC_NUMBER (R_PPC_GOT16_LO, 15) - RELOC_NUMBER (R_PPC_GOT16_HI, 16) - RELOC_NUMBER (R_PPC_GOT16_HA, 17) - RELOC_NUMBER (R_PPC_PLTREL24, 18) - RELOC_NUMBER (R_PPC_COPY, 19) - RELOC_NUMBER (R_PPC_GLOB_DAT, 20) - RELOC_NUMBER (R_PPC_JMP_SLOT, 21) - RELOC_NUMBER (R_PPC_RELATIVE, 22) - RELOC_NUMBER (R_PPC_LOCAL24PC, 23) - RELOC_NUMBER (R_PPC_UADDR32, 24) - RELOC_NUMBER (R_PPC_UADDR16, 25) - RELOC_NUMBER (R_PPC_REL32, 26) - RELOC_NUMBER (R_PPC_PLT32, 27) - RELOC_NUMBER (R_PPC_PLTREL32, 28) - RELOC_NUMBER (R_PPC_PLT16_LO, 29) - RELOC_NUMBER (R_PPC_PLT16_HI, 30) - RELOC_NUMBER (R_PPC_PLT16_HA, 31) - RELOC_NUMBER (R_PPC_SDAREL16, 32) - RELOC_NUMBER (R_PPC_SECTOFF, 33) - RELOC_NUMBER (R_PPC_SECTOFF_LO, 34) - RELOC_NUMBER (R_PPC_SECTOFF_HI, 35) - RELOC_NUMBER (R_PPC_SECTOFF_HA, 36) - RELOC_NUMBER (R_PPC_ADDR30, 37) - - /* Relocs added to support TLS. */ - RELOC_NUMBER (R_PPC_TLS, 67) - RELOC_NUMBER (R_PPC_DTPMOD32, 68) - RELOC_NUMBER (R_PPC_TPREL16, 69) - RELOC_NUMBER (R_PPC_TPREL16_LO, 70) - RELOC_NUMBER (R_PPC_TPREL16_HI, 71) - RELOC_NUMBER (R_PPC_TPREL16_HA, 72) - RELOC_NUMBER (R_PPC_TPREL32, 73) - RELOC_NUMBER (R_PPC_DTPREL16, 74) - RELOC_NUMBER (R_PPC_DTPREL16_LO, 75) - RELOC_NUMBER (R_PPC_DTPREL16_HI, 76) - RELOC_NUMBER (R_PPC_DTPREL16_HA, 77) - RELOC_NUMBER (R_PPC_DTPREL32, 78) - RELOC_NUMBER (R_PPC_GOT_TLSGD16, 79) - RELOC_NUMBER (R_PPC_GOT_TLSGD16_LO, 80) - RELOC_NUMBER (R_PPC_GOT_TLSGD16_HI, 81) - RELOC_NUMBER (R_PPC_GOT_TLSGD16_HA, 82) - RELOC_NUMBER (R_PPC_GOT_TLSLD16, 83) - RELOC_NUMBER (R_PPC_GOT_TLSLD16_LO, 84) - RELOC_NUMBER (R_PPC_GOT_TLSLD16_HI, 85) - RELOC_NUMBER (R_PPC_GOT_TLSLD16_HA, 86) - RELOC_NUMBER (R_PPC_GOT_TPREL16, 87) - RELOC_NUMBER (R_PPC_GOT_TPREL16_LO, 88) - RELOC_NUMBER (R_PPC_GOT_TPREL16_HI, 89) - RELOC_NUMBER (R_PPC_GOT_TPREL16_HA, 90) - RELOC_NUMBER (R_PPC_GOT_DTPREL16, 91) - RELOC_NUMBER (R_PPC_GOT_DTPREL16_LO, 92) - RELOC_NUMBER (R_PPC_GOT_DTPREL16_HI, 93) - RELOC_NUMBER (R_PPC_GOT_DTPREL16_HA, 94) - -/* The remaining relocs are from the Embedded ELF ABI, and are not - in the SVR4 ELF ABI. */ - RELOC_NUMBER (R_PPC_EMB_NADDR32, 101) - RELOC_NUMBER (R_PPC_EMB_NADDR16, 102) - RELOC_NUMBER (R_PPC_EMB_NADDR16_LO, 103) - RELOC_NUMBER (R_PPC_EMB_NADDR16_HI, 104) - RELOC_NUMBER (R_PPC_EMB_NADDR16_HA, 105) - RELOC_NUMBER (R_PPC_EMB_SDAI16, 106) - RELOC_NUMBER (R_PPC_EMB_SDA2I16, 107) - RELOC_NUMBER (R_PPC_EMB_SDA2REL, 108) - RELOC_NUMBER (R_PPC_EMB_SDA21, 109) - RELOC_NUMBER (R_PPC_EMB_MRKREF, 110) - RELOC_NUMBER (R_PPC_EMB_RELSEC16, 111) - RELOC_NUMBER (R_PPC_EMB_RELST_LO, 112) - RELOC_NUMBER (R_PPC_EMB_RELST_HI, 113) - RELOC_NUMBER (R_PPC_EMB_RELST_HA, 114) - RELOC_NUMBER (R_PPC_EMB_BIT_FLD, 115) - RELOC_NUMBER (R_PPC_EMB_RELSDA, 116) - -/* Fake relocations for branch stubs, only used internally by ld. */ -#define R_PPC_RELAX32 245 -#define R_PPC_RELAX32PC 246 -#define R_PPC_RELAX32_PLT 247 -#define R_PPC_RELAX32PC_PLT 248 - -/* These are GNU extensions used in PIC code sequences. */ - RELOC_NUMBER (R_PPC_REL16, 249) - RELOC_NUMBER (R_PPC_REL16_LO, 250) - RELOC_NUMBER (R_PPC_REL16_HI, 251) - RELOC_NUMBER (R_PPC_REL16_HA, 252) - -/* These are GNU extensions to enable C++ vtable garbage collection. */ - RELOC_NUMBER (R_PPC_GNU_VTINHERIT, 253) - RELOC_NUMBER (R_PPC_GNU_VTENTRY, 254) - -/* This is a phony reloc to handle any old fashioned TOC16 references - that may still be in object files. */ - RELOC_NUMBER (R_PPC_TOC16, 255) - -END_RELOC_NUMBERS (R_PPC_max) - -#define IS_PPC_TLS_RELOC(R) \ - ((R) >= R_PPC_TLS && (R) <= R_PPC_GOT_DTPREL16_HA) - -/* Specify the value of _GLOBAL_OFFSET_TABLE_. */ -#define DT_PPC_GOT DT_LOPROC - -/* Processor specific flags for the ELF header e_flags field. */ - -#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag. */ - -#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag. */ -#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib flag. */ - -/* Processor specific section headers, sh_type field. */ - -#define SHT_ORDERED SHT_HIPROC /* Link editor is to sort the \ - entries in this section \ - based on the address \ - specified in the associated \ - symbol table entry. */ - -/* Processor specific section flags, sh_flags field. */ - -#define SHF_EXCLUDE 0x80000000 /* Link editor is to exclude \ - this section from executable \ - and shared objects that it \ - builds when those objects \ - are not to be furhter \ - relocated. */ -#endif /* _ELF_PPC_H */ diff --git a/include/elf/ppc64.h b/include/elf/ppc64.h deleted file mode 100644 index 4aab2ec9446..00000000000 --- a/include/elf/ppc64.h +++ /dev/null @@ -1,156 +0,0 @@ -/* PPC64 ELF support for BFD. - Copyright 2003 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_PPC64_H -#define _ELF_PPC64_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_ppc64_reloc_type) - RELOC_NUMBER (R_PPC64_NONE, 0) - RELOC_NUMBER (R_PPC64_ADDR32, 1) - RELOC_NUMBER (R_PPC64_ADDR24, 2) - RELOC_NUMBER (R_PPC64_ADDR16, 3) - RELOC_NUMBER (R_PPC64_ADDR16_LO, 4) - RELOC_NUMBER (R_PPC64_ADDR16_HI, 5) - RELOC_NUMBER (R_PPC64_ADDR16_HA, 6) - RELOC_NUMBER (R_PPC64_ADDR14, 7) - RELOC_NUMBER (R_PPC64_ADDR14_BRTAKEN, 8) - RELOC_NUMBER (R_PPC64_ADDR14_BRNTAKEN, 9) - RELOC_NUMBER (R_PPC64_REL24, 10) - RELOC_NUMBER (R_PPC64_REL14, 11) - RELOC_NUMBER (R_PPC64_REL14_BRTAKEN, 12) - RELOC_NUMBER (R_PPC64_REL14_BRNTAKEN, 13) - RELOC_NUMBER (R_PPC64_GOT16, 14) - RELOC_NUMBER (R_PPC64_GOT16_LO, 15) - RELOC_NUMBER (R_PPC64_GOT16_HI, 16) - RELOC_NUMBER (R_PPC64_GOT16_HA, 17) - /* 18 unused. 32-bit reloc is R_PPC_PLTREL24. */ - RELOC_NUMBER (R_PPC64_COPY, 19) - RELOC_NUMBER (R_PPC64_GLOB_DAT, 20) - RELOC_NUMBER (R_PPC64_JMP_SLOT, 21) - RELOC_NUMBER (R_PPC64_RELATIVE, 22) - /* 23 unused. 32-bit reloc is R_PPC_LOCAL24PC. */ - RELOC_NUMBER (R_PPC64_UADDR32, 24) - RELOC_NUMBER (R_PPC64_UADDR16, 25) - RELOC_NUMBER (R_PPC64_REL32, 26) - RELOC_NUMBER (R_PPC64_PLT32, 27) - RELOC_NUMBER (R_PPC64_PLTREL32, 28) - RELOC_NUMBER (R_PPC64_PLT16_LO, 29) - RELOC_NUMBER (R_PPC64_PLT16_HI, 30) - RELOC_NUMBER (R_PPC64_PLT16_HA, 31) - /* 32 unused. 32-bit reloc is R_PPC_SDAREL16. */ - RELOC_NUMBER (R_PPC64_SECTOFF, 33) - RELOC_NUMBER (R_PPC64_SECTOFF_LO, 34) - RELOC_NUMBER (R_PPC64_SECTOFF_HI, 35) - RELOC_NUMBER (R_PPC64_SECTOFF_HA, 36) - RELOC_NUMBER (R_PPC64_REL30, 37) - RELOC_NUMBER (R_PPC64_ADDR64, 38) - RELOC_NUMBER (R_PPC64_ADDR16_HIGHER, 39) - RELOC_NUMBER (R_PPC64_ADDR16_HIGHERA, 40) - RELOC_NUMBER (R_PPC64_ADDR16_HIGHEST, 41) - RELOC_NUMBER (R_PPC64_ADDR16_HIGHESTA, 42) - RELOC_NUMBER (R_PPC64_UADDR64, 43) - RELOC_NUMBER (R_PPC64_REL64, 44) - RELOC_NUMBER (R_PPC64_PLT64, 45) - RELOC_NUMBER (R_PPC64_PLTREL64, 46) - RELOC_NUMBER (R_PPC64_TOC16, 47) - RELOC_NUMBER (R_PPC64_TOC16_LO, 48) - RELOC_NUMBER (R_PPC64_TOC16_HI, 49) - RELOC_NUMBER (R_PPC64_TOC16_HA, 50) - RELOC_NUMBER (R_PPC64_TOC, 51) - RELOC_NUMBER (R_PPC64_PLTGOT16, 52) - RELOC_NUMBER (R_PPC64_PLTGOT16_LO, 53) - RELOC_NUMBER (R_PPC64_PLTGOT16_HI, 54) - RELOC_NUMBER (R_PPC64_PLTGOT16_HA, 55) - - /* The following relocs were added in the 64-bit PowerPC ELF ABI - revision 1.2. */ - RELOC_NUMBER (R_PPC64_ADDR16_DS, 56) - RELOC_NUMBER (R_PPC64_ADDR16_LO_DS, 57) - RELOC_NUMBER (R_PPC64_GOT16_DS, 58) - RELOC_NUMBER (R_PPC64_GOT16_LO_DS, 59) - RELOC_NUMBER (R_PPC64_PLT16_LO_DS, 60) - RELOC_NUMBER (R_PPC64_SECTOFF_DS, 61) - RELOC_NUMBER (R_PPC64_SECTOFF_LO_DS, 62) - RELOC_NUMBER (R_PPC64_TOC16_DS, 63) - RELOC_NUMBER (R_PPC64_TOC16_LO_DS, 64) - RELOC_NUMBER (R_PPC64_PLTGOT16_DS, 65) - RELOC_NUMBER (R_PPC64_PLTGOT16_LO_DS, 66) - - /* Relocs added to support TLS. PowerPC64 ELF ABI revision 1.5. */ - RELOC_NUMBER (R_PPC64_TLS, 67) - RELOC_NUMBER (R_PPC64_DTPMOD64, 68) - RELOC_NUMBER (R_PPC64_TPREL16, 69) - RELOC_NUMBER (R_PPC64_TPREL16_LO, 70) - RELOC_NUMBER (R_PPC64_TPREL16_HI, 71) - RELOC_NUMBER (R_PPC64_TPREL16_HA, 72) - RELOC_NUMBER (R_PPC64_TPREL64, 73) - RELOC_NUMBER (R_PPC64_DTPREL16, 74) - RELOC_NUMBER (R_PPC64_DTPREL16_LO, 75) - RELOC_NUMBER (R_PPC64_DTPREL16_HI, 76) - RELOC_NUMBER (R_PPC64_DTPREL16_HA, 77) - RELOC_NUMBER (R_PPC64_DTPREL64, 78) - RELOC_NUMBER (R_PPC64_GOT_TLSGD16, 79) - RELOC_NUMBER (R_PPC64_GOT_TLSGD16_LO, 80) - RELOC_NUMBER (R_PPC64_GOT_TLSGD16_HI, 81) - RELOC_NUMBER (R_PPC64_GOT_TLSGD16_HA, 82) - RELOC_NUMBER (R_PPC64_GOT_TLSLD16, 83) - RELOC_NUMBER (R_PPC64_GOT_TLSLD16_LO, 84) - RELOC_NUMBER (R_PPC64_GOT_TLSLD16_HI, 85) - RELOC_NUMBER (R_PPC64_GOT_TLSLD16_HA, 86) - RELOC_NUMBER (R_PPC64_GOT_TPREL16_DS, 87) - RELOC_NUMBER (R_PPC64_GOT_TPREL16_LO_DS, 88) - RELOC_NUMBER (R_PPC64_GOT_TPREL16_HI, 89) - RELOC_NUMBER (R_PPC64_GOT_TPREL16_HA, 90) - RELOC_NUMBER (R_PPC64_GOT_DTPREL16_DS, 91) - RELOC_NUMBER (R_PPC64_GOT_DTPREL16_LO_DS, 92) - RELOC_NUMBER (R_PPC64_GOT_DTPREL16_HI, 93) - RELOC_NUMBER (R_PPC64_GOT_DTPREL16_HA, 94) - RELOC_NUMBER (R_PPC64_TPREL16_DS, 95) - RELOC_NUMBER (R_PPC64_TPREL16_LO_DS, 96) - RELOC_NUMBER (R_PPC64_TPREL16_HIGHER, 97) - RELOC_NUMBER (R_PPC64_TPREL16_HIGHERA, 98) - RELOC_NUMBER (R_PPC64_TPREL16_HIGHEST, 99) - RELOC_NUMBER (R_PPC64_TPREL16_HIGHESTA, 100) - RELOC_NUMBER (R_PPC64_DTPREL16_DS, 101) - RELOC_NUMBER (R_PPC64_DTPREL16_LO_DS, 102) - RELOC_NUMBER (R_PPC64_DTPREL16_HIGHER, 103) - RELOC_NUMBER (R_PPC64_DTPREL16_HIGHERA, 104) - RELOC_NUMBER (R_PPC64_DTPREL16_HIGHEST, 105) - RELOC_NUMBER (R_PPC64_DTPREL16_HIGHESTA, 106) - - /* These are GNU extensions to enable C++ vtable garbage collection. */ - RELOC_NUMBER (R_PPC64_GNU_VTINHERIT, 253) - RELOC_NUMBER (R_PPC64_GNU_VTENTRY, 254) - -END_RELOC_NUMBERS (R_PPC64_max) - -#define IS_PPC64_TLS_RELOC(R) \ - ((R) >= R_PPC64_TLS && (R) <= R_PPC64_DTPREL16_HIGHESTA) - -/* Specify the start of the .glink section. */ -#define DT_PPC64_GLINK DT_LOPROC - -/* Specify the start and size of the .opd section. */ -#define DT_PPC64_OPD (DT_LOPROC + 1) -#define DT_PPC64_OPDSZ (DT_LOPROC + 2) - -#endif /* _ELF_PPC64_H */ diff --git a/include/elf/reloc-macros.h b/include/elf/reloc-macros.h deleted file mode 100644 index 51e86b5af15..00000000000 --- a/include/elf/reloc-macros.h +++ /dev/null @@ -1,101 +0,0 @@ -/* Generic relocation support for BFD. - Copyright 1998, 1999, 2000, 2003 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* These macros are used by the various *.h target specific header - files to either generate an enum containing all the known relocations - for that target, or if RELOC_MACROS_GEN_FUNC is defined, a recognition - function is generated instead. (This is used by binutils/readelf.c) - - Given a header file like this: - - START_RELOC_NUMBERS (foo) - RELOC_NUMBER (R_foo_NONE, 0) - RELOC_NUMBER (R_foo_32, 1) - EMPTY_RELOC (R_foo_good) - FAKE_RELOC (R_foo_illegal, 9) - END_RELOC_NUMBERS (R_foo_count) - - Then the following will be produced by default (ie if - RELOC_MACROS_GEN_FUNC is *not* defined). - - enum foo - { - R_foo_NONE = 0, - R_foo_32 = 1, - R_foo_good, - R_foo_illegal = 9, - R_foo_count - }; - - If RELOC_MACROS_GEN_FUNC *is* defined, then instead the - following function will be generated: - - static const char *foo (unsigned long rtype); - static const char * - foo (unsigned long rtype) - { - switch (rtype) - { - case 0: return "R_foo_NONE"; - case 1: return "R_foo_32"; - default: return NULL; - } - } - */ - -#ifndef _RELOC_MACROS_H -#define _RELOC_MACROS_H - -#ifdef RELOC_MACROS_GEN_FUNC - -/* This function takes the relocation number and returns the - string version name of the name of that relocation. If - the relocation is not recognised, NULL is returned. */ - -#define START_RELOC_NUMBERS(name) \ -static const char *name (unsigned long rtype); \ -static const char * \ -name (unsigned long rtype) \ -{ \ - switch (rtype) \ - { - -#define RELOC_NUMBER(name, number) \ - case number: return #name; - -#define FAKE_RELOC(name, number) -#define EMPTY_RELOC(name) - -#define END_RELOC_NUMBERS(name) \ - default: return NULL; \ - } \ -} - - -#else /* Default to generating enum. */ - -#define START_RELOC_NUMBERS(name) enum name { -#define RELOC_NUMBER(name, number) name = number, -#define FAKE_RELOC(name, number) name = number, -#define EMPTY_RELOC(name) name, -#define END_RELOC_NUMBERS(name) name }; - -#endif - -#endif /* RELOC_MACROS_H */ diff --git a/include/elf/s390.h b/include/elf/s390.h deleted file mode 100644 index c62b110166a..00000000000 --- a/include/elf/s390.h +++ /dev/null @@ -1,125 +0,0 @@ -/* 390 ELF support for BFD. - Copyright 2000, 2001, 2003 Free Software Foundation, Inc. - Contributed by Carl B. Pedersen and Martin Schwidefsky. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA - 02110-1301, USA. */ - -#ifndef _ELF_390_H -#define _ELF_390_H - -/* Processor specific flags for the ELF header e_flags field. */ - -/* Symbol types. */ - -#define STACK_REG 15 /* Global Stack reg */ -#define BACKL_REG 14 /* Global Backlink reg */ -#define BASE_REG 13 /* Global Base reg */ -#define GOT_REG 12 /* Holds addr of GOT */ - -#include "elf/reloc-macros.h" - -/* Relocation types. */ - -START_RELOC_NUMBERS (elf_s390_reloc_type) - RELOC_NUMBER (R_390_NONE, 0) /* No reloc. */ - RELOC_NUMBER (R_390_8, 1) /* Direct 8 bit. */ - RELOC_NUMBER (R_390_12, 2) /* Direct 12 bit. */ - RELOC_NUMBER (R_390_16, 3) /* Direct 16 bit. */ - RELOC_NUMBER (R_390_32, 4) /* Direct 32 bit. */ - RELOC_NUMBER (R_390_PC32, 5) /* PC relative 32 bit. */ - RELOC_NUMBER (R_390_GOT12, 6) /* 12 bit GOT offset. */ - RELOC_NUMBER (R_390_GOT32, 7) /* 32 bit GOT offset. */ - RELOC_NUMBER (R_390_PLT32, 8) /* 32 bit PC relative PLT address. */ - RELOC_NUMBER (R_390_COPY, 9) /* Copy symbol at runtime. */ - RELOC_NUMBER (R_390_GLOB_DAT, 10) /* Create GOT entry. */ - RELOC_NUMBER (R_390_JMP_SLOT, 11) /* Create PLT entry. */ - RELOC_NUMBER (R_390_RELATIVE, 12) /* Adjust by program base. */ - RELOC_NUMBER (R_390_GOTOFF32, 13) /* 32 bit offset to GOT. */ - RELOC_NUMBER (R_390_GOTPC, 14) /* 32 bit PC relative offset to GOT. */ - RELOC_NUMBER (R_390_GOT16, 15) /* 16 bit GOT offset. */ - RELOC_NUMBER (R_390_PC16, 16) /* PC relative 16 bit. */ - RELOC_NUMBER (R_390_PC16DBL, 17) /* PC relative 16 bit shifted by 1. */ - RELOC_NUMBER (R_390_PLT16DBL, 18) /* 16 bit PC rel. PLT shifted by 1. */ - RELOC_NUMBER (R_390_PC32DBL, 19) /* PC relative 32 bit shifted by 1. */ - RELOC_NUMBER (R_390_PLT32DBL, 20) /* 32 bit PC rel. PLT shifted by 1. */ - RELOC_NUMBER (R_390_GOTPCDBL, 21) /* 32 bit PC rel. GOT shifted by 1. */ - RELOC_NUMBER (R_390_64, 22) /* Direct 64 bit. */ - RELOC_NUMBER (R_390_PC64, 23) /* PC relative 64 bit. */ - RELOC_NUMBER (R_390_GOT64, 24) /* 64 bit GOT offset. */ - RELOC_NUMBER (R_390_PLT64, 25) /* 64 bit PC relative PLT address. */ - RELOC_NUMBER (R_390_GOTENT, 26) /* 32 bit PC rel. to GOT entry >> 1. */ - RELOC_NUMBER (R_390_GOTOFF16, 27) /* 16 bit offset to GOT. */ - RELOC_NUMBER (R_390_GOTOFF64, 28) /* 64 bit offset to GOT. */ - RELOC_NUMBER (R_390_GOTPLT12, 29) /* 12 bit offset to jump slot. */ - RELOC_NUMBER (R_390_GOTPLT16, 30) /* 16 bit offset to jump slot. */ - RELOC_NUMBER (R_390_GOTPLT32, 31) /* 32 bit offset to jump slot. */ - RELOC_NUMBER (R_390_GOTPLT64, 32) /* 64 bit offset to jump slot. */ - RELOC_NUMBER (R_390_GOTPLTENT, 33) /* 32 bit rel. offset to jump slot. */ - RELOC_NUMBER (R_390_PLTOFF16, 34) /* 16 bit offset from GOT to PLT. */ - RELOC_NUMBER (R_390_PLTOFF32, 35) /* 32 bit offset from GOT to PLT. */ - RELOC_NUMBER (R_390_PLTOFF64, 36) /* 16 bit offset from GOT to PLT. */ - RELOC_NUMBER (R_390_TLS_LOAD, 37) /* Tag for load insn in TLS code. */ - RELOC_NUMBER (R_390_TLS_GDCALL, 38) /* Tag for function call in general - dynamic TLS code. */ - RELOC_NUMBER (R_390_TLS_LDCALL, 39) /* Tag for function call in local - dynamic TLS code. */ - RELOC_NUMBER (R_390_TLS_GD32, 40) /* Direct 32 bit for general dynamic - thread local data. */ - RELOC_NUMBER (R_390_TLS_GD64, 41) /* Direct 64 bit for general dynamic - thread local data. */ - RELOC_NUMBER (R_390_TLS_GOTIE12, 42)/* 12 bit GOT offset for static TLS - block offset. */ - RELOC_NUMBER (R_390_TLS_GOTIE32, 43)/* 32 bit GOT offset for static TLS - block offset. */ - RELOC_NUMBER (R_390_TLS_GOTIE64, 44)/* 64 bit GOT offset for static TLS - block offset. */ - RELOC_NUMBER (R_390_TLS_LDM32, 45) /* Direct 32 bit for local dynamic - thread local data in LD code. */ - RELOC_NUMBER (R_390_TLS_LDM64, 46) /* Direct 64 bit for local dynamic - thread local data in LD code. */ - RELOC_NUMBER (R_390_TLS_IE32, 47) /* 32 bit address of GOT entry for - negated static TLS block offset. */ - RELOC_NUMBER (R_390_TLS_IE64, 48) /* 64 bit address of GOT entry for - negated static TLS block offset. */ - RELOC_NUMBER (R_390_TLS_IEENT, 49) /* 32 bit rel. offset to GOT entry for - negated static TLS block offset. */ - RELOC_NUMBER (R_390_TLS_LE32, 50) /* 32 bit negated offset relative to - static TLS block. */ - RELOC_NUMBER (R_390_TLS_LE64, 51) /* 64 bit negated offset relative to - static TLS block. */ - RELOC_NUMBER (R_390_TLS_LDO32, 52) /* 32 bit offset relative to TLS - block. */ - RELOC_NUMBER (R_390_TLS_LDO64, 53) /* 64 bit offset relative to TLS - block. */ - RELOC_NUMBER (R_390_TLS_DTPMOD, 54) /* ID of module containing symbol. */ - RELOC_NUMBER (R_390_TLS_DTPOFF, 55) /* Offset in TLS block. */ - RELOC_NUMBER (R_390_TLS_TPOFF, 56) /* Negate offset in static TLS - block. */ - RELOC_NUMBER (R_390_20, 57) /* Direct 20 bit. */ - RELOC_NUMBER (R_390_GOT20, 58) /* 20 bit GOT offset. */ - RELOC_NUMBER (R_390_GOTPLT20, 59) /* 20 bit offset to jump slot. */ - RELOC_NUMBER (R_390_TLS_GOTIE20, 60)/* 20 bit GOT offset for statis TLS - block offset. */ - /* These are GNU extensions to enable C++ vtable garbage collection. */ - RELOC_NUMBER (R_390_GNU_VTINHERIT, 250) - RELOC_NUMBER (R_390_GNU_VTENTRY, 251) -END_RELOC_NUMBERS (R_390_max) - -#endif /* _ELF_390_H */ - - diff --git a/include/elf/sh.h b/include/elf/sh.h deleted file mode 100644 index deb7a9dc133..00000000000 --- a/include/elf/sh.h +++ /dev/null @@ -1,233 +0,0 @@ -/* SH ELF support for BFD. - Copyright 1998, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_SH_H -#define _ELF_SH_H - -/* Processor specific flags for the ELF header e_flags field. */ - -#define EF_SH_MACH_MASK 0x1f -#define EF_SH_UNKNOWN 0 /* For backwards compatibility. */ -#define EF_SH1 1 -#define EF_SH2 2 -#define EF_SH3 3 -#define EF_SH_DSP 4 -#define EF_SH3_DSP 5 -#define EF_SH4AL_DSP 6 -#define EF_SH3E 8 -#define EF_SH4 9 -#define EF_SH2E 11 -#define EF_SH4A 12 -#define EF_SH2A 13 - -#define EF_SH4_NOFPU 16 -#define EF_SH4A_NOFPU 17 -#define EF_SH4_NOMMU_NOFPU 18 -#define EF_SH2A_NOFPU 19 -#define EF_SH3_NOMMU 20 - -#define EF_SH2A_SH4_NOFPU 21 -#define EF_SH2A_SH3_NOFPU 22 -#define EF_SH2A_SH4 23 -#define EF_SH2A_SH3E 24 - -/* This one can only mix in objects from other EF_SH5 objects. */ -#define EF_SH5 10 - -/* Define the mapping from ELF to bfd mach numbers. - bfd_mach_* are defined in bfd_in2.h (generated from - archures.c). */ -#define EF_SH_BFD_TABLE \ -/* EF_SH_UNKNOWN */ bfd_mach_sh3 , \ -/* EF_SH1 */ bfd_mach_sh , \ -/* EF_SH2 */ bfd_mach_sh2 , \ -/* EF_SH3 */ bfd_mach_sh3 , \ -/* EF_SH_DSP */ bfd_mach_sh_dsp , \ -/* EF_SH3_DSP */ bfd_mach_sh3_dsp , \ -/* EF_SHAL_DSP */ bfd_mach_sh4al_dsp , \ -/* 7 */ 0, \ -/* EF_SH3E */ bfd_mach_sh3e , \ -/* EF_SH4 */ bfd_mach_sh4 , \ -/* EF_SH5 */ 0, \ -/* EF_SH2E */ bfd_mach_sh2e , \ -/* EF_SH4A */ bfd_mach_sh4a , \ -/* EF_SH2A */ bfd_mach_sh2a , \ -/* 14, 15 */ 0, 0, \ -/* EF_SH4_NOFPU */ bfd_mach_sh4_nofpu , \ -/* EF_SH4A_NOFPU */ bfd_mach_sh4a_nofpu , \ -/* EF_SH4_NOMMU_NOFPU */ bfd_mach_sh4_nommu_nofpu, \ -/* EF_SH2A_NOFPU */ bfd_mach_sh2a_nofpu , \ -/* EF_SH3_NOMMU */ bfd_mach_sh3_nommu , \ -/* EF_SH2A_SH4_NOFPU */ bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu, \ -/* EF_SH2A_SH3_NOFPU */ bfd_mach_sh2a_nofpu_or_sh3_nommu, \ -/* EF_SH2A_SH4 */ bfd_mach_sh2a_or_sh4 , \ -/* EF_SH2A_SH3E */ bfd_mach_sh2a_or_sh3e - -/* Convert arch_sh* into EF_SH*. */ -int sh_find_elf_flags (unsigned int arch_set); - -/* Convert bfd_mach_* into EF_SH*. */ -int sh_elf_get_flags_from_mach (unsigned long mach); - -/* Flags for the st_other symbol field. - Keep away from the STV_ visibility flags (bit 0..1). */ - -/* A reference to this symbol should by default add 1. */ -#define STO_SH5_ISA32 (1 << 2) - -/* Section contains only SHmedia code (no SHcompact code). */ -#define SHF_SH5_ISA32 0x40000000 - -/* Section contains both SHmedia and SHcompact code, and possibly also - constants. */ -#define SHF_SH5_ISA32_MIXED 0x20000000 - -/* If applied to a .cranges section, marks that the section is sorted by - increasing cr_addr values. */ -#define SHT_SH5_CR_SORTED 0x80000001 - -/* Symbol should be handled as DataLabel (attached to global SHN_UNDEF - symbols). */ -#define STT_DATALABEL STT_LOPROC - -#include "elf/reloc-macros.h" - -/* Relocations. */ -/* Relocations 10-32 and 128-255 are GNU extensions. - 25..32 and 10 are used for relaxation. */ -START_RELOC_NUMBERS (elf_sh_reloc_type) - RELOC_NUMBER (R_SH_NONE, 0) - RELOC_NUMBER (R_SH_DIR32, 1) - RELOC_NUMBER (R_SH_REL32, 2) - RELOC_NUMBER (R_SH_DIR8WPN, 3) - RELOC_NUMBER (R_SH_IND12W, 4) - RELOC_NUMBER (R_SH_DIR8WPL, 5) - RELOC_NUMBER (R_SH_DIR8WPZ, 6) - RELOC_NUMBER (R_SH_DIR8BP, 7) - RELOC_NUMBER (R_SH_DIR8W, 8) - RELOC_NUMBER (R_SH_DIR8L, 9) - - RELOC_NUMBER (R_SH_LOOP_START, 10) - RELOC_NUMBER (R_SH_LOOP_END, 11) - - FAKE_RELOC (R_SH_FIRST_INVALID_RELOC, 12) - FAKE_RELOC (R_SH_LAST_INVALID_RELOC, 21) - - RELOC_NUMBER (R_SH_GNU_VTINHERIT, 22) - RELOC_NUMBER (R_SH_GNU_VTENTRY, 23) - RELOC_NUMBER (R_SH_SWITCH8, 24) - RELOC_NUMBER (R_SH_SWITCH16, 25) - RELOC_NUMBER (R_SH_SWITCH32, 26) - RELOC_NUMBER (R_SH_USES, 27) - RELOC_NUMBER (R_SH_COUNT, 28) - RELOC_NUMBER (R_SH_ALIGN, 29) - RELOC_NUMBER (R_SH_CODE, 30) - RELOC_NUMBER (R_SH_DATA, 31) - RELOC_NUMBER (R_SH_LABEL, 32) - - RELOC_NUMBER (R_SH_DIR16, 33) - RELOC_NUMBER (R_SH_DIR8, 34) - RELOC_NUMBER (R_SH_DIR8UL, 35) - RELOC_NUMBER (R_SH_DIR8UW, 36) - RELOC_NUMBER (R_SH_DIR8U, 37) - RELOC_NUMBER (R_SH_DIR8SW, 38) - RELOC_NUMBER (R_SH_DIR8S, 39) - RELOC_NUMBER (R_SH_DIR4UL, 40) - RELOC_NUMBER (R_SH_DIR4UW, 41) - RELOC_NUMBER (R_SH_DIR4U, 42) - RELOC_NUMBER (R_SH_PSHA, 43) - RELOC_NUMBER (R_SH_PSHL, 44) - RELOC_NUMBER (R_SH_DIR5U, 45) - RELOC_NUMBER (R_SH_DIR6U, 46) - RELOC_NUMBER (R_SH_DIR6S, 47) - RELOC_NUMBER (R_SH_DIR10S, 48) - RELOC_NUMBER (R_SH_DIR10SW, 49) - RELOC_NUMBER (R_SH_DIR10SL, 50) - RELOC_NUMBER (R_SH_DIR10SQ, 51) - FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_2, 52) - FAKE_RELOC (R_SH_LAST_INVALID_RELOC_2, 52) - RELOC_NUMBER (R_SH_DIR16S, 53) - FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_3, 54) - FAKE_RELOC (R_SH_LAST_INVALID_RELOC_3, 143) - RELOC_NUMBER (R_SH_TLS_GD_32, 144) - RELOC_NUMBER (R_SH_TLS_LD_32, 145) - RELOC_NUMBER (R_SH_TLS_LDO_32, 146) - RELOC_NUMBER (R_SH_TLS_IE_32, 147) - RELOC_NUMBER (R_SH_TLS_LE_32, 148) - RELOC_NUMBER (R_SH_TLS_DTPMOD32, 149) - RELOC_NUMBER (R_SH_TLS_DTPOFF32, 150) - RELOC_NUMBER (R_SH_TLS_TPOFF32, 151) - FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_4, 152) - FAKE_RELOC (R_SH_LAST_INVALID_RELOC_4, 159) - RELOC_NUMBER (R_SH_GOT32, 160) - RELOC_NUMBER (R_SH_PLT32, 161) - RELOC_NUMBER (R_SH_COPY, 162) - RELOC_NUMBER (R_SH_GLOB_DAT, 163) - RELOC_NUMBER (R_SH_JMP_SLOT, 164) - RELOC_NUMBER (R_SH_RELATIVE, 165) - RELOC_NUMBER (R_SH_GOTOFF, 166) - RELOC_NUMBER (R_SH_GOTPC, 167) - RELOC_NUMBER (R_SH_GOTPLT32, 168) - RELOC_NUMBER (R_SH_GOT_LOW16, 169) - RELOC_NUMBER (R_SH_GOT_MEDLOW16, 170) - RELOC_NUMBER (R_SH_GOT_MEDHI16, 171) - RELOC_NUMBER (R_SH_GOT_HI16, 172) - RELOC_NUMBER (R_SH_GOTPLT_LOW16, 173) - RELOC_NUMBER (R_SH_GOTPLT_MEDLOW16, 174) - RELOC_NUMBER (R_SH_GOTPLT_MEDHI16, 175) - RELOC_NUMBER (R_SH_GOTPLT_HI16, 176) - RELOC_NUMBER (R_SH_PLT_LOW16, 177) - RELOC_NUMBER (R_SH_PLT_MEDLOW16, 178) - RELOC_NUMBER (R_SH_PLT_MEDHI16, 179) - RELOC_NUMBER (R_SH_PLT_HI16, 180) - RELOC_NUMBER (R_SH_GOTOFF_LOW16, 181) - RELOC_NUMBER (R_SH_GOTOFF_MEDLOW16, 182) - RELOC_NUMBER (R_SH_GOTOFF_MEDHI16, 183) - RELOC_NUMBER (R_SH_GOTOFF_HI16, 184) - RELOC_NUMBER (R_SH_GOTPC_LOW16, 185) - RELOC_NUMBER (R_SH_GOTPC_MEDLOW16, 186) - RELOC_NUMBER (R_SH_GOTPC_MEDHI16, 187) - RELOC_NUMBER (R_SH_GOTPC_HI16, 188) - RELOC_NUMBER (R_SH_GOT10BY4, 189) - RELOC_NUMBER (R_SH_GOTPLT10BY4, 190) - RELOC_NUMBER (R_SH_GOT10BY8, 191) - RELOC_NUMBER (R_SH_GOTPLT10BY8, 192) - RELOC_NUMBER (R_SH_COPY64, 193) - RELOC_NUMBER (R_SH_GLOB_DAT64, 194) - RELOC_NUMBER (R_SH_JMP_SLOT64, 195) - RELOC_NUMBER (R_SH_RELATIVE64, 196) - FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_5, 197) - FAKE_RELOC (R_SH_LAST_INVALID_RELOC_5, 241) - RELOC_NUMBER (R_SH_SHMEDIA_CODE, 242) - RELOC_NUMBER (R_SH_PT_16, 243) - RELOC_NUMBER (R_SH_IMMS16, 244) - RELOC_NUMBER (R_SH_IMMU16, 245) - RELOC_NUMBER (R_SH_IMM_LOW16, 246) - RELOC_NUMBER (R_SH_IMM_LOW16_PCREL, 247) - RELOC_NUMBER (R_SH_IMM_MEDLOW16, 248) - RELOC_NUMBER (R_SH_IMM_MEDLOW16_PCREL, 249) - RELOC_NUMBER (R_SH_IMM_MEDHI16, 250) - RELOC_NUMBER (R_SH_IMM_MEDHI16_PCREL, 251) - RELOC_NUMBER (R_SH_IMM_HI16, 252) - RELOC_NUMBER (R_SH_IMM_HI16_PCREL, 253) - RELOC_NUMBER (R_SH_64, 254) - RELOC_NUMBER (R_SH_64_PCREL, 255) -END_RELOC_NUMBERS (R_SH_max) - -#endif diff --git a/include/elf/sparc.h b/include/elf/sparc.h deleted file mode 100644 index dc20820ec39..00000000000 --- a/include/elf/sparc.h +++ /dev/null @@ -1,176 +0,0 @@ -/* SPARC ELF support for BFD. - Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003 - Free Software Foundation, Inc. - By Doug Evans, Cygnus Support, . - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_SPARC_H -#define _ELF_SPARC_H - -/* Processor specific flags for the ELF header e_flags field. */ - -/* These are defined by Sun. */ - -#define EF_SPARC_32PLUS_MASK 0xffff00 /* bits indicating V8+ type */ -#define EF_SPARC_32PLUS 0x000100 /* generic V8+ features */ -#define EF_SPARC_SUN_US1 0x000200 /* Sun UltraSPARC1 extensions */ -#define EF_SPARC_HAL_R1 0x000400 /* HAL R1 extensions */ -#define EF_SPARC_SUN_US3 0x000800 /* Sun UltraSPARCIII extensions */ - -#define EF_SPARC_LEDATA 0x800000 /* little endian data */ - -/* This name is used in the V9 ABI. */ -#define EF_SPARC_EXT_MASK 0xffff00 /* reserved for vendor extensions */ - -/* V9 memory models */ -#define EF_SPARCV9_MM 0x3 /* memory model mask */ -#define EF_SPARCV9_TSO 0x0 /* total store ordering */ -#define EF_SPARCV9_PSO 0x1 /* partial store ordering */ -#define EF_SPARCV9_RMO 0x2 /* relaxed store ordering */ - -/* Section indices. */ - -#define SHN_BEFORE 0xff00 /* used with SHF_ORDERED */ -#define SHN_AFTER 0xff01 /* used with SHF_ORDERED */ - -/* Section flags. */ - -#define SHF_EXCLUDE 0x80000000 /* exclude from linking */ -#define SHF_ORDERED 0x40000000 /* treat sh_link,sh_info specially */ - -/* Symbol types. */ - -#define STT_REGISTER 13 /* global reg reserved to app. */ - -#include "elf/reloc-macros.h" - -/* Relocation types. */ -START_RELOC_NUMBERS (elf_sparc_reloc_type) - RELOC_NUMBER (R_SPARC_NONE, 0) - RELOC_NUMBER (R_SPARC_8, 1) - RELOC_NUMBER (R_SPARC_16, 2) - RELOC_NUMBER (R_SPARC_32, 3) - RELOC_NUMBER (R_SPARC_DISP8, 4) - RELOC_NUMBER (R_SPARC_DISP16, 5) - RELOC_NUMBER (R_SPARC_DISP32, 6) - RELOC_NUMBER (R_SPARC_WDISP30, 7) - RELOC_NUMBER (R_SPARC_WDISP22, 8) - RELOC_NUMBER (R_SPARC_HI22, 9) - RELOC_NUMBER (R_SPARC_22, 10) - RELOC_NUMBER (R_SPARC_13, 11) - RELOC_NUMBER (R_SPARC_LO10, 12) - RELOC_NUMBER (R_SPARC_GOT10, 13) - RELOC_NUMBER (R_SPARC_GOT13, 14) - RELOC_NUMBER (R_SPARC_GOT22, 15) - RELOC_NUMBER (R_SPARC_PC10, 16) - RELOC_NUMBER (R_SPARC_PC22, 17) - RELOC_NUMBER (R_SPARC_WPLT30, 18) - RELOC_NUMBER (R_SPARC_COPY, 19) - RELOC_NUMBER (R_SPARC_GLOB_DAT, 20) - RELOC_NUMBER (R_SPARC_JMP_SLOT, 21) - RELOC_NUMBER (R_SPARC_RELATIVE, 22) - RELOC_NUMBER (R_SPARC_UA32, 23) - - /* ??? These 6 relocs are new but not currently used. For binary - compatibility in the sparc64-elf toolchain, we leave them out. - A non-binary upward compatible change is expected for sparc64-elf. */ -#ifndef SPARC64_OLD_RELOCS - /* ??? New relocs on the UltraSPARC. Not sure what they're for yet. */ - RELOC_NUMBER (R_SPARC_PLT32, 24) - RELOC_NUMBER (R_SPARC_HIPLT22, 25) - RELOC_NUMBER (R_SPARC_LOPLT10, 26) - RELOC_NUMBER (R_SPARC_PCPLT32, 27) - RELOC_NUMBER (R_SPARC_PCPLT22, 28) - RELOC_NUMBER (R_SPARC_PCPLT10, 29) -#endif - - /* v9 relocs */ - RELOC_NUMBER (R_SPARC_10, 30) - RELOC_NUMBER (R_SPARC_11, 31) - RELOC_NUMBER (R_SPARC_64, 32) - RELOC_NUMBER (R_SPARC_OLO10, 33) - RELOC_NUMBER (R_SPARC_HH22, 34) - RELOC_NUMBER (R_SPARC_HM10, 35) - RELOC_NUMBER (R_SPARC_LM22, 36) - RELOC_NUMBER (R_SPARC_PC_HH22, 37) - RELOC_NUMBER (R_SPARC_PC_HM10, 38) - RELOC_NUMBER (R_SPARC_PC_LM22, 39) - RELOC_NUMBER (R_SPARC_WDISP16, 40) - RELOC_NUMBER (R_SPARC_WDISP19, 41) - RELOC_NUMBER (R_SPARC_UNUSED_42, 42) - RELOC_NUMBER (R_SPARC_7, 43) - RELOC_NUMBER (R_SPARC_5, 44) - RELOC_NUMBER (R_SPARC_6, 45) - RELOC_NUMBER (R_SPARC_DISP64, 46) - RELOC_NUMBER (R_SPARC_PLT64, 47) - RELOC_NUMBER (R_SPARC_HIX22, 48) - RELOC_NUMBER (R_SPARC_LOX10, 49) - RELOC_NUMBER (R_SPARC_H44, 50) - RELOC_NUMBER (R_SPARC_M44, 51) - RELOC_NUMBER (R_SPARC_L44, 52) - RELOC_NUMBER (R_SPARC_REGISTER, 53) - RELOC_NUMBER (R_SPARC_UA64, 54) - RELOC_NUMBER (R_SPARC_UA16, 55) - - RELOC_NUMBER (R_SPARC_TLS_GD_HI22, 56) - RELOC_NUMBER (R_SPARC_TLS_GD_LO10, 57) - RELOC_NUMBER (R_SPARC_TLS_GD_ADD, 58) - RELOC_NUMBER (R_SPARC_TLS_GD_CALL, 59) - RELOC_NUMBER (R_SPARC_TLS_LDM_HI22, 60) - RELOC_NUMBER (R_SPARC_TLS_LDM_LO10, 61) - RELOC_NUMBER (R_SPARC_TLS_LDM_ADD, 62) - RELOC_NUMBER (R_SPARC_TLS_LDM_CALL, 63) - RELOC_NUMBER (R_SPARC_TLS_LDO_HIX22, 64) - RELOC_NUMBER (R_SPARC_TLS_LDO_LOX10, 65) - RELOC_NUMBER (R_SPARC_TLS_LDO_ADD, 66) - RELOC_NUMBER (R_SPARC_TLS_IE_HI22, 67) - RELOC_NUMBER (R_SPARC_TLS_IE_LO10, 68) - RELOC_NUMBER (R_SPARC_TLS_IE_LD, 69) - RELOC_NUMBER (R_SPARC_TLS_IE_LDX, 70) - RELOC_NUMBER (R_SPARC_TLS_IE_ADD, 71) - RELOC_NUMBER (R_SPARC_TLS_LE_HIX22, 72) - RELOC_NUMBER (R_SPARC_TLS_LE_LOX10, 73) - RELOC_NUMBER (R_SPARC_TLS_DTPMOD32, 74) - RELOC_NUMBER (R_SPARC_TLS_DTPMOD64, 75) - RELOC_NUMBER (R_SPARC_TLS_DTPOFF32, 76) - RELOC_NUMBER (R_SPARC_TLS_DTPOFF64, 77) - RELOC_NUMBER (R_SPARC_TLS_TPOFF32, 78) - RELOC_NUMBER (R_SPARC_TLS_TPOFF64, 79) - - EMPTY_RELOC (R_SPARC_max_std) - - RELOC_NUMBER (R_SPARC_GNU_VTINHERIT, 250) - RELOC_NUMBER (R_SPARC_GNU_VTENTRY, 251) - RELOC_NUMBER (R_SPARC_REV32, 252) - -END_RELOC_NUMBERS (R_SPARC_max) - -/* Relocation macros. */ - -#define ELF64_R_TYPE_DATA(info) \ - (((bfd_signed_vma)(ELF64_R_TYPE(info) >> 8) ^ 0x800000) - 0x800000) -#define ELF64_R_TYPE_ID(info) \ - ((info) & 0xff) -#define ELF64_R_TYPE_INFO(data, type) \ - (((bfd_vma) ((data) & 0xffffff) << 8) | (bfd_vma) (type)) - -/* Values for Elf64_Dyn.d_tag. */ - -#define DT_SPARC_REGISTER 0x70000001 - -#endif /* _ELF_SPARC_H */ diff --git a/include/elf/v850.h b/include/elf/v850.h deleted file mode 100644 index 95dab49b67d..00000000000 --- a/include/elf/v850.h +++ /dev/null @@ -1,123 +0,0 @@ -/* V850 ELF support for BFD. - Copyright 1997, 1998, 2000, 2002, 2003, 2004 - Free Software Foundation, Inc. - Created by Michael Meissner, Cygnus Support - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This file holds definitions specific to the MIPS ELF ABI. Note - that most of this is not actually implemented by BFD. */ - -#ifndef _ELF_V850_H -#define _ELF_V850_H - -/* Processor specific flags for the ELF header e_flags field. */ - -/* Four bit V850 architecture field. */ -#define EF_V850_ARCH 0xf0000000 - -/* v850 code. */ -#define E_V850_ARCH 0x00000000 - -/* v850e code. */ -#define E_V850E_ARCH 0x10000000 - -/* v850e1 code. */ -#define E_V850E1_ARCH 0x20000000 - - -/* Flags for the st_other field. */ -#define V850_OTHER_SDA 0x01 /* Symbol had SDA relocations. */ -#define V850_OTHER_ZDA 0x02 /* Symbol had ZDA relocations. */ -#define V850_OTHER_TDA 0x04 /* Symbol had TDA relocations. */ -#define V850_OTHER_TDA_BYTE 0x08 /* Symbol had TDA byte relocations. */ -#define V850_OTHER_ERROR 0x80 /* Symbol had an error reported. */ - -/* V850 relocations. */ -#include "elf/reloc-macros.h" - -START_RELOC_NUMBERS (v850_reloc_type) - RELOC_NUMBER (R_V850_NONE, 0) - RELOC_NUMBER (R_V850_9_PCREL, 1) - RELOC_NUMBER (R_V850_22_PCREL, 2) - RELOC_NUMBER (R_V850_HI16_S, 3) - RELOC_NUMBER (R_V850_HI16, 4) - RELOC_NUMBER (R_V850_LO16, 5) - RELOC_NUMBER (R_V850_ABS32, 6) - RELOC_NUMBER (R_V850_16, 7) - RELOC_NUMBER (R_V850_8, 8) - RELOC_NUMBER( R_V850_SDA_16_16_OFFSET, 9) /* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */ - RELOC_NUMBER( R_V850_SDA_15_16_OFFSET, 10) /* For ld.w, ld.h, ld.hu, st.w, st.h */ - RELOC_NUMBER( R_V850_ZDA_16_16_OFFSET, 11) /* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */ - RELOC_NUMBER( R_V850_ZDA_15_16_OFFSET, 12) /* For ld.w, ld.h, ld.hu, st.w, st.h */ - RELOC_NUMBER( R_V850_TDA_6_8_OFFSET, 13) /* For sst.w, sld.w */ - RELOC_NUMBER( R_V850_TDA_7_8_OFFSET, 14) /* For sst.h, sld.h */ - RELOC_NUMBER( R_V850_TDA_7_7_OFFSET, 15) /* For sst.b, sld.b */ - RELOC_NUMBER( R_V850_TDA_16_16_OFFSET, 16) /* For set1, clr1, not1, tst1, movea, movhi */ - RELOC_NUMBER( R_V850_TDA_4_5_OFFSET, 17) /* For sld.hu */ - RELOC_NUMBER( R_V850_TDA_4_4_OFFSET, 18) /* For sld.bu */ - RELOC_NUMBER( R_V850_SDA_16_16_SPLIT_OFFSET, 19) /* For ld.bu */ - RELOC_NUMBER( R_V850_ZDA_16_16_SPLIT_OFFSET, 20) /* For ld.bu */ - RELOC_NUMBER( R_V850_CALLT_6_7_OFFSET, 21) /* For callt */ - RELOC_NUMBER( R_V850_CALLT_16_16_OFFSET, 22) /* For callt */ - RELOC_NUMBER (R_V850_GNU_VTINHERIT, 23) - RELOC_NUMBER (R_V850_GNU_VTENTRY, 24) - RELOC_NUMBER (R_V850_LONGCALL, 25) - RELOC_NUMBER (R_V850_LONGJUMP, 26) - RELOC_NUMBER (R_V850_ALIGN, 27) - RELOC_NUMBER (R_V850_REL32, 28) - RELOC_NUMBER (R_V850_LO16_SPLIT_OFFSET, 29) /* For ld.bu */ -END_RELOC_NUMBERS (R_V850_max) - - -/* Processor specific section indices. These sections do not actually - exist. Symbols with a st_shndx field corresponding to one of these - values have a special meaning. */ - -/* Small data area common symbol. */ -#define SHN_V850_SCOMMON 0xff00 - -/* Tiny data area common symbol. */ -#define SHN_V850_TCOMMON 0xff01 - -/* Zero data area common symbol. */ -#define SHN_V850_ZCOMMON 0xff02 - - -/* Processor specific section types. */ - -/* Section contains the .scommon data. */ -#define SHT_V850_SCOMMON 0x70000000 - -/* Section contains the .scommon data. */ -#define SHT_V850_TCOMMON 0x70000001 - -/* Section contains the .scommon data. */ -#define SHT_V850_ZCOMMON 0x70000002 - -/* Processor specific section flags. */ - -/* This section must be in the small data area (pointed to by GP). */ -#define SHF_V850_GPREL 0x10000000 - -/* This section must be in the tiny data area (pointed to by EP). */ -#define SHF_V850_EPREL 0x20000000 - -/* This section must be in the zero data area (pointed to by R0). */ -#define SHF_V850_R0REL 0x40000000 - -#endif /* _ELF_V850_H */ diff --git a/include/elf/vax.h b/include/elf/vax.h deleted file mode 100644 index 8cc5a1193ef..00000000000 --- a/include/elf/vax.h +++ /dev/null @@ -1,51 +0,0 @@ -/* VAX ELF support for BFD. - Copyright (C) 2002 Free Software Foundation, Inc. - Contributed by Matt Thomas . - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_VAX_H -#define _ELF_VAX_H - -#include "elf/reloc-macros.h" - -/* Relocation types. */ -START_RELOC_NUMBERS (elf_vax_reloc_type) - RELOC_NUMBER (R_VAX_NONE, 0) /* No reloc */ - RELOC_NUMBER (R_VAX_32, 1) /* Direct 32 bit */ - RELOC_NUMBER (R_VAX_16, 2) /* Direct 16 bit */ - RELOC_NUMBER (R_VAX_8, 3) /* Direct 8 bit */ - RELOC_NUMBER (R_VAX_PC32, 4) /* PC relative 32 bit */ - RELOC_NUMBER (R_VAX_PC16, 5) /* PC relative 16 bit */ - RELOC_NUMBER (R_VAX_PC8, 6) /* PC relative 8 bit */ - RELOC_NUMBER (R_VAX_GOT32, 7) /* 32 bit PC relative GOT entry */ - RELOC_NUMBER (R_VAX_PLT32, 13) /* 32 bit PC relative PLT address */ - RELOC_NUMBER (R_VAX_COPY, 19) /* Copy symbol at runtime */ - RELOC_NUMBER (R_VAX_GLOB_DAT, 20) /* Create GOT entry */ - RELOC_NUMBER (R_VAX_JMP_SLOT, 21) /* Create PLT entry */ - RELOC_NUMBER (R_VAX_RELATIVE, 22) /* Adjust by program base */ - /* These are GNU extensions to enable C++ vtable garbage collection. */ - RELOC_NUMBER (R_VAX_GNU_VTINHERIT, 23) - RELOC_NUMBER (R_VAX_GNU_VTENTRY, 24) -END_RELOC_NUMBERS (R_VAX_max) - -/* Processor specific flags for the ELF header e_flags field. */ -#define EF_VAX_NONPIC 0x0001 /* Object contains non-PIC code */ -#define EF_VAX_DFLOAT 0x0100 /* Object contains D-Float insn. */ -#define EF_VAX_GFLOAT 0x0200 /* Object contains G-Float insn. */ - -#endif diff --git a/include/elf/x86-64.h b/include/elf/x86-64.h deleted file mode 100644 index b09a558a35b..00000000000 --- a/include/elf/x86-64.h +++ /dev/null @@ -1,87 +0,0 @@ -/* x86_64 ELF support for BFD. - Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006 - Free Software Foundation, Inc. - Contributed by Jan Hubicka - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_X86_64_H -#define _ELF_X86_64_H - -#include "elf/reloc-macros.h" - -START_RELOC_NUMBERS (elf_x86_64_reloc_type) - RELOC_NUMBER (R_X86_64_NONE, 0) /* No reloc */ - RELOC_NUMBER (R_X86_64_64, 1) /* Direct 64 bit */ - RELOC_NUMBER (R_X86_64_PC32, 2) /* PC relative 32 bit signed */ - RELOC_NUMBER (R_X86_64_GOT32, 3) /* 32 bit GOT entry */ - RELOC_NUMBER (R_X86_64_PLT32, 4) /* 32 bit PLT address */ - RELOC_NUMBER (R_X86_64_COPY, 5) /* Copy symbol at runtime */ - RELOC_NUMBER (R_X86_64_GLOB_DAT, 6) /* Create GOT entry */ - RELOC_NUMBER (R_X86_64_JUMP_SLOT,7) /* Create PLT entry */ - RELOC_NUMBER (R_X86_64_RELATIVE, 8) /* Adjust by program base */ - RELOC_NUMBER (R_X86_64_GOTPCREL, 9) /* 32 bit signed pc relative - offset to GOT entry */ - RELOC_NUMBER (R_X86_64_32, 10) /* Direct 32 bit zero extended */ - RELOC_NUMBER (R_X86_64_32S, 11) /* Direct 32 bit sign extended */ - RELOC_NUMBER (R_X86_64_16, 12) /* Direct 16 bit zero extended */ - RELOC_NUMBER (R_X86_64_PC16, 13) /* 16 bit sign extended pc relative*/ - RELOC_NUMBER (R_X86_64_8, 14) /* Direct 8 bit sign extended */ - RELOC_NUMBER (R_X86_64_PC8, 15) /* 8 bit sign extended pc relative*/ - RELOC_NUMBER (R_X86_64_DTPMOD64, 16) /* ID of module containing symbol */ - RELOC_NUMBER (R_X86_64_DTPOFF64, 17) /* Offset in TLS block */ - RELOC_NUMBER (R_X86_64_TPOFF64, 18) /* Offset in initial TLS block */ - RELOC_NUMBER (R_X86_64_TLSGD, 19) /* PC relative offset to GD GOT block */ - RELOC_NUMBER (R_X86_64_TLSLD, 20) /* PC relative offset to LD GOT block */ - RELOC_NUMBER (R_X86_64_DTPOFF32, 21) /* Offset in TLS block */ - RELOC_NUMBER (R_X86_64_GOTTPOFF, 22) /* PC relative offset to IE GOT entry */ - RELOC_NUMBER (R_X86_64_TPOFF32, 23) /* Offset in initial TLS block */ - RELOC_NUMBER (R_X86_64_PC64, 24) /* PC relative 64 bit */ - RELOC_NUMBER (R_X86_64_GOTOFF64, 25) /* 64 bit offset to GOT */ - RELOC_NUMBER (R_X86_64_GOTPC32, 26) /* 32 bit signed pc relative - offset to GOT */ - RELOC_NUMBER (R_X86_64_GOT64, 27) /* 64 bit GOT entry offset */ - RELOC_NUMBER (R_X86_64_GOTPCREL64, 28) /* 64 bit signed pc relative - offset to GOT entry */ - RELOC_NUMBER (R_X86_64_GOTPC64, 29) /* 64 bit signed pc relative - offset to GOT */ - RELOC_NUMBER (R_X86_64_GOTPLT64, 30) /* like GOT64, but indicates - that PLT entry is needed */ - RELOC_NUMBER (R_X86_64_PLTOFF64, 31) /* 64 bit GOT relative offset - to PLT entry */ - /* 32 .. 33 */ - RELOC_NUMBER (R_X86_64_GOTPC32_TLSDESC, 34) - /* 32 bit signed pc relative - offset to TLS descriptor - in the GOT. */ - RELOC_NUMBER (R_X86_64_TLSDESC_CALL, 35) /* Relaxable call through TLS - descriptor. */ - RELOC_NUMBER (R_X86_64_TLSDESC, 36) /* 2x64-bit TLS descriptor. */ - RELOC_NUMBER (R_X86_64_GNU_VTINHERIT, 250) /* GNU C++ hack */ - RELOC_NUMBER (R_X86_64_GNU_VTENTRY, 251) /* GNU C++ hack */ -END_RELOC_NUMBERS (R_X86_64_max) - -/* Processor specific section types. */ - -#define SHT_X86_64_UNWIND 0x70000001 /* unwind information */ - -/* Like SHN_COMMON but the symbol will be allocated in the .lbss - section. */ -#define SHN_X86_64_LCOMMON 0xff02 - -#define SHF_X86_64_LARGE 0x10000000 -#endif diff --git a/include/elf/xc16x.h b/include/elf/xc16x.h deleted file mode 100644 index bc648994582..00000000000 --- a/include/elf/xc16x.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Infineon XC16X ELF support for BFD. - Copyright 2006 Free Software Foundation, Inc. - Contributed by KPIT Cummins Infosystems - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., - 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - - -#ifndef _ELF_XC16X_H -#define _ELF_XC16X_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_xc16x_reloc_type) - RELOC_NUMBER (R_XC16X_NONE, 0) - RELOC_NUMBER (R_XC16X_ABS_8, 1) - RELOC_NUMBER (R_XC16X_ABS_16, 2) - RELOC_NUMBER (R_XC16X_ABS_32, 3) - RELOC_NUMBER (R_XC16X_8_PCREL, 4) - RELOC_NUMBER (R_XC16X_PAG, 5) - RELOC_NUMBER (R_XC16X_POF, 6) - RELOC_NUMBER (R_XC16X_SEG, 7) - RELOC_NUMBER (R_XC16X_SOF, 8) - -END_RELOC_NUMBERS (R_XC16X_max) - -#endif /* _ELF_XC16X_H */ diff --git a/include/elf/xstormy16.h b/include/elf/xstormy16.h deleted file mode 100644 index 2442b27f497..00000000000 --- a/include/elf/xstormy16.h +++ /dev/null @@ -1,57 +0,0 @@ -/* XSTORMY16 ELF support for BFD. - Copyright (C) 2001, 2002 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., -51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _ELF_XSTORMY16_H -#define _ELF_XSTORMY16_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_xstormy16_reloc_type) - RELOC_NUMBER (R_XSTORMY16_NONE, 0) - - RELOC_NUMBER (R_XSTORMY16_32, 1) - RELOC_NUMBER (R_XSTORMY16_16, 2) - RELOC_NUMBER (R_XSTORMY16_8, 3) - RELOC_NUMBER (R_XSTORMY16_PC32, 4) - RELOC_NUMBER (R_XSTORMY16_PC16, 5) - RELOC_NUMBER (R_XSTORMY16_PC8, 6) - - RELOC_NUMBER (R_XSTORMY16_REL_12, 7) - RELOC_NUMBER (R_XSTORMY16_24, 8) - RELOC_NUMBER (R_XSTORMY16_FPTR16, 9) - - RELOC_NUMBER (R_XSTORMY16_LO16, 10) - RELOC_NUMBER (R_XSTORMY16_HI16, 11) - RELOC_NUMBER (R_XSTORMY16_12, 12) - - RELOC_NUMBER (R_XSTORMY16_GNU_VTINHERIT, 128) - RELOC_NUMBER (R_XSTORMY16_GNU_VTENTRY, 129) -END_RELOC_NUMBERS (R_XSTORMY16_max) - -/* Define the data & instruction memory discriminator. In a linked - executable, an symbol should be deemed to point to an instruction - if ((address & XSTORMY16_INSN_MASK) == XSTORMY16_INSN_VALUE), and similarly - for the data space. See also `ld/emulparams/elf32xstormy16.sh'. */ -#define XSTORMY16_DATA_MASK 0xffc00000 -#define XSTORMY16_DATA_VALUE 0x00000000 -#define XSTORMY16_INSN_MASK 0xffc00000 -#define XSTORMY16_INSN_VALUE 0x00400000 - -#endif /* _ELF_XSTORMY16_H */ diff --git a/include/elf/xtensa.h b/include/elf/xtensa.h deleted file mode 100644 index 0de9741b6d1..00000000000 --- a/include/elf/xtensa.h +++ /dev/null @@ -1,198 +0,0 @@ -/* Xtensa ELF support for BFD. - Copyright 2003, 2004 Free Software Foundation, Inc. - Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, - USA. */ - -/* This file holds definitions specific to the Xtensa ELF ABI. */ - -#ifndef _ELF_XTENSA_H -#define _ELF_XTENSA_H - -#include "elf/reloc-macros.h" - -/* Relocations. */ -START_RELOC_NUMBERS (elf_xtensa_reloc_type) - RELOC_NUMBER (R_XTENSA_NONE, 0) - RELOC_NUMBER (R_XTENSA_32, 1) - RELOC_NUMBER (R_XTENSA_RTLD, 2) - RELOC_NUMBER (R_XTENSA_GLOB_DAT, 3) - RELOC_NUMBER (R_XTENSA_JMP_SLOT, 4) - RELOC_NUMBER (R_XTENSA_RELATIVE, 5) - RELOC_NUMBER (R_XTENSA_PLT, 6) - RELOC_NUMBER (R_XTENSA_OP0, 8) - RELOC_NUMBER (R_XTENSA_OP1, 9) - RELOC_NUMBER (R_XTENSA_OP2, 10) - RELOC_NUMBER (R_XTENSA_ASM_EXPAND, 11) - RELOC_NUMBER (R_XTENSA_ASM_SIMPLIFY, 12) - RELOC_NUMBER (R_XTENSA_GNU_VTINHERIT, 15) - RELOC_NUMBER (R_XTENSA_GNU_VTENTRY, 16) - RELOC_NUMBER (R_XTENSA_DIFF8, 17) - RELOC_NUMBER (R_XTENSA_DIFF16, 18) - RELOC_NUMBER (R_XTENSA_DIFF32, 19) - RELOC_NUMBER (R_XTENSA_SLOT0_OP, 20) - RELOC_NUMBER (R_XTENSA_SLOT1_OP, 21) - RELOC_NUMBER (R_XTENSA_SLOT2_OP, 22) - RELOC_NUMBER (R_XTENSA_SLOT3_OP, 23) - RELOC_NUMBER (R_XTENSA_SLOT4_OP, 24) - RELOC_NUMBER (R_XTENSA_SLOT5_OP, 25) - RELOC_NUMBER (R_XTENSA_SLOT6_OP, 26) - RELOC_NUMBER (R_XTENSA_SLOT7_OP, 27) - RELOC_NUMBER (R_XTENSA_SLOT8_OP, 28) - RELOC_NUMBER (R_XTENSA_SLOT9_OP, 29) - RELOC_NUMBER (R_XTENSA_SLOT10_OP, 30) - RELOC_NUMBER (R_XTENSA_SLOT11_OP, 31) - RELOC_NUMBER (R_XTENSA_SLOT12_OP, 32) - RELOC_NUMBER (R_XTENSA_SLOT13_OP, 33) - RELOC_NUMBER (R_XTENSA_SLOT14_OP, 34) - RELOC_NUMBER (R_XTENSA_SLOT0_ALT, 35) - RELOC_NUMBER (R_XTENSA_SLOT1_ALT, 36) - RELOC_NUMBER (R_XTENSA_SLOT2_ALT, 37) - RELOC_NUMBER (R_XTENSA_SLOT3_ALT, 38) - RELOC_NUMBER (R_XTENSA_SLOT4_ALT, 39) - RELOC_NUMBER (R_XTENSA_SLOT5_ALT, 40) - RELOC_NUMBER (R_XTENSA_SLOT6_ALT, 41) - RELOC_NUMBER (R_XTENSA_SLOT7_ALT, 42) - RELOC_NUMBER (R_XTENSA_SLOT8_ALT, 43) - RELOC_NUMBER (R_XTENSA_SLOT9_ALT, 44) - RELOC_NUMBER (R_XTENSA_SLOT10_ALT, 45) - RELOC_NUMBER (R_XTENSA_SLOT11_ALT, 46) - RELOC_NUMBER (R_XTENSA_SLOT12_ALT, 47) - RELOC_NUMBER (R_XTENSA_SLOT13_ALT, 48) - RELOC_NUMBER (R_XTENSA_SLOT14_ALT, 49) -END_RELOC_NUMBERS (R_XTENSA_max) - -/* Processor-specific flags for the ELF header e_flags field. */ - -/* Four-bit Xtensa machine type field. */ -#define EF_XTENSA_MACH 0x0000000f - -/* Various CPU types. */ -#define E_XTENSA_MACH 0x00000000 - -/* Leave bits 0xf0 alone in case we ever have more than 16 cpu types. - Highly unlikely, but what the heck. */ - -#define EF_XTENSA_XT_INSN 0x00000100 -#define EF_XTENSA_XT_LIT 0x00000200 - - -/* Processor-specific dynamic array tags. */ - -/* Offset of the table that records the GOT location(s). */ -#define DT_XTENSA_GOT_LOC_OFF 0x70000000 - -/* Number of entries in the GOT location table. */ -#define DT_XTENSA_GOT_LOC_SZ 0x70000001 - - -/* Definitions for instruction and literal property tables. The - tables for ".gnu.linkonce.*" sections are placed in the following - sections: - - instruction tables: .gnu.linkonce.x.* - literal tables: .gnu.linkonce.p.* -*/ - -#define XTENSA_INSN_SEC_NAME ".xt.insn" -#define XTENSA_LIT_SEC_NAME ".xt.lit" -#define XTENSA_PROP_SEC_NAME ".xt.prop" - -typedef struct property_table_entry_t -{ - bfd_vma address; - bfd_vma size; - flagword flags; -} property_table_entry; - -/* Flags in the property tables to specify whether blocks of memory are - literals, instructions, data, or unreachable. For instructions, - blocks that begin loop targets and branch targets are designated. - Blocks that do not allow density instructions, instruction reordering - or transformation are also specified. Finally, for branch targets, - branch target alignment priority is included. Alignment of the next - block is specified in the current block and the size of the current - block does not include any fill required to align to the next - block. */ - -#define XTENSA_PROP_LITERAL 0x00000001 -#define XTENSA_PROP_INSN 0x00000002 -#define XTENSA_PROP_DATA 0x00000004 -#define XTENSA_PROP_UNREACHABLE 0x00000008 -/* Instruction-only properties at beginning of code. */ -#define XTENSA_PROP_INSN_LOOP_TARGET 0x00000010 -#define XTENSA_PROP_INSN_BRANCH_TARGET 0x00000020 -/* Instruction-only properties about code. */ -#define XTENSA_PROP_INSN_NO_DENSITY 0x00000040 -#define XTENSA_PROP_INSN_NO_REORDER 0x00000080 -#define XTENSA_PROP_INSN_NO_TRANSFORM 0x00000100 - -/* Branch target alignment information. This transmits information - to the linker optimization about the priority of aligning a - particular block for branch target alignment: None, low priority, - high priority, or required. These only need to be checked in - instruction blocks marked as XTENSA_PROP_INSN_BRANCH_TARGET. - Common usage is: - - switch (GET_XTENSA_PROP_BT_ALIGN(flags)) - case XTENSA_PROP_BT_ALIGN_NONE: - case XTENSA_PROP_BT_ALIGN_LOW: - case XTENSA_PROP_BT_ALIGN_HIGH: - case XTENSA_PROP_BT_ALIGN_REQUIRE: -*/ -#define XTENSA_PROP_BT_ALIGN_MASK 0x00000600 - -/* No branch target alignment. */ -#define XTENSA_PROP_BT_ALIGN_NONE 0x0 -/* Low priority branch target alignment. */ -#define XTENSA_PROP_BT_ALIGN_LOW 0x1 -/* High priority branch target alignment. */ -#define XTENSA_PROP_BT_ALIGN_HIGH 0x2 -/* Required branch target alignment. */ -#define XTENSA_PROP_BT_ALIGN_REQUIRE 0x3 - -#define GET_XTENSA_PROP_BT_ALIGN(flag) \ - (((unsigned)((flag) & (XTENSA_PROP_BT_ALIGN_MASK))) >> 9) -#define SET_XTENSA_PROP_BT_ALIGN(flag, align) \ - (((flag) & (~XTENSA_PROP_BT_ALIGN_MASK)) | \ - (((align) << 9) & XTENSA_PROP_BT_ALIGN_MASK)) - -/* Alignment is specified in the block BEFORE the one that needs - alignment. Up to 5 bits. Use GET_XTENSA_PROP_ALIGNMENT(flags) to - get the required alignment specified as a power of 2. Use - SET_XTENSA_PROP_ALIGNMENT(flags, pow2) to set the required - alignment. Be careful of side effects since the SET will evaluate - flags twice. Also, note that the SIZE of a block in the property - table does not include the alignment size, so the alignment fill - must be calculated to determine if two blocks are contiguous. - TEXT_ALIGN is not currently implemented but is a placeholder for a - possible future implementation. */ - -#define XTENSA_PROP_ALIGN 0x00000800 - -#define XTENSA_PROP_ALIGNMENT_MASK 0x0001f000 - -#define GET_XTENSA_PROP_ALIGNMENT(flag) \ - (((unsigned)((flag) & (XTENSA_PROP_ALIGNMENT_MASK))) >> 12) -#define SET_XTENSA_PROP_ALIGNMENT(flag, align) \ - (((flag) & (~XTENSA_PROP_ALIGNMENT_MASK)) | \ - (((align) << 12) & XTENSA_PROP_ALIGNMENT_MASK)) - -#define XTENSA_PROP_INSN_ABSLIT 0x00020000 - -#endif /* _ELF_XTENSA_H */ diff --git a/include/fibheap.h b/include/fibheap.h deleted file mode 100644 index 348c4ae2638..00000000000 --- a/include/fibheap.h +++ /dev/null @@ -1,86 +0,0 @@ -/* A Fibonacci heap datatype. - Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - Contributed by Daniel Berlin (dan@cgsoftware.com). - -This file is part of GCC. - -GCC 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, or (at your option) -any later version. - -GCC 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 GCC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* Fibonacci heaps are somewhat complex, but, there's an article in - DDJ that explains them pretty well: - - http://www.ddj.com/articles/1997/9701/9701o/9701o.htm?topic=algoritms - - Introduction to algorithms by Corman and Rivest also goes over them. - - The original paper that introduced them is "Fibonacci heaps and their - uses in improved network optimization algorithms" by Tarjan and - Fredman (JACM 34(3), July 1987). - - Amortized and real worst case time for operations: - - ExtractMin: O(lg n) amortized. O(n) worst case. - DecreaseKey: O(1) amortized. O(lg n) worst case. - Insert: O(2) amortized. O(1) actual. - Union: O(1) amortized. O(1) actual. */ - -#ifndef _FIBHEAP_H_ -#define _FIBHEAP_H_ - -#include "ansidecl.h" - -typedef long fibheapkey_t; - -typedef struct fibheap -{ - size_t nodes; - struct fibnode *min; - struct fibnode *root; -} *fibheap_t; - -typedef struct fibnode -{ - struct fibnode *parent; - struct fibnode *child; - struct fibnode *left; - struct fibnode *right; - fibheapkey_t key; - void *data; -#if defined (__GNUC__) && (!defined (SIZEOF_INT) || SIZEOF_INT < 4) - __extension__ unsigned long int degree : 31; - __extension__ unsigned long int mark : 1; -#else - unsigned int degree : 31; - unsigned int mark : 1; -#endif -} *fibnode_t; - -extern fibheap_t fibheap_new (void); -extern fibnode_t fibheap_insert (fibheap_t, fibheapkey_t, void *); -extern int fibheap_empty (fibheap_t); -extern fibheapkey_t fibheap_min_key (fibheap_t); -extern fibheapkey_t fibheap_replace_key (fibheap_t, fibnode_t, - fibheapkey_t); -extern void *fibheap_replace_key_data (fibheap_t, fibnode_t, - fibheapkey_t, void *); -extern void *fibheap_extract_min (fibheap_t); -extern void *fibheap_min (fibheap_t); -extern void *fibheap_replace_data (fibheap_t, fibnode_t, void *); -extern void *fibheap_delete_node (fibheap_t, fibnode_t); -extern void fibheap_delete (fibheap_t); -extern fibheap_t fibheap_union (fibheap_t, fibheap_t); - -#endif /* _FIBHEAP_H_ */ diff --git a/include/filenames.h b/include/filenames.h deleted file mode 100644 index 6b72fd249b4..00000000000 --- a/include/filenames.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Macros for taking apart, interpreting and processing file names. - - These are here because some non-Posix (a.k.a. DOSish) systems have - drive letter brain-damage at the beginning of an absolute file name, - use forward- and back-slash in path names interchangeably, and - some of them have case-insensitive file names. - - Copyright 2000, 2001 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef FILENAMES_H -#define FILENAMES_H - -#if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) || defined (__CYGWIN__) - -#ifndef HAVE_DOS_BASED_FILE_SYSTEM -#define HAVE_DOS_BASED_FILE_SYSTEM 1 -#endif - -#define IS_DIR_SEPARATOR(c) ((c) == '/' || (c) == '\\') -/* Note that IS_ABSOLUTE_PATH accepts d:foo as well, although it is - only semi-absolute. This is because the users of IS_ABSOLUTE_PATH - want to know whether to prepend the current working directory to - a file name, which should not be done with a name like d:foo. */ -#define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0]) || (((f)[0]) && ((f)[1] == ':'))) -#define FILENAME_CMP(s1, s2) strcasecmp(s1, s2) - -#else /* not DOSish */ - -#define IS_DIR_SEPARATOR(c) ((c) == '/') -#define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0])) -#define FILENAME_CMP(s1, s2) strcmp(s1, s2) - -#endif /* not DOSish */ - -#endif /* FILENAMES_H */ diff --git a/include/floatformat.h b/include/floatformat.h deleted file mode 100644 index f1bd7f601f5..00000000000 --- a/include/floatformat.h +++ /dev/null @@ -1,140 +0,0 @@ -/* IEEE floating point support declarations, for GDB, the GNU Debugger. - Copyright 1991, 1994, 1995, 1997, 2000, 2003, 2005 - Free Software Foundation, Inc. - -This file is part of GDB. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#if !defined (FLOATFORMAT_H) -#define FLOATFORMAT_H 1 - -#include "ansidecl.h" - -/* A floatformat consists of a sign bit, an exponent and a mantissa. Once the - bytes are concatenated according to the byteorder flag, then each of those - fields is contiguous. We number the bits with 0 being the most significant - (i.e. BITS_BIG_ENDIAN type numbering), and specify which bits each field - contains with the *_start and *_len fields. */ - -/* What is the order of the bytes? */ - -enum floatformat_byteorders { - /* Standard little endian byte order. - EX: 1.2345678e10 => 00 00 80 c5 e0 fe 06 42 */ - floatformat_little, - - /* Standard big endian byte order. - EX: 1.2345678e10 => 42 06 fe e0 c5 80 00 00 */ - floatformat_big, - - /* Little endian byte order but big endian word order. - EX: 1.2345678e10 => e0 fe 06 42 00 00 80 c5 */ - floatformat_littlebyte_bigword, - - /* VAX byte order. Little endian byte order with 16-bit words. The - following example is an illustration of the byte order only; VAX - doesn't have a fully IEEE compliant floating-point format. - EX: 1.2345678e10 => 80 c5 00 00 06 42 e0 fe */ - floatformat_vax -}; - -enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no }; - -struct floatformat -{ - enum floatformat_byteorders byteorder; - unsigned int totalsize; /* Total size of number in bits */ - - /* Sign bit is always one bit long. 1 means negative, 0 means positive. */ - unsigned int sign_start; - - unsigned int exp_start; - unsigned int exp_len; - /* Bias added to a "true" exponent to form the biased exponent. It - is intentionally signed as, otherwize, -exp_bias can turn into a - very large number (e.g., given the exp_bias of 0x3fff and a 64 - bit long, the equation (long)(1 - exp_bias) evaluates to - 4294950914) instead of -16382). */ - int exp_bias; - /* Exponent value which indicates NaN. This is the actual value stored in - the float, not adjusted by the exp_bias. This usually consists of all - one bits. */ - unsigned int exp_nan; - - unsigned int man_start; - unsigned int man_len; - - /* Is the integer bit explicit or implicit? */ - enum floatformat_intbit intbit; - - /* Internal name for debugging. */ - const char *name; - - /* Validator method. */ - int (*is_valid) (const struct floatformat *fmt, const void *from); -}; - -/* floatformats for IEEE single and double, big and little endian. */ - -extern const struct floatformat floatformat_ieee_single_big; -extern const struct floatformat floatformat_ieee_single_little; -extern const struct floatformat floatformat_ieee_double_big; -extern const struct floatformat floatformat_ieee_double_little; - -/* floatformat for ARM IEEE double, little endian bytes and big endian words */ - -extern const struct floatformat floatformat_ieee_double_littlebyte_bigword; - -/* floatformats for VAX. */ - -extern const struct floatformat floatformat_vax_f; -extern const struct floatformat floatformat_vax_d; -extern const struct floatformat floatformat_vax_g; - -/* floatformats for various extendeds. */ - -extern const struct floatformat floatformat_i387_ext; -extern const struct floatformat floatformat_m68881_ext; -extern const struct floatformat floatformat_i960_ext; -extern const struct floatformat floatformat_m88110_ext; -extern const struct floatformat floatformat_m88110_harris_ext; -extern const struct floatformat floatformat_arm_ext_big; -extern const struct floatformat floatformat_arm_ext_littlebyte_bigword; -/* IA-64 Floating Point register spilt into memory. */ -extern const struct floatformat floatformat_ia64_spill_big; -extern const struct floatformat floatformat_ia64_spill_little; -extern const struct floatformat floatformat_ia64_quad_big; -extern const struct floatformat floatformat_ia64_quad_little; - -/* Convert from FMT to a double. - FROM is the address of the extended float. - Store the double in *TO. */ - -extern void -floatformat_to_double (const struct floatformat *, const void *, double *); - -/* The converse: convert the double *FROM to FMT - and store where TO points. */ - -extern void -floatformat_from_double (const struct floatformat *, const double *, void *); - -/* Return non-zero iff the data at FROM is a valid number in format FMT. */ - -extern int -floatformat_is_valid (const struct floatformat *fmt, const void *from); - -#endif /* defined (FLOATFORMAT_H) */ diff --git a/include/fnmatch.h b/include/fnmatch.h deleted file mode 100644 index 5b9953ca3f5..00000000000 --- a/include/fnmatch.h +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright 1991, 1992, 1993, 1996 Free Software Foundation, Inc. - -NOTE: The canonical source of this file is maintained with the GNU C Library. -Bugs can be reported to bug-glibc@prep.ai.mit.edu. - -This program 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, 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, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#ifndef _FNMATCH_H - -#define _FNMATCH_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined (__cplusplus) || (defined (__STDC__) && __STDC__) -#undef __P -#define __P(args) args -#else /* Not C++ or ANSI C. */ -#undef __P -#define __P(args) () -/* We can get away without defining `const' here only because in this file - it is used only inside the prototype for `fnmatch', which is elided in - non-ANSI C where `const' is problematical. */ -#endif /* C++ or ANSI C. */ - - -/* We #undef these before defining them because some losing systems - (HP-UX A.08.07 for example) define these in . */ -#undef FNM_PATHNAME -#undef FNM_NOESCAPE -#undef FNM_PERIOD - -/* Bits set in the FLAGS argument to `fnmatch'. */ -#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */ -#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */ -#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */ - -#if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_GNU_SOURCE) -#define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ -#define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ -#define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ -#endif - -/* Value returned by `fnmatch' if STRING does not match PATTERN. */ -#define FNM_NOMATCH 1 - -/* Match STRING against the filename pattern PATTERN, - returning zero if it matches, FNM_NOMATCH if not. */ -extern int fnmatch __P ((const char *__pattern, const char *__string, - int __flags)); - -#ifdef __cplusplus -} -#endif - -#endif /* fnmatch.h */ diff --git a/include/fopen-bin.h b/include/fopen-bin.h deleted file mode 100644 index b868f63d46d..00000000000 --- a/include/fopen-bin.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Macros for the 'type' part of an fopen, freopen or fdopen. - - [Update] - - This version is for "binary" systems, where text and binary files are - different. An example is Mess-Dose. Many Unix systems could also - cope with a "b" in the string, indicating binary files, but some reject this - (and thereby don't conform to ANSI C, but what else is new?). - - This file is designed for inclusion by host-dependent .h files. No - user application should include it directly, since that would make - the application unable to be configured for both "same" and "binary" - variant systems. */ - -#define FOPEN_RB "rb" -#define FOPEN_WB "wb" -#define FOPEN_AB "ab" -#define FOPEN_RUB "r+b" -#define FOPEN_WUB "w+b" -#define FOPEN_AUB "a+b" - -#define FOPEN_RT "r" -#define FOPEN_WT "w" -#define FOPEN_AT "a" -#define FOPEN_RUT "r+" -#define FOPEN_WUT "w+" -#define FOPEN_AUT "a+" diff --git a/include/fopen-same.h b/include/fopen-same.h deleted file mode 100644 index 0f37529d33e..00000000000 --- a/include/fopen-same.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Macros for the 'type' part of an fopen, freopen or fdopen. - - [Update] - - This version is for "same" systems, where text and binary files are - the same. An example is Unix. Many Unix systems could also add a - "b" to the string, indicating binary files, but some reject this - (and thereby don't conform to ANSI C, but what else is new?). - - This file is designed for inclusion by host-dependent .h files. No - user application should include it directly, since that would make - the application unable to be configured for both "same" and "binary" - variant systems. */ - -#define FOPEN_RB "r" -#define FOPEN_WB "w" -#define FOPEN_AB "a" -#define FOPEN_RUB "r+" -#define FOPEN_WUB "w+" -#define FOPEN_AUB "a+" - -#define FOPEN_RT "r" -#define FOPEN_WT "w" -#define FOPEN_AT "a" -#define FOPEN_RUT "r+" -#define FOPEN_WUT "w+" -#define FOPEN_AUT "a+" diff --git a/include/fopen-vms.h b/include/fopen-vms.h deleted file mode 100644 index da76b7fb59c..00000000000 --- a/include/fopen-vms.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Macros for the 'type' part of an fopen, freopen or fdopen. - - [Update] - - This version is for VMS systems, where text and binary files are - different. - This file is designed for inclusion by host-dependent .h files. No - user application should include it directly, since that would make - the application unable to be configured for both "same" and "binary" - variant systems. */ - -#define FOPEN_RB "rb","rfm=var" -#define FOPEN_WB "wb","rfm=var" -#define FOPEN_AB "ab","rfm=var" -#define FOPEN_RUB "r+b","rfm=var" -#define FOPEN_WUB "w+b","rfm=var" -#define FOPEN_AUB "a+b","rfm=var" - -#define FOPEN_RT "r" -#define FOPEN_WT "w" -#define FOPEN_AT "a" -#define FOPEN_RUT "r+" -#define FOPEN_WUT "w+" -#define FOPEN_AUT "a+" diff --git a/include/gdb/ChangeLog b/include/gdb/ChangeLog deleted file mode 100644 index 2693f6407a0..00000000000 --- a/include/gdb/ChangeLog +++ /dev/null @@ -1,155 +0,0 @@ -2005-07-08 Ben Elliston - - * callback.h: Remove ANSI_PROTOTYPES conditional code. - -2005-01-28 Hans-Peter Nilsson - - * callback.h (struct host_callback_struct): New members pipe, - pipe_empty, pipe_nonempty, ispipe, pipe_buffer and - target_sizeof_int. - (CB_SYS_pipe): New macro. - - * callback.h: Include "bfd.h". - (struct host_callback_struct): New member target_endian. - (cb_store_target_endian): Declare. - -2004-12-15 Hans-Peter Nilsson - - * callback.h (CB_SYS_truncate, CB_SYS_ftruncate): New macros. - -2004-12-13 Hans-Peter Nilsson - - * callback.h (struct host_callback_struct): New member lstat. - (CB_SYS_lstat): New macro. - (CB_SYS_rename): New macro. - -2004-09-08 Michael Snyder - - Commited by Corinna Vinschen - * sim-sh.h: Add new sh2a banked registers. - -2004-08-04 Andrew Cagney - - * sim-ppc.h: Add extern "C" wrapper. - (enum sim_ppc_regnum): Add full list of SPRs. - -2004-08-04 Jim Blandy - - * sim-ppc.h: New file. - -2004-06-25 J"orn Rennecke - - * callback.h (host_callback_struct): Replace members fdopen and - alwaysopen with fd_buddy. - [sim/common: * callback.c: Changed all users. ] - -2003-10-31 Kevin Buettner - - * sim-frv.h: New file. - -2003-10-15 J"orn Rennecke - - * callback.h (struct host_callback_struct): New members ftruncate - and truncate. - -2003-06-10 Corinna Vinschen - - * gdb/fileio.h: New file. - -2003-05-07 Andrew Cagney - - * sim-d10v.h (sim_d10v_translate_addr): Add regcache parameter. - (sim_d10v_translate_imap_addr): Add regcache parameter. - (sim_d10v_translate_dmap_addr): Ditto. - -2003-03-27 Nick Clifton - - * sim-arm.h (sim_arm_regs): Add iWMMXt registers. - -2003-03-20 Nick Clifton - - * sim-arm.h (sim_arm_regs): Add Maverick co-processor - registers. - -2003-02-27 Andrew Cagney - - * remote-sim.h (sim_open, sim_load, sim_create_inferior): Rename - _bfd to bfd. - -2003-02-20 Andrew Cagney - - * remote-sim.h (SIM_RC): Delete unused SIM_RC_UNKNOWN_BREAKPOINT, - SIM_RC_INSUFFICIENT_RESOURCES and SIM_RC_DUPLICATE_BREAKPOINT. - (sim_set_breakpoint, sim_clear_breakpoint): Delete declarations. - (sim_clear_all_breakpoints, sim_enable_breakpoint): Ditto. - (sim_enable_all_breakpoints, sim_disable_breakpoint): Ditto. - (sim_disable_all_breakpoints): Ditto. - -2002-12-26 Kazu Hirata - - * sim-h8300.h: Remove ^M. - -2002-07-29 Andrey Volkov - - * sim-h8300.h: Rename all enums from H8300_ to SIM_H8300_ - prefix. - -2002-07-23 Andrey Volkov - - * sim-h8300.h: New file. - -2002-07-17 Andrew Cagney - - * remote-sim.h: Update copyright. - (sim_set_callbacks, sim_size, sim_trace) - (sim_set_trace, sim_set_profile_size, sim_kill): Delete. Moved to - "sim/common/run-sim.h". - -Wed Jul 17 19:36:38 2002 J"orn Rennecke - - * sim-sh.h: Add enum constants for sh[1-4], sh3e, sh3?-dsp, - renumbering the sh-dsp registers to use distinct numbers. - -2002-06-15 Andrew Cagney - - * sim-arm.h (enum sim_arm_regs): Rename sim_arm_regnum. - -2002-06-12 Andrew Cagney - - * sim-arm.h: New file. - -2002-06-08 Andrew Cagney - - * callback.h: Copy to here from directory above. - * remote-sim.h: Copy to here from directory above. - -2002-06-01 Andrew Cagney - - * sim-d10v.h (sim_d10v_regs): Expand to include all registers. - Update copyright. - -2002-05-23 Andrew Cagney - - * sim-d10v.h: New file. Moved from include/sim-d10v.h. - -2002-05-10 Elena Zannoni - - * sim-sh.h: New file, for sh gdb<->sim interface. - -2002-05-09 Daniel Jacobowitz - - * signals.h: Update comments. - (enum target_signal): Remove conditional compilation around - Mach-specific signals. Move them to after TARGET_SIGNAL_DEFAULT. - -2002-03-10 Daniel Jacobowitz - - * signals.h: New file, from gdb/defs.h. - - -Local Variables: -mode: change-log -left-margin: 8 -fill-column: 74 -version-control: never -End: diff --git a/include/gdb/callback.h b/include/gdb/callback.h deleted file mode 100644 index b7ed3cdfa2a..00000000000 --- a/include/gdb/callback.h +++ /dev/null @@ -1,322 +0,0 @@ -/* Remote target system call callback support. - Copyright 1997 Free Software Foundation, Inc. - Contributed by Cygnus Solutions. - -This file is part of GDB. - -This program 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. */ - -/* This interface isn't intended to be specific to any particular kind - of remote (hardware, simulator, whatever). As such, support for it - (e.g. sim/common/callback.c) should *not* live in the simulator source - tree, nor should it live in the gdb source tree. */ - -/* There are various ways to handle system calls: - - 1) Have a simulator intercept the appropriate trap instruction and - directly perform the system call on behalf of the target program. - This is the typical way of handling system calls for embedded targets. - [Handling system calls for embedded targets isn't that much of an - oxymoron as running compiler testsuites make use of the capability.] - - This method of system call handling is done when STATE_ENVIRONMENT - is ENVIRONMENT_USER. - - 2) Have a simulator emulate the hardware as much as possible. - If the program running on the real hardware communicates with some sort - of target manager, one would want to be able to run this program on the - simulator as well. - - This method of system call handling is done when STATE_ENVIRONMENT - is ENVIRONMENT_OPERATING. -*/ - -#ifndef CALLBACK_H -#define CALLBACK_H - -/* ??? The reason why we check for va_start here should be documented. */ - -#ifndef va_start -#include -#include -#endif -/* Needed for enum bfd_endian. */ -#include "bfd.h" - -/* Mapping of host/target values. */ -/* ??? For debugging purposes, one might want to add a string of the - name of the symbol. */ - -typedef struct { - int host_val; - int target_val; -} CB_TARGET_DEFS_MAP; - -#define MAX_CALLBACK_FDS 10 - -/* Forward decl for stat/fstat. */ -struct stat; - -typedef struct host_callback_struct host_callback; - -struct host_callback_struct -{ - int (*close) PARAMS ((host_callback *,int)); - int (*get_errno) PARAMS ((host_callback *)); - int (*isatty) PARAMS ((host_callback *, int)); - int (*lseek) PARAMS ((host_callback *, int, long , int)); - int (*open) PARAMS ((host_callback *, const char*, int mode)); - int (*read) PARAMS ((host_callback *,int, char *, int)); - int (*read_stdin) PARAMS (( host_callback *, char *, int)); - int (*rename) PARAMS ((host_callback *, const char *, const char *)); - int (*system) PARAMS ((host_callback *, const char *)); - long (*time) PARAMS ((host_callback *, long *)); - int (*unlink) PARAMS ((host_callback *, const char *)); - int (*write) PARAMS ((host_callback *,int, const char *, int)); - int (*write_stdout) PARAMS ((host_callback *, const char *, int)); - void (*flush_stdout) PARAMS ((host_callback *)); - int (*write_stderr) PARAMS ((host_callback *, const char *, int)); - void (*flush_stderr) PARAMS ((host_callback *)); - int (*stat) PARAMS ((host_callback *, const char *, struct stat *)); - int (*fstat) PARAMS ((host_callback *, int, struct stat *)); - int (*lstat) PARAMS ((host_callback *, const char *, struct stat *)); - int (*ftruncate) PARAMS ((host_callback *, int, long)); - int (*truncate) PARAMS ((host_callback *, const char *, long)); - int (*pipe) PARAMS ((host_callback *, int *)); - - /* Called by the framework when a read call has emptied a pipe buffer. */ - void (*pipe_empty) PARAMS ((host_callback *, int read_fd, int write_fd)); - - /* Called by the framework when a write call makes a pipe buffer - non-empty. */ - void (*pipe_nonempty) PARAMS ((host_callback *, int read_fd, int write_fd)); - - /* When present, call to the client to give it the oportunity to - poll any io devices for a request to quit (indicated by a nonzero - return value). */ - int (*poll_quit) PARAMS ((host_callback *)); - - /* Used when the target has gone away, so we can close open - handles and free memory etc etc. */ - int (*shutdown) PARAMS ((host_callback *)); - int (*init) PARAMS ((host_callback *)); - - /* depreciated, use vprintf_filtered - Talk to the user on a console. */ - void (*printf_filtered) PARAMS ((host_callback *, const char *, ...)); - - /* Talk to the user on a console. */ - void (*vprintf_filtered) PARAMS ((host_callback *, const char *, va_list)); - - /* Same as vprintf_filtered but to stderr. */ - void (*evprintf_filtered) PARAMS ((host_callback *, const char *, va_list)); - - /* Print an error message and "exit". - In the case of gdb "exiting" means doing a longjmp back to the main - command loop. */ - void (*error) PARAMS ((host_callback *, const char *, ...)); - - int last_errno; /* host format */ - - int fdmap[MAX_CALLBACK_FDS]; - /* fd_buddy is used to contruct circular lists of target fds that point to - the same host fd. A uniquely mapped fd points to itself; for a closed - one, fd_buddy has the value -1. The host file descriptors for stdin / - stdout / stderr are never closed by the simulators, so they are put - in a special fd_buddy circular list which also has MAX_CALLBACK_FDS - as a member. */ - /* ??? We don't have a callback entry for dup, although it is trival to - implement now. */ - short fd_buddy[MAX_CALLBACK_FDS+1]; - - /* 0 = none, >0 = reader (index of writer), - <0 = writer (negative index of reader). - If abs (ispipe[N]) == N, then N is an end of a pipe whose other - end is closed. */ - short ispipe[MAX_CALLBACK_FDS]; - - /* A writer stores the buffer at its index. Consecutive writes - realloc the buffer and add to the size. The reader indicates the - read part in its .size, until it has consumed it all, at which - point it deallocates the buffer and zeroes out both sizes. */ - struct pipe_write_buffer - { - int size; - char *buffer; - } pipe_buffer[MAX_CALLBACK_FDS]; - - /* System call numbers. */ - CB_TARGET_DEFS_MAP *syscall_map; - /* Errno values. */ - CB_TARGET_DEFS_MAP *errno_map; - /* Flags to the open system call. */ - CB_TARGET_DEFS_MAP *open_map; - /* Signal numbers. */ - CB_TARGET_DEFS_MAP *signal_map; - /* Layout of `stat' struct. - The format is a series of "name,length" pairs separated by colons. - Empty space is indicated with a `name' of "space". - All padding must be explicitly mentioned. - Lengths are in bytes. If this needs to be extended to bits, - use "name.bits". - Example: "st_dev,4:st_ino,4:st_mode,4:..." */ - const char *stat_map; - - enum bfd_endian target_endian; - - /* Size of an "int" on the target (for syscalls whose ABI uses "int"). - This must include padding, and only padding-at-higher-address is - supported. For example, a 64-bit target with 32-bit int:s which - are padded to 64 bits when in an array, should supposedly set this - to 8. The default is 4 which matches ILP32 targets and 64-bit - targets with 32-bit ints and no padding. */ - int target_sizeof_int; - - /* Marker for those wanting to do sanity checks. - This should remain the last member of this struct to help catch - miscompilation errors. */ -#define HOST_CALLBACK_MAGIC 4705 /* teds constant */ - int magic; -}; - -extern host_callback default_callback; - -/* Canonical versions of system call numbers. - It's not intended to willy-nilly throw every system call ever heard - of in here. Only include those that have an important use. - ??? One can certainly start a discussion over the ones that are currently - here, but that will always be true. */ - -/* These are used by the ANSI C support of libc. */ -#define CB_SYS_exit 1 -#define CB_SYS_open 2 -#define CB_SYS_close 3 -#define CB_SYS_read 4 -#define CB_SYS_write 5 -#define CB_SYS_lseek 6 -#define CB_SYS_unlink 7 -#define CB_SYS_getpid 8 -#define CB_SYS_kill 9 -#define CB_SYS_fstat 10 -/*#define CB_SYS_sbrk 11 - not currently a system call, but reserved. */ - -/* ARGV support. */ -#define CB_SYS_argvlen 12 -#define CB_SYS_argv 13 - -/* These are extras added for one reason or another. */ -#define CB_SYS_chdir 14 -#define CB_SYS_stat 15 -#define CB_SYS_chmod 16 -#define CB_SYS_utime 17 -#define CB_SYS_time 18 - -/* More standard syscalls. */ -#define CB_SYS_lstat 19 -#define CB_SYS_rename 20 -#define CB_SYS_truncate 21 -#define CB_SYS_ftruncate 22 -#define CB_SYS_pipe 23 - -/* Struct use to pass and return information necessary to perform a - system call. */ -/* FIXME: Need to consider target word size. */ - -typedef struct cb_syscall { - /* The target's value of what system call to perform. */ - int func; - /* The arguments to the syscall. */ - long arg1, arg2, arg3, arg4; - - /* The result. */ - long result; - /* Some system calls have two results. */ - long result2; - /* The target's errno value, or 0 if success. - This is converted to the target's value with host_to_target_errno. */ - int errcode; - - /* Working space to be used by memory read/write callbacks. */ - PTR p1; - PTR p2; - long x1,x2; - - /* Callbacks for reading/writing memory (e.g. for read/write syscalls). - ??? long or unsigned long might be better to use for the `count' - argument here. We mimic sim_{read,write} for now. Be careful to - test any changes with -Wall -Werror, mixed signed comparisons - will get you. */ - int (*read_mem) PARAMS ((host_callback * /*cb*/, struct cb_syscall * /*sc*/, - unsigned long /*taddr*/, char * /*buf*/, - int /*bytes*/)); - int (*write_mem) PARAMS ((host_callback * /*cb*/, struct cb_syscall * /*sc*/, - unsigned long /*taddr*/, const char * /*buf*/, - int /*bytes*/)); - - /* For sanity checking, should be last entry. */ - int magic; -} CB_SYSCALL; - -/* Magic number sanity checker. */ -#define CB_SYSCALL_MAGIC 0x12344321 - -/* Macro to initialize CB_SYSCALL. Called first, before filling in - any fields. */ -#define CB_SYSCALL_INIT(sc) \ -do { \ - memset ((sc), 0, sizeof (*(sc))); \ - (sc)->magic = CB_SYSCALL_MAGIC; \ -} while (0) - -/* Return codes for various interface routines. */ - -typedef enum { - CB_RC_OK = 0, - /* generic error */ - CB_RC_ERR, - /* either file not found or no read access */ - CB_RC_ACCESS, - CB_RC_NO_MEM -} CB_RC; - -/* Read in target values for system call numbers, errno values, signals. */ -CB_RC cb_read_target_syscall_maps PARAMS ((host_callback *, const char *)); - -/* Translate target to host syscall function numbers. */ -int cb_target_to_host_syscall PARAMS ((host_callback *, int)); - -/* Translate host to target errno value. */ -int cb_host_to_target_errno PARAMS ((host_callback *, int)); - -/* Translate target to host open flags. */ -int cb_target_to_host_open PARAMS ((host_callback *, int)); - -/* Translate target signal number to host. */ -int cb_target_to_host_signal PARAMS ((host_callback *, int)); - -/* Translate host signal number to target. */ -int cb_host_to_target_signal PARAMS ((host_callback *, int)); - -/* Translate host stat struct to target. - If stat struct ptr is NULL, just compute target stat struct size. - Result is size of target stat struct or 0 if error. */ -int cb_host_to_target_stat PARAMS ((host_callback *, const struct stat *, PTR)); - -/* Translate a value to target endian. */ -void cb_store_target_endian PARAMS ((host_callback *, char *, int, long)); - -/* Perform a system call. */ -CB_RC cb_syscall PARAMS ((host_callback *, CB_SYSCALL *)); - -#endif diff --git a/include/gdb/fileio.h b/include/gdb/fileio.h deleted file mode 100644 index d84478103e2..00000000000 --- a/include/gdb/fileio.h +++ /dev/null @@ -1,146 +0,0 @@ -/* Hosted File I/O interface definitions, for GDB, the GNU Debugger. - - Copyright 2003 Free Software Foundation, Inc. - - This program 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. */ - -#ifndef GDB_FILEIO_H_ -#define GDB_FILEIO_H_ - -/* The following flags are defined to be independent of the host - as well as the target side implementation of these constants. - All constants are defined with a leading FILEIO_ in the name - to allow the usage of these constants together with the - corresponding implementation dependent constants in one module. */ - -/* open(2) flags */ -#define FILEIO_O_RDONLY 0x0 -#define FILEIO_O_WRONLY 0x1 -#define FILEIO_O_RDWR 0x2 -#define FILEIO_O_APPEND 0x8 -#define FILEIO_O_CREAT 0x200 -#define FILEIO_O_TRUNC 0x400 -#define FILEIO_O_EXCL 0x800 -#define FILEIO_O_SUPPORTED (FILEIO_O_RDONLY | FILEIO_O_WRONLY| \ - FILEIO_O_RDWR | FILEIO_O_APPEND| \ - FILEIO_O_CREAT | FILEIO_O_TRUNC| \ - FILEIO_O_EXCL) - -/* mode_t bits */ -#define FILEIO_S_IFREG 0100000 -#define FILEIO_S_IFDIR 040000 -#define FILEIO_S_IFCHR 020000 -#define FILEIO_S_IRUSR 0400 -#define FILEIO_S_IWUSR 0200 -#define FILEIO_S_IXUSR 0100 -#define FILEIO_S_IRWXU 0700 -#define FILEIO_S_IRGRP 040 -#define FILEIO_S_IWGRP 020 -#define FILEIO_S_IXGRP 010 -#define FILEIO_S_IRWXG 070 -#define FILEIO_S_IROTH 04 -#define FILEIO_S_IWOTH 02 -#define FILEIO_S_IXOTH 01 -#define FILEIO_S_IRWXO 07 -#define FILEIO_S_SUPPORTED (FILEIO_S_IFREG|FILEIO_S_IFDIR| \ - FILEIO_S_IRWXU|FILEIO_S_IRWXG| \ - FILEIO_S_IRWXO) - -/* lseek(2) flags */ -#define FILEIO_SEEK_SET 0 -#define FILEIO_SEEK_CUR 1 -#define FILEIO_SEEK_END 2 - -/* errno values */ -#define FILEIO_EPERM 1 -#define FILEIO_ENOENT 2 -#define FILEIO_EINTR 4 -#define FILEIO_EIO 5 -#define FILEIO_EBADF 9 -#define FILEIO_EACCES 13 -#define FILEIO_EFAULT 14 -#define FILEIO_EBUSY 16 -#define FILEIO_EEXIST 17 -#define FILEIO_ENODEV 19 -#define FILEIO_ENOTDIR 20 -#define FILEIO_EISDIR 21 -#define FILEIO_EINVAL 22 -#define FILEIO_ENFILE 23 -#define FILEIO_EMFILE 24 -#define FILEIO_EFBIG 27 -#define FILEIO_ENOSPC 28 -#define FILEIO_ESPIPE 29 -#define FILEIO_EROFS 30 -#define FILEIO_ENOSYS 88 -#define FILEIO_ENAMETOOLONG 91 -#define FILEIO_EUNKNOWN 9999 - -/* limits */ -#define FILEIO_INT_MIN -2147483648L -#define FILEIO_INT_MAX 2147483647L -#define FILEIO_UINT_MAX 4294967295UL -#define FILEIO_LONG_MIN -9223372036854775808LL -#define FILEIO_LONG_MAX 9223372036854775807LL -#define FILEIO_ULONG_MAX 18446744073709551615ULL - -/* Integral types as used in protocol. */ -#if 0 -typedef __int32_t fio_int_t; -typedef __uint32_t fio_uint_t, fio_mode_t, fio_time_t; -typedef __int64_t fio_long_t; -typedef __uint64_t fio_ulong_t; -#endif - -#define FIO_INT_LEN 4 -#define FIO_UINT_LEN 4 -#define FIO_MODE_LEN 4 -#define FIO_TIME_LEN 4 -#define FIO_LONG_LEN 8 -#define FIO_ULONG_LEN 8 - -typedef char fio_int_t[FIO_INT_LEN]; -typedef char fio_uint_t[FIO_UINT_LEN]; -typedef char fio_mode_t[FIO_MODE_LEN]; -typedef char fio_time_t[FIO_TIME_LEN]; -typedef char fio_long_t[FIO_LONG_LEN]; -typedef char fio_ulong_t[FIO_ULONG_LEN]; - -/* Struct stat as used in protocol. For complete independence - of host/target systems, it's defined as an array with offsets - to the members. */ - -struct fio_stat { - fio_uint_t fst_dev; - fio_uint_t fst_ino; - fio_mode_t fst_mode; - fio_uint_t fst_nlink; - fio_uint_t fst_uid; - fio_uint_t fst_gid; - fio_uint_t fst_rdev; - fio_ulong_t fst_size; - fio_ulong_t fst_blksize; - fio_ulong_t fst_blocks; - fio_time_t fst_atime; - fio_time_t fst_mtime; - fio_time_t fst_ctime; -}; - -struct fio_timeval { - fio_time_t ftv_sec; - fio_long_t ftv_usec; -}; - -#endif /* GDB_FILEIO_H_ */ diff --git a/include/gdb/remote-sim.h b/include/gdb/remote-sim.h deleted file mode 100644 index a49ba1a89e9..00000000000 --- a/include/gdb/remote-sim.h +++ /dev/null @@ -1,282 +0,0 @@ -/* This file defines the interface between the simulator and gdb. - - Copyright 1993, 1994, 1996, 1997, 1998, 2000, 2002 Free Software - Foundation, Inc. - -This file is part of GDB. - -This program 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. */ - -#if !defined (REMOTE_SIM_H) -#define REMOTE_SIM_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* This file is used when building stand-alone simulators, so isolate this - file from gdb. */ - -/* Pick up CORE_ADDR_TYPE if defined (from gdb), otherwise use same value as - gdb does (unsigned int - from defs.h). */ - -#ifndef CORE_ADDR_TYPE -typedef unsigned int SIM_ADDR; -#else -typedef CORE_ADDR_TYPE SIM_ADDR; -#endif - - -/* Semi-opaque type used as result of sim_open and passed back to all - other routines. "desc" is short for "descriptor". - It is up to each simulator to define `sim_state'. */ - -typedef struct sim_state *SIM_DESC; - - -/* Values for `kind' arg to sim_open. */ - -typedef enum { - SIM_OPEN_STANDALONE, /* simulator used standalone (run.c) */ - SIM_OPEN_DEBUG /* simulator used by debugger (gdb) */ -} SIM_OPEN_KIND; - - -/* Return codes from various functions. */ - -typedef enum { - SIM_RC_FAIL = 0, - SIM_RC_OK = 1 -} SIM_RC; - - -/* The bfd struct, as an opaque type. */ - -struct bfd; - - -/* Main simulator entry points. */ - - -/* Create a fully initialized simulator instance. - - (This function is called when the simulator is selected from the - gdb command line.) - - KIND specifies how the simulator shall be used. Currently there - are only two kinds: stand-alone and debug. - - CALLBACK specifies a standard host callback (defined in callback.h). - - ABFD, when non NULL, designates a target program. The program is - not loaded. - - ARGV is a standard ARGV pointer such as that passed from the - command line. The syntax of the argument list is is assumed to be - ``SIM-PROG { SIM-OPTION } [ TARGET-PROGRAM { TARGET-OPTION } ]''. - The trailing TARGET-PROGRAM and args are only valid for a - stand-alone simulator. - - On success, the result is a non NULL descriptor that shall be - passed to the other sim_foo functions. While the simulator - configuration can be parameterized by (in decreasing precedence) - ARGV's SIM-OPTION, ARGV's TARGET-PROGRAM and the ABFD argument, the - successful creation of the simulator shall not dependent on the - presence of any of these arguments/options. - - Hardware simulator: The created simulator shall be sufficiently - initialized to handle, with out restrictions any client requests - (including memory reads/writes, register fetch/stores and a - resume). - - Process simulator: that process is not created until a call to - sim_create_inferior. FIXME: What should the state of the simulator - be? */ - -SIM_DESC sim_open PARAMS ((SIM_OPEN_KIND kind, struct host_callback_struct *callback, struct bfd *abfd, char **argv)); - - -/* Destory a simulator instance. - - QUITTING is non-zero if we cannot hang on errors. - - This may involve freeing target memory and closing any open files - and mmap'd areas. You cannot assume sim_kill has already been - called. */ - -void sim_close PARAMS ((SIM_DESC sd, int quitting)); - - -/* Load program PROG into the simulators memory. - - If ABFD is non-NULL, the bfd for the file has already been opened. - The result is a return code indicating success. - - Hardware simulator: Normally, each program section is written into - memory according to that sections LMA using physical (direct) - addressing. The exception being systems, such as PPC/CHRP, which - support more complicated program loaders. A call to this function - should not effect the state of the processor registers. Multiple - calls to this function are permitted and have an accumulative - effect. - - Process simulator: Calls to this function may be ignored. - - FIXME: Most hardware simulators load the image at the VMA using - virtual addressing. - - FIXME: For some hardware targets, before a loaded program can be - executed, it requires the manipulation of VM registers and tables. - Such manipulation should probably (?) occure in - sim_create_inferior. */ - -SIM_RC sim_load PARAMS ((SIM_DESC sd, char *prog, struct bfd *abfd, int from_tty)); - - -/* Prepare to run the simulated program. - - ABFD, if not NULL, provides initial processor state information. - ARGV and ENV, if non NULL, are NULL terminated lists of pointers. - - Hardware simulator: This function shall initialize the processor - registers to a known value. The program counter and possibly stack - pointer shall be set using information obtained from ABFD (or - hardware reset defaults). ARGV and ENV, dependant on the target - ABI, may be written to memory. - - Process simulator: After a call to this function, a new process - instance shall exist. The TEXT, DATA, BSS and stack regions shall - all be initialized, ARGV and ENV shall be written to process - address space (according to the applicable ABI) and the program - counter and stack pointer set accordingly. */ - -SIM_RC sim_create_inferior PARAMS ((SIM_DESC sd, struct bfd *abfd, char **argv, char **env)); - - -/* Fetch LENGTH bytes of the simulated program's memory. Start fetch - at virtual address MEM and store in BUF. Result is number of bytes - read, or zero if error. */ - -int sim_read PARAMS ((SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length)); - - -/* Store LENGTH bytes from BUF into the simulated program's - memory. Store bytes starting at virtual address MEM. Result is - number of bytes write, or zero if error. */ - -int sim_write PARAMS ((SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length)); - - -/* Fetch register REGNO storing its raw (target endian) value in the - LENGTH byte buffer BUF. Return the actual size of the register or - zero if REGNO is not applicable. - - Legacy implementations ignore LENGTH and always return -1. - - If LENGTH does not match the size of REGNO no data is transfered - (the actual register size is still returned). */ - -int sim_fetch_register PARAMS ((SIM_DESC sd, int regno, unsigned char *buf, int length)); - - -/* Store register REGNO from the raw (target endian) value in BUF. - Return the actual size of the register or zero if REGNO is not - applicable. - - Legacy implementations ignore LENGTH and always return -1. - - If LENGTH does not match the size of REGNO no data is transfered - (the actual register size is still returned). */ - -int sim_store_register PARAMS ((SIM_DESC sd, int regno, unsigned char *buf, int length)); - - -/* Print whatever statistics the simulator has collected. - - VERBOSE is currently unused and must always be zero. */ - -void sim_info PARAMS ((SIM_DESC sd, int verbose)); - - -/* Run (or resume) the simulated program. - - STEP, when non-zero indicates that only a single simulator cycle - should be emulated. - - SIGGNAL, if non-zero is a (HOST) SIGRC value indicating the type of - event (hardware interrupt, signal) to be delivered to the simulated - program. - - Hardware simulator: If the SIGRC value returned by - sim_stop_reason() is passed back to the simulator via SIGGNAL then - the hardware simulator shall correctly deliver the hardware event - indicated by that signal. If a value of zero is passed in then the - simulation will continue as if there were no outstanding signal. - The effect of any other SIGGNAL value is is implementation - dependant. - - Process simulator: If SIGRC is non-zero then the corresponding - signal is delivered to the simulated program and execution is then - continued. A zero SIGRC value indicates that the program should - continue as normal. */ - -void sim_resume PARAMS ((SIM_DESC sd, int step, int siggnal)); - - -/* Asynchronous request to stop the simulation. - A nonzero return indicates that the simulator is able to handle - the request */ - -int sim_stop PARAMS ((SIM_DESC sd)); - - -/* Fetch the REASON why the program stopped. - - SIM_EXITED: The program has terminated. SIGRC indicates the target - dependant exit status. - - SIM_STOPPED: The program has stopped. SIGRC uses the host's signal - numbering as a way of identifying the reaon: program interrupted by - user via a sim_stop request (SIGINT); a breakpoint instruction - (SIGTRAP); a completed single step (SIGTRAP); an internal error - condition (SIGABRT); an illegal instruction (SIGILL); Access to an - undefined memory region (SIGSEGV); Mis-aligned memory access - (SIGBUS). For some signals information in addition to the signal - number may be retained by the simulator (e.g. offending address), - that information is not directly accessable via this interface. - - SIM_SIGNALLED: The program has been terminated by a signal. The - simulator has encountered target code that causes the the program - to exit with signal SIGRC. - - SIM_RUNNING, SIM_POLLING: The return of one of these values - indicates a problem internal to the simulator. */ - -enum sim_stop { sim_running, sim_polling, sim_exited, sim_stopped, sim_signalled }; - -void sim_stop_reason PARAMS ((SIM_DESC sd, enum sim_stop *reason, int *sigrc)); - - -/* Passthru for other commands that the simulator might support. - Simulators should be prepared to deal with any combination of NULL - or empty CMD. */ - -void sim_do_command PARAMS ((SIM_DESC sd, char *cmd)); - -#ifdef __cplusplus -} -#endif - -#endif /* !defined (REMOTE_SIM_H) */ diff --git a/include/gdb/signals.h b/include/gdb/signals.h deleted file mode 100644 index b6f5d485312..00000000000 --- a/include/gdb/signals.h +++ /dev/null @@ -1,237 +0,0 @@ -/* Target signal numbers for GDB and the GDB remote protocol. - Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 1998, 1999, 2000, 2001, 2002 - Free Software Foundation, Inc. - - This file is part of GDB. - - This program 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. */ - -#ifndef GDB_SIGNALS_H -#define GDB_SIGNALS_H - -/* The numbering of these signals is chosen to match traditional unix - signals (insofar as various unices use the same numbers, anyway). - It is also the numbering of the GDB remote protocol. Other remote - protocols, if they use a different numbering, should make sure to - translate appropriately. - - Since these numbers have actually made it out into other software - (stubs, etc.), you mustn't disturb the assigned numbering. If you - need to add new signals here, add them to the end of the explicitly - numbered signals, at the comment marker. Add them unconditionally, - not within any #if or #ifdef. - - This is based strongly on Unix/POSIX signals for several reasons: - (1) This set of signals represents a widely-accepted attempt to - represent events of this sort in a portable fashion, (2) we want a - signal to make it from wait to child_wait to the user intact, (3) many - remote protocols use a similar encoding. However, it is - recognized that this set of signals has limitations (such as not - distinguishing between various kinds of SIGSEGV, or not - distinguishing hitting a breakpoint from finishing a single step). - So in the future we may get around this either by adding additional - signals for breakpoint, single-step, etc., or by adding signal - codes; the latter seems more in the spirit of what BSD, System V, - etc. are doing to address these issues. */ - -/* For an explanation of what each signal means, see - target_signal_to_string. */ - -enum target_signal - { - /* Used some places (e.g. stop_signal) to record the concept that - there is no signal. */ - TARGET_SIGNAL_0 = 0, - TARGET_SIGNAL_FIRST = 0, - TARGET_SIGNAL_HUP = 1, - TARGET_SIGNAL_INT = 2, - TARGET_SIGNAL_QUIT = 3, - TARGET_SIGNAL_ILL = 4, - TARGET_SIGNAL_TRAP = 5, - TARGET_SIGNAL_ABRT = 6, - TARGET_SIGNAL_EMT = 7, - TARGET_SIGNAL_FPE = 8, - TARGET_SIGNAL_KILL = 9, - TARGET_SIGNAL_BUS = 10, - TARGET_SIGNAL_SEGV = 11, - TARGET_SIGNAL_SYS = 12, - TARGET_SIGNAL_PIPE = 13, - TARGET_SIGNAL_ALRM = 14, - TARGET_SIGNAL_TERM = 15, - TARGET_SIGNAL_URG = 16, - TARGET_SIGNAL_STOP = 17, - TARGET_SIGNAL_TSTP = 18, - TARGET_SIGNAL_CONT = 19, - TARGET_SIGNAL_CHLD = 20, - TARGET_SIGNAL_TTIN = 21, - TARGET_SIGNAL_TTOU = 22, - TARGET_SIGNAL_IO = 23, - TARGET_SIGNAL_XCPU = 24, - TARGET_SIGNAL_XFSZ = 25, - TARGET_SIGNAL_VTALRM = 26, - TARGET_SIGNAL_PROF = 27, - TARGET_SIGNAL_WINCH = 28, - TARGET_SIGNAL_LOST = 29, - TARGET_SIGNAL_USR1 = 30, - TARGET_SIGNAL_USR2 = 31, - TARGET_SIGNAL_PWR = 32, - /* Similar to SIGIO. Perhaps they should have the same number. */ - TARGET_SIGNAL_POLL = 33, - TARGET_SIGNAL_WIND = 34, - TARGET_SIGNAL_PHONE = 35, - TARGET_SIGNAL_WAITING = 36, - TARGET_SIGNAL_LWP = 37, - TARGET_SIGNAL_DANGER = 38, - TARGET_SIGNAL_GRANT = 39, - TARGET_SIGNAL_RETRACT = 40, - TARGET_SIGNAL_MSG = 41, - TARGET_SIGNAL_SOUND = 42, - TARGET_SIGNAL_SAK = 43, - TARGET_SIGNAL_PRIO = 44, - TARGET_SIGNAL_REALTIME_33 = 45, - TARGET_SIGNAL_REALTIME_34 = 46, - TARGET_SIGNAL_REALTIME_35 = 47, - TARGET_SIGNAL_REALTIME_36 = 48, - TARGET_SIGNAL_REALTIME_37 = 49, - TARGET_SIGNAL_REALTIME_38 = 50, - TARGET_SIGNAL_REALTIME_39 = 51, - TARGET_SIGNAL_REALTIME_40 = 52, - TARGET_SIGNAL_REALTIME_41 = 53, - TARGET_SIGNAL_REALTIME_42 = 54, - TARGET_SIGNAL_REALTIME_43 = 55, - TARGET_SIGNAL_REALTIME_44 = 56, - TARGET_SIGNAL_REALTIME_45 = 57, - TARGET_SIGNAL_REALTIME_46 = 58, - TARGET_SIGNAL_REALTIME_47 = 59, - TARGET_SIGNAL_REALTIME_48 = 60, - TARGET_SIGNAL_REALTIME_49 = 61, - TARGET_SIGNAL_REALTIME_50 = 62, - TARGET_SIGNAL_REALTIME_51 = 63, - TARGET_SIGNAL_REALTIME_52 = 64, - TARGET_SIGNAL_REALTIME_53 = 65, - TARGET_SIGNAL_REALTIME_54 = 66, - TARGET_SIGNAL_REALTIME_55 = 67, - TARGET_SIGNAL_REALTIME_56 = 68, - TARGET_SIGNAL_REALTIME_57 = 69, - TARGET_SIGNAL_REALTIME_58 = 70, - TARGET_SIGNAL_REALTIME_59 = 71, - TARGET_SIGNAL_REALTIME_60 = 72, - TARGET_SIGNAL_REALTIME_61 = 73, - TARGET_SIGNAL_REALTIME_62 = 74, - TARGET_SIGNAL_REALTIME_63 = 75, - - /* Used internally by Solaris threads. See signal(5) on Solaris. */ - TARGET_SIGNAL_CANCEL = 76, - - /* Yes, this pains me, too. But LynxOS didn't have SIG32, and now - GNU/Linux does, and we can't disturb the numbering, since it's - part of the remote protocol. Note that in some GDB's - TARGET_SIGNAL_REALTIME_32 is number 76. */ - TARGET_SIGNAL_REALTIME_32, - /* Yet another pain, IRIX 6 has SIG64. */ - TARGET_SIGNAL_REALTIME_64, - /* Yet another pain, GNU/Linux MIPS might go up to 128. */ - TARGET_SIGNAL_REALTIME_65, - TARGET_SIGNAL_REALTIME_66, - TARGET_SIGNAL_REALTIME_67, - TARGET_SIGNAL_REALTIME_68, - TARGET_SIGNAL_REALTIME_69, - TARGET_SIGNAL_REALTIME_70, - TARGET_SIGNAL_REALTIME_71, - TARGET_SIGNAL_REALTIME_72, - TARGET_SIGNAL_REALTIME_73, - TARGET_SIGNAL_REALTIME_74, - TARGET_SIGNAL_REALTIME_75, - TARGET_SIGNAL_REALTIME_76, - TARGET_SIGNAL_REALTIME_77, - TARGET_SIGNAL_REALTIME_78, - TARGET_SIGNAL_REALTIME_79, - TARGET_SIGNAL_REALTIME_80, - TARGET_SIGNAL_REALTIME_81, - TARGET_SIGNAL_REALTIME_82, - TARGET_SIGNAL_REALTIME_83, - TARGET_SIGNAL_REALTIME_84, - TARGET_SIGNAL_REALTIME_85, - TARGET_SIGNAL_REALTIME_86, - TARGET_SIGNAL_REALTIME_87, - TARGET_SIGNAL_REALTIME_88, - TARGET_SIGNAL_REALTIME_89, - TARGET_SIGNAL_REALTIME_90, - TARGET_SIGNAL_REALTIME_91, - TARGET_SIGNAL_REALTIME_92, - TARGET_SIGNAL_REALTIME_93, - TARGET_SIGNAL_REALTIME_94, - TARGET_SIGNAL_REALTIME_95, - TARGET_SIGNAL_REALTIME_96, - TARGET_SIGNAL_REALTIME_97, - TARGET_SIGNAL_REALTIME_98, - TARGET_SIGNAL_REALTIME_99, - TARGET_SIGNAL_REALTIME_100, - TARGET_SIGNAL_REALTIME_101, - TARGET_SIGNAL_REALTIME_102, - TARGET_SIGNAL_REALTIME_103, - TARGET_SIGNAL_REALTIME_104, - TARGET_SIGNAL_REALTIME_105, - TARGET_SIGNAL_REALTIME_106, - TARGET_SIGNAL_REALTIME_107, - TARGET_SIGNAL_REALTIME_108, - TARGET_SIGNAL_REALTIME_109, - TARGET_SIGNAL_REALTIME_110, - TARGET_SIGNAL_REALTIME_111, - TARGET_SIGNAL_REALTIME_112, - TARGET_SIGNAL_REALTIME_113, - TARGET_SIGNAL_REALTIME_114, - TARGET_SIGNAL_REALTIME_115, - TARGET_SIGNAL_REALTIME_116, - TARGET_SIGNAL_REALTIME_117, - TARGET_SIGNAL_REALTIME_118, - TARGET_SIGNAL_REALTIME_119, - TARGET_SIGNAL_REALTIME_120, - TARGET_SIGNAL_REALTIME_121, - TARGET_SIGNAL_REALTIME_122, - TARGET_SIGNAL_REALTIME_123, - TARGET_SIGNAL_REALTIME_124, - TARGET_SIGNAL_REALTIME_125, - TARGET_SIGNAL_REALTIME_126, - TARGET_SIGNAL_REALTIME_127, - - TARGET_SIGNAL_INFO, - - /* Some signal we don't know about. */ - TARGET_SIGNAL_UNKNOWN, - - /* Use whatever signal we use when one is not specifically specified - (for passing to proceed and so on). */ - TARGET_SIGNAL_DEFAULT, - - /* Mach exceptions. In versions of GDB before 5.2, these were just before - TARGET_SIGNAL_INFO if you were compiling on a Mach host (and missing - otherwise). */ - TARGET_EXC_BAD_ACCESS, - TARGET_EXC_BAD_INSTRUCTION, - TARGET_EXC_ARITHMETIC, - TARGET_EXC_EMULATION, - TARGET_EXC_SOFTWARE, - TARGET_EXC_BREAKPOINT, - - /* If you are adding a new signal, add it just above this comment. */ - - /* Last and unused enum value, for sizing arrays, etc. */ - TARGET_SIGNAL_LAST - }; - -#endif /* #ifndef GDB_SIGNALS_H */ diff --git a/include/gdb/sim-arm.h b/include/gdb/sim-arm.h deleted file mode 100644 index 5598f73fa8f..00000000000 --- a/include/gdb/sim-arm.h +++ /dev/null @@ -1,114 +0,0 @@ -/* This file defines the interface between the Arm simulator and GDB. - - Copyright 2002, 2003 Free Software Foundation, Inc. - - Contributed by Red Hat. - - This file is part of GDB. - - This program 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. */ - -#if !defined (SIM_ARM_H) -#define SIM_ARM_H - -#ifdef __cplusplus -extern "C" { // } -#endif - -enum sim_arm_regs -{ - SIM_ARM_R0_REGNUM, - SIM_ARM_R1_REGNUM, - SIM_ARM_R2_REGNUM, - SIM_ARM_R3_REGNUM, - SIM_ARM_R4_REGNUM, - SIM_ARM_R5_REGNUM, - SIM_ARM_R6_REGNUM, - SIM_ARM_R7_REGNUM, - SIM_ARM_R8_REGNUM, - SIM_ARM_R9_REGNUM, - SIM_ARM_R10_REGNUM, - SIM_ARM_R11_REGNUM, - SIM_ARM_R12_REGNUM, - SIM_ARM_R13_REGNUM, - SIM_ARM_R14_REGNUM, - SIM_ARM_R15_REGNUM, /* PC */ - SIM_ARM_FP0_REGNUM, - SIM_ARM_FP1_REGNUM, - SIM_ARM_FP2_REGNUM, - SIM_ARM_FP3_REGNUM, - SIM_ARM_FP4_REGNUM, - SIM_ARM_FP5_REGNUM, - SIM_ARM_FP6_REGNUM, - SIM_ARM_FP7_REGNUM, - SIM_ARM_FPS_REGNUM, - SIM_ARM_PS_REGNUM, - SIM_ARM_MAVERIC_COP0R0_REGNUM, - SIM_ARM_MAVERIC_COP0R1_REGNUM, - SIM_ARM_MAVERIC_COP0R2_REGNUM, - SIM_ARM_MAVERIC_COP0R3_REGNUM, - SIM_ARM_MAVERIC_COP0R4_REGNUM, - SIM_ARM_MAVERIC_COP0R5_REGNUM, - SIM_ARM_MAVERIC_COP0R6_REGNUM, - SIM_ARM_MAVERIC_COP0R7_REGNUM, - SIM_ARM_MAVERIC_COP0R8_REGNUM, - SIM_ARM_MAVERIC_COP0R9_REGNUM, - SIM_ARM_MAVERIC_COP0R10_REGNUM, - SIM_ARM_MAVERIC_COP0R11_REGNUM, - SIM_ARM_MAVERIC_COP0R12_REGNUM, - SIM_ARM_MAVERIC_COP0R13_REGNUM, - SIM_ARM_MAVERIC_COP0R14_REGNUM, - SIM_ARM_MAVERIC_COP0R15_REGNUM, - SIM_ARM_MAVERIC_DSPSC_REGNUM, - SIM_ARM_IWMMXT_COP0R0_REGNUM, - SIM_ARM_IWMMXT_COP0R1_REGNUM, - SIM_ARM_IWMMXT_COP0R2_REGNUM, - SIM_ARM_IWMMXT_COP0R3_REGNUM, - SIM_ARM_IWMMXT_COP0R4_REGNUM, - SIM_ARM_IWMMXT_COP0R5_REGNUM, - SIM_ARM_IWMMXT_COP0R6_REGNUM, - SIM_ARM_IWMMXT_COP0R7_REGNUM, - SIM_ARM_IWMMXT_COP0R8_REGNUM, - SIM_ARM_IWMMXT_COP0R9_REGNUM, - SIM_ARM_IWMMXT_COP0R10_REGNUM, - SIM_ARM_IWMMXT_COP0R11_REGNUM, - SIM_ARM_IWMMXT_COP0R12_REGNUM, - SIM_ARM_IWMMXT_COP0R13_REGNUM, - SIM_ARM_IWMMXT_COP0R14_REGNUM, - SIM_ARM_IWMMXT_COP0R15_REGNUM, - SIM_ARM_IWMMXT_COP1R0_REGNUM, - SIM_ARM_IWMMXT_COP1R1_REGNUM, - SIM_ARM_IWMMXT_COP1R2_REGNUM, - SIM_ARM_IWMMXT_COP1R3_REGNUM, - SIM_ARM_IWMMXT_COP1R4_REGNUM, - SIM_ARM_IWMMXT_COP1R5_REGNUM, - SIM_ARM_IWMMXT_COP1R6_REGNUM, - SIM_ARM_IWMMXT_COP1R7_REGNUM, - SIM_ARM_IWMMXT_COP1R8_REGNUM, - SIM_ARM_IWMMXT_COP1R9_REGNUM, - SIM_ARM_IWMMXT_COP1R10_REGNUM, - SIM_ARM_IWMMXT_COP1R11_REGNUM, - SIM_ARM_IWMMXT_COP1R12_REGNUM, - SIM_ARM_IWMMXT_COP1R13_REGNUM, - SIM_ARM_IWMMXT_COP1R14_REGNUM, - SIM_ARM_IWMMXT_COP1R15_REGNUM -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/include/gdb/sim-d10v.h b/include/gdb/sim-d10v.h deleted file mode 100644 index 8294b14858b..00000000000 --- a/include/gdb/sim-d10v.h +++ /dev/null @@ -1,142 +0,0 @@ -/* This file defines the interface between the d10v simulator and gdb. - - Copyright 1999, 2002 Free Software Foundation, Inc. - -This file is part of GDB. - -This program 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. */ - -#if !defined (SIM_D10V_H) -#define SIM_D10V_H - -#ifdef __cplusplus -extern "C" { // } -#endif - -/* GDB interprets addresses as: - - 0x00xxxxxx: Physical unified memory segment (Unified memory) - 0x01xxxxxx: Physical instruction memory segment (On-chip insn memory) - 0x02xxxxxx: Physical data memory segment (On-chip data memory) - 0x10xxxxxx: Logical data address segment (DMAP translated memory) - 0x11xxxxxx: Logical instruction address segment (IMAP translated memory) - - The remote d10v board interprets addresses as: - - 0x00xxxxxx: Physical unified memory segment (Unified memory) - 0x01xxxxxx: Physical instruction memory segment (On-chip insn memory) - 0x02xxxxxx: Physical data memory segment (On-chip data memory) - - The following translate a virtual DMAP/IMAP offset into a physical - memory segment assigning the translated address to PHYS. Since a - memory access may cross a page boundrary the number of bytes for - which the translation is applicable (or 0 for an invalid virtual - offset) is returned. */ - -enum - { - SIM_D10V_MEMORY_UNIFIED = 0x00000000, - SIM_D10V_MEMORY_INSN = 0x01000000, - SIM_D10V_MEMORY_DATA = 0x02000000, - SIM_D10V_MEMORY_DMAP = 0x10000000, - SIM_D10V_MEMORY_IMAP = 0x11000000 - }; - -extern unsigned long sim_d10v_translate_dmap_addr - (unsigned long offset, - int nr_bytes, - unsigned long *phys, - void *regcache, - unsigned long (*dmap_register) (void *regcache, int reg_nr)); - -extern unsigned long sim_d10v_translate_imap_addr - (unsigned long offset, - int nr_bytes, - unsigned long *phys, - void *regcache, - unsigned long (*imap_register) (void *regcache, int reg_nr)); - -extern unsigned long sim_d10v_translate_addr - (unsigned long vaddr, - int nr_bytes, - unsigned long *phys, - void *regcache, - unsigned long (*dmap_register) (void *regcache, int reg_nr), - unsigned long (*imap_register) (void *regcache, int reg_nr)); - - -/* The simulator makes use of the following register information. */ - -enum sim_d10v_regs -{ - SIM_D10V_R0_REGNUM, - SIM_D10V_R1_REGNUM, - SIM_D10V_R2_REGNUM, - SIM_D10V_R3_REGNUM, - SIM_D10V_R4_REGNUM, - SIM_D10V_R5_REGNUM, - SIM_D10V_R6_REGNUM, - SIM_D10V_R7_REGNUM, - SIM_D10V_R8_REGNUM, - SIM_D10V_R9_REGNUM, - SIM_D10V_R10_REGNUM, - SIM_D10V_R11_REGNUM, - SIM_D10V_R12_REGNUM, - SIM_D10V_R13_REGNUM, - SIM_D10V_R14_REGNUM, - SIM_D10V_R15_REGNUM, - SIM_D10V_CR0_REGNUM, - SIM_D10V_CR1_REGNUM, - SIM_D10V_CR2_REGNUM, - SIM_D10V_CR3_REGNUM, - SIM_D10V_CR4_REGNUM, - SIM_D10V_CR5_REGNUM, - SIM_D10V_CR6_REGNUM, - SIM_D10V_CR7_REGNUM, - SIM_D10V_CR8_REGNUM, - SIM_D10V_CR9_REGNUM, - SIM_D10V_CR10_REGNUM, - SIM_D10V_CR11_REGNUM, - SIM_D10V_CR12_REGNUM, - SIM_D10V_CR13_REGNUM, - SIM_D10V_CR14_REGNUM, - SIM_D10V_CR15_REGNUM, - SIM_D10V_A0_REGNUM, - SIM_D10V_A1_REGNUM, - SIM_D10V_SPI_REGNUM, - SIM_D10V_SPU_REGNUM, - SIM_D10V_IMAP0_REGNUM, - SIM_D10V_IMAP1_REGNUM, - SIM_D10V_DMAP0_REGNUM, - SIM_D10V_DMAP1_REGNUM, - SIM_D10V_DMAP2_REGNUM, - SIM_D10V_DMAP3_REGNUM, - SIM_D10V_TS2_DMAP_REGNUM -}; - -enum -{ - SIM_D10V_NR_R_REGS = 16, - SIM_D10V_NR_A_REGS = 2, - SIM_D10V_NR_IMAP_REGS = 2, - SIM_D10V_NR_DMAP_REGS = 4, - SIM_D10V_NR_CR_REGS = 16 -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/include/gdb/sim-frv.h b/include/gdb/sim-frv.h deleted file mode 100644 index 0a1e0212e52..00000000000 --- a/include/gdb/sim-frv.h +++ /dev/null @@ -1,53 +0,0 @@ -/* This file defines the interface between the FR-V simulator and GDB. - - Copyright 2003 Free Software Foundation, Inc. - - Contributed by Red Hat. - - This file is part of GDB. - - This program 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. */ - -#if !defined (SIM_FRV_H) -#define SIM_FRV_H - -#ifdef __cplusplus -extern "C" { // } -#endif - -enum sim_frv_regs -{ - SIM_FRV_GR0_REGNUM = 0, - SIM_FRV_GR63_REGNUM = 63, - SIM_FRV_FR0_REGNUM = 64, - SIM_FRV_FR63_REGNUM = 127, - SIM_FRV_PC_REGNUM = 128, - - /* An FR-V architecture may have up to 4096 special purpose registers - (SPRs). In order to determine a specific constant used to access - a particular SPR, one of the H_SPR_ prefixed offsets defined in - opcodes/frv-desc.h should be added to SIM_FRV_SPR0_REGNUM. So, - for example, the number that GDB uses to fetch the link register - from the simulator is (SIM_FRV_SPR0_REGNUM + H_SPR_LR). */ - SIM_FRV_SPR0_REGNUM = 129, - SIM_FRV_SPR4095_REGNUM = SIM_FRV_SPR0_REGNUM + 4095 -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/include/gdb/sim-h8300.h b/include/gdb/sim-h8300.h deleted file mode 100644 index 246370aec23..00000000000 --- a/include/gdb/sim-h8300.h +++ /dev/null @@ -1,78 +0,0 @@ -/* This file defines the interface between the h8300 simulator and gdb. - Copyright (C) 2002 Free Software Foundation, Inc. - -This file is part of GDB. - -This program 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. */ - -#if !defined (SIM_H8300_H) -#define SIM_H8300_H - -#ifdef __cplusplus -extern "C" { //} -#endif - -/* The simulator makes use of the following register information. */ - - enum sim_h8300_regs - { - /* Registers common to all the H8 variants. */ - /* Start here: */ - SIM_H8300_R0_REGNUM, - SIM_H8300_R1_REGNUM, - SIM_H8300_R2_REGNUM, - SIM_H8300_R3_REGNUM, - SIM_H8300_R4_REGNUM, - SIM_H8300_R5_REGNUM, - SIM_H8300_R6_REGNUM, - SIM_H8300_R7_REGNUM, - - SIM_H8300_CCR_REGNUM, /* Contains processor status */ - SIM_H8300_PC_REGNUM, /* Contains program counter */ - /* End here */ - - SIM_H8300_EXR_REGNUM, /* Contains extended processor status - H8S and higher */ - SIM_H8300_MACL_REGNUM, /* Lower part of MAC register (26xx only)*/ - SIM_H8300_MACH_REGNUM, /* High part of MAC register (26xx only) */ - - SIM_H8300_CYCLE_REGNUM, - SIM_H8300_INST_REGNUM, - SIM_H8300_TICK_REGNUM - }; - - enum - { - SIM_H8300_ARG_FIRST_REGNUM = SIM_H8300_R0_REGNUM, /* first reg in which an arg - may be passed */ - SIM_H8300_ARG_LAST_REGNUM = SIM_H8300_R3_REGNUM, /* last reg in which an arg - may be passed */ - SIM_H8300_FP_REGNUM = SIM_H8300_R6_REGNUM, /* Contain address of executing - stack frame */ - SIM_H8300_SP_REGNUM = SIM_H8300_R7_REGNUM /* Contains address of top of stack */ - }; - - enum - { - SIM_H8300_NUM_COMMON_REGS = 10, - SIM_H8300_S_NUM_REGS = 13, - SIM_H8300_NUM_REGS = 16 - }; - -#ifdef __cplusplus -} -#endif - -#endif /* SIM_H8300_H */ diff --git a/include/gdb/sim-m32c.h b/include/gdb/sim-m32c.h deleted file mode 100644 index 6097add82d6..00000000000 --- a/include/gdb/sim-m32c.h +++ /dev/null @@ -1,63 +0,0 @@ -/* This file defines the interface between the m32c simulator and gdb. - Copyright (C) 2005 Free Software Foundation, Inc. - -This file is part of GDB. - -This program 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. */ - -#ifndef SIM_M32C_H -#define SIM_M32C_H - -enum m32c_sim_reg { - m32c_sim_reg_r0_bank0, - m32c_sim_reg_r1_bank0, - m32c_sim_reg_r2_bank0, - m32c_sim_reg_r3_bank0, - m32c_sim_reg_a0_bank0, - m32c_sim_reg_a1_bank0, - m32c_sim_reg_fb_bank0, - m32c_sim_reg_sb_bank0, - m32c_sim_reg_r0_bank1, - m32c_sim_reg_r1_bank1, - m32c_sim_reg_r2_bank1, - m32c_sim_reg_r3_bank1, - m32c_sim_reg_a0_bank1, - m32c_sim_reg_a1_bank1, - m32c_sim_reg_fb_bank1, - m32c_sim_reg_sb_bank1, - m32c_sim_reg_usp, - m32c_sim_reg_isp, - m32c_sim_reg_pc, - m32c_sim_reg_intb, - m32c_sim_reg_flg, - m32c_sim_reg_svf, - m32c_sim_reg_svp, - m32c_sim_reg_vct, - m32c_sim_reg_dmd0, - m32c_sim_reg_dmd1, - m32c_sim_reg_dct0, - m32c_sim_reg_dct1, - m32c_sim_reg_drc0, - m32c_sim_reg_drc1, - m32c_sim_reg_dma0, - m32c_sim_reg_dma1, - m32c_sim_reg_dsa0, - m32c_sim_reg_dsa1, - m32c_sim_reg_dra0, - m32c_sim_reg_dra1, - m32c_sim_reg_num_regs -}; - -#endif /* SIM_M32C_H */ diff --git a/include/gdb/sim-ppc.h b/include/gdb/sim-ppc.h deleted file mode 100644 index e31a6711292..00000000000 --- a/include/gdb/sim-ppc.h +++ /dev/null @@ -1,771 +0,0 @@ -/* sim-ppc.h --- interface between PowerPC simulator and GDB. - - Copyright 2004 Free Software Foundation, Inc. - - Contributed by Red Hat. - - This file is part of GDB. - - This program 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. */ - -#if !defined (SIM_PPC_H) -#define SIM_PPC_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* The register access functions, sim_fetch_register and - sim_store_register, use the following numbering for PowerPC - registers. */ - -enum sim_ppc_regnum - { - /* General-purpose registers, r0 -- r31. */ - sim_ppc_r0_regnum, - sim_ppc_r1_regnum, - sim_ppc_r2_regnum, - sim_ppc_r3_regnum, - sim_ppc_r4_regnum, - sim_ppc_r5_regnum, - sim_ppc_r6_regnum, - sim_ppc_r7_regnum, - sim_ppc_r8_regnum, - sim_ppc_r9_regnum, - sim_ppc_r10_regnum, - sim_ppc_r11_regnum, - sim_ppc_r12_regnum, - sim_ppc_r13_regnum, - sim_ppc_r14_regnum, - sim_ppc_r15_regnum, - sim_ppc_r16_regnum, - sim_ppc_r17_regnum, - sim_ppc_r18_regnum, - sim_ppc_r19_regnum, - sim_ppc_r20_regnum, - sim_ppc_r21_regnum, - sim_ppc_r22_regnum, - sim_ppc_r23_regnum, - sim_ppc_r24_regnum, - sim_ppc_r25_regnum, - sim_ppc_r26_regnum, - sim_ppc_r27_regnum, - sim_ppc_r28_regnum, - sim_ppc_r29_regnum, - sim_ppc_r30_regnum, - sim_ppc_r31_regnum, - - /* Floating-point registers, f0 -- f31. */ - sim_ppc_f0_regnum, - sim_ppc_f1_regnum, - sim_ppc_f2_regnum, - sim_ppc_f3_regnum, - sim_ppc_f4_regnum, - sim_ppc_f5_regnum, - sim_ppc_f6_regnum, - sim_ppc_f7_regnum, - sim_ppc_f8_regnum, - sim_ppc_f9_regnum, - sim_ppc_f10_regnum, - sim_ppc_f11_regnum, - sim_ppc_f12_regnum, - sim_ppc_f13_regnum, - sim_ppc_f14_regnum, - sim_ppc_f15_regnum, - sim_ppc_f16_regnum, - sim_ppc_f17_regnum, - sim_ppc_f18_regnum, - sim_ppc_f19_regnum, - sim_ppc_f20_regnum, - sim_ppc_f21_regnum, - sim_ppc_f22_regnum, - sim_ppc_f23_regnum, - sim_ppc_f24_regnum, - sim_ppc_f25_regnum, - sim_ppc_f26_regnum, - sim_ppc_f27_regnum, - sim_ppc_f28_regnum, - sim_ppc_f29_regnum, - sim_ppc_f30_regnum, - sim_ppc_f31_regnum, - - /* Altivec vector registers, vr0 -- vr31. */ - sim_ppc_vr0_regnum, - sim_ppc_vr1_regnum, - sim_ppc_vr2_regnum, - sim_ppc_vr3_regnum, - sim_ppc_vr4_regnum, - sim_ppc_vr5_regnum, - sim_ppc_vr6_regnum, - sim_ppc_vr7_regnum, - sim_ppc_vr8_regnum, - sim_ppc_vr9_regnum, - sim_ppc_vr10_regnum, - sim_ppc_vr11_regnum, - sim_ppc_vr12_regnum, - sim_ppc_vr13_regnum, - sim_ppc_vr14_regnum, - sim_ppc_vr15_regnum, - sim_ppc_vr16_regnum, - sim_ppc_vr17_regnum, - sim_ppc_vr18_regnum, - sim_ppc_vr19_regnum, - sim_ppc_vr20_regnum, - sim_ppc_vr21_regnum, - sim_ppc_vr22_regnum, - sim_ppc_vr23_regnum, - sim_ppc_vr24_regnum, - sim_ppc_vr25_regnum, - sim_ppc_vr26_regnum, - sim_ppc_vr27_regnum, - sim_ppc_vr28_regnum, - sim_ppc_vr29_regnum, - sim_ppc_vr30_regnum, - sim_ppc_vr31_regnum, - - /* SPE APU GPR upper halves. These are the upper 32 bits of the - gprs; there is one upper-half register for each gpr, so it is - appropriate to use sim_ppc_num_gprs for iterating through - these. */ - sim_ppc_rh0_regnum, - sim_ppc_rh1_regnum, - sim_ppc_rh2_regnum, - sim_ppc_rh3_regnum, - sim_ppc_rh4_regnum, - sim_ppc_rh5_regnum, - sim_ppc_rh6_regnum, - sim_ppc_rh7_regnum, - sim_ppc_rh8_regnum, - sim_ppc_rh9_regnum, - sim_ppc_rh10_regnum, - sim_ppc_rh11_regnum, - sim_ppc_rh12_regnum, - sim_ppc_rh13_regnum, - sim_ppc_rh14_regnum, - sim_ppc_rh15_regnum, - sim_ppc_rh16_regnum, - sim_ppc_rh17_regnum, - sim_ppc_rh18_regnum, - sim_ppc_rh19_regnum, - sim_ppc_rh20_regnum, - sim_ppc_rh21_regnum, - sim_ppc_rh22_regnum, - sim_ppc_rh23_regnum, - sim_ppc_rh24_regnum, - sim_ppc_rh25_regnum, - sim_ppc_rh26_regnum, - sim_ppc_rh27_regnum, - sim_ppc_rh28_regnum, - sim_ppc_rh29_regnum, - sim_ppc_rh30_regnum, - sim_ppc_rh31_regnum, - - /* SPE APU GPR full registers. Each of these registers is the - 64-bit concatenation of a 32-bit GPR (providing the lower bits) - and a 32-bit upper-half register (providing the higher bits). - As for the upper-half registers, it is appropriate to use - sim_ppc_num_gprs with these. */ - sim_ppc_ev0_regnum, - sim_ppc_ev1_regnum, - sim_ppc_ev2_regnum, - sim_ppc_ev3_regnum, - sim_ppc_ev4_regnum, - sim_ppc_ev5_regnum, - sim_ppc_ev6_regnum, - sim_ppc_ev7_regnum, - sim_ppc_ev8_regnum, - sim_ppc_ev9_regnum, - sim_ppc_ev10_regnum, - sim_ppc_ev11_regnum, - sim_ppc_ev12_regnum, - sim_ppc_ev13_regnum, - sim_ppc_ev14_regnum, - sim_ppc_ev15_regnum, - sim_ppc_ev16_regnum, - sim_ppc_ev17_regnum, - sim_ppc_ev18_regnum, - sim_ppc_ev19_regnum, - sim_ppc_ev20_regnum, - sim_ppc_ev21_regnum, - sim_ppc_ev22_regnum, - sim_ppc_ev23_regnum, - sim_ppc_ev24_regnum, - sim_ppc_ev25_regnum, - sim_ppc_ev26_regnum, - sim_ppc_ev27_regnum, - sim_ppc_ev28_regnum, - sim_ppc_ev29_regnum, - sim_ppc_ev30_regnum, - sim_ppc_ev31_regnum, - - /* Segment registers, sr0 -- sr15. */ - sim_ppc_sr0_regnum, - sim_ppc_sr1_regnum, - sim_ppc_sr2_regnum, - sim_ppc_sr3_regnum, - sim_ppc_sr4_regnum, - sim_ppc_sr5_regnum, - sim_ppc_sr6_regnum, - sim_ppc_sr7_regnum, - sim_ppc_sr8_regnum, - sim_ppc_sr9_regnum, - sim_ppc_sr10_regnum, - sim_ppc_sr11_regnum, - sim_ppc_sr12_regnum, - sim_ppc_sr13_regnum, - sim_ppc_sr14_regnum, - sim_ppc_sr15_regnum, - - /* Miscellaneous --- but non-SPR --- registers. */ - sim_ppc_pc_regnum, - sim_ppc_ps_regnum, - sim_ppc_cr_regnum, - sim_ppc_fpscr_regnum, - sim_ppc_acc_regnum, - sim_ppc_vscr_regnum, - - /* Special-purpose registers. */ - sim_ppc_spr0_regnum, sim_ppc_spr1_regnum, - sim_ppc_spr2_regnum, sim_ppc_spr3_regnum, - sim_ppc_spr4_regnum, sim_ppc_spr5_regnum, - sim_ppc_spr6_regnum, sim_ppc_spr7_regnum, - sim_ppc_spr8_regnum, sim_ppc_spr9_regnum, - sim_ppc_spr10_regnum, sim_ppc_spr11_regnum, - sim_ppc_spr12_regnum, sim_ppc_spr13_regnum, - sim_ppc_spr14_regnum, sim_ppc_spr15_regnum, - sim_ppc_spr16_regnum, sim_ppc_spr17_regnum, - sim_ppc_spr18_regnum, sim_ppc_spr19_regnum, - sim_ppc_spr20_regnum, sim_ppc_spr21_regnum, - sim_ppc_spr22_regnum, sim_ppc_spr23_regnum, - sim_ppc_spr24_regnum, sim_ppc_spr25_regnum, - sim_ppc_spr26_regnum, sim_ppc_spr27_regnum, - sim_ppc_spr28_regnum, sim_ppc_spr29_regnum, - sim_ppc_spr30_regnum, sim_ppc_spr31_regnum, - sim_ppc_spr32_regnum, sim_ppc_spr33_regnum, - sim_ppc_spr34_regnum, sim_ppc_spr35_regnum, - sim_ppc_spr36_regnum, sim_ppc_spr37_regnum, - sim_ppc_spr38_regnum, sim_ppc_spr39_regnum, - sim_ppc_spr40_regnum, sim_ppc_spr41_regnum, - sim_ppc_spr42_regnum, sim_ppc_spr43_regnum, - sim_ppc_spr44_regnum, sim_ppc_spr45_regnum, - sim_ppc_spr46_regnum, sim_ppc_spr47_regnum, - sim_ppc_spr48_regnum, sim_ppc_spr49_regnum, - sim_ppc_spr50_regnum, sim_ppc_spr51_regnum, - sim_ppc_spr52_regnum, sim_ppc_spr53_regnum, - sim_ppc_spr54_regnum, sim_ppc_spr55_regnum, - sim_ppc_spr56_regnum, sim_ppc_spr57_regnum, - sim_ppc_spr58_regnum, sim_ppc_spr59_regnum, - sim_ppc_spr60_regnum, sim_ppc_spr61_regnum, - sim_ppc_spr62_regnum, sim_ppc_spr63_regnum, - sim_ppc_spr64_regnum, sim_ppc_spr65_regnum, - sim_ppc_spr66_regnum, sim_ppc_spr67_regnum, - sim_ppc_spr68_regnum, sim_ppc_spr69_regnum, - sim_ppc_spr70_regnum, sim_ppc_spr71_regnum, - sim_ppc_spr72_regnum, sim_ppc_spr73_regnum, - sim_ppc_spr74_regnum, sim_ppc_spr75_regnum, - sim_ppc_spr76_regnum, sim_ppc_spr77_regnum, - sim_ppc_spr78_regnum, sim_ppc_spr79_regnum, - sim_ppc_spr80_regnum, sim_ppc_spr81_regnum, - sim_ppc_spr82_regnum, sim_ppc_spr83_regnum, - sim_ppc_spr84_regnum, sim_ppc_spr85_regnum, - sim_ppc_spr86_regnum, sim_ppc_spr87_regnum, - sim_ppc_spr88_regnum, sim_ppc_spr89_regnum, - sim_ppc_spr90_regnum, sim_ppc_spr91_regnum, - sim_ppc_spr92_regnum, sim_ppc_spr93_regnum, - sim_ppc_spr94_regnum, sim_ppc_spr95_regnum, - sim_ppc_spr96_regnum, sim_ppc_spr97_regnum, - sim_ppc_spr98_regnum, sim_ppc_spr99_regnum, - sim_ppc_spr100_regnum, sim_ppc_spr101_regnum, - sim_ppc_spr102_regnum, sim_ppc_spr103_regnum, - sim_ppc_spr104_regnum, sim_ppc_spr105_regnum, - sim_ppc_spr106_regnum, sim_ppc_spr107_regnum, - sim_ppc_spr108_regnum, sim_ppc_spr109_regnum, - sim_ppc_spr110_regnum, sim_ppc_spr111_regnum, - sim_ppc_spr112_regnum, sim_ppc_spr113_regnum, - sim_ppc_spr114_regnum, sim_ppc_spr115_regnum, - sim_ppc_spr116_regnum, sim_ppc_spr117_regnum, - sim_ppc_spr118_regnum, sim_ppc_spr119_regnum, - sim_ppc_spr120_regnum, sim_ppc_spr121_regnum, - sim_ppc_spr122_regnum, sim_ppc_spr123_regnum, - sim_ppc_spr124_regnum, sim_ppc_spr125_regnum, - sim_ppc_spr126_regnum, sim_ppc_spr127_regnum, - sim_ppc_spr128_regnum, sim_ppc_spr129_regnum, - sim_ppc_spr130_regnum, sim_ppc_spr131_regnum, - sim_ppc_spr132_regnum, sim_ppc_spr133_regnum, - sim_ppc_spr134_regnum, sim_ppc_spr135_regnum, - sim_ppc_spr136_regnum, sim_ppc_spr137_regnum, - sim_ppc_spr138_regnum, sim_ppc_spr139_regnum, - sim_ppc_spr140_regnum, sim_ppc_spr141_regnum, - sim_ppc_spr142_regnum, sim_ppc_spr143_regnum, - sim_ppc_spr144_regnum, sim_ppc_spr145_regnum, - sim_ppc_spr146_regnum, sim_ppc_spr147_regnum, - sim_ppc_spr148_regnum, sim_ppc_spr149_regnum, - sim_ppc_spr150_regnum, sim_ppc_spr151_regnum, - sim_ppc_spr152_regnum, sim_ppc_spr153_regnum, - sim_ppc_spr154_regnum, sim_ppc_spr155_regnum, - sim_ppc_spr156_regnum, sim_ppc_spr157_regnum, - sim_ppc_spr158_regnum, sim_ppc_spr159_regnum, - sim_ppc_spr160_regnum, sim_ppc_spr161_regnum, - sim_ppc_spr162_regnum, sim_ppc_spr163_regnum, - sim_ppc_spr164_regnum, sim_ppc_spr165_regnum, - sim_ppc_spr166_regnum, sim_ppc_spr167_regnum, - sim_ppc_spr168_regnum, sim_ppc_spr169_regnum, - sim_ppc_spr170_regnum, sim_ppc_spr171_regnum, - sim_ppc_spr172_regnum, sim_ppc_spr173_regnum, - sim_ppc_spr174_regnum, sim_ppc_spr175_regnum, - sim_ppc_spr176_regnum, sim_ppc_spr177_regnum, - sim_ppc_spr178_regnum, sim_ppc_spr179_regnum, - sim_ppc_spr180_regnum, sim_ppc_spr181_regnum, - sim_ppc_spr182_regnum, sim_ppc_spr183_regnum, - sim_ppc_spr184_regnum, sim_ppc_spr185_regnum, - sim_ppc_spr186_regnum, sim_ppc_spr187_regnum, - sim_ppc_spr188_regnum, sim_ppc_spr189_regnum, - sim_ppc_spr190_regnum, sim_ppc_spr191_regnum, - sim_ppc_spr192_regnum, sim_ppc_spr193_regnum, - sim_ppc_spr194_regnum, sim_ppc_spr195_regnum, - sim_ppc_spr196_regnum, sim_ppc_spr197_regnum, - sim_ppc_spr198_regnum, sim_ppc_spr199_regnum, - sim_ppc_spr200_regnum, sim_ppc_spr201_regnum, - sim_ppc_spr202_regnum, sim_ppc_spr203_regnum, - sim_ppc_spr204_regnum, sim_ppc_spr205_regnum, - sim_ppc_spr206_regnum, sim_ppc_spr207_regnum, - sim_ppc_spr208_regnum, sim_ppc_spr209_regnum, - sim_ppc_spr210_regnum, sim_ppc_spr211_regnum, - sim_ppc_spr212_regnum, sim_ppc_spr213_regnum, - sim_ppc_spr214_regnum, sim_ppc_spr215_regnum, - sim_ppc_spr216_regnum, sim_ppc_spr217_regnum, - sim_ppc_spr218_regnum, sim_ppc_spr219_regnum, - sim_ppc_spr220_regnum, sim_ppc_spr221_regnum, - sim_ppc_spr222_regnum, sim_ppc_spr223_regnum, - sim_ppc_spr224_regnum, sim_ppc_spr225_regnum, - sim_ppc_spr226_regnum, sim_ppc_spr227_regnum, - sim_ppc_spr228_regnum, sim_ppc_spr229_regnum, - sim_ppc_spr230_regnum, sim_ppc_spr231_regnum, - sim_ppc_spr232_regnum, sim_ppc_spr233_regnum, - sim_ppc_spr234_regnum, sim_ppc_spr235_regnum, - sim_ppc_spr236_regnum, sim_ppc_spr237_regnum, - sim_ppc_spr238_regnum, sim_ppc_spr239_regnum, - sim_ppc_spr240_regnum, sim_ppc_spr241_regnum, - sim_ppc_spr242_regnum, sim_ppc_spr243_regnum, - sim_ppc_spr244_regnum, sim_ppc_spr245_regnum, - sim_ppc_spr246_regnum, sim_ppc_spr247_regnum, - sim_ppc_spr248_regnum, sim_ppc_spr249_regnum, - sim_ppc_spr250_regnum, sim_ppc_spr251_regnum, - sim_ppc_spr252_regnum, sim_ppc_spr253_regnum, - sim_ppc_spr254_regnum, sim_ppc_spr255_regnum, - sim_ppc_spr256_regnum, sim_ppc_spr257_regnum, - sim_ppc_spr258_regnum, sim_ppc_spr259_regnum, - sim_ppc_spr260_regnum, sim_ppc_spr261_regnum, - sim_ppc_spr262_regnum, sim_ppc_spr263_regnum, - sim_ppc_spr264_regnum, sim_ppc_spr265_regnum, - sim_ppc_spr266_regnum, sim_ppc_spr267_regnum, - sim_ppc_spr268_regnum, sim_ppc_spr269_regnum, - sim_ppc_spr270_regnum, sim_ppc_spr271_regnum, - sim_ppc_spr272_regnum, sim_ppc_spr273_regnum, - sim_ppc_spr274_regnum, sim_ppc_spr275_regnum, - sim_ppc_spr276_regnum, sim_ppc_spr277_regnum, - sim_ppc_spr278_regnum, sim_ppc_spr279_regnum, - sim_ppc_spr280_regnum, sim_ppc_spr281_regnum, - sim_ppc_spr282_regnum, sim_ppc_spr283_regnum, - sim_ppc_spr284_regnum, sim_ppc_spr285_regnum, - sim_ppc_spr286_regnum, sim_ppc_spr287_regnum, - sim_ppc_spr288_regnum, sim_ppc_spr289_regnum, - sim_ppc_spr290_regnum, sim_ppc_spr291_regnum, - sim_ppc_spr292_regnum, sim_ppc_spr293_regnum, - sim_ppc_spr294_regnum, sim_ppc_spr295_regnum, - sim_ppc_spr296_regnum, sim_ppc_spr297_regnum, - sim_ppc_spr298_regnum, sim_ppc_spr299_regnum, - sim_ppc_spr300_regnum, sim_ppc_spr301_regnum, - sim_ppc_spr302_regnum, sim_ppc_spr303_regnum, - sim_ppc_spr304_regnum, sim_ppc_spr305_regnum, - sim_ppc_spr306_regnum, sim_ppc_spr307_regnum, - sim_ppc_spr308_regnum, sim_ppc_spr309_regnum, - sim_ppc_spr310_regnum, sim_ppc_spr311_regnum, - sim_ppc_spr312_regnum, sim_ppc_spr313_regnum, - sim_ppc_spr314_regnum, sim_ppc_spr315_regnum, - sim_ppc_spr316_regnum, sim_ppc_spr317_regnum, - sim_ppc_spr318_regnum, sim_ppc_spr319_regnum, - sim_ppc_spr320_regnum, sim_ppc_spr321_regnum, - sim_ppc_spr322_regnum, sim_ppc_spr323_regnum, - sim_ppc_spr324_regnum, sim_ppc_spr325_regnum, - sim_ppc_spr326_regnum, sim_ppc_spr327_regnum, - sim_ppc_spr328_regnum, sim_ppc_spr329_regnum, - sim_ppc_spr330_regnum, sim_ppc_spr331_regnum, - sim_ppc_spr332_regnum, sim_ppc_spr333_regnum, - sim_ppc_spr334_regnum, sim_ppc_spr335_regnum, - sim_ppc_spr336_regnum, sim_ppc_spr337_regnum, - sim_ppc_spr338_regnum, sim_ppc_spr339_regnum, - sim_ppc_spr340_regnum, sim_ppc_spr341_regnum, - sim_ppc_spr342_regnum, sim_ppc_spr343_regnum, - sim_ppc_spr344_regnum, sim_ppc_spr345_regnum, - sim_ppc_spr346_regnum, sim_ppc_spr347_regnum, - sim_ppc_spr348_regnum, sim_ppc_spr349_regnum, - sim_ppc_spr350_regnum, sim_ppc_spr351_regnum, - sim_ppc_spr352_regnum, sim_ppc_spr353_regnum, - sim_ppc_spr354_regnum, sim_ppc_spr355_regnum, - sim_ppc_spr356_regnum, sim_ppc_spr357_regnum, - sim_ppc_spr358_regnum, sim_ppc_spr359_regnum, - sim_ppc_spr360_regnum, sim_ppc_spr361_regnum, - sim_ppc_spr362_regnum, sim_ppc_spr363_regnum, - sim_ppc_spr364_regnum, sim_ppc_spr365_regnum, - sim_ppc_spr366_regnum, sim_ppc_spr367_regnum, - sim_ppc_spr368_regnum, sim_ppc_spr369_regnum, - sim_ppc_spr370_regnum, sim_ppc_spr371_regnum, - sim_ppc_spr372_regnum, sim_ppc_spr373_regnum, - sim_ppc_spr374_regnum, sim_ppc_spr375_regnum, - sim_ppc_spr376_regnum, sim_ppc_spr377_regnum, - sim_ppc_spr378_regnum, sim_ppc_spr379_regnum, - sim_ppc_spr380_regnum, sim_ppc_spr381_regnum, - sim_ppc_spr382_regnum, sim_ppc_spr383_regnum, - sim_ppc_spr384_regnum, sim_ppc_spr385_regnum, - sim_ppc_spr386_regnum, sim_ppc_spr387_regnum, - sim_ppc_spr388_regnum, sim_ppc_spr389_regnum, - sim_ppc_spr390_regnum, sim_ppc_spr391_regnum, - sim_ppc_spr392_regnum, sim_ppc_spr393_regnum, - sim_ppc_spr394_regnum, sim_ppc_spr395_regnum, - sim_ppc_spr396_regnum, sim_ppc_spr397_regnum, - sim_ppc_spr398_regnum, sim_ppc_spr399_regnum, - sim_ppc_spr400_regnum, sim_ppc_spr401_regnum, - sim_ppc_spr402_regnum, sim_ppc_spr403_regnum, - sim_ppc_spr404_regnum, sim_ppc_spr405_regnum, - sim_ppc_spr406_regnum, sim_ppc_spr407_regnum, - sim_ppc_spr408_regnum, sim_ppc_spr409_regnum, - sim_ppc_spr410_regnum, sim_ppc_spr411_regnum, - sim_ppc_spr412_regnum, sim_ppc_spr413_regnum, - sim_ppc_spr414_regnum, sim_ppc_spr415_regnum, - sim_ppc_spr416_regnum, sim_ppc_spr417_regnum, - sim_ppc_spr418_regnum, sim_ppc_spr419_regnum, - sim_ppc_spr420_regnum, sim_ppc_spr421_regnum, - sim_ppc_spr422_regnum, sim_ppc_spr423_regnum, - sim_ppc_spr424_regnum, sim_ppc_spr425_regnum, - sim_ppc_spr426_regnum, sim_ppc_spr427_regnum, - sim_ppc_spr428_regnum, sim_ppc_spr429_regnum, - sim_ppc_spr430_regnum, sim_ppc_spr431_regnum, - sim_ppc_spr432_regnum, sim_ppc_spr433_regnum, - sim_ppc_spr434_regnum, sim_ppc_spr435_regnum, - sim_ppc_spr436_regnum, sim_ppc_spr437_regnum, - sim_ppc_spr438_regnum, sim_ppc_spr439_regnum, - sim_ppc_spr440_regnum, sim_ppc_spr441_regnum, - sim_ppc_spr442_regnum, sim_ppc_spr443_regnum, - sim_ppc_spr444_regnum, sim_ppc_spr445_regnum, - sim_ppc_spr446_regnum, sim_ppc_spr447_regnum, - sim_ppc_spr448_regnum, sim_ppc_spr449_regnum, - sim_ppc_spr450_regnum, sim_ppc_spr451_regnum, - sim_ppc_spr452_regnum, sim_ppc_spr453_regnum, - sim_ppc_spr454_regnum, sim_ppc_spr455_regnum, - sim_ppc_spr456_regnum, sim_ppc_spr457_regnum, - sim_ppc_spr458_regnum, sim_ppc_spr459_regnum, - sim_ppc_spr460_regnum, sim_ppc_spr461_regnum, - sim_ppc_spr462_regnum, sim_ppc_spr463_regnum, - sim_ppc_spr464_regnum, sim_ppc_spr465_regnum, - sim_ppc_spr466_regnum, sim_ppc_spr467_regnum, - sim_ppc_spr468_regnum, sim_ppc_spr469_regnum, - sim_ppc_spr470_regnum, sim_ppc_spr471_regnum, - sim_ppc_spr472_regnum, sim_ppc_spr473_regnum, - sim_ppc_spr474_regnum, sim_ppc_spr475_regnum, - sim_ppc_spr476_regnum, sim_ppc_spr477_regnum, - sim_ppc_spr478_regnum, sim_ppc_spr479_regnum, - sim_ppc_spr480_regnum, sim_ppc_spr481_regnum, - sim_ppc_spr482_regnum, sim_ppc_spr483_regnum, - sim_ppc_spr484_regnum, sim_ppc_spr485_regnum, - sim_ppc_spr486_regnum, sim_ppc_spr487_regnum, - sim_ppc_spr488_regnum, sim_ppc_spr489_regnum, - sim_ppc_spr490_regnum, sim_ppc_spr491_regnum, - sim_ppc_spr492_regnum, sim_ppc_spr493_regnum, - sim_ppc_spr494_regnum, sim_ppc_spr495_regnum, - sim_ppc_spr496_regnum, sim_ppc_spr497_regnum, - sim_ppc_spr498_regnum, sim_ppc_spr499_regnum, - sim_ppc_spr500_regnum, sim_ppc_spr501_regnum, - sim_ppc_spr502_regnum, sim_ppc_spr503_regnum, - sim_ppc_spr504_regnum, sim_ppc_spr505_regnum, - sim_ppc_spr506_regnum, sim_ppc_spr507_regnum, - sim_ppc_spr508_regnum, sim_ppc_spr509_regnum, - sim_ppc_spr510_regnum, sim_ppc_spr511_regnum, - sim_ppc_spr512_regnum, sim_ppc_spr513_regnum, - sim_ppc_spr514_regnum, sim_ppc_spr515_regnum, - sim_ppc_spr516_regnum, sim_ppc_spr517_regnum, - sim_ppc_spr518_regnum, sim_ppc_spr519_regnum, - sim_ppc_spr520_regnum, sim_ppc_spr521_regnum, - sim_ppc_spr522_regnum, sim_ppc_spr523_regnum, - sim_ppc_spr524_regnum, sim_ppc_spr525_regnum, - sim_ppc_spr526_regnum, sim_ppc_spr527_regnum, - sim_ppc_spr528_regnum, sim_ppc_spr529_regnum, - sim_ppc_spr530_regnum, sim_ppc_spr531_regnum, - sim_ppc_spr532_regnum, sim_ppc_spr533_regnum, - sim_ppc_spr534_regnum, sim_ppc_spr535_regnum, - sim_ppc_spr536_regnum, sim_ppc_spr537_regnum, - sim_ppc_spr538_regnum, sim_ppc_spr539_regnum, - sim_ppc_spr540_regnum, sim_ppc_spr541_regnum, - sim_ppc_spr542_regnum, sim_ppc_spr543_regnum, - sim_ppc_spr544_regnum, sim_ppc_spr545_regnum, - sim_ppc_spr546_regnum, sim_ppc_spr547_regnum, - sim_ppc_spr548_regnum, sim_ppc_spr549_regnum, - sim_ppc_spr550_regnum, sim_ppc_spr551_regnum, - sim_ppc_spr552_regnum, sim_ppc_spr553_regnum, - sim_ppc_spr554_regnum, sim_ppc_spr555_regnum, - sim_ppc_spr556_regnum, sim_ppc_spr557_regnum, - sim_ppc_spr558_regnum, sim_ppc_spr559_regnum, - sim_ppc_spr560_regnum, sim_ppc_spr561_regnum, - sim_ppc_spr562_regnum, sim_ppc_spr563_regnum, - sim_ppc_spr564_regnum, sim_ppc_spr565_regnum, - sim_ppc_spr566_regnum, sim_ppc_spr567_regnum, - sim_ppc_spr568_regnum, sim_ppc_spr569_regnum, - sim_ppc_spr570_regnum, sim_ppc_spr571_regnum, - sim_ppc_spr572_regnum, sim_ppc_spr573_regnum, - sim_ppc_spr574_regnum, sim_ppc_spr575_regnum, - sim_ppc_spr576_regnum, sim_ppc_spr577_regnum, - sim_ppc_spr578_regnum, sim_ppc_spr579_regnum, - sim_ppc_spr580_regnum, sim_ppc_spr581_regnum, - sim_ppc_spr582_regnum, sim_ppc_spr583_regnum, - sim_ppc_spr584_regnum, sim_ppc_spr585_regnum, - sim_ppc_spr586_regnum, sim_ppc_spr587_regnum, - sim_ppc_spr588_regnum, sim_ppc_spr589_regnum, - sim_ppc_spr590_regnum, sim_ppc_spr591_regnum, - sim_ppc_spr592_regnum, sim_ppc_spr593_regnum, - sim_ppc_spr594_regnum, sim_ppc_spr595_regnum, - sim_ppc_spr596_regnum, sim_ppc_spr597_regnum, - sim_ppc_spr598_regnum, sim_ppc_spr599_regnum, - sim_ppc_spr600_regnum, sim_ppc_spr601_regnum, - sim_ppc_spr602_regnum, sim_ppc_spr603_regnum, - sim_ppc_spr604_regnum, sim_ppc_spr605_regnum, - sim_ppc_spr606_regnum, sim_ppc_spr607_regnum, - sim_ppc_spr608_regnum, sim_ppc_spr609_regnum, - sim_ppc_spr610_regnum, sim_ppc_spr611_regnum, - sim_ppc_spr612_regnum, sim_ppc_spr613_regnum, - sim_ppc_spr614_regnum, sim_ppc_spr615_regnum, - sim_ppc_spr616_regnum, sim_ppc_spr617_regnum, - sim_ppc_spr618_regnum, sim_ppc_spr619_regnum, - sim_ppc_spr620_regnum, sim_ppc_spr621_regnum, - sim_ppc_spr622_regnum, sim_ppc_spr623_regnum, - sim_ppc_spr624_regnum, sim_ppc_spr625_regnum, - sim_ppc_spr626_regnum, sim_ppc_spr627_regnum, - sim_ppc_spr628_regnum, sim_ppc_spr629_regnum, - sim_ppc_spr630_regnum, sim_ppc_spr631_regnum, - sim_ppc_spr632_regnum, sim_ppc_spr633_regnum, - sim_ppc_spr634_regnum, sim_ppc_spr635_regnum, - sim_ppc_spr636_regnum, sim_ppc_spr637_regnum, - sim_ppc_spr638_regnum, sim_ppc_spr639_regnum, - sim_ppc_spr640_regnum, sim_ppc_spr641_regnum, - sim_ppc_spr642_regnum, sim_ppc_spr643_regnum, - sim_ppc_spr644_regnum, sim_ppc_spr645_regnum, - sim_ppc_spr646_regnum, sim_ppc_spr647_regnum, - sim_ppc_spr648_regnum, sim_ppc_spr649_regnum, - sim_ppc_spr650_regnum, sim_ppc_spr651_regnum, - sim_ppc_spr652_regnum, sim_ppc_spr653_regnum, - sim_ppc_spr654_regnum, sim_ppc_spr655_regnum, - sim_ppc_spr656_regnum, sim_ppc_spr657_regnum, - sim_ppc_spr658_regnum, sim_ppc_spr659_regnum, - sim_ppc_spr660_regnum, sim_ppc_spr661_regnum, - sim_ppc_spr662_regnum, sim_ppc_spr663_regnum, - sim_ppc_spr664_regnum, sim_ppc_spr665_regnum, - sim_ppc_spr666_regnum, sim_ppc_spr667_regnum, - sim_ppc_spr668_regnum, sim_ppc_spr669_regnum, - sim_ppc_spr670_regnum, sim_ppc_spr671_regnum, - sim_ppc_spr672_regnum, sim_ppc_spr673_regnum, - sim_ppc_spr674_regnum, sim_ppc_spr675_regnum, - sim_ppc_spr676_regnum, sim_ppc_spr677_regnum, - sim_ppc_spr678_regnum, sim_ppc_spr679_regnum, - sim_ppc_spr680_regnum, sim_ppc_spr681_regnum, - sim_ppc_spr682_regnum, sim_ppc_spr683_regnum, - sim_ppc_spr684_regnum, sim_ppc_spr685_regnum, - sim_ppc_spr686_regnum, sim_ppc_spr687_regnum, - sim_ppc_spr688_regnum, sim_ppc_spr689_regnum, - sim_ppc_spr690_regnum, sim_ppc_spr691_regnum, - sim_ppc_spr692_regnum, sim_ppc_spr693_regnum, - sim_ppc_spr694_regnum, sim_ppc_spr695_regnum, - sim_ppc_spr696_regnum, sim_ppc_spr697_regnum, - sim_ppc_spr698_regnum, sim_ppc_spr699_regnum, - sim_ppc_spr700_regnum, sim_ppc_spr701_regnum, - sim_ppc_spr702_regnum, sim_ppc_spr703_regnum, - sim_ppc_spr704_regnum, sim_ppc_spr705_regnum, - sim_ppc_spr706_regnum, sim_ppc_spr707_regnum, - sim_ppc_spr708_regnum, sim_ppc_spr709_regnum, - sim_ppc_spr710_regnum, sim_ppc_spr711_regnum, - sim_ppc_spr712_regnum, sim_ppc_spr713_regnum, - sim_ppc_spr714_regnum, sim_ppc_spr715_regnum, - sim_ppc_spr716_regnum, sim_ppc_spr717_regnum, - sim_ppc_spr718_regnum, sim_ppc_spr719_regnum, - sim_ppc_spr720_regnum, sim_ppc_spr721_regnum, - sim_ppc_spr722_regnum, sim_ppc_spr723_regnum, - sim_ppc_spr724_regnum, sim_ppc_spr725_regnum, - sim_ppc_spr726_regnum, sim_ppc_spr727_regnum, - sim_ppc_spr728_regnum, sim_ppc_spr729_regnum, - sim_ppc_spr730_regnum, sim_ppc_spr731_regnum, - sim_ppc_spr732_regnum, sim_ppc_spr733_regnum, - sim_ppc_spr734_regnum, sim_ppc_spr735_regnum, - sim_ppc_spr736_regnum, sim_ppc_spr737_regnum, - sim_ppc_spr738_regnum, sim_ppc_spr739_regnum, - sim_ppc_spr740_regnum, sim_ppc_spr741_regnum, - sim_ppc_spr742_regnum, sim_ppc_spr743_regnum, - sim_ppc_spr744_regnum, sim_ppc_spr745_regnum, - sim_ppc_spr746_regnum, sim_ppc_spr747_regnum, - sim_ppc_spr748_regnum, sim_ppc_spr749_regnum, - sim_ppc_spr750_regnum, sim_ppc_spr751_regnum, - sim_ppc_spr752_regnum, sim_ppc_spr753_regnum, - sim_ppc_spr754_regnum, sim_ppc_spr755_regnum, - sim_ppc_spr756_regnum, sim_ppc_spr757_regnum, - sim_ppc_spr758_regnum, sim_ppc_spr759_regnum, - sim_ppc_spr760_regnum, sim_ppc_spr761_regnum, - sim_ppc_spr762_regnum, sim_ppc_spr763_regnum, - sim_ppc_spr764_regnum, sim_ppc_spr765_regnum, - sim_ppc_spr766_regnum, sim_ppc_spr767_regnum, - sim_ppc_spr768_regnum, sim_ppc_spr769_regnum, - sim_ppc_spr770_regnum, sim_ppc_spr771_regnum, - sim_ppc_spr772_regnum, sim_ppc_spr773_regnum, - sim_ppc_spr774_regnum, sim_ppc_spr775_regnum, - sim_ppc_spr776_regnum, sim_ppc_spr777_regnum, - sim_ppc_spr778_regnum, sim_ppc_spr779_regnum, - sim_ppc_spr780_regnum, sim_ppc_spr781_regnum, - sim_ppc_spr782_regnum, sim_ppc_spr783_regnum, - sim_ppc_spr784_regnum, sim_ppc_spr785_regnum, - sim_ppc_spr786_regnum, sim_ppc_spr787_regnum, - sim_ppc_spr788_regnum, sim_ppc_spr789_regnum, - sim_ppc_spr790_regnum, sim_ppc_spr791_regnum, - sim_ppc_spr792_regnum, sim_ppc_spr793_regnum, - sim_ppc_spr794_regnum, sim_ppc_spr795_regnum, - sim_ppc_spr796_regnum, sim_ppc_spr797_regnum, - sim_ppc_spr798_regnum, sim_ppc_spr799_regnum, - sim_ppc_spr800_regnum, sim_ppc_spr801_regnum, - sim_ppc_spr802_regnum, sim_ppc_spr803_regnum, - sim_ppc_spr804_regnum, sim_ppc_spr805_regnum, - sim_ppc_spr806_regnum, sim_ppc_spr807_regnum, - sim_ppc_spr808_regnum, sim_ppc_spr809_regnum, - sim_ppc_spr810_regnum, sim_ppc_spr811_regnum, - sim_ppc_spr812_regnum, sim_ppc_spr813_regnum, - sim_ppc_spr814_regnum, sim_ppc_spr815_regnum, - sim_ppc_spr816_regnum, sim_ppc_spr817_regnum, - sim_ppc_spr818_regnum, sim_ppc_spr819_regnum, - sim_ppc_spr820_regnum, sim_ppc_spr821_regnum, - sim_ppc_spr822_regnum, sim_ppc_spr823_regnum, - sim_ppc_spr824_regnum, sim_ppc_spr825_regnum, - sim_ppc_spr826_regnum, sim_ppc_spr827_regnum, - sim_ppc_spr828_regnum, sim_ppc_spr829_regnum, - sim_ppc_spr830_regnum, sim_ppc_spr831_regnum, - sim_ppc_spr832_regnum, sim_ppc_spr833_regnum, - sim_ppc_spr834_regnum, sim_ppc_spr835_regnum, - sim_ppc_spr836_regnum, sim_ppc_spr837_regnum, - sim_ppc_spr838_regnum, sim_ppc_spr839_regnum, - sim_ppc_spr840_regnum, sim_ppc_spr841_regnum, - sim_ppc_spr842_regnum, sim_ppc_spr843_regnum, - sim_ppc_spr844_regnum, sim_ppc_spr845_regnum, - sim_ppc_spr846_regnum, sim_ppc_spr847_regnum, - sim_ppc_spr848_regnum, sim_ppc_spr849_regnum, - sim_ppc_spr850_regnum, sim_ppc_spr851_regnum, - sim_ppc_spr852_regnum, sim_ppc_spr853_regnum, - sim_ppc_spr854_regnum, sim_ppc_spr855_regnum, - sim_ppc_spr856_regnum, sim_ppc_spr857_regnum, - sim_ppc_spr858_regnum, sim_ppc_spr859_regnum, - sim_ppc_spr860_regnum, sim_ppc_spr861_regnum, - sim_ppc_spr862_regnum, sim_ppc_spr863_regnum, - sim_ppc_spr864_regnum, sim_ppc_spr865_regnum, - sim_ppc_spr866_regnum, sim_ppc_spr867_regnum, - sim_ppc_spr868_regnum, sim_ppc_spr869_regnum, - sim_ppc_spr870_regnum, sim_ppc_spr871_regnum, - sim_ppc_spr872_regnum, sim_ppc_spr873_regnum, - sim_ppc_spr874_regnum, sim_ppc_spr875_regnum, - sim_ppc_spr876_regnum, sim_ppc_spr877_regnum, - sim_ppc_spr878_regnum, sim_ppc_spr879_regnum, - sim_ppc_spr880_regnum, sim_ppc_spr881_regnum, - sim_ppc_spr882_regnum, sim_ppc_spr883_regnum, - sim_ppc_spr884_regnum, sim_ppc_spr885_regnum, - sim_ppc_spr886_regnum, sim_ppc_spr887_regnum, - sim_ppc_spr888_regnum, sim_ppc_spr889_regnum, - sim_ppc_spr890_regnum, sim_ppc_spr891_regnum, - sim_ppc_spr892_regnum, sim_ppc_spr893_regnum, - sim_ppc_spr894_regnum, sim_ppc_spr895_regnum, - sim_ppc_spr896_regnum, sim_ppc_spr897_regnum, - sim_ppc_spr898_regnum, sim_ppc_spr899_regnum, - sim_ppc_spr900_regnum, sim_ppc_spr901_regnum, - sim_ppc_spr902_regnum, sim_ppc_spr903_regnum, - sim_ppc_spr904_regnum, sim_ppc_spr905_regnum, - sim_ppc_spr906_regnum, sim_ppc_spr907_regnum, - sim_ppc_spr908_regnum, sim_ppc_spr909_regnum, - sim_ppc_spr910_regnum, sim_ppc_spr911_regnum, - sim_ppc_spr912_regnum, sim_ppc_spr913_regnum, - sim_ppc_spr914_regnum, sim_ppc_spr915_regnum, - sim_ppc_spr916_regnum, sim_ppc_spr917_regnum, - sim_ppc_spr918_regnum, sim_ppc_spr919_regnum, - sim_ppc_spr920_regnum, sim_ppc_spr921_regnum, - sim_ppc_spr922_regnum, sim_ppc_spr923_regnum, - sim_ppc_spr924_regnum, sim_ppc_spr925_regnum, - sim_ppc_spr926_regnum, sim_ppc_spr927_regnum, - sim_ppc_spr928_regnum, sim_ppc_spr929_regnum, - sim_ppc_spr930_regnum, sim_ppc_spr931_regnum, - sim_ppc_spr932_regnum, sim_ppc_spr933_regnum, - sim_ppc_spr934_regnum, sim_ppc_spr935_regnum, - sim_ppc_spr936_regnum, sim_ppc_spr937_regnum, - sim_ppc_spr938_regnum, sim_ppc_spr939_regnum, - sim_ppc_spr940_regnum, sim_ppc_spr941_regnum, - sim_ppc_spr942_regnum, sim_ppc_spr943_regnum, - sim_ppc_spr944_regnum, sim_ppc_spr945_regnum, - sim_ppc_spr946_regnum, sim_ppc_spr947_regnum, - sim_ppc_spr948_regnum, sim_ppc_spr949_regnum, - sim_ppc_spr950_regnum, sim_ppc_spr951_regnum, - sim_ppc_spr952_regnum, sim_ppc_spr953_regnum, - sim_ppc_spr954_regnum, sim_ppc_spr955_regnum, - sim_ppc_spr956_regnum, sim_ppc_spr957_regnum, - sim_ppc_spr958_regnum, sim_ppc_spr959_regnum, - sim_ppc_spr960_regnum, sim_ppc_spr961_regnum, - sim_ppc_spr962_regnum, sim_ppc_spr963_regnum, - sim_ppc_spr964_regnum, sim_ppc_spr965_regnum, - sim_ppc_spr966_regnum, sim_ppc_spr967_regnum, - sim_ppc_spr968_regnum, sim_ppc_spr969_regnum, - sim_ppc_spr970_regnum, sim_ppc_spr971_regnum, - sim_ppc_spr972_regnum, sim_ppc_spr973_regnum, - sim_ppc_spr974_regnum, sim_ppc_spr975_regnum, - sim_ppc_spr976_regnum, sim_ppc_spr977_regnum, - sim_ppc_spr978_regnum, sim_ppc_spr979_regnum, - sim_ppc_spr980_regnum, sim_ppc_spr981_regnum, - sim_ppc_spr982_regnum, sim_ppc_spr983_regnum, - sim_ppc_spr984_regnum, sim_ppc_spr985_regnum, - sim_ppc_spr986_regnum, sim_ppc_spr987_regnum, - sim_ppc_spr988_regnum, sim_ppc_spr989_regnum, - sim_ppc_spr990_regnum, sim_ppc_spr991_regnum, - sim_ppc_spr992_regnum, sim_ppc_spr993_regnum, - sim_ppc_spr994_regnum, sim_ppc_spr995_regnum, - sim_ppc_spr996_regnum, sim_ppc_spr997_regnum, - sim_ppc_spr998_regnum, sim_ppc_spr999_regnum, - sim_ppc_spr1000_regnum, sim_ppc_spr1001_regnum, - sim_ppc_spr1002_regnum, sim_ppc_spr1003_regnum, - sim_ppc_spr1004_regnum, sim_ppc_spr1005_regnum, - sim_ppc_spr1006_regnum, sim_ppc_spr1007_regnum, - sim_ppc_spr1008_regnum, sim_ppc_spr1009_regnum, - sim_ppc_spr1010_regnum, sim_ppc_spr1011_regnum, - sim_ppc_spr1012_regnum, sim_ppc_spr1013_regnum, - sim_ppc_spr1014_regnum, sim_ppc_spr1015_regnum, - sim_ppc_spr1016_regnum, sim_ppc_spr1017_regnum, - sim_ppc_spr1018_regnum, sim_ppc_spr1019_regnum, - sim_ppc_spr1020_regnum, sim_ppc_spr1021_regnum, - sim_ppc_spr1022_regnum, sim_ppc_spr1023_regnum - }; - - -/* Sizes of various register sets. */ -enum - { - sim_ppc_num_gprs = 32, - sim_ppc_num_fprs = 32, - sim_ppc_num_vrs = 32, - sim_ppc_num_srs = 16, - sim_ppc_num_sprs = 1024, - }; - - -#ifdef __cplusplus -} -#endif - -#endif /* SIM_PPC_H */ diff --git a/include/gdb/sim-sh.h b/include/gdb/sim-sh.h deleted file mode 100644 index a40eff6311c..00000000000 --- a/include/gdb/sim-sh.h +++ /dev/null @@ -1,170 +0,0 @@ -/* This file defines the interface between the sh simulator and gdb. - Copyright (C) 2000, 2002, 2004 Free Software Foundation, Inc. - -This file is part of GDB. - -This program 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. */ - -#if !defined (SIM_SH_H) -#define SIM_SH_H - -#ifdef __cplusplus -extern "C" { // } -#endif - -/* The simulator makes use of the following register information. */ - -enum -{ - SIM_SH_R0_REGNUM = 0, - SIM_SH_R1_REGNUM, - SIM_SH_R2_REGNUM, - SIM_SH_R3_REGNUM, - SIM_SH_R4_REGNUM, - SIM_SH_R5_REGNUM, - SIM_SH_R6_REGNUM, - SIM_SH_R7_REGNUM, - SIM_SH_R8_REGNUM, - SIM_SH_R9_REGNUM, - SIM_SH_R10_REGNUM, - SIM_SH_R11_REGNUM, - SIM_SH_R12_REGNUM, - SIM_SH_R13_REGNUM, - SIM_SH_R14_REGNUM, - SIM_SH_R15_REGNUM, - SIM_SH_PC_REGNUM, - SIM_SH_PR_REGNUM, - SIM_SH_GBR_REGNUM, - SIM_SH_VBR_REGNUM, - SIM_SH_MACH_REGNUM, - SIM_SH_MACL_REGNUM, - SIM_SH_SR_REGNUM, - SIM_SH_FPUL_REGNUM, - SIM_SH_FPSCR_REGNUM, - SIM_SH_FR0_REGNUM, /* FRn registers: sh3e / sh4 */ - SIM_SH_FR1_REGNUM, - SIM_SH_FR2_REGNUM, - SIM_SH_FR3_REGNUM, - SIM_SH_FR4_REGNUM, - SIM_SH_FR5_REGNUM, - SIM_SH_FR6_REGNUM, - SIM_SH_FR7_REGNUM, - SIM_SH_FR8_REGNUM, - SIM_SH_FR9_REGNUM, - SIM_SH_FR10_REGNUM, - SIM_SH_FR11_REGNUM, - SIM_SH_FR12_REGNUM, - SIM_SH_FR13_REGNUM, - SIM_SH_FR14_REGNUM, - SIM_SH_FR15_REGNUM, - SIM_SH_SSR_REGNUM, /* sh3{,e,-dsp}, sh4 */ - SIM_SH_SPC_REGNUM, /* sh3{,e,-dsp}, sh4 */ - SIM_SH_R0_BANK0_REGNUM, /* SIM_SH_Rn_BANKm_REGNUM: sh3[e] / sh4 */ - SIM_SH_R1_BANK0_REGNUM, - SIM_SH_R2_BANK0_REGNUM, - SIM_SH_R3_BANK0_REGNUM, - SIM_SH_R4_BANK0_REGNUM, - SIM_SH_R5_BANK0_REGNUM, - SIM_SH_R6_BANK0_REGNUM, - SIM_SH_R7_BANK0_REGNUM, - SIM_SH_R0_BANK1_REGNUM, - SIM_SH_R1_BANK1_REGNUM, - SIM_SH_R2_BANK1_REGNUM, - SIM_SH_R3_BANK1_REGNUM, - SIM_SH_R4_BANK1_REGNUM, - SIM_SH_R5_BANK1_REGNUM, - SIM_SH_R6_BANK1_REGNUM, - SIM_SH_R7_BANK1_REGNUM, - SIM_SH_XF0_REGNUM, - SIM_SH_XF1_REGNUM, - SIM_SH_XF2_REGNUM, - SIM_SH_XF3_REGNUM, - SIM_SH_XF4_REGNUM, - SIM_SH_XF5_REGNUM, - SIM_SH_XF6_REGNUM, - SIM_SH_XF7_REGNUM, - SIM_SH_XF8_REGNUM, - SIM_SH_XF9_REGNUM, - SIM_SH_XF10_REGNUM, - SIM_SH_XF11_REGNUM, - SIM_SH_XF12_REGNUM, - SIM_SH_XF13_REGNUM, - SIM_SH_XF14_REGNUM, - SIM_SH_XF15_REGNUM, - SIM_SH_SGR_REGNUM, - SIM_SH_DBR_REGNUM, - SIM_SH4_NUM_REGS, /* 77 */ - - /* sh[3]-dsp */ - SIM_SH_DSR_REGNUM, - SIM_SH_A0G_REGNUM, - SIM_SH_A0_REGNUM, - SIM_SH_A1G_REGNUM, - SIM_SH_A1_REGNUM, - SIM_SH_M0_REGNUM, - SIM_SH_M1_REGNUM, - SIM_SH_X0_REGNUM, - SIM_SH_X1_REGNUM, - SIM_SH_Y0_REGNUM, - SIM_SH_Y1_REGNUM, - SIM_SH_MOD_REGNUM, - SIM_SH_RS_REGNUM, - SIM_SH_RE_REGNUM, - SIM_SH_R0_BANK_REGNUM, - SIM_SH_R1_BANK_REGNUM, - SIM_SH_R2_BANK_REGNUM, - SIM_SH_R3_BANK_REGNUM, - SIM_SH_R4_BANK_REGNUM, - SIM_SH_R5_BANK_REGNUM, - SIM_SH_R6_BANK_REGNUM, - SIM_SH_R7_BANK_REGNUM, - /* 109..127: room for expansion. */ - SIM_SH_TBR_REGNUM, - SIM_SH_IBNR_REGNUM, - SIM_SH_IBCR_REGNUM, - SIM_SH_BANK_REGNUM, - SIM_SH_BANK_MACL_REGNUM, - SIM_SH_BANK_GBR_REGNUM, - SIM_SH_BANK_PR_REGNUM, - SIM_SH_BANK_IVN_REGNUM, - SIM_SH_BANK_MACH_REGNUM -}; - -enum -{ - SIM_SH64_R0_REGNUM = 0, - SIM_SH64_SP_REGNUM = 15, - SIM_SH64_PC_REGNUM = 64, - SIM_SH64_SR_REGNUM = 65, - SIM_SH64_SSR_REGNUM = 66, - SIM_SH64_SPC_REGNUM = 67, - SIM_SH64_TR0_REGNUM = 68, - SIM_SH64_FPCSR_REGNUM = 76, - SIM_SH64_FR0_REGNUM = 77 -}; - -enum -{ - SIM_SH64_NR_REGS = 141, /* total number of architectural registers */ - SIM_SH64_NR_R_REGS = 64, /* number of general registers */ - SIM_SH64_NR_TR_REGS = 8, /* number of target registers */ - SIM_SH64_NR_FP_REGS = 64 /* number of floating point registers */ -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/include/gdbm.h b/include/gdbm.h deleted file mode 100644 index d2a60063934..00000000000 --- a/include/gdbm.h +++ /dev/null @@ -1,91 +0,0 @@ -/* GNU DBM - DataBase Manager include file - Copyright 1989, 1991 Free Software Foundation, Inc. - Written by Philip A. Nelson. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* You may contact the author by: - e-mail: phil@wwu.edu - us-mail: Philip A. Nelson - Computer Science Department - Western Washington University - Bellingham, WA 98226 - phone: (206) 676-3035 - -*************************************************************************/ - -/* Parameters to gdbm_open for READERS, WRITERS, and WRITERS who - can create the database. */ -#define GDBM_READER 0 -#define GDBM_WRITER 1 -#define GDBM_WRCREAT 2 -#define GDBM_NEWDB 3 - -/* Parameters to gdbm_store for simple insertion or replacement. */ -#define GDBM_INSERT 0 -#define GDBM_REPLACE 1 - - -/* The data and key structure. This structure is defined for compatibility. */ -typedef struct { - char *dptr; - int dsize; - } datum; - - -/* The file information header. This is good enough for most applications. */ -typedef struct {int dummy[10];} *GDBM_FILE; - - -/* These are the routines! */ - -extern GDBM_FILE gdbm_open (); - -extern void gdbm_close (); - -extern datum gdbm_fetch (); - -extern int gdbm_store (); - -extern int gdbm_delete (); - -extern datum gdbm_firstkey (); - -extern datum gdbm_nextkey (); - -extern int gdbm_reorganize (); - - -/* gdbm sends back the following error codes in the variable gdbm_errno. */ -typedef enum { NO_ERROR, - MALLOC_ERROR, - BLOCK_SIZE_ERROR, - FILE_OPEN_ERROR, - FILE_WRITE_ERROR, - FILE_SEEK_ERROR, - FILE_READ_ERROR, - BAD_MAGIC_NUMBER, - EMPTY_DATABASE, - CANT_BE_READER, - CANT_BE_WRITER, - READER_CANT_RECOVER, - READER_CANT_DELETE, - READER_CANT_STORE, - READER_CANT_REORGANIZE, - UNKNOWN_UPDATE, - ITEM_NOT_FOUND, - REORGANIZE_FAILED, - CANNOT_REPLACE} - gdbm_error; diff --git a/include/getopt.h b/include/getopt.h deleted file mode 100644 index 5421cabed82..00000000000 --- a/include/getopt.h +++ /dev/null @@ -1,144 +0,0 @@ -/* Declarations for getopt. - Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000, - 2002 Free Software Foundation, Inc. - - NOTE: The canonical source of this file is maintained with the GNU C Library. - Bugs can be reported to bug-glibc@gnu.org. - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, - USA. */ - -#ifndef _GETOPT_H -#define _GETOPT_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -extern char *optarg; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns -1, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -extern int optind; - -/* Callers store zero here to inhibit the error message `getopt' prints - for unrecognized options. */ - -extern int opterr; - -/* Set to an option character which was unrecognized. */ - -extern int optopt; - -/* Describe the long-named options requested by the application. - The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector - of `struct option' terminated by an element containing a name which is - zero. - - The field `has_arg' is: - no_argument (or 0) if the option does not take an argument, - required_argument (or 1) if the option requires an argument, - optional_argument (or 2) if the option takes an optional argument. - - If the field `flag' is not NULL, it points to a variable that is set - to the value given in the field `val' when the option is found, but - left unchanged if the option is not found. - - To have a long-named option do something other than set an `int' to - a compiled-in constant, such as set a value from `optarg', set the - option's `flag' field to zero and its `val' field to a nonzero - value (the equivalent single-letter option character, if there is - one). For long options that have a zero `flag' field, `getopt' - returns the contents of the `val' field. */ - -struct option -{ -#if defined (__STDC__) && __STDC__ - const char *name; -#else - char *name; -#endif - /* has_arg can't be an enum because some compilers complain about - type mismatches in all the code that assumes it is an int. */ - int has_arg; - int *flag; - int val; -}; - -/* Names for the values of the `has_arg' field of `struct option'. */ - -#define no_argument 0 -#define required_argument 1 -#define optional_argument 2 - -#if defined (__STDC__) && __STDC__ -/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is - undefined, we haven't run the autoconf check so provide the - declaration without arguments. If it is 0, we checked and failed - to find the declaration so provide a fully prototyped one. If it - is 1, we found it so don't provide any declaration at all. */ -#if !HAVE_DECL_GETOPT -#if defined (__GNU_LIBRARY__) || defined (HAVE_DECL_GETOPT) -/* Many other libraries have conflicting prototypes for getopt, with - differences in the consts, in unistd.h. To avoid compilation - errors, only prototype getopt for the GNU C library. */ -extern int getopt (int argc, char *const *argv, const char *shortopts); -#else -#ifndef __cplusplus -extern int getopt (); -#endif /* __cplusplus */ -#endif -#endif /* !HAVE_DECL_GETOPT */ - -extern int getopt_long (int argc, char *const *argv, const char *shortopts, - const struct option *longopts, int *longind); -extern int getopt_long_only (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind); - -/* Internal only. Users should not call this directly. */ -extern int _getopt_internal (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind, - int long_only); -#else /* not __STDC__ */ -extern int getopt (); -extern int getopt_long (); -extern int getopt_long_only (); - -extern int _getopt_internal (); -#endif /* __STDC__ */ - -#ifdef __cplusplus -} -#endif - -#endif /* getopt.h */ diff --git a/include/hashtab.h b/include/hashtab.h deleted file mode 100644 index 77eee14e94f..00000000000 --- a/include/hashtab.h +++ /dev/null @@ -1,206 +0,0 @@ -/* An expandable hash tables datatype. - Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc. - Contributed by Vladimir Makarov (vmakarov@cygnus.com). - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This package implements basic hash table functionality. It is possible - to search for an entry, create an entry and destroy an entry. - - Elements in the table are generic pointers. - - The size of the table is not fixed; if the occupancy of the table - grows too high the hash table will be expanded. - - The abstract data implementation is based on generalized Algorithm D - from Knuth's book "The art of computer programming". Hash table is - expanded by creation of new hash table and transferring elements from - the old table to the new table. */ - -#ifndef __HASHTAB_H__ -#define __HASHTAB_H__ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#include "ansidecl.h" - -#ifndef GTY -#define GTY(X) -#endif - -/* The type for a hash code. */ -typedef unsigned int hashval_t; - -/* Callback function pointer types. */ - -/* Calculate hash of a table entry. */ -typedef hashval_t (*htab_hash) (const void *); - -/* Compare a table entry with a possible entry. The entry already in - the table always comes first, so the second element can be of a - different type (but in this case htab_find and htab_find_slot - cannot be used; instead the variants that accept a hash value - must be used). */ -typedef int (*htab_eq) (const void *, const void *); - -/* Cleanup function called whenever a live element is removed from - the hash table. */ -typedef void (*htab_del) (void *); - -/* Function called by htab_traverse for each live element. The first - arg is the slot of the element (which can be passed to htab_clear_slot - if desired), the second arg is the auxiliary pointer handed to - htab_traverse. Return 1 to continue scan, 0 to stop. */ -typedef int (*htab_trav) (void **, void *); - -/* Memory-allocation function, with the same functionality as calloc(). - Iff it returns NULL, the hash table implementation will pass an error - code back to the user, so if your code doesn't handle errors, - best if you use xcalloc instead. */ -typedef void *(*htab_alloc) (size_t, size_t); - -/* We also need a free() routine. */ -typedef void (*htab_free) (void *); - -/* Memory allocation and deallocation; variants which take an extra - argument. */ -typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t); -typedef void (*htab_free_with_arg) (void *, void *); - -/* This macro defines reserved value for empty table entry. */ - -#define HTAB_EMPTY_ENTRY ((PTR) 0) - -/* This macro defines reserved value for table entry which contained - a deleted element. */ - -#define HTAB_DELETED_ENTRY ((PTR) 1) - -/* Hash tables are of the following type. The structure - (implementation) of this type is not needed for using the hash - tables. All work with hash table should be executed only through - functions mentioned below. The size of this structure is subject to - change. */ - -struct htab GTY(()) -{ - /* Pointer to hash function. */ - htab_hash hash_f; - - /* Pointer to comparison function. */ - htab_eq eq_f; - - /* Pointer to cleanup function. */ - htab_del del_f; - - /* Table itself. */ - void ** GTY ((use_param, length ("%h.size"))) entries; - - /* Current size (in entries) of the hash table. */ - size_t size; - - /* Current number of elements including also deleted elements. */ - size_t n_elements; - - /* Current number of deleted elements in the table. */ - size_t n_deleted; - - /* The following member is used for debugging. Its value is number - of all calls of `htab_find_slot' for the hash table. */ - unsigned int searches; - - /* The following member is used for debugging. Its value is number - of collisions fixed for time of work with the hash table. */ - unsigned int collisions; - - /* Pointers to allocate/free functions. */ - htab_alloc alloc_f; - htab_free free_f; - - /* Alternate allocate/free functions, which take an extra argument. */ - void * GTY((skip)) alloc_arg; - htab_alloc_with_arg alloc_with_arg_f; - htab_free_with_arg free_with_arg_f; - - /* Current size (in entries) of the hash table, as an index into the - table of primes. */ - unsigned int size_prime_index; -}; - -typedef struct htab *htab_t; - -/* An enum saying whether we insert into the hash table or not. */ -enum insert_option {NO_INSERT, INSERT}; - -/* The prototypes of the package functions. */ - -extern htab_t htab_create_alloc (size_t, htab_hash, - htab_eq, htab_del, - htab_alloc, htab_free); - -extern htab_t htab_create_alloc_ex (size_t, htab_hash, - htab_eq, htab_del, - void *, htab_alloc_with_arg, - htab_free_with_arg); - -/* Backward-compatibility functions. */ -extern htab_t htab_create (size_t, htab_hash, htab_eq, htab_del); -extern htab_t htab_try_create (size_t, htab_hash, htab_eq, htab_del); - -extern void htab_set_functions_ex (htab_t, htab_hash, - htab_eq, htab_del, - void *, htab_alloc_with_arg, - htab_free_with_arg); - -extern void htab_delete (htab_t); -extern void htab_empty (htab_t); - -extern void * htab_find (htab_t, const void *); -extern void ** htab_find_slot (htab_t, const void *, enum insert_option); -extern void * htab_find_with_hash (htab_t, const void *, hashval_t); -extern void ** htab_find_slot_with_hash (htab_t, const void *, - hashval_t, enum insert_option); -extern void htab_clear_slot (htab_t, void **); -extern void htab_remove_elt (htab_t, void *); -extern void htab_remove_elt_with_hash (htab_t, void *, hashval_t); - -extern void htab_traverse (htab_t, htab_trav, void *); -extern void htab_traverse_noresize (htab_t, htab_trav, void *); - -extern size_t htab_size (htab_t); -extern size_t htab_elements (htab_t); -extern double htab_collisions (htab_t); - -/* A hash function for pointers. */ -extern htab_hash htab_hash_pointer; - -/* An equality function for pointers. */ -extern htab_eq htab_eq_pointer; - -/* A hash function for null-terminated strings. */ -extern hashval_t htab_hash_string (const void *); - -/* An iterative hash function for arbitrary data. */ -extern hashval_t iterative_hash (const void *, size_t, hashval_t); -/* Shorthand for hashing something with an intrinsic size. */ -#define iterative_hash_object(OB,INIT) iterative_hash (&OB, sizeof (OB), INIT) - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __HASHTAB_H */ diff --git a/include/hp-symtab.h b/include/hp-symtab.h deleted file mode 100644 index 361473f3eed..00000000000 --- a/include/hp-symtab.h +++ /dev/null @@ -1,1866 +0,0 @@ -/* Definitions and structures for reading debug symbols from the - native HP C compiler. - - Written by the Center for Software Science at the University of Utah - and by Cygnus Support. - - Copyright 1994, 1995, 1998, 1999, 2003 Free Software Foundation, Inc. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef HP_SYMTAB_INCLUDED -#define HP_SYMTAB_INCLUDED - -/* General information: - - This header file defines and describes only the data structures - necessary to read debug symbols produced by the HP C compiler, - HP ANSI C++ compiler, and HP FORTRAN 90 compiler using the - SOM object file format. - (For a full description of the debug format, ftp hpux-symtab.h from - jaguar.cs.utah.edu:/dist). - - Additional notes (Rich Title) - This file is a reverse-engineered version of a file called - "symtab.h" which exists internal to HP's Computer Languages Organization - in /CLO/Components/DDE/obj/som/symtab.h. Because HP's version of - the file is copyrighted and not distributed, it is necessary for - GDB to use the reverse-engineered version that follows. - Work was done by Cygnus to reverse-engineer the C subset of symtab.h. - The WDB project has extended this to also contain the C++ - symbol definitions, the F90 symbol definitions, - and the DOC (debugging-optimized-code) symbol definitions. - In some cases (the C++ symbol definitions) - I have added internal documentation here that - goes beyond what is supplied in HP's symtab.h. If we someday - unify these files again, the extra comments should be merged back - into HP's symtab.h. - - ------------------------------------------------------------------- - - Debug symbols are contained entirely within an unloadable space called - $DEBUG$. $DEBUG$ contains several subspaces which group related - debug symbols. - - $GNTT$ contains information for global variables, types and contants. - - $LNTT$ contains information for procedures (including nesting), scoping - information, local variables, types, and constants. - - $SLT$ contains source line information so that code addresses may be - mapped to source lines. - - $VT$ contains various strings and constants for named objects (variables, - typedefs, functions, etc). Strings are stored as null-terminated character - lists. Constants always begin on word boundaries. The first byte of - the VT must be zero (a null string). - - $XT$ is not currently used by GDB. - - Many structures within the subspaces point to other structures within - the same subspace, or to structures within a different subspace. These - pointers are represented as a structure index from the beginning of - the appropriate subspace. */ - -/* Used to describe where a constant is stored. */ -enum location_type -{ - LOCATION_IMMEDIATE, - LOCATION_PTR, - LOCATION_VT, -}; - -/* Languages supported by this debug format. Within the data structures - this type is limited to 4 bits for a maximum of 16 languages. */ -enum hp_language -{ - HP_LANGUAGE_UNKNOWN, - HP_LANGUAGE_C, - HP_LANGUAGE_FORTRAN, - HP_LANGUAGE_F77 = HP_LANGUAGE_FORTRAN, - HP_LANGUAGE_PASCAL, - HP_LANGUAGE_MODCAL, - HP_LANGUAGE_COBOL, - HP_LANGUAGE_BASIC, - HP_LANGUAGE_ADA, - HP_LANGUAGE_CPLUSPLUS, - HP_LANGUAGE_DMPASCAL -}; - - -/* Basic data types available in this debug format. Within the data - structures this type is limited to 5 bits for a maximum of 32 basic - data types. */ -enum hp_type -{ - HP_TYPE_UNDEFINED, /* 0 */ - HP_TYPE_BOOLEAN, /* 1 */ - HP_TYPE_CHAR, /* 2 */ - HP_TYPE_INT, /* 3 */ - HP_TYPE_UNSIGNED_INT, /* 4 */ - HP_TYPE_REAL, /* 5 */ - HP_TYPE_COMPLEX, /* 6 */ - HP_TYPE_STRING200, /* 7 */ - HP_TYPE_LONGSTRING200, /* 8 */ - HP_TYPE_TEXT, /* 9 */ - HP_TYPE_FLABEL, /* 10 */ - HP_TYPE_FTN_STRING_SPEC, /* 11 */ - HP_TYPE_MOD_STRING_SPEC, /* 12 */ - HP_TYPE_PACKED_DECIMAL, /* 13 */ - HP_TYPE_REAL_3000, /* 14 */ - HP_TYPE_MOD_STRING_3000, /* 15 */ - HP_TYPE_ANYPOINTER, /* 16 */ - HP_TYPE_GLOBAL_ANYPOINTER, /* 17 */ - HP_TYPE_LOCAL_ANYPOINTER, /* 18 */ - HP_TYPE_COMPLEXS3000, /* 19 */ - HP_TYPE_FTN_STRING_S300_COMPAT, /* 20 */ - HP_TYPE_FTN_STRING_VAX_COMPAT, /* 21 */ - HP_TYPE_BOOLEAN_S300_COMPAT, /* 22 */ - HP_TYPE_BOOLEAN_VAX_COMPAT, /* 23 */ - HP_TYPE_WIDE_CHAR, /* 24 */ - HP_TYPE_LONG, /* 25 */ - HP_TYPE_UNSIGNED_LONG, /* 26 */ - HP_TYPE_DOUBLE, /* 27 */ - HP_TYPE_TEMPLATE_ARG, /* 28 */ - HP_TYPE_VOID /* 29 */ -}; - -/* An immediate name and type table entry. - - extension and immediate will always be one. - global will always be zero. - hp_type is the basic type this entry describes. - bitlength is the length in bits for the basic type. */ -struct dnttp_immediate -{ - unsigned int extension: 1; - unsigned int immediate: 1; - unsigned int global: 1; - unsigned int type: 5; - unsigned int bitlength: 24; -}; - -/* A nonimmediate name and type table entry. - - extension will always be one. - immediate will always be zero. - if global is zero, this entry points into the LNTT - if global is one, this entry points into the GNTT - index is the index within the GNTT or LNTT for this entry. */ -struct dnttp_nonimmediate -{ - unsigned int extension: 1; - unsigned int immediate: 1; - unsigned int global: 1; - unsigned int index: 29; -}; - -/* A pointer to an entry in the GNTT and LNTT tables. It has two - forms depending on the type being described. - - The immediate form is used for simple entries and is one - word. - - The nonimmediate form is used for complex entries and contains - an index into the LNTT or GNTT which describes the entire type. - - If a dnttpointer is -1, then it is a NIL entry. */ - -#define DNTTNIL (-1) -typedef union dnttpointer -{ - struct dnttp_immediate dntti; - struct dnttp_nonimmediate dnttp; - int word; -} dnttpointer; - -/* An index into the source line table. As with dnttpointers, a sltpointer - of -1 indicates a NIL entry. */ -#define SLTNIL (-1) -typedef int sltpointer; - -/* Index into DOC (= "Debugging Optimized Code") line table. */ -#define LTNIL (-1) -typedef int ltpointer; - -/* Index into context table. */ -#define CTXTNIL (-1) -typedef int ctxtpointer; - -/* Unsigned byte offset into the VT. */ -typedef unsigned int vtpointer; - -/* A DNTT entry (used within the GNTT and LNTT). - - DNTT entries are variable sized objects, but are always a multiple - of 3 words (we call each group of 3 words a "block"). - - The first bit in each block is an extension bit. This bit is zero - for the first block of a DNTT entry. If the entry requires more - than one block, then this bit is set to one in all blocks after - the first one. */ - -/* Each DNTT entry describes a particular debug symbol (beginning of - a source file, a function, variables, structures, etc. - - The type of the DNTT entry is stored in the "kind" field within the - DNTT entry itself. */ - -enum dntt_entry_type -{ - DNTT_TYPE_NIL = -1, - DNTT_TYPE_SRCFILE, - DNTT_TYPE_MODULE, - DNTT_TYPE_FUNCTION, - DNTT_TYPE_ENTRY, - DNTT_TYPE_BEGIN, - DNTT_TYPE_END, - DNTT_TYPE_IMPORT, - DNTT_TYPE_LABEL, - DNTT_TYPE_FPARAM, - DNTT_TYPE_SVAR, - DNTT_TYPE_DVAR, - DNTT_TYPE_HOLE1, - DNTT_TYPE_CONST, - DNTT_TYPE_TYPEDEF, - DNTT_TYPE_TAGDEF, - DNTT_TYPE_POINTER, - DNTT_TYPE_ENUM, - DNTT_TYPE_MEMENUM, - DNTT_TYPE_SET, - DNTT_TYPE_SUBRANGE, - DNTT_TYPE_ARRAY, - DNTT_TYPE_STRUCT, - DNTT_TYPE_UNION, - DNTT_TYPE_FIELD, - DNTT_TYPE_VARIANT, - DNTT_TYPE_FILE, - DNTT_TYPE_FUNCTYPE, - DNTT_TYPE_WITH, - DNTT_TYPE_COMMON, - DNTT_TYPE_COBSTRUCT, - DNTT_TYPE_XREF, - DNTT_TYPE_SA, - DNTT_TYPE_MACRO, - DNTT_TYPE_BLOCKDATA, - DNTT_TYPE_CLASS_SCOPE, - DNTT_TYPE_REFERENCE, - DNTT_TYPE_PTRMEM, - DNTT_TYPE_PTRMEMFUNC, - DNTT_TYPE_CLASS, - DNTT_TYPE_GENFIELD, - DNTT_TYPE_VFUNC, - DNTT_TYPE_MEMACCESS, - DNTT_TYPE_INHERITANCE, - DNTT_TYPE_FRIEND_CLASS, - DNTT_TYPE_FRIEND_FUNC, - DNTT_TYPE_MODIFIER, - DNTT_TYPE_OBJECT_ID, - DNTT_TYPE_MEMFUNC, - DNTT_TYPE_TEMPLATE, - DNTT_TYPE_TEMPLATE_ARG, - DNTT_TYPE_FUNC_TEMPLATE, - DNTT_TYPE_LINK, - DNTT_TYPE_DYN_ARRAY_DESC, - DNTT_TYPE_DESC_SUBRANGE, - DNTT_TYPE_BEGIN_EXT, - DNTT_TYPE_INLN, - DNTT_TYPE_INLN_LIST, - DNTT_TYPE_ALIAS, - DNTT_TYPE_DOC_FUNCTION, - DNTT_TYPE_DOC_MEMFUNC, - DNTT_TYPE_MAX -}; - -/* DNTT_TYPE_SRCFILE: - - One DNTT_TYPE_SRCFILE symbol is output for the start of each source - file and at the begin and end of an included file. A DNTT_TYPE_SRCFILE - entry is also output before each DNTT_TYPE_FUNC symbol so that debuggers - can determine what file a function was defined in. - - LANGUAGE describes the source file's language. - - NAME points to an VT entry providing the source file's name. - - Note the name used for DNTT_TYPE_SRCFILE entries are exactly as seen - by the compiler (ie they may be relative or absolute). C include files - via <> inclusion must use absolute paths. - - ADDRESS points to an SLT entry from which line number and code locations - may be determined. */ - -struct dntt_type_srcfile -{ - unsigned int extension: 1; - unsigned int kind: 10; /* DNTT_TYPE_SRCFILE */ - unsigned int language: 4; - unsigned int unused: 17; - vtpointer name; - sltpointer address; -}; - -/* DNTT_TYPE_MODULE: - - A DNTT_TYPE_MODULE symbol is emitted for the start of a pascal - module or C source file. A module indicates a compilation unit - for name-scoping purposes; in that regard there should be - a 1-1 correspondence between GDB "symtab"'s and MODULE symbol records. - - Each DNTT_TYPE_MODULE must have an associated DNTT_TYPE_END symbol. - - NAME points to a VT entry providing the module's name. Note C - source files are considered nameless modules. - - ALIAS point to a VT entry providing a secondary name. - - ADDRESS points to an SLT entry from which line number and code locations - may be determined. */ - -struct dntt_type_module -{ - unsigned int extension: 1; - unsigned int kind: 10; /* DNTT_TYPE_MODULE */ - unsigned int unused: 21; - vtpointer name; - vtpointer alias; - dnttpointer unused2; - sltpointer address; -}; - -/* DNTT_TYPE_FUNCTION, - DNTT_TYPE_ENTRY, - DNTT_TYPE_BLOCKDATA, - DNTT_TYPE_MEMFUNC: - - A DNTT_TYPE_FUNCTION symbol is emitted for each function definition; - a DNTT_TYPE_ENTRY symbols is used for secondary entry points. Both - symbols used the dntt_type_function structure. - A DNTT_TYPE_BLOCKDATA symbol is emitted ...? - A DNTT_TYPE_MEMFUNC symbol is emitted for inlined member functions (C++). - - Each of DNTT_TYPE_FUNCTION must have a matching DNTT_TYPE_END. - - GLOBAL is nonzero if the function has global scope. - - LANGUAGE describes the function's source language. - - OPT_LEVEL describes the optimization level the function was compiled - with. - - VARARGS is nonzero if the function uses varargs. - - NAME points to a VT entry providing the function's name. - - ALIAS points to a VT entry providing a secondary name for the function. - - FIRSTPARAM points to a LNTT entry which describes the parameter list. - - ADDRESS points to an SLT entry from which line number and code locations - may be determined. - - ENTRYADDR is the memory address corresponding the function's entry point - - RETVAL points to a LNTT entry describing the function's return value. - - LOWADDR is the lowest memory address associated with this function. - - HIADDR is the highest memory address associated with this function. */ - -struct dntt_type_function -{ - unsigned int extension: 1; - unsigned int kind: 10; /* DNTT_TYPE_FUNCTION, - DNTT_TYPE_ENTRY, - DNTT_TYPE_BLOCKDATA - or DNTT_TYPE_MEMFUNC */ - unsigned int global: 1; - unsigned int language: 4; - unsigned int nest_level: 5; - unsigned int opt_level: 2; - unsigned int varargs: 1; - unsigned int lang_info: 4; - unsigned int inlined: 1; - unsigned int localalloc: 1; - unsigned int expansion: 1; - unsigned int unused: 1; - vtpointer name; - vtpointer alias; - dnttpointer firstparam; - sltpointer address; - CORE_ADDR entryaddr; - dnttpointer retval; - CORE_ADDR lowaddr; - CORE_ADDR hiaddr; -}; - -/* DNTT_TYPE_BEGIN: - - A DNTT_TYPE_BEGIN symbol is emitted to begin a new nested scope. - Every DNTT_TYPE_BEGIN symbol must have a matching DNTT_TYPE_END symbol. - - CLASSFLAG is nonzero if this is the beginning of a c++ class definition. - - ADDRESS points to an SLT entry from which line number and code locations - may be determined. */ - -struct dntt_type_begin -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int classflag: 1; - unsigned int unused: 20; - sltpointer address; -}; - -/* DNTT_TYPE_END: - - A DNTT_TYPE_END symbol is emitted when closing a scope started by - a DNTT_TYPE_MODULE, DNTT_TYPE_FUNCTION, DNTT_TYPE_WITH, - DNTT_TYPE_COMMON, DNTT_TYPE_BEGIN, and DNTT_TYPE_CLASS_SCOPE symbols. - - ENDKIND describes what type of scope the DNTT_TYPE_END is closing - (one of the above 6 kinds). - - CLASSFLAG is nonzero if this is the end of a c++ class definition. - - ADDRESS points to an SLT entry from which line number and code locations - may be determined. - - BEGINSCOPE points to the LNTT entry which opened the scope. */ - -struct dntt_type_end -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int endkind: 10; - unsigned int classflag: 1; - unsigned int unused: 10; - sltpointer address; - dnttpointer beginscope; -}; - -/* DNTT_TYPE_IMPORT is unused by GDB. */ -/* DNTT_TYPE_LABEL is unused by GDB. */ - -/* DNTT_TYPE_FPARAM: - - A DNTT_TYPE_FPARAM symbol is emitted for a function argument. When - chained together the symbols represent an argument list for a function. - - REGPARAM is nonzero if this parameter was passed in a register. - - INDIRECT is nonzero if this parameter is a pointer to the parameter - (pass by reference or pass by value for large items). - - LONGADDR is nonzero if the parameter is a 64bit pointer. - - NAME is a pointer into the VT for the parameter's name. - - LOCATION describes where the parameter is stored. Depending on the - parameter type LOCATION could be a register number, or an offset - from the stack pointer. - - TYPE points to a NTT entry describing the type of this parameter. - - NEXTPARAM points to the LNTT entry describing the next parameter. */ - -struct dntt_type_fparam -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int regparam: 1; - unsigned int indirect: 1; - unsigned int longaddr: 1; - unsigned int copyparam: 1; - unsigned int dflt: 1; - unsigned int doc_ranges: 1; - unsigned int misc_kind: 1; - unsigned int unused: 14; - vtpointer name; - CORE_ADDR location; - dnttpointer type; - dnttpointer nextparam; - int misc; -}; - -/* DNTT_TYPE_SVAR: - - A DNTT_TYPE_SVAR is emitted to describe a variable in static storage. - - GLOBAL is nonzero if the variable has global scope. - - INDIRECT is nonzero if the variable is a pointer to an object. - - LONGADDR is nonzero if the variable is in long pointer space. - - STATICMEM is nonzero if the variable is a member of a class. - - A_UNION is nonzero if the variable is an anonymous union member. - - NAME is a pointer into the VT for the variable's name. - - LOCATION provides the memory address for the variable. - - TYPE is a pointer into either the GNTT or LNTT which describes - the type of this variable. */ - -struct dntt_type_svar -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int global: 1; - unsigned int indirect: 1; - unsigned int longaddr: 1; - unsigned int staticmem: 1; - unsigned int a_union: 1; - unsigned int unused1: 1; - unsigned int thread_specific: 1; - unsigned int unused2: 14; - vtpointer name; - CORE_ADDR location; - dnttpointer type; - unsigned int offset; - unsigned int displacement; -}; - -/* DNTT_TYPE_DVAR: - - A DNTT_TYPE_DVAR is emitted to describe automatic variables and variables - held in registers. - - GLOBAL is nonzero if the variable has global scope. - - INDIRECT is nonzero if the variable is a pointer to an object. - - REGVAR is nonzero if the variable is in a register. - - A_UNION is nonzero if the variable is an anonymous union member. - - NAME is a pointer into the VT for the variable's name. - - LOCATION provides the memory address or register number for the variable. - - TYPE is a pointer into either the GNTT or LNTT which describes - the type of this variable. */ - -struct dntt_type_dvar -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int global: 1; - unsigned int indirect: 1; - unsigned int regvar: 1; - unsigned int a_union: 1; - unsigned int unused: 17; - vtpointer name; - int location; - dnttpointer type; - unsigned int offset; -}; - -/* DNTT_TYPE_CONST: - - A DNTT_TYPE_CONST symbol is emitted for program constants. - - GLOBAL is nonzero if the constant has global scope. - - INDIRECT is nonzero if the constant is a pointer to an object. - - LOCATION_TYPE describes where to find the constant's value - (in the VT, memory, or embedded in an instruction). - - CLASSMEM is nonzero if the constant is a member of a class. - - NAME is a pointer into the VT for the constant's name. - - LOCATION provides the memory address, register number or pointer - into the VT for the constant's value. - - TYPE is a pointer into either the GNTT or LNTT which describes - the type of this variable. */ - -struct dntt_type_const -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int global: 1; - unsigned int indirect: 1; - unsigned int location_type: 3; - unsigned int classmem: 1; - unsigned int unused: 15; - vtpointer name; - CORE_ADDR location; - dnttpointer type; - unsigned int offset; - unsigned int displacement; -}; - -/* DNTT_TYPE_TYPEDEF and DNTT_TYPE_TAGDEF: - - The same structure is used to describe typedefs and tagdefs. - - DNTT_TYPE_TYPEDEFS are associated with C "typedefs". - - DNTT_TYPE_TAGDEFs are associated with C "struct", "union", and "enum" - tags, which may have the same name as a typedef in the same scope. - Also they are associated with C++ "class" tags, which implicitly have - the same name as the class type. - - GLOBAL is nonzero if the typedef/tagdef has global scope. - - TYPEINFO is used to determine if full type information is available - for a tag. (usually 1, but can be zero for opaque types in C). - - NAME is a pointer into the VT for the constant's name. - - TYPE points to the underlying type for the typedef/tagdef in the - GNTT or LNTT. */ - -struct dntt_type_type -{ - unsigned int extension: 1; - unsigned int kind: 10; /* DNTT_TYPE_TYPEDEF or - DNTT_TYPE_TAGDEF. */ - unsigned int global: 1; - unsigned int typeinfo: 1; - unsigned int unused: 19; - vtpointer name; - dnttpointer type; /* Underlying type, which for TAGDEF's may be - DNTT_TYPE_STRUCT, DNTT_TYPE_UNION, - DNTT_TYPE_ENUM, or DNTT_TYPE_CLASS. - For TYPEDEF's other underlying types - are also possible. */ -}; - -/* DNTT_TYPE_POINTER: - - Used to describe a pointer to an underlying type. - - POINTSTO is a pointer into the GNTT or LNTT for the type which this - pointer points to. - - BITLENGTH is the length of the pointer (not the underlying type). */ - -struct dntt_type_pointer -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int unused: 21; - dnttpointer pointsto; - unsigned int bitlength; -}; - - -/* DNTT_TYPE_ENUM: - - Used to describe enumerated types. - - FIRSTMEM is a pointer to a DNTT_TYPE_MEMENUM in the GNTT/LNTT which - describes the first member (and contains a pointer to the chain of - members). - - BITLENGTH is the number of bits used to hold the values of the enum's - members. */ - -struct dntt_type_enum -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int unused: 21; - dnttpointer firstmem; - unsigned int bitlength; -}; - -/* DNTT_TYPE_MEMENUM - - Used to describe members of an enumerated type. - - CLASSMEM is nonzero if this member is part of a class. - - NAME points into the VT for the name of this member. - - VALUE is the value of this enumeration member. - - NEXTMEM points to the next DNTT_TYPE_MEMENUM in the chain. */ - -struct dntt_type_memenum -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int classmem: 1; - unsigned int unused: 20; - vtpointer name; - unsigned int value; - dnttpointer nextmem; -}; - -/* DNTT_TYPE_SET - - Used to describe PASCAL "set" type. - - DECLARATION describes the bitpacking of the set. - - SUBTYPE points to a DNTT entry describing the type of the members. - - BITLENGTH is the size of the set. */ - -struct dntt_type_set -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int declaration: 2; - unsigned int unused: 19; - dnttpointer subtype; - unsigned int bitlength; -}; - -/* DNTT_TYPE_SUBRANGE - - Used to describe subrange type. - - DYN_LOW describes the lower bound of the subrange: - - 00 for a constant lower bound (found in LOWBOUND). - - 01 for a dynamic lower bound with the lower bound found in the - memory address pointed to by LOWBOUND. - - 10 for a dynamic lower bound described by an variable found in the - DNTT/LNTT (LOWBOUND would be a pointer into the DNTT/LNTT). - - DYN_HIGH is similar to DYN_LOW, except it describes the upper bound. - - SUBTYPE points to the type of the subrange. - - BITLENGTH is the length in bits needed to describe the subrange's - values. */ - -struct dntt_type_subrange -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int dyn_low: 2; - unsigned int dyn_high: 2; - unsigned int unused: 17; - int lowbound; - int highbound; - dnttpointer subtype; - unsigned int bitlength; -}; - -/* DNTT_TYPE_ARRAY - - Used to describe an array type. - - DECLARATION describes the bit packing used in the array. - - ARRAYISBYTES is nonzero if the field in arraylength describes the - length in bytes rather than in bits. A value of zero is used to - describe an array with size 2**32. - - ELEMISBYTES is nonzero if the length if each element in the array - is describes in bytes rather than bits. A value of zero is used - to an element with size 2**32. - - ELEMORDER is nonzero if the elements are indexed in increasing order. - - JUSTIFIED if the elements are left justified to index zero. - - ARRAYLENGTH is the length of the array. - - INDEXTYPE is a DNTT pointer to the type used to index the array. - - ELEMTYPE is a DNTT pointer to the type for the array elements. - - ELEMLENGTH is the length of each element in the array (including - any padding). - - Multi-dimensional arrays are represented by ELEMTYPE pointing to - another DNTT_TYPE_ARRAY. */ - -struct dntt_type_array -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int declaration: 2; - unsigned int dyn_low: 2; - unsigned int dyn_high: 2; - unsigned int arrayisbytes: 1; - unsigned int elemisbytes: 1; - unsigned int elemorder: 1; - unsigned int justified: 1; - unsigned int unused: 11; - unsigned int arraylength; - dnttpointer indextype; - dnttpointer elemtype; - unsigned int elemlength; -}; - -/* DNTT_TYPE_STRUCT - - DNTT_TYPE_STRUCT is used to describe a C structure. - - DECLARATION describes the bitpacking used. - - FIRSTFIELD is a DNTT pointer to the first field of the structure - (each field contains a pointer to the next field, walk the list - to access all fields of the structure). - - VARTAGFIELD and VARLIST are used for Pascal variant records. - - BITLENGTH is the size of the structure in bits. */ - -struct dntt_type_struct -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int declaration: 2; - unsigned int unused: 19; - dnttpointer firstfield; - dnttpointer vartagfield; - dnttpointer varlist; - unsigned int bitlength; -}; - -/* DNTT_TYPE_UNION - - DNTT_TYPE_UNION is used to describe a C union. - - FIRSTFIELD is a DNTT pointer to the beginning of the field chain. - - BITLENGTH is the size of the union in bits. */ - -struct dntt_type_union -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int unused: 21; - dnttpointer firstfield; - unsigned int bitlength; -}; - -/* DNTT_TYPE_FIELD - - DNTT_TYPE_FIELD describes one field in a structure or union - or C++ class. - - VISIBILITY is used to describe the visibility of the field - (for c++. public = 0, protected = 1, private = 2). - - A_UNION is nonzero if this field is a member of an anonymous union. - - STATICMEM is nonzero if this field is a static member of a template. - - NAME is a pointer into the VT for the name of the field. - - BITOFFSET gives the offset of this field in bits from the beginning - of the structure or union this field is a member of. - - TYPE is a DNTT pointer to the type describing this field. - - BITLENGTH is the size of the entry in bits. - - NEXTFIELD is a DNTT pointer to the next field in the chain. */ - -struct dntt_type_field -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int visibility: 2; - unsigned int a_union: 1; - unsigned int staticmem: 1; - unsigned int unused: 17; - vtpointer name; - unsigned int bitoffset; - dnttpointer type; - unsigned int bitlength; - dnttpointer nextfield; -}; - -/* DNTT_TYPE_VARIANT is unused by GDB. */ -/* DNTT_TYPE_FILE is unused by GDB. */ - -/* DNTT_TYPE_FUNCTYPE - - I think this is used to describe a function type (e.g., would - be emitted as part of a function-pointer description). - - VARARGS is nonzero if this function uses varargs. - - FIRSTPARAM is a DNTT pointer to the first entry in the parameter - chain. - - RETVAL is a DNTT pointer to the type of the return value. */ - -struct dntt_type_functype -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int varargs: 1; - unsigned int info: 4; - unsigned int unused: 16; - unsigned int bitlength; - dnttpointer firstparam; - dnttpointer retval; -}; - -/* DNTT_TYPE_WITH is emitted by C++ to indicate "with" scoping semantics. - (Probably also emitted by PASCAL to support "with"...). - - C++ example: Say "memfunc" is a method of class "c", and say - "m" is a data member of class "c". Then from within "memfunc", - it is legal to reference "m" directly (e.g. you don't have to - say "this->m". The symbol table indicates - this by emitting a DNTT_TYPE_WITH symbol within the function "memfunc", - pointing to the type symbol for class "c". - - In GDB, this symbol record is unnecessary, - because GDB's symbol lookup algorithm - infers the "with" semantics when it sees a "this" argument to the member - function. So GDB can safely ignore the DNTT_TYPE_WITH record. - - A DNTT_TYPE_WITH has a matching DNTT_TYPE_END symbol. */ - -struct dntt_type_with -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_WITH */ - unsigned int addrtype: 2; /* 0 => STATTYPE */ - /* 1 => DYNTYPE */ - /* 2 => REGTYPE */ - unsigned int indirect: 1; /* 1 => pointer to object */ - unsigned int longaddr: 1; /* 1 => in long pointer space */ - unsigned int nestlevel: 6; /* # of nesting levels back */ - unsigned int doc_ranges: 1; /* 1 => location is range list */ - unsigned int unused: 10; - long location; /* where stored (allocated) */ - sltpointer address; - dnttpointer type; /* type of with expression */ - vtpointer name; /* name of with expression */ - unsigned long offset; /* byte offset from location */ -}; - -/* DNTT_TYPE_COMMON is unsupported by GDB. */ -/* A DNTT_TYPE_COMMON symbol must have a matching DNTT_TYPE_END symbol */ - -/* DNTT_TYPE_COBSTRUCT is unsupported by GDB. */ -/* DNTT_TYPE_XREF is unsupported by GDB. */ -/* DNTT_TYPE_SA is unsupported by GDB. */ -/* DNTT_TYPE_MACRO is unsupported by GDB */ - -/* DNTT_TYPE_BLOCKDATA has the same structure as DNTT_TYPE_FUNCTION */ - -/* The following are the C++ specific SOM records */ - -/* The purpose of the DNTT_TYPE_CLASS_SCOPE is to bracket C++ methods - and indicate the method name belongs in the "class scope" rather - than in the module they are being defined in. For example: - - class c { - ... - void memfunc(); // member function - }; - - void c::memfunc() // definition of class c's "memfunc" - { - ... - } - - main() - { - ... - } - - In the above, the name "memfunc" is not directly visible from "main". - I.e., you have to say "break c::memfunc". - If it were a normal function (not a method), it would be visible - via the simple "break memfunc". Since "memfunc" otherwise looks - like a normal FUNCTION in the symbol table, the bracketing - CLASS_SCOPE is what is used to indicate it is really a method. - - - A DNTT_TYPE_CLASS_SCOPE symbol must have a matching DNTT_TYPE_END symbol. */ - -struct dntt_type_class_scope -{ - unsigned int extension: 1; /* Always zero. */ - unsigned int kind: 10; /* Always DNTT_TYPE_CLASS_SCOPE. */ - unsigned int unused: 21; - sltpointer address ; /* Pointer to SLT entry. */ - dnttpointer type ; /* Pointer to class type DNTT. */ -}; - -/* C++ reference parameter. - The structure of this record is the same as DNTT_TYPE_POINTER - - refer to struct dntt_type_pointer. */ - -/* The next two describe C++ pointer-to-data-member type, and - pointer-to-member-function type, respectively. - DNTT_TYPE_PTRMEM and DNTT_TYPE_PTRMEMFUNC have the same structure. */ - -struct dntt_type_ptrmem -{ - unsigned int extension: 1; /* Always zero. */ - unsigned int kind: 10; /* Always DNTT_TYPE_PTRMEM. */ - unsigned int unused: 21; - dnttpointer pointsto ; /* Pointer to class DNTT. */ - dnttpointer memtype ; /* Type of member. */ -}; - -struct dntt_type_ptrmemfunc -{ - unsigned int extension: 1; /* Always zero. */ - unsigned int kind: 10; /* Always DNTT_TYPE_PTRMEMFUNC. */ - unsigned int unused: 21; - dnttpointer pointsto ; /* Pointer to class DNTT. */ - dnttpointer memtype ; /* Type of member. */ -}; - -/* The DNTT_TYPE_CLASS symbol is emitted to describe a class type. - "memberlist" points to a chained list of FIELD or GENFIELD records - indicating the class members. "parentlist" points to a chained list - of INHERITANCE records indicating classes from which we inherit - fields. */ - -struct dntt_type_class -{ - unsigned int extension: 1; /* Always zero. */ - unsigned int kind: 10; /* Always DNTT_TYPE_CLASS. */ - unsigned int abstract: 1; /* Is this an abstract class? */ - unsigned int class_decl: 2; /* 0=class,1=union,2=struct. */ - unsigned int expansion: 1; /* 1=template expansion. */ - unsigned int unused: 17; - dnttpointer memberlist ; /* Ptr to chain of [GEN]FIELDs. */ - unsigned long vtbl_loc ; /* Offset in obj of ptr to vtbl. */ - dnttpointer parentlist ; /* Ptr to K_INHERITANCE list. */ - unsigned long bitlength ; /* Total at this level. */ - dnttpointer identlist ; /* Ptr to chain of class ident's. */ - dnttpointer friendlist ; /* Ptr to K_FRIEND list. */ - dnttpointer templateptr ; /* Ptr to template. */ - dnttpointer nextexp ; /* Ptr to next expansion. */ -}; - -/* Class members are indicated via either the FIELD record (for - data members, same as for C struct fields), or by the GENFIELD record - (for member functions). */ - -struct dntt_type_genfield -{ - unsigned int extension: 1; /* Always zero. */ - unsigned int kind: 10; /* Always DNTT_TYPE_GENFIELD. */ - unsigned int visibility: 2; /* Pub = 0, prot = 1, priv = 2. */ - unsigned int a_union: 1; /* 1 => anonymous union member. */ - unsigned int unused: 18; - dnttpointer field ; /* Pointer to field or qualifier. */ - dnttpointer nextfield ; /* Pointer to next field. */ -}; - -/* C++ virtual functions. */ - -struct dntt_type_vfunc -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_VFUNC */ - unsigned int pure: 1; /* pure virtual function ? */ - unsigned int unused: 20; - dnttpointer funcptr ; /* points to FUNCTION symbol */ - unsigned long vtbl_offset ; /* offset into vtbl for virtual */ -}; - -/* Not precisely sure what this is intended for - DDE ignores it. */ - -struct dntt_type_memaccess -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_MEMACCESS */ - unsigned int unused: 21; - dnttpointer classptr ; /* pointer to base class */ - dnttpointer field ; /* pointer field */ -}; - -/* The DNTT_TYPE_INHERITANCE record describes derived classes. - In particular, the "parentlist" field of the CLASS record points - to a list of INHERITANCE records for classes from which we - inherit members. */ - -struct dntt_type_inheritance -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_INHERITANCE */ - unsigned int Virtual: 1; /* virtual base class ? */ - unsigned int visibility: 2; /* pub = 0, prot = 1, priv = 2 */ - unsigned int unused: 18; - dnttpointer classname ; /* first parent class, if any */ - unsigned long offset ; /* offset to start of base class */ - dnttpointer next ; /* pointer to next K_INHERITANCE */ - unsigned long future[2] ; /* padding to 3-word block end */ -}; - -/* C++ "friend" classes ... */ - -struct dntt_type_friend_class -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_FRIEND_CLASS */ - unsigned int unused: 21; - dnttpointer classptr ; /* pointer to class DNTT */ - dnttpointer next ; /* next DNTT_FRIEND */ -}; - -struct dntt_type_friend_func -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_FRIEND_FUNC */ - unsigned int unused: 21; - dnttpointer funcptr ; /* pointer to function */ - dnttpointer classptr ; /* pointer to class DNTT */ - dnttpointer next ; /* next DNTT_FRIEND */ - unsigned long future[2] ; /* padding to 3-word block end */ -}; - -/* DDE appears to ignore the DNTT_TYPE_MODIFIER record. - It could perhaps be used to give better "ptype" output in GDB; - otherwise it is probably safe for GDB to ignore it also. */ - -struct dntt_type_modifier -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_MODIFIER */ - unsigned int m_const: 1; /* const */ - unsigned int m_static: 1; /* static */ - unsigned int m_void: 1; /* void */ - unsigned int m_volatile: 1; /* volatile */ - unsigned int m_duplicate: 1; /* duplicate */ - unsigned int unused: 16; - dnttpointer type ; /* subtype */ - unsigned long future ; /* padding to 3-word block end */ -}; - -/* I'm not sure what this was intended for - DDE ignores it. */ - -struct dntt_type_object_id -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_OBJECT_ID */ - unsigned int indirect: 1; /* Is object_ident addr of addr? */ - unsigned int unused: 20; - unsigned long object_ident ; /* object identifier */ - unsigned long offset ; /* offset to start of base class */ - dnttpointer next ; /* pointer to next K_OBJECT_ID */ - unsigned long segoffset ; /* for linker fixup */ - unsigned long future ; /* padding to 3-word block end */ -}; - -/* No separate dntt_type_memfunc; same as dntt_type_func */ - -/* Symbol records to support templates. These only get used - in DDE's "describe" output (like GDB's "ptype"). */ - -/* The TEMPLATE record is the header for a template-class. - Like the CLASS record, a TEMPLATE record has a memberlist that - points to a list of template members. It also has an arglist - pointing to a list of TEMPLATE_ARG records. */ - -struct dntt_type_template -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_TEMPLATE */ - unsigned int abstract: 1; /* is this an abstract class? */ - unsigned int class_decl: 2; /* 0=class,1=union,2=struct */ - unsigned int unused: 18; - dnttpointer memberlist ; /* ptr to chain of K_[GEN]FIELDs */ - long unused2 ; /* offset in obj of ptr to vtbl */ - dnttpointer parentlist ; /* ptr to K_INHERITANCE list */ - unsigned long bitlength ; /* total at this level */ - dnttpointer identlist ; /* ptr to chain of class ident's */ - dnttpointer friendlist ; /* ptr to K_FRIEND list */ - dnttpointer arglist ; /* ptr to argument list */ - dnttpointer expansions ; /* ptr to expansion list */ -}; - -/* Template-class arguments are a list of TEMPL_ARG records - chained together. The "name" field is the name of the formal. - E.g.: - - template class q { ... }; - - Then "T" is the name of the formal argument. */ - -struct dntt_type_templ_arg -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_TEMPL_ARG */ - unsigned int usagetype: 1; /* 0 type-name 1 expression */ - unsigned int unused: 20; - vtpointer name ; /* name of argument */ - dnttpointer type ; /* for non type arguments */ - dnttpointer nextarg ; /* Next argument if any */ - long future[2] ; /* padding to 3-word block end */ -}; - -/* FUNC_TEMPLATE records are sort of like FUNCTION, but are emitted - for template member functions. E.g., - - template class q - { - ... - void f(); - ... - }; - - Within the list of FIELDs/GENFIELDs defining the member list - of the template "q", "f" would appear as a FUNC_TEMPLATE. - We'll also see instances of FUNCTION "f" records for each - instantiation of the template. */ - -struct dntt_type_func_template -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_FUNC_TEMPLATE */ - unsigned int public: 1; /* 1 => globally visible */ - unsigned int language: 4; /* type of language */ - unsigned int level: 5; /* nesting level (top level = 0)*/ - unsigned int optimize: 2; /* level of optimization */ - unsigned int varargs: 1; /* ellipses. Pascal/800 later */ - unsigned int info: 4; /* lang-specific stuff; F_xxxx */ - unsigned int inlined: 1; - unsigned int localloc: 1; /* 0 at top, 1 at end of block */ - unsigned int unused: 2; - vtpointer name ; /* name of function */ - vtpointer alias ; /* alternate name, if any */ - dnttpointer firstparam ; /* first FPARAM, if any */ - dnttpointer retval ; /* return type, if any */ - dnttpointer arglist ; /* ptr to argument list */ -}; - -/* LINK is apparently intended to link together function template - definitions with their instantiations. However, it is not clear - why this would be needed, except to provide the information on - a "ptype" command. And as far as I can tell, aCC does not - generate this record. */ - -struct dntt_type_link -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* always DNTT_TYPE_LINK */ - unsigned int linkKind: 4; /* always LINK_UNKNOWN */ - unsigned int unused: 17; - long future1 ; /* expansion */ - dnttpointer ptr1 ; /* link from template */ - dnttpointer ptr2 ; /* to expansion */ - long future[2] ; /* padding to 3-word block end */ -}; - -/* end of C++ specific SOM's. */ - -/* DNTT_TYPE_DYN_ARRAY_DESC is unused by GDB */ -/* DNTT_TYPE_DESC_SUBRANGE is unused by GDB */ -/* DNTT_TYPE_BEGIN_EXT is unused by GDB */ -/* DNTT_TYPE_INLN is unused by GDB */ -/* DNTT_TYPE_INLN_LIST is unused by GDB */ -/* DNTT_TYPE_ALIAS is unused by GDB */ - -struct dntt_type_doc_function -{ - unsigned int extension: 1; /* always zero */ - unsigned int kind: 10; /* K_DOC_FUNCTION or */ - /* K_DOC_MEMFUNC */ - unsigned int global: 1; /* 1 => globally visible */ - unsigned int language: 4; /* type of language */ - unsigned int level: 5; /* nesting level (top level = 0)*/ - unsigned int optimize: 2; /* level of optimization */ - unsigned int varargs: 1; /* ellipses. Pascal/800 later */ - unsigned int info: 4; /* lang-specific stuff; F_xxxx */ - unsigned int inlined: 1; - unsigned int localloc: 1; /* 0 at top, 1 at end of block */ - unsigned int expansion: 1; /* 1 = function expansion */ - unsigned int doc_clone: 1; - vtpointer name; /* name of function */ - vtpointer alias; /* alternate name, if any */ - dnttpointer firstparam; /* first FPARAM, if any */ - sltpointer address; /* code and text locations */ - CORE_ADDR entryaddr; /* address of entry point */ - dnttpointer retval; /* return type, if any */ - CORE_ADDR lowaddr; /* lowest address of function */ - CORE_ADDR hiaddr; /* highest address of function */ - dnttpointer inline_list; /* pointer to first inline */ - ltpointer lt_offset; /* start of frag/cp line table */ - ctxtpointer ctxt_offset; /* start of context table for this routine */ -}; - -/* DNTT_TYPE_DOC_MEMFUNC is unused by GDB */ - -/* DNTT_TYPE_GENERIC and DNTT_TYPE_BLOCK are convience structures - so we can examine a DNTT entry in a generic fashion. */ -struct dntt_type_generic -{ - unsigned int word[9]; -}; - -struct dntt_type_block -{ - unsigned int extension: 1; - unsigned int kind: 10; - unsigned int unused: 21; - unsigned int word[2]; -}; - -/* One entry in a DNTT (either the LNTT or GNTT). - This is a union of the above 60 or so structure definitions. */ - -union dnttentry -{ - struct dntt_type_srcfile dsfile; - struct dntt_type_module dmodule; - struct dntt_type_function dfunc; - struct dntt_type_function dentry; - struct dntt_type_begin dbegin; - struct dntt_type_end dend; - struct dntt_type_fparam dfparam; - struct dntt_type_svar dsvar; - struct dntt_type_dvar ddvar; - struct dntt_type_const dconst; - struct dntt_type_type dtype; - struct dntt_type_type dtag; - struct dntt_type_pointer dptr; - struct dntt_type_enum denum; - struct dntt_type_memenum dmember; - struct dntt_type_set dset; - struct dntt_type_subrange dsubr; - struct dntt_type_array darray; - struct dntt_type_struct dstruct; - struct dntt_type_union dunion; - struct dntt_type_field dfield; - struct dntt_type_functype dfunctype; - struct dntt_type_with dwith; - struct dntt_type_function dblockdata; - struct dntt_type_class_scope dclass_scope; - struct dntt_type_pointer dreference; - struct dntt_type_ptrmem dptrmem; - struct dntt_type_ptrmemfunc dptrmemfunc; - struct dntt_type_class dclass; - struct dntt_type_genfield dgenfield; - struct dntt_type_vfunc dvfunc; - struct dntt_type_memaccess dmemaccess; - struct dntt_type_inheritance dinheritance; - struct dntt_type_friend_class dfriend_class; - struct dntt_type_friend_func dfriend_func; - struct dntt_type_modifier dmodifier; - struct dntt_type_object_id dobject_id; - struct dntt_type_template dtemplate; - struct dntt_type_templ_arg dtempl_arg; - struct dntt_type_func_template dfunc_template; - struct dntt_type_link dlink; - struct dntt_type_doc_function ddocfunc; - struct dntt_type_generic dgeneric; - struct dntt_type_block dblock; -}; - -/* Source line entry types. */ -enum slttype -{ - SLT_NORMAL, - SLT_SRCFILE, - SLT_MODULE, - SLT_FUNCTION, - SLT_ENTRY, - SLT_BEGIN, - SLT_END, - SLT_WITH, - SLT_EXIT, - SLT_ASSIST, - SLT_MARKER, - SLT_CLASS_SCOPE, - SLT_INLN, - SLT_NORMAL_OFFSET, -}; - -/* A normal source line entry. Simply provides a mapping of a source - line number to a code address. - - SLTDESC will always be SLT_NORMAL or SLT_EXIT. */ - -struct slt_normal -{ - unsigned int sltdesc: 4; - unsigned int line: 28; - CORE_ADDR address; -}; - -struct slt_normal_off -{ - unsigned int sltdesc: 4; - unsigned int offset: 6; - unsigned int line: 22; - CORE_ADDR address; -}; - -/* A special source line entry. Provides a mapping of a declaration - to a line number. These entries point back into the DNTT which - references them. */ - -struct slt_special -{ - unsigned int sltdesc: 4; - unsigned int line: 28; - dnttpointer backptr; -}; - -/* Used to describe nesting. - - For nested languages, an slt_assist entry must follow each SLT_FUNC - entry in the SLT. The address field will point forward to the - first slt_normal entry within the function's scope. */ - -struct slt_assist -{ - unsigned int sltdesc: 4; - unsigned int unused: 28; - sltpointer address; -}; - -struct slt_generic -{ - unsigned int word[2]; -}; - -union sltentry -{ - struct slt_normal snorm; - struct slt_normal_off snormoff; - struct slt_special sspec; - struct slt_assist sasst; - struct slt_generic sgeneric; -}; - -/* $LINES$ declarations - This is the line table used for optimized code, which is only present - in the new $PROGRAM_INFO$ debug space. */ - -#define DST_LN_ESCAPE_FLAG1 15 -#define DST_LN_ESCAPE_FLAG2 14 -#define DST_LN_CTX_SPEC1 13 -#define DST_LN_CTX_SPEC2 12 - -/* Escape function codes: */ - -typedef enum -{ - dst_ln_pad, /* pad byte */ - dst_ln_escape_1, /* reserved */ - dst_ln_dpc1_dln1, /* 1 byte line delta, 1 byte pc delta */ - dst_ln_dpc2_dln2, /* 2 bytes line delta, 2 bytes pc delta */ - dst_ln_pc4_ln4, /* 4 bytes ABSOLUTE line number, 4 bytes ABSOLUTE pc */ - dst_ln_dpc0_dln1, /* 1 byte line delta, pc delta = 0 */ - dst_ln_ln_off_1, /* statement escape, stmt # = 1 (2nd stmt on line) */ - dst_ln_ln_off, /* statement escape, stmt # = next byte */ - dst_ln_entry, /* entry escape, next byte is entry number */ - dst_ln_exit, /* exit escape */ - dst_ln_stmt_end, /* gap escape, 4 bytes pc delta */ - dst_ln_stmt_cp, /* current stmt is a critical point */ - dst_ln_escape_12, /* reserved */ - dst_ln_escape_13, /* this is an exception site record */ - dst_ln_nxt_byte, /* next byte contains the real escape code */ - dst_ln_end, /* end escape, final entry follows */ - dst_ln_escape1_END_OF_ENUM -} -dst_ln_escape1_t; - -typedef enum -{ - dst_ln_ctx_1, /* next byte describes context switch with 5-bit */ - /* index into the image table and 3-bit run length. */ - /* If run length is 0, end with another cxt specifier or ctx_end */ - dst_ln_ctx_2, /* next 2 bytes switch context: 13 bit index, 3 bit run length */ - dst_ln_ctx_4, /* next 4 bytes switch context: 29 bit index, 3 bit run length */ - dst_ln_ctx_end, /* end current context */ - dst_ln_col_run_1, /* next byte is column position of start of next statement, */ - /* following byte is length of statement */ - dst_ln_col_run_2, /* next 2 bytes is column position of start of next statement, */ - /* following 2 bytes is length of statement */ - dst_ln_init_base1, /* next 4 bytes are absolute PC, followed by 1 byte of line number */ - dst_ln_init_base2, /* next 4 bytes are absolute PC, followed by 2 bytes of line number */ - dst_ln_init_base3, /* next 4 bytes are absolute PC, followed by 3 bytes of line number */ - dst_ln_escape2_END_OF_ENUM -} -dst_ln_escape2_t; - -typedef union -{ - struct - { - unsigned int pc_delta : 4; /* 4 bit pc delta */ - int ln_delta : 4; /* 4 bit line number delta */ - } - delta; - - struct - { - unsigned int esc_flag : 4; /* alias for pc_delta */ - unsigned int esc_code : 4; /* escape function code (dst_ln_escape1_t, or ...2_t */ - } - esc; - - struct - { - unsigned int esc_flag : 4; /* dst_ln_ctx_spec1, or dst_ln_ctx_spec2 */ - unsigned int run_length : 2; - unsigned int ctx_index : 2; /* ...spec2 contains index; ...spec1, index - 4 */ - } - ctx_spec; - - char sdata; /* signed data byte */ - unsigned char udata; /* unsigned data byte */ -} -dst_ln_entry_t, - * dst_ln_entry_ptr_t; - -/* Warning: although the above union occupies only 1 byte the compiler treats - it as having size 2 (the minimum size of a struct). Therefore a sequence of - dst_ln_entry_t's cannot be described as an array, and walking through such a - sequence requires convoluted code such as - ln_ptr = (dst_ln_entry_ptr_t) (char*) ln_ptr + 1 - We regret the inconvenience. */ - -/* Structure for interpreting the byte following a dst_ln_ctx1 entry. */ -typedef struct -{ - unsigned int ctx1_index : 5; /* 5 bit index into context table */ - unsigned int ctx1_run_length : 3; /* 3 bit run length */ -} dst_ln_ctx1_t, - *dst_ln_ctx1_ptr_t; - -/* Structure for interpreting the bytes following a dst_ln_ctx2 entry. */ -typedef struct -{ - unsigned int ctx2_index : 13; /* 13 bit index into context table */ - unsigned int ctx2_run_length : 3; /* 3 bit run length */ -} dst_ln_ctx2_t, - *dst_ln_ctx2_ptr_t; - -/* Structure for interpreting the bytes following a dst_ln_ctx4 entry. */ -typedef struct -{ - unsigned int ctx4_index : 29; /* 29 bit index into context table */ - unsigned int ctx4_run_length : 3; /* 3 bit run length */ -} dst_ln_ctx4_t, - *dst_ln_ctx4_ptr_t; - - -/* PXDB definitions. - - PXDB is a post-processor which takes the executable file - and massages the debug information so that the debugger may - start up and run more efficiently. Some of the tasks - performed by PXDB are: - - o Remove duplicate global type and variable information - from the GNTT, - - o Append the GNTT onto the end of the LNTT and place both - back in the LNTT section, - - o Build quick look-up tables (description follows) for - files, procedures, modules, and paragraphs (for Cobol), - placing these in the GNTT section, - - o Reconstruct the header appearing in the header section - to access this information. - - The "quick look-up" tables are in the $GNTT$ sub-space, in - the following order: - - Procedures -sorted by address - Source files -sorted by address (of the - generated code from routines) - Modules -sorted by address - Classes - - Address Alias -sorted by index - Object IDs -sorted by object identifier - - Most quick entries have (0-based) indices into the LNTT tables to - the full entries for the item it describes. - - The post-PXDB header is in the $HEADER$ sub-space. Alas, it - occurs in different forms, depending on the optimization level - in the compilation step and whether PXDB was run or not. The - worst part is the forms aren't self-describing, so we'll have - to grovel in the bits to figure out what kind we're looking at - (see hp_get_header in hp-psymtab-read.c). */ - -/* PXDB versions. */ - -#define PXDB_VERSION_CPLUSPLUS 1 -#define PXDB_VERSION_7_4 2 -#define PXDB_VERSION_CPP_30 3 -#define PXDB_VERSION_DDE_3_2A 4 -#define PXDB_VERSION_DDE_3_2 5 -#define PXDB_VERSION_DDE_4_0 6 - -#define PXDB_VERSION_2_1 1 - -/* Header version for the case that there is no DOC info - but the executable has been processed by pxdb (the easy - case, from "cc -g"). */ - -typedef struct PXDB_struct -{ - int pd_entries; /* # of entries in function look-up table */ - int fd_entries; /* # of entries in file look-up table */ - int md_entries; /* # of entries in module look-up table */ - unsigned int pxdbed : 1; /* 1 => file has been preprocessed */ - unsigned int bighdr : 1; /* 1 => this header contains 'time' word */ - unsigned int sa_header : 1;/* 1 => created by SA version of pxdb */ - /* used for version check in xdb */ - unsigned int inlined: 1; /* one or more functions have been inlined */ - unsigned int spare:12; - short version; /* pxdb header version */ - int globals; /* index into the DNTT where GNTT begins */ - unsigned int time; /* modify time of file before being pxdbed */ - int pg_entries; /* # of entries in label look-up table */ - int functions; /* actual number of functions */ - int files; /* actual number of files */ - int cd_entries; /* # of entries in class look-up table */ - int aa_entries; /* # of entries in addr alias look-up table */ - int oi_entries; /* # of entries in object id look-up table */ -} PXDB_header, *PXDB_header_ptr; - -/* Header version for the case that there is no DOC info and the - executable has NOT been processed by pxdb. */ - -typedef struct XDB_header_struct -{ - long gntt_length; - long lntt_length; - long slt_length; - long vt_length; - long xt_length; -} XDB_header; - -/* Header version for the case that there is DOC info and the - executable has been processed by pxdb. */ - -typedef struct DOC_info_PXDB_header_struct -{ - unsigned int xdb_header: 1; /* bit set if this is post-3.1 xdb */ - unsigned int doc_header: 1; /* bit set if this is doc-style header */ - unsigned int version: 8; /* version of pxdb see defines - PXDB_VERSION_* in this file. */ - unsigned int reserved_for_flags: 16;/* for future use; -- must be - set to zero. */ - unsigned int has_aux_pd_table: 1; /* $GNTT$ has aux PD table */ - unsigned int has_expr_table: 1; /* space has $EXPR$ */ - unsigned int has_range_table: 1; /* space has $RANGE$ */ - unsigned int has_context_table: 1; /* space has $SRC_CTXT$ */ - unsigned int has_lines_table: 1; /* space contains a $LINES$ - subspace for line tables. */ - unsigned int has_lt_offset_map: 1; /* space contains an lt_offset - subspace for line table mapping. */ - /* The following fields are the same as those in the PXDB_header in $DEBUG$ */ - int pd_entries; /* # of entries in function look-up table */ - int fd_entries; /* # of entries in file look-up table */ - int md_entries; /* # of entries in module look-up table */ - unsigned int pxdbed : 1; /* 1 => file has been preprocessed */ - unsigned int bighdr : 1; /* 1 => this header contains 'time' word */ - unsigned int sa_header : 1;/* 1 => created by SA version of pxdb */ - /* used for version check in xdb */ - unsigned int inlined: 1; /* one or more functions have been inlined */ - unsigned int spare : 28; - int globals; /* index into the DNTT where GNTT begins */ - unsigned int time; /* modify time of file before being pxdbed */ - int pg_entries; /* # of entries in label look-up table */ - int functions; /* actual number of functions */ - int files; /* actual number of files */ - int cd_entries; /* # of entries in class look-up table */ - int aa_entries; /* # of entries in addr alias look-up table */ - int oi_entries; /* # of entries in object id look-up table */ -} DOC_info_PXDB_header; - -/* Header version for the case that there is DOC info and the - executable has NOT been processed by pxdb. */ - -typedef struct DOC_info_header_struct -{ - unsigned int xdb_header: 1; /* bit set if this is post-3.1 xdb */ - unsigned int doc_header: 1; /* bit set if this is doc-style header*/ - unsigned int version: 8; /* version of debug/header - format. For 10.0 the value - will be 1. For "Davis" the value is 2. */ - unsigned int reserved_for_flags: 18; /* for future use; -- must be set to zero. */ - unsigned int has_range_table: 1; /* space contains a $RANGE$ subspace for variable ranges. */ - unsigned int has_context_table: 1; /* space contains a $CTXT$ subspace for context/inline table. */ - unsigned int has_lines_table: 1; /* space contains a $LINES$ subspace for line tables. */ - unsigned int has_lt_offset_map: 1; /* space contains an lt_offset subspace for line table mapping. */ - - long gntt_length; /* same as old header */ - long lntt_length; /* same as old header */ - long slt_length; /* same as old header */ - long vt_length; /* same as old header */ - long xt_length; /* same as old header */ - long ctxt_length; /* present only if version >= 2 */ - long range_length; /* present only if version >= 2 */ - long expr_length; /* present only if version >= 2 */ - -} DOC_info_header; - -typedef union GenericDebugHeader_union -{ - PXDB_header no_doc; - DOC_info_PXDB_header doc; - XDB_header no_pxdb_no_doc; - DOC_info_header no_pxdb_doc; -} GenericDebugHeader; - - -/* Procedure Descriptor: - An element of the procedure quick look-up table. */ - -typedef struct quick_procedure -{ - long isym; /* 0-based index of first symbol - for procedure in $LNTT$, - i.e. the procedure itself. */ - CORE_ADDR adrStart; /* memory adr of start of proc */ - CORE_ADDR adrEnd; /* memory adr of end of proc */ - char *sbAlias; /* alias name of procedure */ - char *sbProc; /* real name of procedure */ - CORE_ADDR adrBp; /* address of entry breakpoint */ - CORE_ADDR adrExitBp; /* address of exit breakpoint */ - int icd; /* member of this class (index) */ - unsigned int ipd; /* index of template for this */ - /* function (index) */ - unsigned int unused: 5; - unsigned int no_lt_offset: 1;/* no entry in lt_offset table */ - unsigned int fTemplate: 1; /* function template */ - unsigned int fExpansion: 1; /* function expansion */ - unsigned int linked : 1; /* linked with other expansions */ - unsigned int duplicate: 1; /* clone of another procedure */ - unsigned int overloaded:1; /* overloaded function */ - unsigned int member: 1; /* class member function */ - unsigned int constructor:1; /* constructor function */ - unsigned int destructor:1; /* destructor function */ - unsigned int Static: 1; /* static function */ - unsigned int Virtual: 1; /* virtual function */ - unsigned int constant: 1; /* constant function */ - unsigned int pure: 1; /* pure (virtual) function */ - unsigned int language: 4; /* procedure's language */ - unsigned int inlined: 1; /* function has been inlined */ - unsigned int Operator: 1; /* operator function */ - unsigned int stub: 1; /* bodyless function */ - unsigned int optimize: 2; /* optimization level */ - unsigned int level: 5; /* nesting level (top=0) */ -} quick_procedure_entry, *quick_procedure_entry_ptr; - -/* Source File Descriptor: - An element of the source file quick look-up table. */ - -typedef struct quick_source -{ - long isym; /* 0-based index in $LNTT$ of - first symbol for this file. */ - CORE_ADDR adrStart; /* mem adr of start of file's code */ - CORE_ADDR adrEnd; /* mem adr of end of file's code */ - char *sbFile; /* name of source file */ - unsigned int fHasDecl: 1; /* do we have a .d file? */ - unsigned int fWarned: 1; /* have warned about age problems? */ - unsigned int fSrcfile: 1; /* 0 => include 1=> source */ - unsigned short ilnMac; /* lines in file (0 if don't know) */ - int ipd; /* 0-based index of first procedure - in this file, in the quick - look-up table of procedures. */ - unsigned int *rgLn; /* line pointer array, if any */ -} quick_file_entry, *quick_file_entry_ptr; - -/* Module Descriptor: - An element of the module quick reference table. */ - -typedef struct quick_module -{ - long isym; /* 0-based index of first - symbol for module. */ - CORE_ADDR adrStart; /* adr of start of mod. */ - CORE_ADDR adrEnd; /* adr of end of mod. */ - char *sbAlias; /* alias name of module */ - char *sbMod; /* real name of module */ - unsigned int imports: 1; /* module have any imports? */ - unsigned int vars_in_front: 1; /* module globals in front? */ - unsigned int vars_in_gaps: 1; /* module globals in gaps? */ - unsigned int language: 4; /* type of language */ - unsigned int unused : 25; - unsigned int unused2; /* space for future stuff */ -} quick_module_entry, *quick_module_entry_ptr; - -/* Auxiliary Procedure Descriptor: - An element of the auxiliary procedure quick look-up table. */ - -typedef struct quick_aux_procedure -{ - long isym_inln; /* start on inline list for proc */ - long spare; -} quick_aux_procedure_entry, *quick_aux_procedure_entry_ptr; - -/* Paragraph Descriptor: - An element of the paragraph quick look-up table. */ - -typedef struct quick_paragraph -{ - long isym; /* first symbol for label (index) */ - CORE_ADDR adrStart; /* memory adr of start of label */ - CORE_ADDR adrEnd; /* memory adr of end of label */ - char *sbLab; /* name of label */ - unsigned int inst; /* Used in xdb to store inst @ bp */ - unsigned int sect: 1; /* true = section, false = parag. */ - unsigned int unused: 31; /* future use */ -} quick_paragraph_entry, *quick_paragraph_entry_ptr; - -/* Class Descriptor: - An element of the class quick look-up table. */ - -typedef struct quick_class -{ - char *sbClass; /* name of class */ - long isym; /* class symbol (tag) */ - unsigned int type : 2; /* 0=class, 1=union, 2=struct */ - unsigned int fTemplate : 1;/* class template */ - unsigned int expansion : 1;/* template expansion */ - unsigned int unused :28; - sltpointer lowscope; /* beginning of defined scope */ - sltpointer hiscope; /* end of defined scope */ -} quick_class_entry, *quick_class_entry_ptr; - -/* Address Alias Entry - An element of the address alias quick look-up table. */ - -typedef struct quick_alias -{ - CORE_ADDR low; - CORE_ADDR high; - int index; - unsigned int unused : 31; - unsigned int alternate : 1; /* alternate unnamed aliases? */ -} quick_alias_entry, *quick_alias_entry_ptr; - -/* Object Identification Entry - An element of the object identification quick look-up table. */ - -typedef struct quick_obj_ID -{ - CORE_ADDR obj_ident; /* class identifier */ - long isym; /* class symbol */ - long offset; /* offset to object start */ -} quick_obj_ID_entry, *quick_obj_ID_entry_ptr; - -#endif /* HP_SYMTAB_INCLUDED */ diff --git a/include/ieee.h b/include/ieee.h deleted file mode 100644 index 72fcad420f9..00000000000 --- a/include/ieee.h +++ /dev/null @@ -1,165 +0,0 @@ -/* IEEE Standard 695-1980 "Universal Format for Object Modules" header file - - Copyright 2001 Free Software Foundation, Inc. - - This program 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, 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., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. - - Contributed by Cygnus Support. */ - -#define N_W_VARIABLES 8 -#define Module_Beginning 0xe0 - -typedef struct ieee_module - { - char *processor; - char *module_name; - } -ieee_module_begin_type; - -#define Address_Descriptor 0xec -typedef struct ieee_address - { - bfd_vma number_of_bits_mau; - bfd_vma number_of_maus_in_address; - - unsigned char byte_order; -#define IEEE_LITTLE 0xcc -#define IEEE_BIG 0xcd - } -ieee_address_descriptor_type; - -typedef union ieee_w_variable - { - file_ptr offset[N_W_VARIABLES]; - - struct - { - file_ptr extension_record; - file_ptr environmental_record; - file_ptr section_part; - file_ptr external_part; - file_ptr debug_information_part; - file_ptr data_part; - file_ptr trailer_part; - file_ptr me_record; - } - r; - } -ieee_w_variable_type; - -typedef enum ieee_record - { - ieee_number_start_enum = 0x00, - ieee_number_end_enum=0x7f, - ieee_number_repeat_start_enum = 0x80, - ieee_number_repeat_end_enum = 0x88, - ieee_number_repeat_4_enum = 0x84, - ieee_number_repeat_3_enum = 0x83, - ieee_number_repeat_2_enum = 0x82, - ieee_number_repeat_1_enum = 0x81, - ieee_module_beginning_enum = 0xe0, - ieee_module_end_enum = 0xe1, - ieee_extension_length_1_enum = 0xde, - ieee_extension_length_2_enum = 0xdf, - ieee_section_type_enum = 0xe6, - ieee_section_alignment_enum = 0xe7, - ieee_external_symbol_enum = 0xe8, - ieee_comma = 0x90, - ieee_external_reference_enum = 0xe9, - ieee_set_current_section_enum = 0xe5, - ieee_address_descriptor_enum = 0xec, - ieee_load_constant_bytes_enum = 0xed, - ieee_load_with_relocation_enum = 0xe4, - - ieee_variable_A_enum = 0xc1, - ieee_variable_B_enum = 0xc2, - ieee_variable_C_enum = 0xc3, - ieee_variable_D_enum = 0xc4, - ieee_variable_E_enum = 0xc5, - ieee_variable_F_enum = 0xc6, - ieee_variable_G_enum = 0xc7, - ieee_variable_H_enum = 0xc8, - ieee_variable_I_enum = 0xc9, - ieee_variable_J_enum = 0xca, - ieee_variable_K_enum = 0xcb, - ieee_variable_L_enum = 0xcc, - ieee_variable_M_enum = 0xcd, - ieee_variable_N_enum = 0xce, - ieee_variable_O_enum = 0xcf, - ieee_variable_P_enum = 0xd0, - ieee_variable_Q_enum = 0xd1, - ieee_variable_R_enum = 0xd2, - ieee_variable_S_enum = 0xd3, - ieee_variable_T_enum = 0xd4, - ieee_variable_U_enum = 0xd5, - ieee_variable_V_enum = 0xd6, - ieee_variable_W_enum = 0xd7, - ieee_variable_X_enum = 0xd8, - ieee_variable_Y_enum = 0xd9, - ieee_variable_Z_enum = 0xda, - ieee_function_plus_enum = 0xa5, - ieee_function_minus_enum = 0xa6, - ieee_function_signed_open_b_enum = 0xba, - ieee_function_signed_close_b_enum = 0xbb, - - ieee_function_unsigned_open_b_enum = 0xbc, - ieee_function_unsigned_close_b_enum = 0xbd, - - ieee_function_either_open_b_enum = 0xbe, - ieee_function_either_close_b_enum = 0xbf, - ieee_record_seperator_enum = 0xdb, - - ieee_e2_first_byte_enum = 0xe2, - ieee_section_size_enum = 0xe2d3, - ieee_physical_region_size_enum = 0xe2c1, - ieee_region_base_address_enum = 0xe2c2, - ieee_mau_size_enum = 0xe2c6, - ieee_m_value_enum = 0xe2cd, - ieee_section_base_address_enum = 0xe2cc, - ieee_asn_record_enum = 0xe2ce, - ieee_section_offset_enum = 0xe2d2, - ieee_value_starting_address_enum = 0xe2c7, - ieee_assign_value_to_variable_enum = 0xe2d7, - ieee_set_current_pc_enum = 0xe2d0, - ieee_value_record_enum = 0xe2c9, - ieee_nn_record = 0xf0, - ieee_at_record_enum = 0xf1, - ieee_ty_record_enum = 0xf2, - ieee_attribute_record_enum = 0xf1c9, - ieee_atn_record_enum = 0xf1ce, - ieee_external_reference_info_record_enum = 0xf1d8, - ieee_weak_external_reference_enum= 0xf4, - ieee_repeat_data_enum = 0xf7, - ieee_bb_record_enum = 0xf8, - ieee_be_record_enum = 0xf9 - } -ieee_record_enum_type; - -typedef struct ieee_section - { - unsigned int section_index; - unsigned int section_type; - char * section_name; - unsigned int parent_section_index; - unsigned int sibling_section_index; - unsigned int context_index; - } -ieee_section_type; - -#define IEEE_REFERENCE_BASE 11 -#define IEEE_PUBLIC_BASE 32 -#define IEEE_SECTION_NUMBER_BASE 1 - diff --git a/include/libiberty.h b/include/libiberty.h deleted file mode 100644 index 1328d3eb14c..00000000000 --- a/include/libiberty.h +++ /dev/null @@ -1,648 +0,0 @@ -/* Function declarations for libiberty. - - Copyright 2001, 2002, 2005 Free Software Foundation, Inc. - - Note - certain prototypes declared in this header file are for - functions whoes implementation copyright does not belong to the - FSF. Those prototypes are present in this file for reference - purposes only and their presence in this file should not construed - as an indication of ownership by the FSF of the implementation of - those functions in any way or form whatsoever. - - This program 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, 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., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. - - Written by Cygnus Support, 1994. - - The libiberty library provides a number of functions which are - missing on some operating systems. We do not declare those here, - to avoid conflicts with the system header files on operating - systems that do support those functions. In this file we only - declare those functions which are specific to libiberty. */ - -#ifndef LIBIBERTY_H -#define LIBIBERTY_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ansidecl.h" - -/* Get a definition for size_t. */ -#include -/* Get a definition for va_list. */ -#include - -#include - -/* If the OS supports it, ensure that the supplied stream is setup to - avoid any multi-threaded locking. Otherwise leave the FILE pointer - unchanged. If the stream is NULL do nothing. */ - -extern void unlock_stream (FILE *); - -/* If the OS supports it, ensure that the standard I/O streams, stdin, - stdout and stderr are setup to avoid any multi-threaded locking. - Otherwise do nothing. */ - -extern void unlock_std_streams (void); - -/* Open and return a FILE pointer. If the OS supports it, ensure that - the stream is setup to avoid any multi-threaded locking. Otherwise - return the FILE pointer unchanged. */ - -extern FILE *fopen_unlocked (const char *, const char *); -extern FILE *fdopen_unlocked (int, const char *); -extern FILE *freopen_unlocked (const char *, const char *, FILE *); - -/* Build an argument vector from a string. Allocates memory using - malloc. Use freeargv to free the vector. */ - -extern char **buildargv (const char *) ATTRIBUTE_MALLOC; - -/* Free a vector returned by buildargv. */ - -extern void freeargv (char **); - -/* Duplicate an argument vector. Allocates memory using malloc. Use - freeargv to free the vector. */ - -extern char **dupargv (char **) ATTRIBUTE_MALLOC; - -/* Expand "@file" arguments in argv. */ - -extern void expandargv PARAMS ((int *, char ***)); - -/* Return the last component of a path name. Note that we can't use a - prototype here because the parameter is declared inconsistently - across different systems, sometimes as "char *" and sometimes as - "const char *" */ - -/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is - undefined, we haven't run the autoconf check so provide the - declaration without arguments. If it is 0, we checked and failed - to find the declaration so provide a fully prototyped one. If it - is 1, we found it so don't provide any declaration at all. */ -#if !HAVE_DECL_BASENAME -#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined(__NetBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) || defined (HAVE_DECL_BASENAME) -extern char *basename (const char *); -#else -/* Do not allow basename to be used if there is no prototype seen. We - either need to use the above prototype or have one from - autoconf which would result in HAVE_DECL_BASENAME being set. */ -#define basename basename_cannot_be_used_without_a_prototype -#endif -#endif - -/* A well-defined basename () that is always compiled in. */ - -extern const char *lbasename (const char *); - -/* A well-defined realpath () that is always compiled in. */ - -extern char *lrealpath (const char *); - -/* Concatenate an arbitrary number of strings. You must pass NULL as - the last argument of this function, to terminate the list of - strings. Allocates memory using xmalloc. */ - -extern char *concat (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_SENTINEL; - -/* Concatenate an arbitrary number of strings. You must pass NULL as - the last argument of this function, to terminate the list of - strings. Allocates memory using xmalloc. The first argument is - not one of the strings to be concatenated, but if not NULL is a - pointer to be freed after the new string is created, similar to the - way xrealloc works. */ - -extern char *reconcat (char *, const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_SENTINEL; - -/* Determine the length of concatenating an arbitrary number of - strings. You must pass NULL as the last argument of this function, - to terminate the list of strings. */ - -extern unsigned long concat_length (const char *, ...) ATTRIBUTE_SENTINEL; - -/* Concatenate an arbitrary number of strings into a SUPPLIED area of - memory. You must pass NULL as the last argument of this function, - to terminate the list of strings. The supplied memory is assumed - to be large enough. */ - -extern char *concat_copy (char *, const char *, ...) ATTRIBUTE_SENTINEL; - -/* Concatenate an arbitrary number of strings into a GLOBAL area of - memory. You must pass NULL as the last argument of this function, - to terminate the list of strings. The supplied memory is assumed - to be large enough. */ - -extern char *concat_copy2 (const char *, ...) ATTRIBUTE_SENTINEL; - -/* This is the global area used by concat_copy2. */ - -extern char *libiberty_concat_ptr; - -/* Concatenate an arbitrary number of strings. You must pass NULL as - the last argument of this function, to terminate the list of - strings. Allocates memory using alloca. The arguments are - evaluated twice! */ -#define ACONCAT(ACONCAT_PARAMS) \ - (libiberty_concat_ptr = (char *) alloca (concat_length ACONCAT_PARAMS + 1), \ - concat_copy2 ACONCAT_PARAMS) - -/* Check whether two file descriptors refer to the same file. */ - -extern int fdmatch (int fd1, int fd2); - -/* Return the position of the first bit set in the argument. */ -/* Prototypes vary from system to system, so we only provide a - prototype on systems where we know that we need it. */ -#if defined (HAVE_DECL_FFS) && !HAVE_DECL_FFS -extern int ffs(int); -#endif - -/* Get the working directory. The result is cached, so don't call - chdir() between calls to getpwd(). */ - -extern char * getpwd (void); - -/* Get the current time. */ -/* Prototypes vary from system to system, so we only provide a - prototype on systems where we know that we need it. */ -#ifdef __MINGW32__ -/* Forward declaration to avoid #include . */ -struct timeval; -extern int gettimeofday (struct timeval *, void *); -#endif - -/* Get the amount of time the process has run, in microseconds. */ - -extern long get_run_time (void); - -/* Generate a relocated path to some installation directory. Allocates - return value using malloc. */ - -extern char *make_relative_prefix (const char *, const char *, - const char *) ATTRIBUTE_MALLOC; - -/* Choose a temporary directory to use for scratch files. */ - -extern char *choose_temp_base (void) ATTRIBUTE_MALLOC; - -/* Return a temporary file name or NULL if unable to create one. */ - -extern char *make_temp_file (const char *) ATTRIBUTE_MALLOC; - -/* Remove a link to a file unless it is special. */ - -extern int unlink_if_ordinary (const char *); - -/* Allocate memory filled with spaces. Allocates using malloc. */ - -extern const char *spaces (int count); - -/* Return the maximum error number for which strerror will return a - string. */ - -extern int errno_max (void); - -/* Return the name of an errno value (e.g., strerrno (EINVAL) returns - "EINVAL"). */ - -extern const char *strerrno (int); - -/* Given the name of an errno value, return the value. */ - -extern int strtoerrno (const char *); - -/* ANSI's strerror(), but more robust. */ - -extern char *xstrerror (int); - -/* Return the maximum signal number for which strsignal will return a - string. */ - -extern int signo_max (void); - -/* Return a signal message string for a signal number - (e.g., strsignal (SIGHUP) returns something like "Hangup"). */ -/* This is commented out as it can conflict with one in system headers. - We still document its existence though. */ - -/*extern const char *strsignal (int);*/ - -/* Return the name of a signal number (e.g., strsigno (SIGHUP) returns - "SIGHUP"). */ - -extern const char *strsigno (int); - -/* Given the name of a signal, return its number. */ - -extern int strtosigno (const char *); - -/* Register a function to be run by xexit. Returns 0 on success. */ - -extern int xatexit (void (*fn) (void)); - -/* Exit, calling all the functions registered with xatexit. */ - -extern void xexit (int status) ATTRIBUTE_NORETURN; - -/* Set the program name used by xmalloc. */ - -extern void xmalloc_set_program_name (const char *); - -/* Report an allocation failure. */ -extern void xmalloc_failed (size_t) ATTRIBUTE_NORETURN; - -/* Allocate memory without fail. If malloc fails, this will print a - message to stderr (using the name set by xmalloc_set_program_name, - if any) and then call xexit. */ - -extern void *xmalloc (size_t) ATTRIBUTE_MALLOC; - -/* Reallocate memory without fail. This works like xmalloc. Note, - realloc type functions are not suitable for attribute malloc since - they may return the same address across multiple calls. */ - -extern void *xrealloc (void *, size_t); - -/* Allocate memory without fail and set it to zero. This works like - xmalloc. */ - -extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC; - -/* Copy a string into a memory buffer without fail. */ - -extern char *xstrdup (const char *) ATTRIBUTE_MALLOC; - -/* Copy at most N characters from string into a buffer without fail. */ - -extern char *xstrndup (const char *, size_t) ATTRIBUTE_MALLOC; - -/* Copy an existing memory buffer to a new memory buffer without fail. */ - -extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC; - -/* Physical memory routines. Return values are in BYTES. */ -extern double physmem_total (void); -extern double physmem_available (void); - - -/* These macros provide a K&R/C89/C++-friendly way of allocating structures - with nice encapsulation. The XDELETE*() macros are technically - superfluous, but provided here for symmetry. Using them consistently - makes it easier to update client code to use different allocators such - as new/delete and new[]/delete[]. */ - -/* Scalar allocators. */ - -#define XNEW(T) ((T *) xmalloc (sizeof (T))) -#define XCNEW(T) ((T *) xcalloc (1, sizeof (T))) -#define XDELETE(P) free ((void*) (P)) - -/* Array allocators. */ - -#define XNEWVEC(T, N) ((T *) xmalloc (sizeof (T) * (N))) -#define XCNEWVEC(T, N) ((T *) xcalloc ((N), sizeof (T))) -#define XRESIZEVEC(T, P, N) ((T *) xrealloc ((void *) (P), sizeof (T) * (N))) -#define XDELETEVEC(P) free ((void*) (P)) - -/* Allocators for variable-sized structures and raw buffers. */ - -#define XNEWVAR(T, S) ((T *) xmalloc ((S))) -#define XCNEWVAR(T, S) ((T *) xcalloc (1, (S))) -#define XRESIZEVAR(T, P, S) ((T *) xrealloc ((P), (S))) - -/* Type-safe obstack allocator. */ - -#define XOBNEW(O, T) ((T *) obstack_alloc ((O), sizeof (T))) -#define XOBFINISH(O, T) ((T) obstack_finish ((O))) - -/* hex character manipulation routines */ - -#define _hex_array_size 256 -#define _hex_bad 99 -extern const unsigned char _hex_value[_hex_array_size]; -extern void hex_init (void); -#define hex_p(c) (hex_value (c) != _hex_bad) -/* If you change this, note well: Some code relies on side effects in - the argument being performed exactly once. */ -#define hex_value(c) ((unsigned int) _hex_value[(unsigned char) (c)]) - -/* Flags for pex_init. These are bits to be or'ed together. */ - -/* Record subprocess times, if possible. */ -#define PEX_RECORD_TIMES 0x1 - -/* Use pipes for communication between processes, if possible. */ -#define PEX_USE_PIPES 0x2 - -/* Save files used for communication between processes. */ -#define PEX_SAVE_TEMPS 0x4 - -/* Prepare to execute one or more programs, with standard output of - each program fed to standard input of the next. - FLAGS As above. - PNAME The name of the program to report in error messages. - TEMPBASE A base name to use for temporary files; may be NULL to - use a random name. - Returns NULL on error. */ - -extern struct pex_obj *pex_init (int flags, const char *pname, - const char *tempbase); - -/* Flags for pex_run. These are bits to be or'ed together. */ - -/* Last program in pipeline. Standard output of program goes to - OUTNAME, or, if OUTNAME is NULL, to standard output of caller. Do - not set this if you want to call pex_read_output. After this is - set, pex_run may no longer be called with the same struct - pex_obj. */ -#define PEX_LAST 0x1 - -/* Search for program in executable search path. */ -#define PEX_SEARCH 0x2 - -/* OUTNAME is a suffix. */ -#define PEX_SUFFIX 0x4 - -/* Send program's standard error to standard output. */ -#define PEX_STDERR_TO_STDOUT 0x8 - -/* Input file should be opened in binary mode. This flag is ignored - on Unix. */ -#define PEX_BINARY_INPUT 0x10 - -/* Output file should be opened in binary mode. This flag is ignored - on Unix. For proper behaviour PEX_BINARY_INPUT and - PEX_BINARY_OUTPUT have to match appropriately--i.e., a call using - PEX_BINARY_OUTPUT should be followed by a call using - PEX_BINARY_INPUT. */ -#define PEX_BINARY_OUTPUT 0x20 - -/* Execute one program. Returns NULL on success. On error returns an - error string (typically just the name of a system call); the error - string is statically allocated. - - OBJ Returned by pex_init. - - FLAGS As above. - - EXECUTABLE The program to execute. - - ARGV NULL terminated array of arguments to pass to the program. - - OUTNAME Sets the output file name as follows: - - PEX_SUFFIX set (OUTNAME may not be NULL): - TEMPBASE parameter to pex_init not NULL: - Output file name is the concatenation of TEMPBASE - and OUTNAME. - TEMPBASE is NULL: - Output file name is a random file name ending in - OUTNAME. - PEX_SUFFIX not set: - OUTNAME not NULL: - Output file name is OUTNAME. - OUTNAME NULL, TEMPBASE not NULL: - Output file name is randomly chosen using - TEMPBASE. - OUTNAME NULL, TEMPBASE NULL: - Output file name is randomly chosen. - - If PEX_LAST is not set, the output file name is the - name to use for a temporary file holding stdout, if - any (there will not be a file if PEX_USE_PIPES is set - and the system supports pipes). If a file is used, it - will be removed when no longer needed unless - PEX_SAVE_TEMPS is set. - - If PEX_LAST is set, and OUTNAME is not NULL, standard - output is written to the output file name. The file - will not be removed. If PEX_LAST and PEX_SUFFIX are - both set, TEMPBASE may not be NULL. - - ERRNAME If not NULL, this is the name of a file to which - standard error is written. If NULL, standard error of - the program is standard error of the caller. - - ERR On an error return, *ERR is set to an errno value, or - to 0 if there is no relevant errno. -*/ - -extern const char *pex_run (struct pex_obj *obj, int flags, - const char *executable, char * const *argv, - const char *outname, const char *errname, - int *err); - -/* As for pex_run (), but takes an extra parameter to enable the - environment for the child process to be specified. - - ENV The environment for the child process, specified as - an array of character pointers. Each element of the - array should point to a string of the form VAR=VALUE, - with the exception of the last element which must be - a null pointer. -*/ - -extern const char *pex_run_in_environment (struct pex_obj *obj, int flags, - const char *executable, - char * const *argv, - char * const *env, - const char *outname, - const char *errname, int *err); - -/* Return a `FILE' pointer FP for the standard input of the first - program in the pipeline; FP is opened for writing. You must have - passed `PEX_USE_PIPES' to the `pex_init' call that returned OBJ. - You must close FP yourself with `fclose' to indicate that the - pipeline's input is complete. - - The file descriptor underlying FP is marked not to be inherited by - child processes. - - This call is not supported on systems which do not support pipes; - it returns with an error. (We could implement it by writing a - temporary file, but then you would need to write all your data and - close FP before your first call to `pex_run' -- and that wouldn't - work on systems that do support pipes: the pipe would fill up, and - you would block. So there isn't any easy way to conceal the - differences between the two types of systems.) - - If you call both `pex_write_input' and `pex_read_output', be - careful to avoid deadlock. If the output pipe fills up, so that - each program in the pipeline is waiting for the next to read more - data, and you fill the input pipe by writing more data to FP, then - there is no way to make progress: the only process that could read - data from the output pipe is you, but you are blocked on the input - pipe. */ - -extern FILE *pex_write_input (struct pex_obj *obj, int binary); - -/* Return a stream for a temporary file to pass to the first program - in the pipeline as input. The file name is chosen as for pex_run. - pex_run closes the file automatically; don't close it yourself. */ - -extern FILE *pex_input_file (struct pex_obj *obj, int flags, - const char *in_name); - -/* Return a stream for a pipe connected to the standard input of the - first program in the pipeline. You must have passed - `PEX_USE_PIPES' to `pex_init'. Close the returned stream - yourself. */ - -extern FILE *pex_input_pipe (struct pex_obj *obj, int binary); - -/* Read the standard output of the last program to be executed. - pex_run can not be called after this. BINARY should be non-zero if - the file should be opened in binary mode; this is ignored on Unix. - Returns NULL on error. Don't call fclose on the returned FILE; it - will be closed by pex_free. */ - -extern FILE *pex_read_output (struct pex_obj *, int binary); - -/* Return exit status of all programs in VECTOR. COUNT indicates the - size of VECTOR. The status codes in the vector are in the order of - the calls to pex_run. Returns 0 on error, 1 on success. */ - -extern int pex_get_status (struct pex_obj *, int count, int *vector); - -/* Return times of all programs in VECTOR. COUNT indicates the size - of VECTOR. struct pex_time is really just struct timeval, but that - is not portable to all systems. Returns 0 on error, 1 on - success. */ - -struct pex_time -{ - unsigned long user_seconds; - unsigned long user_microseconds; - unsigned long system_seconds; - unsigned long system_microseconds; -}; - -extern int pex_get_times (struct pex_obj *, int count, - struct pex_time *vector); - -/* Clean up a pex_obj. */ - -extern void pex_free (struct pex_obj *); - -/* Just execute one program. Return value is as for pex_run. - FLAGS Combination of PEX_SEARCH and PEX_STDERR_TO_STDOUT. - EXECUTABLE As for pex_run. - ARGV As for pex_run. - PNAME As for pex_init. - OUTNAME As for pex_run when PEX_LAST is set. - ERRNAME As for pex_run. - STATUS Set to exit status on success. - ERR As for pex_run. -*/ - -extern const char *pex_one (int flags, const char *executable, - char * const *argv, const char *pname, - const char *outname, const char *errname, - int *status, int *err); - -/* pexecute and pwait are the old pexecute interface, still here for - backward compatibility. Don't use these for new code. Instead, - use pex_init/pex_run/pex_get_status/pex_free, or pex_one. */ - -/* Definitions used by the pexecute routine. */ - -#define PEXECUTE_FIRST 1 -#define PEXECUTE_LAST 2 -#define PEXECUTE_ONE (PEXECUTE_FIRST + PEXECUTE_LAST) -#define PEXECUTE_SEARCH 4 -#define PEXECUTE_VERBOSE 8 - -/* Execute a program. */ - -extern int pexecute (const char *, char * const *, const char *, - const char *, char **, char **, int); - -/* Wait for pexecute to finish. */ - -extern int pwait (int, int *, int); - -#if !HAVE_DECL_ASPRINTF -/* Like sprintf but provides a pointer to malloc'd storage, which must - be freed by the caller. */ - -extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; -#endif - -#if !HAVE_DECL_VASPRINTF -/* Like vsprintf but provides a pointer to malloc'd storage, which - must be freed by the caller. */ - -extern int vasprintf (char **, const char *, va_list) ATTRIBUTE_PRINTF(2,0); -#endif - -#if defined(HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF -/* Like sprintf but prints at most N characters. */ -extern int snprintf (char *, size_t, const char *, ...) ATTRIBUTE_PRINTF_3; -#endif - -#if defined(HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF -/* Like vsprintf but prints at most N characters. */ -extern int vsnprintf (char *, size_t, const char *, va_list) ATTRIBUTE_PRINTF(3,0); -#endif - -#if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP -/* Compare version strings. */ -extern int strverscmp (const char *, const char *); -#endif - -#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) - -/* Drastically simplified alloca configurator. If we're using GCC, - we use __builtin_alloca; otherwise we use the C alloca. The C - alloca is always available. You can override GCC by defining - USE_C_ALLOCA yourself. The canonical autoconf macro C_ALLOCA is - also set/unset as it is often used to indicate whether code needs - to call alloca(0). */ -extern void *C_alloca (size_t) ATTRIBUTE_MALLOC; -#undef alloca -#if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA -# define alloca(x) __builtin_alloca(x) -# undef C_ALLOCA -# define ASTRDUP(X) \ - (__extension__ ({ const char *const libiberty_optr = (X); \ - const unsigned long libiberty_len = strlen (libiberty_optr) + 1; \ - char *const libiberty_nptr = (char *const) alloca (libiberty_len); \ - (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len); })) -#else -# define alloca(x) C_alloca(x) -# undef USE_C_ALLOCA -# define USE_C_ALLOCA 1 -# undef C_ALLOCA -# define C_ALLOCA 1 -extern const char *libiberty_optr; -extern char *libiberty_nptr; -extern unsigned long libiberty_len; -# define ASTRDUP(X) \ - (libiberty_optr = (X), \ - libiberty_len = strlen (libiberty_optr) + 1, \ - libiberty_nptr = (char *) alloca (libiberty_len), \ - (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len)) -#endif - -#ifdef __cplusplus -} -#endif - - -#endif /* ! defined (LIBIBERTY_H) */ diff --git a/include/md5.h b/include/md5.h deleted file mode 100644 index e8eedb96d60..00000000000 --- a/include/md5.h +++ /dev/null @@ -1,141 +0,0 @@ -/* md5.h - Declaration of functions and data types used for MD5 sum - computing library functions. - Copyright 1995, 1996, 2000 Free Software Foundation, Inc. - NOTE: The canonical source of this file is maintained with the GNU C - Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _MD5_H -#define _MD5_H 1 - -#include - -#if defined HAVE_LIMITS_H || _LIBC -# include -#endif - -#include "ansidecl.h" - -/* The following contortions are an attempt to use the C preprocessor - to determine an unsigned integral type that is 32 bits wide. An - alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but - doing that would require that the configure script compile and *run* - the resulting executable. Locally running cross-compiled executables - is usually not possible. */ - -#ifdef _LIBC -# include -typedef u_int32_t md5_uint32; -typedef uintptr_t md5_uintptr; -#else -# define INT_MAX_32_BITS 2147483647 - -/* If UINT_MAX isn't defined, assume it's a 32-bit type. - This should be valid for all systems GNU cares about because - that doesn't include 16-bit systems, and only modern systems - (that certainly have ) have 64+-bit integral types. */ - -# ifndef INT_MAX -# define INT_MAX INT_MAX_32_BITS -# endif - -# if INT_MAX == INT_MAX_32_BITS - typedef unsigned int md5_uint32; -# else -# if SHRT_MAX == INT_MAX_32_BITS - typedef unsigned short md5_uint32; -# else -# if LONG_MAX == INT_MAX_32_BITS - typedef unsigned long md5_uint32; -# else - /* The following line is intended to evoke an error. - Using #error is not portable enough. */ - "Cannot determine unsigned 32-bit data type." -# endif -# endif -# endif -/* We have to make a guess about the integer type equivalent in size - to pointers which should always be correct. */ -typedef unsigned long int md5_uintptr; -#endif - -/* Structure to save state of computation between the single steps. */ -struct md5_ctx -{ - md5_uint32 A; - md5_uint32 B; - md5_uint32 C; - md5_uint32 D; - - md5_uint32 total[2]; - md5_uint32 buflen; - char buffer[128] ATTRIBUTE_ALIGNED_ALIGNOF(md5_uint32); -}; - -/* - * The following three functions are build up the low level used in - * the functions `md5_stream' and `md5_buffer'. - */ - -/* Initialize structure containing state of computation. - (RFC 1321, 3.3: Step 3) */ -extern void md5_init_ctx (struct md5_ctx *ctx); - -/* Starting with the result of former calls of this function (or the - initialization function update the context for the next LEN bytes - starting at BUFFER. - It is necessary that LEN is a multiple of 64!!! */ -extern void md5_process_block (const void *buffer, size_t len, - struct md5_ctx *ctx); - -/* Starting with the result of former calls of this function (or the - initialization function update the context for the next LEN bytes - starting at BUFFER. - It is NOT required that LEN is a multiple of 64. */ -extern void md5_process_bytes (const void *buffer, size_t len, - struct md5_ctx *ctx); - -/* Process the remaining bytes in the buffer and put result from CTX - in first 16 bytes following RESBUF. The result is always in little - endian byte order, so that a byte-wise output yields to the wanted - ASCII representation of the message digest. - - IMPORTANT: On some systems it is required that RESBUF is correctly - aligned for a 32 bits value. */ -extern void *md5_finish_ctx (struct md5_ctx *ctx, void *resbuf); - - -/* Put result from CTX in first 16 bytes following RESBUF. The result is - always in little endian byte order, so that a byte-wise output yields - to the wanted ASCII representation of the message digest. - - IMPORTANT: On some systems it is required that RESBUF is correctly - aligned for a 32 bits value. */ -extern void *md5_read_ctx (const struct md5_ctx *ctx, void *resbuf); - - -/* Compute MD5 message digest for bytes read from STREAM. The - resulting message digest number will be written into the 16 bytes - beginning at RESBLOCK. */ -extern int md5_stream (FILE *stream, void *resblock); - -/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The - result is always in little endian byte order, so that a byte-wise - output yields to the wanted ASCII representation of the message - digest. */ -extern void *md5_buffer (const char *buffer, size_t len, void *resblock); - -#endif diff --git a/include/nlm/ChangeLog b/include/nlm/ChangeLog deleted file mode 100644 index a4b527d0fe2..00000000000 --- a/include/nlm/ChangeLog +++ /dev/null @@ -1,100 +0,0 @@ -2005-05-10 Nick Clifton - - * Update the address and phone number of the FSF organization in - the GPL notices in the following files: - alpha-ext.h, common.h, external.h, i386-ext.h, internal.h, - ppc-ext.h, sparc32-ext.h - -2003-08-07 Alan Modra - - * internal.h (Nlm_Internal_Custom_Header): Replace PTR with void *. - -2001-10-02 Alan Modra - - * common.h (NLM_CAT, NLM_CAT3): Don't define. - (NLM_CAT4): Update conditions under which this is defined. Document - why CONCAT4 can't be used. - -1994-05-06 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * external.h (nlmNAME(External_Custom_Header)): Add length, - dataOffset, and dataStamp field. - (nlmNAME(External_Cygnus_Ext_Header)): Remove. - * internal.h (Nlm_Internal_Custom_Header): Add hdrLength, - dataOffset, dataStamp and hdr fields. - -1994-04-22 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * external.h (struct nlmNAME(external_cygnus_ext_header)): Rename - from nlmNAME(external_cygnus_section_header). Change stamp field - to 8 bytes. Add bytes field. - * internal.h (nlm_internal_cygnus_ext_header): Rename from - nlm_internal_cygnus_section_header. Change stamp field to 8 - bytes. - -1994-04-21 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * internal.h (struct nlm_internal_cygnus_section_header): Define. - * external.h (struct nlmNAME(external_cygnus_section_header): - Define. - -1994-04-20 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * internal.h (struct nlm_internal_custom_header): Remove - debugRecOffset and debugRecLength fields. Add data field. - * external.h (struct nlmNAME(external_custom_header)): Remove - debugRecOffset and debugRecLength fields. - -1994-02-07 Jim Kingdon (kingdon@lioth.cygnus.com) - - * internal.h: Change HOST_64_BIT to BFD_HOST_64_BIT. - -1993-12-02 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * alpha-ext.h: New file describing formats of information in Alpha - NetWare files. - * common.h: Define some non-external Alpha information. - -1993-11-17 Sean Eric Fagan (sef@cygnus.com) - - * external.h: Don't define external_fixed_header here. - * i386-ext.h, sparc32-ext.h: New header files to define - external_fixed_header for particular CPU's. - -1993-10-27 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * internal.h (Nlm_Internal_Extended_Header): Added fields - sharedDebugRecordOffset and sharedDebugRecordCount. - * external.h (NlmNAME(External_Extended_Header)): Likewise. - - * common.h (NLM_SIGNATURE): Do not define (it's different for each - backend). - -1993-08-31 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * internal.h: Change length fields of type char to type unsigned - char. - -1993-07-31 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * common.h (NLM_HIBIT, NLM_HEADER_VERSION): Define. - -1993-07-22 Fred Fish (fnf@deneb.cygnus.com) - - * common.h (NLM_CAT*, NLM_ARCH_SIZE, NLM_TARGET_LONG_SIZE, - NLM_TARGET_ADDRESS_SIZE, NLM_NAME, NlmNAME, nlmNAME): New - macros. - * external.h (TARGET_LONG_SIZE, TARGET_ADDRESS_SIZE): Remove - macros, convert usages to NLM_ equivalents. - * external.h: Use nlmNAME and NlmNAME macros to derive both - 32 and 64 bit versions. - -1993-07-20 Fred Fish (fnf@deneb.cygnus.com) - - * (common.h, external.h, internal.h): New files for NLM/NetWare - support. - - -Local Variables: -version-control: never -End: diff --git a/include/nlm/alpha-ext.h b/include/nlm/alpha-ext.h deleted file mode 100644 index eea56ef941e..00000000000 --- a/include/nlm/alpha-ext.h +++ /dev/null @@ -1,166 +0,0 @@ -/* Alpha NLM (NetWare Loadable Module) support for BFD. - Copyright 1993 Free Software Foundation, Inc. - By Ian Lance Taylor, Cygnus Support - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* An Alpha NLM starts with an instance of this structure. */ - -struct nlm32_alpha_external_prefix_header -{ - /* Magic number. Must be NLM32_ALPHA_MAGIC. */ - unsigned char magic[4]; - /* Format descriptor. Current value is 2. */ - unsigned char format[4]; - /* Size of prefix header. */ - unsigned char size[4]; - /* Padding. */ - unsigned char pad1[4]; - /* More fields may be added later, supposedly. */ -}; - -/* The external format of an Alpha NLM reloc. This is the same as an - Alpha ECOFF reloc. */ - -struct nlm32_alpha_external_reloc -{ - unsigned char r_vaddr[8]; - unsigned char r_symndx[4]; - unsigned char r_bits[4]; -}; - -/* Constants to unpack the r_bits field of a reloc. */ - -#define RELOC_BITS0_TYPE_LITTLE 0xff -#define RELOC_BITS0_TYPE_SH_LITTLE 0 - -#define RELOC_BITS1_EXTERN_LITTLE 0x01 - -#define RELOC_BITS1_OFFSET_LITTLE 0x7e -#define RELOC_BITS1_OFFSET_SH_LITTLE 1 - -#define RELOC_BITS1_RESERVED_LITTLE 0x80 -#define RELOC_BITS1_RESERVED_SH_LITTLE 7 -#define RELOC_BITS2_RESERVED_LITTLE 0xff -#define RELOC_BITS2_RESERVED_SH_LEFT_LITTLE 1 -#define RELOC_BITS3_RESERVED_LITTLE 0x03 -#define RELOC_BITS3_RESERVED_SH_LEFT_LITTLE 9 - -#define RELOC_BITS3_SIZE_LITTLE 0xfc -#define RELOC_BITS3_SIZE_SH_LITTLE 2 - -/* The external format of the fixed header. */ - -typedef struct nlm32_alpha_external_fixed_header -{ - - /* The signature field identifies the file as an NLM. It must contain - the signature string, which depends upon the NLM target. */ - - unsigned char signature[24]; - - /* The version of the header. At this time, the highest version number - is 4. */ - - unsigned char version[4]; - - /* The name of the module, which must be a DOS name (1-8 characters followed - by a period and a 1-3 character extension). The first byte is the byte - length of the name and the last byte is a null terminator byte. This - field is fixed length, and any unused bytes should be null bytes. The - value is set by the OUTPUT keyword to NLMLINK. */ - - unsigned char moduleName[14]; - - /* Padding to make it come out correct. */ - - unsigned char pad1[2]; - - /* The byte offset of the code image from the start of the file. */ - - unsigned char codeImageOffset[4]; - - /* The size of the code image, in bytes. */ - - unsigned char codeImageSize[4]; - - /* The byte offset of the data image from the start of the file. */ - - unsigned char dataImageOffset[4]; - - /* The size of the data image, in bytes. */ - - unsigned char dataImageSize[4]; - - /* The size of the uninitialized data region that the loader is to be - allocated at load time. Uninitialized data follows the initialized - data in the NLM address space. */ - - unsigned char uninitializedDataSize[4]; - - /* The byte offset of the custom data from the start of the file. The - custom data is set by the CUSTOM keyword to NLMLINK. It is possible - for this to be EOF if there is no custom data. */ - - unsigned char customDataOffset[4]; - - /* The size of the custom data, in bytes. */ - - unsigned char customDataSize[4]; - - /* The byte offset of the module dependencies from the start of the file. - The module dependencies are determined by the MODULE keyword in - NLMLINK. */ - - unsigned char moduleDependencyOffset[4]; - - /* The number of module dependencies at the moduleDependencyOffset. */ - - unsigned char numberOfModuleDependencies[4]; - - /* The byte offset of the relocation fixup data from the start of the file */ - - unsigned char relocationFixupOffset[4]; - - unsigned char numberOfRelocationFixups[4]; - - unsigned char externalReferencesOffset[4]; - - unsigned char numberOfExternalReferences[4]; - - unsigned char publicsOffset[4]; - - unsigned char numberOfPublics[4]; - - /* The byte offset of the internal debug info from the start of the file. - It is possible for this to be EOF if there is no debug info. */ - - unsigned char debugInfoOffset[4]; - - unsigned char numberOfDebugRecords[4]; - - unsigned char codeStartOffset[4]; - - unsigned char exitProcedureOffset[4]; - - unsigned char checkUnloadProcedureOffset[4]; - - unsigned char moduleType[4]; - - unsigned char flags[4]; - -} Nlm32_alpha_External_Fixed_Header; diff --git a/include/nlm/common.h b/include/nlm/common.h deleted file mode 100644 index c6df3fd1fbe..00000000000 --- a/include/nlm/common.h +++ /dev/null @@ -1,123 +0,0 @@ -/* NLM (NetWare Loadable Module) support for BFD. - Copyright 1993, 2001 Free Software Foundation, Inc. - - Written by Fred Fish @ Cygnus Support - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - - -/* This file is part of NLM support for BFD, and contains the portions - that are common to both the internal and external representations. */ - -/* If NLM_ARCH_SIZE is not defined, default to 32. NLM_ARCH_SIZE is - optionally defined by the application. */ - -#ifndef NLM_ARCH_SIZE -# define NLM_ARCH_SIZE 32 -#endif - -/* Due to horrible details of ANSI macro expansion, we can't use CONCAT4 - for NLM_NAME. CONCAT2 is used in BFD_JUMP_TABLE macros, and some of - them will expand to tokens that themselves are macros defined in terms - of NLM_NAME. If NLM_NAME were defined using CONCAT4 (which is itself - defined in bfd-in.h using CONCAT2), ANSI preprocessor rules say that - the CONCAT2 within NLM_NAME should not be expanded. - So use another name. */ -#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) -#ifdef SABER -#define NLM_CAT4(a,b,c,d) a##b##c##d -#else -/* This hack is to avoid a problem with some strict ANSI C preprocessors. - The problem is, "32_" is not a valid preprocessing token, and we don't - want extra underscores (e.g., "nlm_32_"). The NLM_XCAT2 macro will - cause the inner CAT2 macros to be evaluated first, producing - still-valid pp-tokens. Then the final concatenation can be done. */ -#define NLM_CAT2(a,b) a##b -#define NLM_XCAT2(a,b) NLM_CAT2(a,b) -#define NLM_CAT4(a,b,c,d) NLM_XCAT2(NLM_CAT2(a,b),NLM_CAT2(c,d)) -#endif -#else -#define NLM_CAT4(a,b,c,d) a/**/b/**/c/**/d -#endif - -#if NLM_ARCH_SIZE == 32 -# define NLM_TARGET_LONG_SIZE 4 -# define NLM_TARGET_ADDRESS_SIZE 4 -# define NLM_NAME(x,y) NLM_CAT4(x,32,_,y) -# define NLM_HIBIT (((bfd_vma) 1) << 31) -#endif -#if NLM_ARCH_SIZE == 64 -# define NLM_TARGET_LONG_SIZE 8 -# define NLM_TARGET_ADDRESS_SIZE 8 -# define NLM_NAME(x,y) NLM_CAT4(x,64,_,y) -# define NLM_HIBIT (((bfd_vma) 1) << 63) -#endif - -#define NlmNAME(X) NLM_NAME(Nlm,X) -#define nlmNAME(X) NLM_NAME(nlm,X) - -/* Give names to things that should not change. */ - -#define NLM_MAX_DESCRIPTION_LENGTH 127 -#define NLM_MAX_SCREEN_NAME_LENGTH 71 -#define NLM_MAX_THREAD_NAME_LENGTH 71 -#define NLM_MAX_COPYRIGHT_MESSAGE_LENGTH 255 -#define NLM_OTHER_DATA_LENGTH 400 /* FIXME */ -#define NLM_OLD_THREAD_NAME_LENGTH 5 -#define NLM_SIGNATURE_SIZE 24 -#define NLM_HEADER_VERSION 4 -#define NLM_MODULE_NAME_SIZE 14 -#define NLM_DEFAULT_STACKSIZE (8 * 1024) - -/* Alpha information. This should probably be in a separate Alpha - header file, but it can't go in alpha-ext.h because some of it is - needed by nlmconv.c. */ - -/* Magic number in Alpha prefix header. */ -#define NLM32_ALPHA_MAGIC (0x83561840) - -/* The r_type field in an Alpha reloc is one of the following values. */ -#define ALPHA_R_IGNORE 0 -#define ALPHA_R_REFLONG 1 -#define ALPHA_R_REFQUAD 2 -#define ALPHA_R_GPREL32 3 -#define ALPHA_R_LITERAL 4 -#define ALPHA_R_LITUSE 5 -#define ALPHA_R_GPDISP 6 -#define ALPHA_R_BRADDR 7 -#define ALPHA_R_HINT 8 -#define ALPHA_R_SREL16 9 -#define ALPHA_R_SREL32 10 -#define ALPHA_R_SREL64 11 -#define ALPHA_R_OP_PUSH 12 -#define ALPHA_R_OP_STORE 13 -#define ALPHA_R_OP_PSUB 14 -#define ALPHA_R_OP_PRSHIFT 15 -#define ALPHA_R_GPVALUE 16 -#define ALPHA_R_NW_RELOC 250 - -/* A local reloc, other than ALPHA_R_GPDISP or ALPHA_R_IGNORE, must be - against one of these symbol indices. */ -#define ALPHA_RELOC_SECTION_TEXT 1 -#define ALPHA_RELOC_SECTION_DATA 3 - -/* An ALPHA_R_NW_RELOC has one of these values in the size field. If - it is SETGP, the r_vaddr field holds the GP value to use. If it is - LITA, the r_vaddr field holds the address of the .lita section and - the r_symndx field holds the size of the .lita section. */ -#define ALPHA_R_NW_RELOC_SETGP 1 -#define ALPHA_R_NW_RELOC_LITA 2 diff --git a/include/nlm/external.h b/include/nlm/external.h deleted file mode 100644 index 66003b302c4..00000000000 --- a/include/nlm/external.h +++ /dev/null @@ -1,174 +0,0 @@ -/* NLM (NetWare Loadable Module) support for BFD. - Copyright 1993, 1994 Free Software Foundation, Inc. - - Written by Fred Fish @ Cygnus Support - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - - -/* This file is part of NLM support for BFD, and contains the portions - that describe how NLM is represented externally by the BFD library. - I.E. it describes the in-file representation of NLM. It requires - the nlm/common.h file which contains the portions that are common to - both the internal and external representations. - - Note that an NLM header consists of three parts: - - (1) A fixed length header that has specific fields of known length, - at specific offsets in the file. - - (2) A variable length header that has specific fields in a specific - order, but some fields may be variable length. - - (3) A auxiliary header that has various optional fields in no specific - order. There is no way to identify the end of the auxiliary headers - except by finding a header without a recognized 'stamp'. - - The exact format of the fixed length header unfortunately varies - from one NLM target to another, due to padding. Each target - defines the correct external format in a separate header file. - -*/ - -/* NLM Header */ - -/* The version header is one of the optional auxiliary headers and - follows the fixed length and variable length NLM headers. */ - -typedef struct nlmNAME(external_version_header) -{ - - /* The header is recognized by "VeRsIoN#" in the stamp field. */ - char stamp[8]; - - unsigned char majorVersion[NLM_TARGET_LONG_SIZE]; - - unsigned char minorVersion[NLM_TARGET_LONG_SIZE]; - - unsigned char revision[NLM_TARGET_LONG_SIZE]; - - unsigned char year[NLM_TARGET_LONG_SIZE]; - - unsigned char month[NLM_TARGET_LONG_SIZE]; - - unsigned char day[NLM_TARGET_LONG_SIZE]; - -} NlmNAME(External_Version_Header); - - -typedef struct nlmNAME(external_copyright_header) -{ - - /* The header is recognized by "CoPyRiGhT=" in the stamp field. */ - - char stamp[10]; - - unsigned char copyrightMessageLength[1]; - - /* There is a variable length field here called 'copyrightMessage' - that is the length specified by copyrightMessageLength. */ - -} NlmNAME(External_Copyright_Header); - - -typedef struct nlmNAME(external_extended_header) -{ - - /* The header is recognized by "MeSsAgEs" in the stamp field. */ - - char stamp[8]; - - unsigned char languageID[NLM_TARGET_LONG_SIZE]; - - unsigned char messageFileOffset[NLM_TARGET_LONG_SIZE]; - - unsigned char messageFileLength[NLM_TARGET_LONG_SIZE]; - - unsigned char messageCount[NLM_TARGET_LONG_SIZE]; - - unsigned char helpFileOffset[NLM_TARGET_LONG_SIZE]; - - unsigned char helpFileLength[NLM_TARGET_LONG_SIZE]; - - unsigned char RPCDataOffset[NLM_TARGET_LONG_SIZE]; - - unsigned char RPCDataLength[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedCodeOffset[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedCodeLength[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedDataOffset[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedDataLength[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedRelocationFixupOffset[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedRelocationFixupCount[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedExternalReferenceOffset[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedExternalReferenceCount[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedPublicsOffset[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedPublicsCount[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedDebugRecordOffset[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedDebugRecordCount[NLM_TARGET_LONG_SIZE]; - - unsigned char sharedInitializationOffset[NLM_TARGET_ADDRESS_SIZE]; - - unsigned char SharedExitProcedureOffset[NLM_TARGET_ADDRESS_SIZE]; - - unsigned char productID[NLM_TARGET_LONG_SIZE]; - - unsigned char reserved0[NLM_TARGET_LONG_SIZE]; - - unsigned char reserved1[NLM_TARGET_LONG_SIZE]; - - unsigned char reserved2[NLM_TARGET_LONG_SIZE]; - - unsigned char reserved3[NLM_TARGET_LONG_SIZE]; - - unsigned char reserved4[NLM_TARGET_LONG_SIZE]; - - unsigned char reserved5[NLM_TARGET_LONG_SIZE]; - -} NlmNAME(External_Extended_Header); - - -typedef struct nlmNAME(external_custom_header) -{ - - /* The header is recognized by "CuStHeAd" in the stamp field. */ - char stamp[8]; - - /* Length of this header. */ - unsigned char length[NLM_TARGET_LONG_SIZE]; - - /* Offset to data. */ - unsigned char dataOffset[NLM_TARGET_LONG_SIZE]; - - /* Length of data. */ - unsigned char dataLength[NLM_TARGET_LONG_SIZE]; - - /* Stamp for this customer header--we recognize "CyGnUsEx". */ - char dataStamp[8]; - -} NlmNAME(External_Custom_Header); diff --git a/include/nlm/i386-ext.h b/include/nlm/i386-ext.h deleted file mode 100644 index ecb1cc23707..00000000000 --- a/include/nlm/i386-ext.h +++ /dev/null @@ -1,116 +0,0 @@ -/* i386 NLM (NetWare Loadable Module) support for BFD. - Copyright 1993 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* The external format of the fixed header. */ - -typedef struct nlm32_i386_external_fixed_header -{ - - /* The signature field identifies the file as an NLM. It must contain - the signature string, which depends upon the NLM target. */ - - unsigned char signature[24]; - - /* The version of the header. At this time, the highest version number - is 4. */ - - unsigned char version[4]; - - /* The name of the module, which must be a DOS name (1-8 characters followed - by a period and a 1-3 character extension). The first byte is the byte - length of the name and the last byte is a null terminator byte. This - field is fixed length, and any unused bytes should be null bytes. The - value is set by the OUTPUT keyword to NLMLINK. */ - - unsigned char moduleName[14]; - - /* The byte offset of the code image from the start of the file. */ - - unsigned char codeImageOffset[4]; - - /* The size of the code image, in bytes. */ - - unsigned char codeImageSize[4]; - - /* The byte offset of the data image from the start of the file. */ - - unsigned char dataImageOffset[4]; - - /* The size of the data image, in bytes. */ - - unsigned char dataImageSize[4]; - - /* The size of the uninitialized data region that the loader is to be - allocated at load time. Uninitialized data follows the initialized - data in the NLM address space. */ - - unsigned char uninitializedDataSize[4]; - - /* The byte offset of the custom data from the start of the file. The - custom data is set by the CUSTOM keyword to NLMLINK. It is possible - for this to be EOF if there is no custom data. */ - - unsigned char customDataOffset[4]; - - /* The size of the custom data, in bytes. */ - - unsigned char customDataSize[4]; - - /* The byte offset of the module dependencies from the start of the file. - The module dependencies are determined by the MODULE keyword in - NLMLINK. */ - - unsigned char moduleDependencyOffset[4]; - - /* The number of module dependencies at the moduleDependencyOffset. */ - - unsigned char numberOfModuleDependencies[4]; - - /* The byte offset of the relocation fixup data from the start of the file */ - - unsigned char relocationFixupOffset[4]; - - unsigned char numberOfRelocationFixups[4]; - - unsigned char externalReferencesOffset[4]; - - unsigned char numberOfExternalReferences[4]; - - unsigned char publicsOffset[4]; - - unsigned char numberOfPublics[4]; - - /* The byte offset of the internal debug info from the start of the file. - It is possible for this to be EOF if there is no debug info. */ - - unsigned char debugInfoOffset[4]; - - unsigned char numberOfDebugRecords[4]; - - unsigned char codeStartOffset[4]; - - unsigned char exitProcedureOffset[4]; - - unsigned char checkUnloadProcedureOffset[4]; - - unsigned char moduleType[4]; - - unsigned char flags[4]; - -} Nlm32_i386_External_Fixed_Header; diff --git a/include/nlm/internal.h b/include/nlm/internal.h deleted file mode 100644 index 59f8ff1c6d4..00000000000 --- a/include/nlm/internal.h +++ /dev/null @@ -1,309 +0,0 @@ -/* NLM (NetWare Loadable Module) support for BFD. - Copyright 1993, 1994, 2003 Free Software Foundation, Inc. - - Written by Fred Fish @ Cygnus Support. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - - -/* This file is part of NLM support for BFD, and contains the portions - that describe how NLM is represented internally in the BFD library. - I.E. it describes the in-memory representation of NLM. It requires - the nlm/common.h file which contains the portions that are common to - both the internal and external representations. */ - -#if 0 - -/* Types used by various structures, functions, etc. */ - -typedef unsigned long Nlm32_Addr; /* Unsigned program address */ -typedef unsigned long Nlm32_Off; /* Unsigned file offset */ -typedef long Nlm32_Sword; /* Signed large integer */ -typedef unsigned long Nlm32_Word; /* Unsigned large integer */ -typedef unsigned short Nlm32_Half; /* Unsigned medium integer */ -typedef unsigned char Nlm32_Char; /* Unsigned tiny integer */ - -#ifdef BFD_HOST_64_BIT -typedef unsigned BFD_HOST_64_BIT Nlm64_Addr; -typedef unsigned BFD_HOST_64_BIT Nlm64_Off; -typedef BFD_HOST_64_BIT Nlm64_Sxword; -typedef unsigned BFD_HOST_64_BIT Nlm64_Xword; -#endif -typedef long Nlm64_Sword; -typedef unsigned long Nlm64_Word; -typedef unsigned short Nlm64_Half; - -#endif /* 0 */ - -/* This structure contains the internal form of the portion of the NLM - header that is fixed length. */ - -typedef struct nlm_internal_fixed_header -{ - /* The signature field identifies the file as an NLM. It must contain - the signature string, which depends upon the NLM target. */ - - char signature[NLM_SIGNATURE_SIZE]; - - /* The version of the header. At this time, the highest version number - is 4. */ - - long version; - - /* The name of the module, which must be a DOS name (1-8 characters followed - by a period and a 1-3 character extension. The first byte is the byte - length of the name and the last byte is a null terminator byte. This - field is fixed length, and any unused bytes should be null bytes. The - value is set by the OUTPUT keyword to NLMLINK. */ - - char moduleName[NLM_MODULE_NAME_SIZE]; - - /* The byte offset of the code image from the start of the file. */ - - file_ptr codeImageOffset; - - /* The size of the code image, in bytes. */ - - bfd_size_type codeImageSize; - - /* The byte offset of the data image from the start of the file. */ - - file_ptr dataImageOffset; - - /* The size of the data image, in bytes. */ - - bfd_size_type dataImageSize; - - /* The size of the uninitialized data region that the loader is to be - allocated at load time. Uninitialized data follows the initialized - data in the NLM address space. */ - - bfd_size_type uninitializedDataSize; - - /* The byte offset of the custom data from the start of the file. The - custom data is set by the CUSTOM keyword to NLMLINK. */ - - file_ptr customDataOffset; - - /* The size of the custom data, in bytes. */ - - bfd_size_type customDataSize; - - /* The byte offset of the module dependencies from the start of the file. - The module dependencies are determined by the MODULE keyword in - NLMLINK. */ - - file_ptr moduleDependencyOffset; - - /* The number of module dependencies at the moduleDependencyOffset. */ - - long numberOfModuleDependencies; - - /* The byte offset of the relocation fixup data from the start of the file */ - - file_ptr relocationFixupOffset; - long numberOfRelocationFixups; - file_ptr externalReferencesOffset; - long numberOfExternalReferences; - file_ptr publicsOffset; - long numberOfPublics; - file_ptr debugInfoOffset; - long numberOfDebugRecords; - file_ptr codeStartOffset; - file_ptr exitProcedureOffset; - file_ptr checkUnloadProcedureOffset; - long moduleType; - long flags; -} Nlm_Internal_Fixed_Header; - -#define nlm32_internal_fixed_header nlm_internal_fixed_header -#define Nlm32_Internal_Fixed_Header Nlm_Internal_Fixed_Header -#define nlm64_internal_fixed_header nlm_internal_fixed_header -#define Nlm64_Internal_Fixed_Header Nlm_Internal_Fixed_Header - -/* This structure contains the portions of the NLM header that are either - variable in size in the external representation, or else are not at a - fixed offset relative to the start of the NLM header due to preceding - variable sized fields. - - Note that all the fields must exist in the external header, and in - the order used here (the same order is used in the internal form - for consistency, not out of necessity). */ - -typedef struct nlm_internal_variable_header -{ - - /* The descriptionLength field contains the length of the text in - descriptionText, excluding the null terminator. The descriptionText - field contains the NLM description obtained from the DESCRIPTION - keyword in NLMLINK plus the null byte terminator. The descriptionText - can be up to NLM_MAX_DESCRIPTION_LENGTH characters. */ - - unsigned char descriptionLength; - char descriptionText[NLM_MAX_DESCRIPTION_LENGTH + 1]; - - /* The stackSize field contains the size of the stack in bytes, as - specified by the STACK or STACKSIZE keyword in NLMLINK. If no size - is specified, the default is NLM_DEFAULT_STACKSIZE. */ - - long stackSize; - - /* The reserved field is included only for completeness. It should contain - zero. */ - - long reserved; - - /* This field is fixed length, should contain " LONG" (note leading - space), and is unused. */ - - char oldThreadName[NLM_OLD_THREAD_NAME_LENGTH]; - - /* The screenNameLength field contains the length of the actual text stored - in the screenName field, excluding the null byte terminator. The - screenName field contains the screen name as specified by the SCREENNAME - keyword in NLMLINK, and can be up to NLM_MAX_SCREEN_NAME_LENGTH - characters. */ - - unsigned char screenNameLength; - char screenName[NLM_MAX_SCREEN_NAME_LENGTH + 1]; - - /* The threadNameLength field contains the length of the actual text stored - in the threadName field, excluding the null byte terminator. The - threadName field contains the thread name as specified by the THREADNAME - keyword in NLMLINK, and can be up to NLM_MAX_THREAD_NAME_LENGTH - characters. */ - - unsigned char threadNameLength; - char threadName[NLM_MAX_THREAD_NAME_LENGTH + 1]; - -} Nlm_Internal_Variable_Header; - -#define nlm32_internal_variable_header nlm_internal_variable_header -#define Nlm32_Internal_Variable_Header Nlm_Internal_Variable_Header -#define nlm64_internal_variable_header nlm_internal_variable_header -#define Nlm64_Internal_Variable_Header Nlm_Internal_Variable_Header - -/* The version header is one of the optional auxiliary headers and - follows the fixed length and variable length NLM headers. */ - -typedef struct nlm_internal_version_header -{ - /* The header is recognized by "VeRsIoN#" in the stamp field. */ - char stamp[8]; - long majorVersion; - long minorVersion; - long revision; - long year; - long month; - long day; -} Nlm_Internal_Version_Header; - -#define nlm32_internal_version_header nlm_internal_version_header -#define Nlm32_Internal_Version_Header Nlm_Internal_Version_Header -#define nlm64_internal_version_header nlm_internal_version_header -#define Nlm64_Internal_Version_Header Nlm_Internal_Version_Header - -typedef struct nlm_internal_copyright_header -{ - /* The header is recognized by "CoPyRiGhT=" in the stamp field. */ - char stamp[10]; - unsigned char copyrightMessageLength; - char copyrightMessage[NLM_MAX_COPYRIGHT_MESSAGE_LENGTH]; -} Nlm_Internal_Copyright_Header; - -#define nlm32_internal_copyright_header nlm_internal_copyright_header -#define Nlm32_Internal_Copyright_Header Nlm_Internal_Copyright_Header -#define nlm64_internal_copyright_header nlm_internal_copyright_header -#define Nlm64_Internal_Copyright_Header Nlm_Internal_Copyright_Header - -typedef struct nlm_internal_extended_header -{ - /* The header is recognized by "MeSsAgEs" in the stamp field. */ - char stamp[8]; - long languageID; - file_ptr messageFileOffset; - bfd_size_type messageFileLength; - long messageCount; - file_ptr helpFileOffset; - bfd_size_type helpFileLength; - file_ptr RPCDataOffset; - bfd_size_type RPCDataLength; - file_ptr sharedCodeOffset; - bfd_size_type sharedCodeLength; - file_ptr sharedDataOffset; - bfd_size_type sharedDataLength; - file_ptr sharedRelocationFixupOffset; - long sharedRelocationFixupCount; - file_ptr sharedExternalReferenceOffset; - long sharedExternalReferenceCount; - file_ptr sharedPublicsOffset; - long sharedPublicsCount; - file_ptr sharedDebugRecordOffset; - long sharedDebugRecordCount; - bfd_vma SharedInitializationOffset; - bfd_vma SharedExitProcedureOffset; - long productID; - long reserved0; - long reserved1; - long reserved2; - long reserved3; - long reserved4; - long reserved5; -} Nlm_Internal_Extended_Header; - -#define nlm32_internal_extended_header nlm_internal_extended_header -#define Nlm32_Internal_Extended_Header Nlm_Internal_Extended_Header -#define nlm64_internal_extended_header nlm_internal_extended_header -#define Nlm64_Internal_Extended_Header Nlm_Internal_Extended_Header - -/* The format of a custom header as stored internally is different - from the external format. This is how we store a custom header - which we do not recognize. */ - -typedef struct nlm_internal_custom_header -{ - /* The header is recognized by "CuStHeAd" in the stamp field. */ - char stamp[8]; - bfd_size_type hdrLength; - file_ptr dataOffset; - bfd_size_type dataLength; - char dataStamp[8]; - void *hdr; -} Nlm_Internal_Custom_Header; - -#define nlm32_internal_custom_header nlm_internal_custom_header -#define Nlm32_Internal_Custom_Header Nlm_Internal_Custom_Header -#define nlm64_internal_custom_header nlm_internal_custom_header -#define Nlm64_Internal_Custom_Header Nlm_Internal_Custom_Header - -/* The internal Cygnus header is written out externally as a custom - header. We don't try to replicate that structure here. */ - -typedef struct nlm_internal_cygnus_ext_header -{ - /* The header is recognized by "CyGnUsEx" in the stamp field. */ - char stamp[8]; - /* File location of debugging information. */ - file_ptr offset; - /* Length of debugging information. */ - bfd_size_type length; -} Nlm_Internal_Cygnus_Ext_Header; - -#define nlm32_internal_cygnus_ext_header nlm_internal_cygnus_ext_header -#define Nlm32_Internal_Cygnus_Ext_Header Nlm_Internal_Cygnus_Ext_Header -#define nlm64_internal_cygnus_ext_header nlm_internal_cygnus_ext_header -#define Nlm64_Internal_Cygnus_Ext_Header Nlm_Internal_Cygnus_Ext_Header diff --git a/include/nlm/ppc-ext.h b/include/nlm/ppc-ext.h deleted file mode 100644 index 9f3a974f456..00000000000 --- a/include/nlm/ppc-ext.h +++ /dev/null @@ -1,163 +0,0 @@ -/* PowerPC NLM (NetWare Loadable Module) support for BFD. - Copyright (C) 1994 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifdef OLDFORMAT - -/* The format of a PowerPC NLM changed. These structures are only - used in the old format. */ - -/* A PowerPC NLM starts with an instance of this structure. */ - -struct nlm32_powerpc_external_prefix_header -{ - /* Signature. Must be "AppleNLM". */ - char signature[8]; - /* Version number. Current value is 1. */ - unsigned char headerVersion[4]; - /* ??. Should be set to 0. */ - unsigned char origins[4]; - /* File creation date in standard Unix time format (seconds since - 1/1/70). */ - unsigned char date[4]; -}; - -#define NLM32_POWERPC_SIGNATURE "AppleNLM" -#define NLM32_POWERPC_HEADER_VERSION 1 - -/* The external format of a PowerPC NLM reloc. This is the same as an - XCOFF dynamic reloc. */ - -struct nlm32_powerpc_external_reloc -{ - /* Address. */ - unsigned char l_vaddr[4]; - /* Symbol table index. This is 0 for .text and 1 for .data. 2 - means .bss, but I don't know if it is used. In XCOFF, larger - numbers are indices into the dynamic symbol table, but they are - presumably not used in an NLM. */ - unsigned char l_symndx[4]; - /* Relocation type. */ - unsigned char l_rtype[2]; - /* Section number being relocated. */ - unsigned char l_rsecnm[2]; -}; - -#endif /* OLDFORMAT */ - -/* The external format of the fixed header. */ - -typedef struct nlm32_powerpc_external_fixed_header -{ - - /* The signature field identifies the file as an NLM. It must contain - the signature string, which depends upon the NLM target. */ - - unsigned char signature[24]; - - /* The version of the header. At this time, the highest version number - is 4. */ - - unsigned char version[4]; - - /* The name of the module, which must be a DOS name (1-8 characters followed - by a period and a 1-3 character extension). The first byte is the byte - length of the name and the last byte is a null terminator byte. This - field is fixed length, and any unused bytes should be null bytes. The - value is set by the OUTPUT keyword to NLMLINK. */ - - unsigned char moduleName[14]; - - /* Padding to make it come out correct. */ - - unsigned char pad1[2]; - - /* The byte offset of the code image from the start of the file. */ - - unsigned char codeImageOffset[4]; - - /* The size of the code image, in bytes. */ - - unsigned char codeImageSize[4]; - - /* The byte offset of the data image from the start of the file. */ - - unsigned char dataImageOffset[4]; - - /* The size of the data image, in bytes. */ - - unsigned char dataImageSize[4]; - - /* The size of the uninitialized data region that the loader is to be - allocated at load time. Uninitialized data follows the initialized - data in the NLM address space. */ - - unsigned char uninitializedDataSize[4]; - - /* The byte offset of the custom data from the start of the file. The - custom data is set by the CUSTOM keyword to NLMLINK. It is possible - for this to be EOF if there is no custom data. */ - - unsigned char customDataOffset[4]; - - /* The size of the custom data, in bytes. */ - - unsigned char customDataSize[4]; - - /* The byte offset of the module dependencies from the start of the file. - The module dependencies are determined by the MODULE keyword in - NLMLINK. */ - - unsigned char moduleDependencyOffset[4]; - - /* The number of module dependencies at the moduleDependencyOffset. */ - - unsigned char numberOfModuleDependencies[4]; - - /* The byte offset of the relocation fixup data from the start of the file */ - - unsigned char relocationFixupOffset[4]; - - unsigned char numberOfRelocationFixups[4]; - - unsigned char externalReferencesOffset[4]; - - unsigned char numberOfExternalReferences[4]; - - unsigned char publicsOffset[4]; - - unsigned char numberOfPublics[4]; - - /* The byte offset of the internal debug info from the start of the file. - It is possible for this to be EOF if there is no debug info. */ - - unsigned char debugInfoOffset[4]; - - unsigned char numberOfDebugRecords[4]; - - unsigned char codeStartOffset[4]; - - unsigned char exitProcedureOffset[4]; - - unsigned char checkUnloadProcedureOffset[4]; - - unsigned char moduleType[4]; - - unsigned char flags[4]; - -} Nlm32_powerpc_External_Fixed_Header; diff --git a/include/nlm/sparc32-ext.h b/include/nlm/sparc32-ext.h deleted file mode 100644 index 79b1cc4b131..00000000000 --- a/include/nlm/sparc32-ext.h +++ /dev/null @@ -1,120 +0,0 @@ -/* SPARC NLM (NetWare Loadable Module) support for BFD. - Copyright 1993 Free Software Foundation, Inc. - -This file is part of BFD, the Binary File Descriptor library. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* The external format of the fixed header. */ - -typedef struct nlm32_sparc_external_fixed_header -{ - - /* The signature field identifies the file as an NLM. It must contain - the signature string, which depends upon the NLM target. */ - - unsigned char signature[24]; - - /* The version of the header. At this time, the highest version number - is 4. */ - - unsigned char version[4]; - - /* The name of the module, which must be a DOS name (1-8 characters followed - by a period and a 1-3 character extension). The first byte is the byte - length of the name and the last byte is a null terminator byte. This - field is fixed length, and any unused bytes should be null bytes. The - value is set by the OUTPUT keyword to NLMLINK. */ - - unsigned char moduleName[14]; - - /* Padding to make it come out correct. */ - - unsigned char pad1[2]; - - /* The byte offset of the code image from the start of the file. */ - - unsigned char codeImageOffset[4]; - - /* The size of the code image, in bytes. */ - - unsigned char codeImageSize[4]; - - /* The byte offset of the data image from the start of the file. */ - - unsigned char dataImageOffset[4]; - - /* The size of the data image, in bytes. */ - - unsigned char dataImageSize[4]; - - /* The size of the uninitialized data region that the loader is to be - allocated at load time. Uninitialized data follows the initialized - data in the NLM address space. */ - - unsigned char uninitializedDataSize[4]; - - /* The byte offset of the custom data from the start of the file. The - custom data is set by the CUSTOM keyword to NLMLINK. It is possible - for this to be EOF if there is no custom data. */ - - unsigned char customDataOffset[4]; - - /* The size of the custom data, in bytes. */ - - unsigned char customDataSize[4]; - - /* The byte offset of the module dependencies from the start of the file. - The module dependencies are determined by the MODULE keyword in - NLMLINK. */ - - unsigned char moduleDependencyOffset[4]; - - /* The number of module dependencies at the moduleDependencyOffset. */ - - unsigned char numberOfModuleDependencies[4]; - - /* The byte offset of the relocation fixup data from the start of the file */ - - unsigned char relocationFixupOffset[4]; - - unsigned char numberOfRelocationFixups[4]; - - unsigned char externalReferencesOffset[4]; - - unsigned char numberOfExternalReferences[4]; - - unsigned char publicsOffset[4]; - - unsigned char numberOfPublics[4]; - - /* The byte offset of the internal debug info from the start of the file. - It is possible for this to be EOF if there is no debug info. */ - - unsigned char debugInfoOffset[4]; - - unsigned char numberOfDebugRecords[4]; - - unsigned char codeStartOffset[4]; - - unsigned char exitProcedureOffset[4]; - - unsigned char checkUnloadProcedureOffset[4]; - - unsigned char moduleType[4]; - - unsigned char flags[4]; - -} Nlm32_sparc_External_Fixed_Header; diff --git a/include/oasys.h b/include/oasys.h deleted file mode 100644 index 25672c7dc75..00000000000 --- a/include/oasys.h +++ /dev/null @@ -1,192 +0,0 @@ -/* Oasys object format header file for BFD. - - Copyright 2001 Free Software Foundation, Inc. - - This program 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, 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., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. - - Contributed by Cygnus Support. */ - -#define OASYS_MAX_SEC_COUNT 16 -/* **** */ - -typedef struct oasys_archive_header - { - unsigned int version; - char create_date[12]; - char revision_date[12]; - unsigned int mod_count; - file_ptr mod_tbl_offset; - unsigned int sym_tbl_size; - unsigned int sym_count; - file_ptr sym_tbl_offset; - unsigned int xref_count; - file_ptr xref_lst_offset; - } -oasys_archive_header_type; - -typedef struct oasys_extarchive_header - { - bfd_byte version[4]; - bfd_byte create_date[12]; - bfd_byte revision_date[12]; - bfd_byte mod_count[4]; - bfd_byte mod_tbl_offset[4]; - bfd_byte sym_tbl_size[4]; - bfd_byte sym_count[4]; - bfd_byte sym_tbl_offset[4]; - bfd_byte xref_count[4]; - bfd_byte xref_lst_offset[4]; - } -oasys_extarchive_header_type; - -typedef struct oasys_module_table - { - int mod_number; - char mod_date[12]; - unsigned int mod_size; - unsigned int dep_count; - unsigned int depee_count; - file_ptr file_offset; - unsigned int sect_count; - char *module_name; - unsigned int module_name_size; - } -oasys_module_table_type; - -typedef struct oasys_extmodule_table_a - { - bfd_byte mod_number[4]; - bfd_byte mod_date[12]; - bfd_byte mod_size[4]; - bfd_byte dep_count[4]; - bfd_byte depee_count[4]; - bfd_byte sect_count[4]; - bfd_byte file_offset[4]; - bfd_byte mod_name[32]; - } -oasys_extmodule_table_type_a_type; - -typedef struct oasys_extmodule_table_b - { - bfd_byte mod_number[4]; - bfd_byte mod_date[12]; - bfd_byte mod_size[4]; - bfd_byte dep_count[4]; - bfd_byte depee_count[4]; - bfd_byte sect_count[4]; - bfd_byte file_offset[4]; - bfd_byte mod_name_length[4]; - } -oasys_extmodule_table_type_b_type; - -typedef enum oasys_record - { - oasys_record_is_end_enum = 0, - oasys_record_is_data_enum = 1, - oasys_record_is_symbol_enum = 2, - oasys_record_is_header_enum = 3, - oasys_record_is_named_section_enum = 4, - oasys_record_is_com_enum = 5, - oasys_record_is_debug_enum = 6, - oasys_record_is_section_enum = 7, - oasys_record_is_debug_file_enum = 8, - oasys_record_is_module_enum = 9, - oasys_record_is_local_enum = 10 - } -oasys_record_enum_type; - -typedef struct oasys_record_header - { - unsigned char length; - unsigned char check_sum; - unsigned char type; - unsigned char fill; - } -oasys_record_header_type; - -typedef struct oasys_data_record - { - oasys_record_header_type header; - unsigned char relb; - bfd_byte addr[4]; - /* maximum total size of data record is 255 bytes */ - bfd_byte data[246]; - } -oasys_data_record_type; - -typedef struct oasys_header_record - { - oasys_record_header_type header; - unsigned char version_number; - unsigned char rev_number; - char module_name[26-6]; - char description[64-26]; - } -oasys_header_record_type; - -#define OASYS_VERSION_NUMBER 0 -#define OASYS_REV_NUMBER 0 - -typedef struct oasys_symbol_record - { - oasys_record_header_type header; - unsigned char relb; - bfd_byte value[4]; - bfd_byte refno[2]; - char name[64]; - } -oasys_symbol_record_type; - -#define RELOCATION_PCREL_BIT 0x80 -#define RELOCATION_32BIT_BIT 0x40 -#define RELOCATION_TYPE_BITS 0x30 -#define RELOCATION_TYPE_ABS 0x00 -#define RELOCATION_TYPE_REL 0x10 -#define RELOCATION_TYPE_UND 0x20 -#define RELOCATION_TYPE_COM 0x30 -#define RELOCATION_SECT_BITS 0x0f - -typedef struct oasys_section_record - { - oasys_record_header_type header; - unsigned char relb; - bfd_byte value[4]; - bfd_byte vma[4]; - bfd_byte fill[3]; - } -oasys_section_record_type; - -typedef struct oasys_end_record - { - oasys_record_header_type header; - unsigned char relb; - bfd_byte entry[4]; - bfd_byte fill[2]; - bfd_byte zero; - } -oasys_end_record_type; - -typedef union oasys_record_union - { - oasys_record_header_type header; - oasys_data_record_type data; - oasys_section_record_type section; - oasys_symbol_record_type symbol; - oasys_header_record_type first; - oasys_end_record_type end; - bfd_byte pad[256]; - } -oasys_record_union_type; diff --git a/include/objalloc.h b/include/objalloc.h deleted file mode 100644 index 36772d17b50..00000000000 --- a/include/objalloc.h +++ /dev/null @@ -1,115 +0,0 @@ -/* objalloc.h -- routines to allocate memory for objects - Copyright 1997, 2001 Free Software Foundation, Inc. - Written by Ian Lance Taylor, Cygnus Solutions. - -This program 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, 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, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#ifndef OBJALLOC_H -#define OBJALLOC_H - -#include "ansidecl.h" - -/* These routines allocate space for an object. The assumption is - that the object will want to allocate space as it goes along, but - will never want to free any particular block. There is a function - to free a block, which also frees all more recently allocated - blocks. There is also a function to free all the allocated space. - - This is essentially a specialization of obstacks. The main - difference is that a block may not be allocated a bit at a time. - Another difference is that these routines are always built on top - of malloc, and always pass an malloc failure back to the caller, - unlike more recent versions of obstacks. */ - -/* This is what an objalloc structure looks like. Callers should not - refer to these fields, nor should they allocate these structure - themselves. Instead, they should only create them via - objalloc_init, and only access them via the functions and macros - listed below. The structure is only defined here so that we can - access it via macros. */ - -struct objalloc -{ - char *current_ptr; - unsigned int current_space; - void *chunks; -}; - -/* Work out the required alignment. */ - -struct objalloc_align { char x; double d; }; - -#if defined (__STDC__) && __STDC__ -#ifndef offsetof -#include -#endif -#endif -#ifndef offsetof -#define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER) -#endif -#define OBJALLOC_ALIGN offsetof (struct objalloc_align, d) - -/* Create an objalloc structure. Returns NULL if malloc fails. */ - -extern struct objalloc *objalloc_create (void); - -/* Allocate space from an objalloc structure. Returns NULL if malloc - fails. */ - -extern void *_objalloc_alloc (struct objalloc *, unsigned long); - -/* The macro version of objalloc_alloc. We only define this if using - gcc, because otherwise we would have to evaluate the arguments - multiple times, or use a temporary field as obstack.h does. */ - -#if defined (__GNUC__) && defined (__STDC__) && __STDC__ - -/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and - does not implement __extension__. But that compiler doesn't define - __GNUC_MINOR__. */ -#if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) -#define __extension__ -#endif - -#define objalloc_alloc(o, l) \ - __extension__ \ - ({ struct objalloc *__o = (o); \ - unsigned long __len = (l); \ - if (__len == 0) \ - __len = 1; \ - __len = (__len + OBJALLOC_ALIGN - 1) &~ (OBJALLOC_ALIGN - 1); \ - (__len <= __o->current_space \ - ? (__o->current_ptr += __len, \ - __o->current_space -= __len, \ - (void *) (__o->current_ptr - __len)) \ - : _objalloc_alloc (__o, __len)); }) - -#else /* ! __GNUC__ */ - -#define objalloc_alloc(o, l) _objalloc_alloc ((o), (l)) - -#endif /* ! __GNUC__ */ - -/* Free an entire objalloc structure. */ - -extern void objalloc_free (struct objalloc *); - -/* Free a block allocated by objalloc_alloc. This also frees all more - recently allocated blocks. */ - -extern void objalloc_free_block (struct objalloc *, void *); - -#endif /* OBJALLOC_H */ diff --git a/include/obstack.h b/include/obstack.h deleted file mode 100644 index 88c2a264adc..00000000000 --- a/include/obstack.h +++ /dev/null @@ -1,545 +0,0 @@ -/* obstack.h - object stack macros - Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005 - Free Software Foundation, Inc. - - - NOTE: The canonical source of this file is maintained with the GNU C Library. - Bugs can be reported to bug-glibc@gnu.org. - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, - USA. */ - -/* Summary: - -All the apparent functions defined here are macros. The idea -is that you would use these pre-tested macros to solve a -very specific set of problems, and they would run fast. -Caution: no side-effects in arguments please!! They may be -evaluated MANY times!! - -These macros operate a stack of objects. Each object starts life -small, and may grow to maturity. (Consider building a word syllable -by syllable.) An object can move while it is growing. Once it has -been "finished" it never changes address again. So the "top of the -stack" is typically an immature growing object, while the rest of the -stack is of mature, fixed size and fixed address objects. - -These routines grab large chunks of memory, using a function you -supply, called `obstack_chunk_alloc'. On occasion, they free chunks, -by calling `obstack_chunk_free'. You must define them and declare -them before using any obstack macros. - -Each independent stack is represented by a `struct obstack'. -Each of the obstack macros expects a pointer to such a structure -as the first argument. - -One motivation for this package is the problem of growing char strings -in symbol tables. Unless you are "fascist pig with a read-only mind" ---Gosper's immortal quote from HAKMEM item 154, out of context--you -would not like to put any arbitrary upper limit on the length of your -symbols. - -In practice this often means you will build many short symbols and a -few long symbols. At the time you are reading a symbol you don't know -how long it is. One traditional method is to read a symbol into a -buffer, realloc()ating the buffer every time you try to read a symbol -that is longer than the buffer. This is beaut, but you still will -want to copy the symbol from the buffer to a more permanent -symbol-table entry say about half the time. - -With obstacks, you can work differently. Use one obstack for all symbol -names. As you read a symbol, grow the name in the obstack gradually. -When the name is complete, finalize it. Then, if the symbol exists already, -free the newly read name. - -The way we do this is to take a large chunk, allocating memory from -low addresses. When you want to build a symbol in the chunk you just -add chars above the current "high water mark" in the chunk. When you -have finished adding chars, because you got to the end of the symbol, -you know how long the chars are, and you can create a new object. -Mostly the chars will not burst over the highest address of the chunk, -because you would typically expect a chunk to be (say) 100 times as -long as an average object. - -In case that isn't clear, when we have enough chars to make up -the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed) -so we just point to it where it lies. No moving of chars is -needed and this is the second win: potentially long strings need -never be explicitly shuffled. Once an object is formed, it does not -change its address during its lifetime. - -When the chars burst over a chunk boundary, we allocate a larger -chunk, and then copy the partly formed object from the end of the old -chunk to the beginning of the new larger chunk. We then carry on -accreting characters to the end of the object as we normally would. - -A special macro is provided to add a single char at a time to a -growing object. This allows the use of register variables, which -break the ordinary 'growth' macro. - -Summary: - We allocate large chunks. - We carve out one object at a time from the current chunk. - Once carved, an object never moves. - We are free to append data of any size to the currently - growing object. - Exactly one object is growing in an obstack at any one time. - You can run one obstack per control block. - You may have as many control blocks as you dare. - Because of the way we do it, you can `unwind' an obstack - back to a previous state. (You may remove objects much - as you would with a stack.) -*/ - - -/* Don't do the contents of this file more than once. */ - -#ifndef _OBSTACK_H -#define _OBSTACK_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* We use subtraction of (char *) 0 instead of casting to int - because on word-addressable machines a simple cast to int - may ignore the byte-within-word field of the pointer. */ - -#ifndef __PTR_TO_INT -# define __PTR_TO_INT(P) ((P) - (char *) 0) -#endif - -#ifndef __INT_TO_PTR -# define __INT_TO_PTR(P) ((P) + (char *) 0) -#endif - -/* We need the type of the resulting object. If __PTRDIFF_TYPE__ is - defined, as with GNU C, use that; that way we don't pollute the - namespace with 's symbols. Otherwise, if is - available, include it and use ptrdiff_t. In traditional C, long is - the best that we can do. */ - -#ifdef __PTRDIFF_TYPE__ -# define PTR_INT_TYPE __PTRDIFF_TYPE__ -#else -# ifdef HAVE_STDDEF_H -# include -# define PTR_INT_TYPE ptrdiff_t -# else -# define PTR_INT_TYPE long -# endif -#endif - -#if defined _LIBC || defined HAVE_STRING_H -# include -# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) -#else -# ifdef memcpy -# define _obstack_memcpy(To, From, N) memcpy ((To), (char *)(From), (N)) -# else -# define _obstack_memcpy(To, From, N) bcopy ((char *)(From), (To), (N)) -# endif -#endif - -struct _obstack_chunk /* Lives at front of each chunk. */ -{ - char *limit; /* 1 past end of this chunk */ - struct _obstack_chunk *prev; /* address of prior chunk or NULL */ - char contents[4]; /* objects begin here */ -}; - -struct obstack /* control current object in current chunk */ -{ - long chunk_size; /* preferred size to allocate chunks in */ - struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */ - char *object_base; /* address of object we are building */ - char *next_free; /* where to add next char to current object */ - char *chunk_limit; /* address of char after current chunk */ - PTR_INT_TYPE temp; /* Temporary for some macros. */ - int alignment_mask; /* Mask of alignment for each object. */ - /* These prototypes vary based on `use_extra_arg', and we use - casts to the prototypeless function type in all assignments, - but having prototypes here quiets -Wstrict-prototypes. */ - struct _obstack_chunk *(*chunkfun) (void *, long); - void (*freefun) (void *, struct _obstack_chunk *); - void *extra_arg; /* first arg for chunk alloc/dealloc funcs */ - unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */ - unsigned maybe_empty_object:1;/* There is a possibility that the current - chunk contains a zero-length object. This - prevents freeing the chunk if we allocate - a bigger chunk to replace it. */ - unsigned alloc_failed:1; /* No longer used, as we now call the failed - handler on error, but retained for binary - compatibility. */ -}; - -/* Declare the external functions we use; they are in obstack.c. */ - -extern void _obstack_newchunk (struct obstack *, int); -extern void _obstack_free (struct obstack *, void *); -extern int _obstack_begin (struct obstack *, int, int, - void *(*) (long), void (*) (void *)); -extern int _obstack_begin_1 (struct obstack *, int, int, - void *(*) (void *, long), - void (*) (void *, void *), void *); -extern int _obstack_memory_used (struct obstack *); - -/* Do the function-declarations after the structs - but before defining the macros. */ - -void obstack_init (struct obstack *obstack); - -void * obstack_alloc (struct obstack *obstack, int size); - -void * obstack_copy (struct obstack *obstack, void *address, int size); -void * obstack_copy0 (struct obstack *obstack, void *address, int size); - -void obstack_free (struct obstack *obstack, void *block); - -void obstack_blank (struct obstack *obstack, int size); - -void obstack_grow (struct obstack *obstack, void *data, int size); -void obstack_grow0 (struct obstack *obstack, void *data, int size); - -void obstack_1grow (struct obstack *obstack, int data_char); -void obstack_ptr_grow (struct obstack *obstack, void *data); -void obstack_int_grow (struct obstack *obstack, int data); - -void * obstack_finish (struct obstack *obstack); - -int obstack_object_size (struct obstack *obstack); - -int obstack_room (struct obstack *obstack); -void obstack_make_room (struct obstack *obstack, int size); -void obstack_1grow_fast (struct obstack *obstack, int data_char); -void obstack_ptr_grow_fast (struct obstack *obstack, void *data); -void obstack_int_grow_fast (struct obstack *obstack, int data); -void obstack_blank_fast (struct obstack *obstack, int size); - -void * obstack_base (struct obstack *obstack); -void * obstack_next_free (struct obstack *obstack); -int obstack_alignment_mask (struct obstack *obstack); -int obstack_chunk_size (struct obstack *obstack); -int obstack_memory_used (struct obstack *obstack); - -/* Error handler called when `obstack_chunk_alloc' failed to allocate - more memory. This can be set to a user defined function. The - default action is to print a message and abort. */ -extern void (*obstack_alloc_failed_handler) (void); - -/* Exit value used when `print_and_abort' is used. */ -extern int obstack_exit_failure; - -/* Pointer to beginning of object being allocated or to be allocated next. - Note that this might not be the final address of the object - because a new chunk might be needed to hold the final size. */ - -#define obstack_base(h) ((h)->object_base) - -/* Size for allocating ordinary chunks. */ - -#define obstack_chunk_size(h) ((h)->chunk_size) - -/* Pointer to next byte not yet allocated in current chunk. */ - -#define obstack_next_free(h) ((h)->next_free) - -/* Mask specifying low bits that should be clear in address of an object. */ - -#define obstack_alignment_mask(h) ((h)->alignment_mask) - -/* To prevent prototype warnings provide complete argument list in - standard C version. */ -# define obstack_init(h) \ - _obstack_begin ((h), 0, 0, \ - (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) - -# define obstack_begin(h, size) \ - _obstack_begin ((h), (size), 0, \ - (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) - -# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ - _obstack_begin ((h), (size), (alignment), \ - (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun)) - -# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ - _obstack_begin_1 ((h), (size), (alignment), \ - (void *(*) (void *, long)) (chunkfun), \ - (void (*) (void *, void *)) (freefun), (arg)) - -# define obstack_chunkfun(h, newchunkfun) \ - ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun)) - -# define obstack_freefun(h, newfreefun) \ - ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun)) - -#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar)) - -#define obstack_blank_fast(h,n) ((h)->next_free += (n)) - -#define obstack_memory_used(h) _obstack_memory_used (h) - -#if defined __GNUC__ && defined __STDC__ && __STDC__ -/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and - does not implement __extension__. But that compiler doesn't define - __GNUC_MINOR__. */ -# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) -# define __extension__ -# endif - -/* For GNU C, if not -traditional, - we can define these macros to compute all args only once - without using a global variable. - Also, we can avoid using the `temp' slot, to make faster code. */ - -# define obstack_object_size(OBSTACK) \ - __extension__ \ - ({ struct obstack *__o = (OBSTACK); \ - (unsigned) (__o->next_free - __o->object_base); }) - -# define obstack_room(OBSTACK) \ - __extension__ \ - ({ struct obstack *__o = (OBSTACK); \ - (unsigned) (__o->chunk_limit - __o->next_free); }) - -# define obstack_make_room(OBSTACK,length) \ -__extension__ \ -({ struct obstack *__o = (OBSTACK); \ - int __len = (length); \ - if (__o->chunk_limit - __o->next_free < __len) \ - _obstack_newchunk (__o, __len); \ - (void) 0; }) - -# define obstack_empty_p(OBSTACK) \ - __extension__ \ - ({ struct obstack *__o = (OBSTACK); \ - (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); }) - -# define obstack_grow(OBSTACK,where,length) \ -__extension__ \ -({ struct obstack *__o = (OBSTACK); \ - int __len = (length); \ - if (__o->next_free + __len > __o->chunk_limit) \ - _obstack_newchunk (__o, __len); \ - _obstack_memcpy (__o->next_free, (where), __len); \ - __o->next_free += __len; \ - (void) 0; }) - -# define obstack_grow0(OBSTACK,where,length) \ -__extension__ \ -({ struct obstack *__o = (OBSTACK); \ - int __len = (length); \ - if (__o->next_free + __len + 1 > __o->chunk_limit) \ - _obstack_newchunk (__o, __len + 1); \ - _obstack_memcpy (__o->next_free, (where), __len); \ - __o->next_free += __len; \ - *(__o->next_free)++ = 0; \ - (void) 0; }) - -# define obstack_1grow(OBSTACK,datum) \ -__extension__ \ -({ struct obstack *__o = (OBSTACK); \ - if (__o->next_free + 1 > __o->chunk_limit) \ - _obstack_newchunk (__o, 1); \ - obstack_1grow_fast (__o, datum); \ - (void) 0; }) - -/* These assume that the obstack alignment is good enough for pointers or ints, - and that the data added so far to the current object - shares that much alignment. */ - -# define obstack_ptr_grow(OBSTACK,datum) \ -__extension__ \ -({ struct obstack *__o = (OBSTACK); \ - if (__o->next_free + sizeof (void *) > __o->chunk_limit) \ - _obstack_newchunk (__o, sizeof (void *)); \ - obstack_ptr_grow_fast (__o, datum); }) - -# define obstack_int_grow(OBSTACK,datum) \ -__extension__ \ -({ struct obstack *__o = (OBSTACK); \ - if (__o->next_free + sizeof (int) > __o->chunk_limit) \ - _obstack_newchunk (__o, sizeof (int)); \ - obstack_int_grow_fast (__o, datum); }) - -# define obstack_ptr_grow_fast(OBSTACK,aptr) \ -__extension__ \ -({ struct obstack *__o1 = (OBSTACK); \ - *(const void **) __o1->next_free = (aptr); \ - __o1->next_free += sizeof (const void *); \ - (void) 0; }) - -# define obstack_int_grow_fast(OBSTACK,aint) \ -__extension__ \ -({ struct obstack *__o1 = (OBSTACK); \ - *(int *) __o1->next_free = (aint); \ - __o1->next_free += sizeof (int); \ - (void) 0; }) - -# define obstack_blank(OBSTACK,length) \ -__extension__ \ -({ struct obstack *__o = (OBSTACK); \ - int __len = (length); \ - if (__o->chunk_limit - __o->next_free < __len) \ - _obstack_newchunk (__o, __len); \ - obstack_blank_fast (__o, __len); \ - (void) 0; }) - -# define obstack_alloc(OBSTACK,length) \ -__extension__ \ -({ struct obstack *__h = (OBSTACK); \ - obstack_blank (__h, (length)); \ - obstack_finish (__h); }) - -# define obstack_copy(OBSTACK,where,length) \ -__extension__ \ -({ struct obstack *__h = (OBSTACK); \ - obstack_grow (__h, (where), (length)); \ - obstack_finish (__h); }) - -# define obstack_copy0(OBSTACK,where,length) \ -__extension__ \ -({ struct obstack *__h = (OBSTACK); \ - obstack_grow0 (__h, (where), (length)); \ - obstack_finish (__h); }) - -/* The local variable is named __o1 to avoid a name conflict - when obstack_blank is called. */ -# define obstack_finish(OBSTACK) \ -__extension__ \ -({ struct obstack *__o1 = (OBSTACK); \ - void *value; \ - value = (void *) __o1->object_base; \ - if (__o1->next_free == value) \ - __o1->maybe_empty_object = 1; \ - __o1->next_free \ - = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\ - & ~ (__o1->alignment_mask)); \ - if (__o1->next_free - (char *)__o1->chunk \ - > __o1->chunk_limit - (char *)__o1->chunk) \ - __o1->next_free = __o1->chunk_limit; \ - __o1->object_base = __o1->next_free; \ - value; }) - -# define obstack_free(OBSTACK, OBJ) \ -__extension__ \ -({ struct obstack *__o = (OBSTACK); \ - void *__obj = (void *) (OBJ); \ - if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \ - __o->next_free = __o->object_base = (char *) __obj; \ - else (obstack_free) (__o, __obj); }) - -#else /* not __GNUC__ or not __STDC__ */ - -# define obstack_object_size(h) \ - (unsigned) ((h)->next_free - (h)->object_base) - -# define obstack_room(h) \ - (unsigned) ((h)->chunk_limit - (h)->next_free) - -# define obstack_empty_p(h) \ - ((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0) - -/* Note that the call to _obstack_newchunk is enclosed in (..., 0) - so that we can avoid having void expressions - in the arms of the conditional expression. - Casting the third operand to void was tried before, - but some compilers won't accept it. */ - -# define obstack_make_room(h,length) \ -( (h)->temp = (length), \ - (((h)->next_free + (h)->temp > (h)->chunk_limit) \ - ? (_obstack_newchunk ((h), (h)->temp), 0) : 0)) - -# define obstack_grow(h,where,length) \ -( (h)->temp = (length), \ - (((h)->next_free + (h)->temp > (h)->chunk_limit) \ - ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ - _obstack_memcpy ((h)->next_free, (where), (h)->temp), \ - (h)->next_free += (h)->temp) - -# define obstack_grow0(h,where,length) \ -( (h)->temp = (length), \ - (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \ - ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \ - _obstack_memcpy ((h)->next_free, (where), (h)->temp), \ - (h)->next_free += (h)->temp, \ - *((h)->next_free)++ = 0) - -# define obstack_1grow(h,datum) \ -( (((h)->next_free + 1 > (h)->chunk_limit) \ - ? (_obstack_newchunk ((h), 1), 0) : 0), \ - obstack_1grow_fast (h, datum)) - -# define obstack_ptr_grow(h,datum) \ -( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ - ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ - obstack_ptr_grow_fast (h, datum)) - -# define obstack_int_grow(h,datum) \ -( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ - ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ - obstack_int_grow_fast (h, datum)) - -# define obstack_ptr_grow_fast(h,aptr) \ - (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr)) - -# define obstack_int_grow_fast(h,aint) \ - (((int *) ((h)->next_free += sizeof (int)))[-1] = (aptr)) - -# define obstack_blank(h,length) \ -( (h)->temp = (length), \ - (((h)->chunk_limit - (h)->next_free < (h)->temp) \ - ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ - obstack_blank_fast (h, (h)->temp)) - -# define obstack_alloc(h,length) \ - (obstack_blank ((h), (length)), obstack_finish ((h))) - -# define obstack_copy(h,where,length) \ - (obstack_grow ((h), (where), (length)), obstack_finish ((h))) - -# define obstack_copy0(h,where,length) \ - (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) - -# define obstack_finish(h) \ -( ((h)->next_free == (h)->object_base \ - ? (((h)->maybe_empty_object = 1), 0) \ - : 0), \ - (h)->temp = __PTR_TO_INT ((h)->object_base), \ - (h)->next_free \ - = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \ - & ~ ((h)->alignment_mask)), \ - (((h)->next_free - (char *) (h)->chunk \ - > (h)->chunk_limit - (char *) (h)->chunk) \ - ? ((h)->next_free = (h)->chunk_limit) : 0), \ - (h)->object_base = (h)->next_free, \ - __INT_TO_PTR ((h)->temp)) - -# define obstack_free(h,obj) \ -( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ - (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ - ? (int) ((h)->next_free = (h)->object_base \ - = (h)->temp + (char *) (h)->chunk) \ - : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0))) - -#endif /* not __GNUC__ or not __STDC__ */ - -#ifdef __cplusplus -} /* C++ */ -#endif - -#endif /* obstack.h */ diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog deleted file mode 100644 index 51705145efc..00000000000 --- a/include/opcode/ChangeLog +++ /dev/null @@ -1,572 +0,0 @@ -2006-07-14 H.J. Lu - - * i386.h (i386_optab): Remove InvMem from maskmovq, movhlps, - movlhps, movmskps, pextrw, pmovmskb, movmskpd, maskmovdqu, - movdq2q and movq2dq. - -2006-07-10 Dwarakanath Rajagopal - Michael Meissner - - * i386.h: Add amdfam10 new instructions (SSE4a and ABM instructions). - -2006-06-12 H.J. Lu - - * i386.h (i386_optab): Add "nop" with memory reference. - -2006-06-12 H.J. Lu - - * i386.h (i386_optab): Update comment for 64bit NOP. - -2006-06-06 Ben Elliston - Anton Blanchard - - * ppc.h (PPC_OPCODE_POWER6): Define. - Adjust whitespace. - -2006-06-05 Thiemo Seufer - - * mips.h: Improve description of MT flags. - -2006-05-25 Richard Sandiford - - * m68k.h (mcf_mask): Define. - -2006-05-05 Thiemo Seufer - David Ung - - * mips.h (enum): Add macro M_CACHE_AB. - -2006-05-04 Thiemo Seufer - Nigel Stephens - David Ung - - * mips.h: Add INSN_SMARTMIPS define. - -2006-04-30 Thiemo Seufer - David Ung - - * mips.h: Defines udi bits and masks. Add description of - characters which may appear in the args field of udi - instructions. - -2006-04-26 Thiemo Seufer - - * mips.h: Improve comments describing the bitfield instruction - fields. - -2006-04-26 Julian Brown - - * arm.h (FPU_VFP_EXT_V3): Define constant. - (FPU_NEON_EXT_V1): Likewise. - (FPU_VFP_HARD): Update. - (FPU_VFP_V3): Define macro. - (FPU_ARCH_VFP_V3, FPU_ARCH_VFP_V3_PLUS_NEON_V1): Define macros. - -2006-04-07 Joerg Wunsch - - * avr.h (AVR_ISA_PWMx): New. - -2006-03-28 Nathan Sidwell - - * m68k.h (cpu_m68k, cpu_cf, cpu_m68000, cpu_m68008, cpu_m68010, - cpu_m68020, cpu_m68ec030, cpu_m68040, cpu_m68060, cpu_m68851, - cpu_m68881, cpu_m68882, cpu_cpu32, cpu_cf5200, cpu_cf5206e, - cpu_cf5208, cpu_cf521x, cpu_cf5213, cpu_cf5249, cpu_cf528x, - cpu_cf5307, cpu_cf5329, cpu_cf5407, cpu_cf547x, cpu_cf548x): Remove. - -2006-03-10 Paul Brook - - * arm.h (ARM_AEXT_V7_ARM): Include v6ZK extensions. - -2006-03-04 John David Anglin - - * hppa.h (pa_opcodes): Reorder bb opcodes so that pa10 opcodes come - first. Correct mask of bb "B" opcode. - -2006-02-27 H.J. Lu - - * i386.h (i386_optab): Support Intel Merom New Instructions. - -2006-02-24 Paul Brook - - * arm.h: Add V7 feature bits. - -2006-02-23 H.J. Lu - - * ia64.h (ia64_opnd): Add IA64_OPND_IMMU5b. - -2006-01-31 Paul Brook - Richard Earnshaw - - * arm.h: Use ARM_CPU_FEATURE. - (ARM_AEXT_*, FPU_ENDIAN_PURE, FPU_VFP_HARD): New. - (arm_feature_set): Change to a structure. - (ARM_CPU_HAS_FEATURE, ARM_MERGE_FEATURE_SETS, ARM_CLEAR_FEATURE, - ARM_FEATURE): New macros. - -2005-12-07 Hans-Peter Nilsson - - * cris.h (MOVE_M_TO_PREG_OPCODE, MOVE_M_TO_PREG_ZBITS) - (MOVE_PC_INCR_OPCODE_PREFIX, MOVE_PC_INCR_OPCODE_SUFFIX): New macros. - (ADD_PC_INCR_OPCODE): Don't define. - -2005-12-06 H.J. Lu - - PR gas/1874 - * i386.h (i386_optab): Add 64bit support for monitor and mwait. - -2005-11-14 David Ung - - * mips.h: Assign 'm'/'M' codes to MIPS16e save/restore - instructions. Define MIPS16_ALL_ARGS and MIPS16_ALL_STATICS for - save/restore encoding of the args field. - -2005-10-28 Dave Brolley - - Contribute the following changes: - 2005-02-16 Dave Brolley - - * cgen-bitset.h: Rename CGEN_ISA_MASK to CGEN_BITSET. Rename - cgen_isa_mask_* to cgen_bitset_*. - * cgen.h: Likewise. - - 2003-10-21 Richard Sandiford - - * cgen.h (CGEN_BITSET_ATTR_VALUE): Fix definition. - (CGEN_ATTR_ENTRY): Change "value" to type "unsigned". - (CGEN_CPU_TABLE): Make isas a ponter. - - 2003-09-29 Dave Brolley - - * cgen.h (CGEN_ATTR_VALUE_BITSET_TYPE): New typedef. - (CGEN_ATTR_VALUE_ENUM_TYPE): Ditto. - (CGEN_ATTR_VALUE_TYPE): Use these new typedefs. - - 2002-12-13 Dave Brolley - - * cgen.h (symcat.h): #include it. - (cgen-bitset.h): #include it. - (CGEN_ATTR_VALUE_TYPE): Now a union. - (CGEN_ATTR_VALUE): Reference macros generated in opcodes/-desc.h. - (CGEN_ATTR_ENTRY): 'value' now unsigned. - (cgen_cpu_desc): 'isas' now (CGEN_ISA_MASK*). - * cgen-bitset.h: New file. - -2005-09-30 Catherine Moore - - * bfin.h: New file. - -2005-10-24 Jan Beulich - - * ia64.h (enum ia64_opnd): Move memory operand out of set of - indirect operands. - -2005-10-16 John David Anglin - - * hppa.h (pa_opcodes): Add two fcmp opcodes. Reorder ftest opcodes. - Add FLAG_STRICT to pa10 ftest opcode. - -2005-10-12 John David Anglin - - * hppa.h (pa_opcodes): Remove lha entries. - -2005-10-08 John David Anglin - - * hppa.h (FLAG_STRICT): Revise comment. - (pa_opcode): Revise ordering rules. Add/move strict pa10 variants - before corresponding pa11 opcodes. Add strict pa10 register-immediate - entries for "fdc". - -2005-09-24 John David Anglin - - * hppa.h (pa_opcodes): Add new "fdc" and "fic" opcode entries. - -2005-09-06 Chao-ying Fu - - * mips.h (OP_SH_MT_U, OP_MASK_MT_U, OP_SH_MT_H, OP_MASK_MT_H, - OP_SH_MTACC_T, OP_MASK_MTACC_T, OP_SH_MTACC_D, OP_MASK_MTACC_D): New - define. - Document !, $, *, &, g, +t, +T operand formats for MT instructions. - (INSN_ASE_MASK): Update to include INSN_MT. - (INSN_MT): New define for MT ASE. - -2005-08-25 Chao-ying Fu - - * mips.h (OP_SH_DSPACC, OP_MASK_DSPACC, OP_SH_DSPACC_S, - OP_MASK_DSPACC_S, OP_SH_DSPSFT, OP_MASK_DSPSFT, OP_SH_DSPSFT_7, - OP_MASK_DSPSFT_7, OP_SH_SA3, OP_MASK_SA3, OP_SH_SA4, OP_MASK_SA4, - OP_SH_IMM8, OP_MASK_IMM8, OP_SH_IMM10, OP_MASK_IMM10, OP_SH_WRDSP, - OP_MASK_WRDSP, OP_SH_RDDSP, OP_MASK_RDDSP): New define. - Document 3, 4, 5, 6, 7, 8, 9, 0, :, ', @ operand formats for DSP - instructions. - (INSN_DSP): New define for DSP ASE. - -2005-08-18 Alan Modra - - * a29k.h: Delete. - -2005-08-15 Daniel Jacobowitz - - * ppc.h (PPC_OPCODE_E300): Define. - -2005-08-12 Martin Schwidefsky - - * s390.h (s390_opcode_cpu_val): Add enum for cpu type z9-109. - -2005-07-28 John David Anglin - - PR gas/336 - * hppa.h (pa_opcodes): Allow 0 immediates in PA 2.0 variants of pdtlb - and pitlb. - -2005-07-27 Jan Beulich - - * i386.h (i386_optab): Add comment to movd. Use LongMem for all - movd-s. Add NoRex64 to movq-s dealing only with mmx or xmm registers. - Add movq-s as 64-bit variants of movd-s. - -2005-07-18 John David Anglin - - * hppa.h: Fix punctuation in comment. - - * hppa.h (pa_opcode): Add rules for opcode ordering. Check first for - implicit space-register addressing. Set space-register bits on opcodes - using implicit space-register addressing. Add various missing pa20 - long-immediate opcodes. Remove various opcodes using implicit 3-bit - space-register addressing. Use "fE" instead of "fe" in various - fstw opcodes. - -2005-07-18 Jan Beulich - - * i386.h (i386_optab): Operands of aam and aad are unsigned. - -2007-07-15 H.J. Lu - - * i386.h (i386_optab): Support Intel VMX Instructions. - -2005-07-10 John David Anglin - - * hppa.h (pa_opcode): Don't set FLAG_STRICT in pa10 loads and stores. - -2005-07-05 Jan Beulich - - * i386.h (i386_optab): Add new insns. - -2005-07-01 Nick Clifton - - * sparc.h: Add typedefs to structure declarations. - -2005-06-20 H.J. Lu - - PR 1013 - * i386.h (i386_optab): Update comments for 64bit addressing on - mov. Allow 64bit addressing for mov and movq. - -2005-06-11 John David Anglin - - * hppa.h (pa_opcodes): Use cM and cX instead of cm and cx, - respectively, in various floating-point load and store patterns. - -2005-05-23 John David Anglin - - * hppa.h (FLAG_STRICT): Correct comment. - (pa_opcodes): Update load and store entries to allow both PA 1.X and - PA 2.0 mneumonics when equivalent. Entries with cache control - completers now require PA 1.1. Adjust whitespace. - -2005-05-19 Anton Blanchard - - * ppc.h (PPC_OPCODE_POWER5): Define. - -2005-05-10 Nick Clifton - - * Update the address and phone number of the FSF organization in - the GPL notices in the following files: - a29k.h, alpha.h, arc.h, arm.h, avr.h, cgen.h, convex.h, cris.h, - crx.h, d10v.h, d30v.h, dlx.h, h8300.h, hppa.h, i370.h, i386.h, - i860.h, i960.h, m68hc11.h, m68k.h, m88k.h, maxq.h, mips.h, mmix.h, - mn10200.h, mn10300.h, msp430.h, np1.h, ns32k.h, or32.h, pdp11.h, - pj.h, pn.h, ppc.h, pyr.h, s390.h, sparc.h, tic30.h, tic4x.h, - tic54x.h, tic80.h, v850.h, vax.h - -2005-05-09 Jan Beulich - - * i386.h (i386_optab): Add ht and hnt. - -2005-04-18 Mark Kettenis - - * i386.h: Insert hyphens into selected VIA PadLock extensions. - Add xcrypt-ctr. Provide aliases without hyphens. - -2005-04-13 H.J. Lu - - Moved from ../ChangeLog - - 2005-04-12 Paul Brook - * m88k.h: Rename psr macros to avoid conflicts. - - 2005-03-12 Zack Weinberg - * arm.h: Adjust comments for ARM_EXT_V4T and ARM_EXT_V5T. - Add ARM_EXT_V6T2, ARM_ARCH_V6T2, ARM_ARCH_V6KT2, ARM_ARCH_V6ZT2, - and ARM_ARCH_V6ZKT2. - - 2004-11-29 Tomer Levi - * crx.h (enum operand_type): Rename rbase_cst4 to rbase_dispu4. - Remove redundant instruction types. - (struct argument): X_op - new field. - (struct cst4_entry): Remove. - (no_op_insn): Declare. - - 2004-11-05 Tomer Levi - * crx.h (enum argtype): Rename types, remove unused types. - - 2004-10-27 Tomer Levi - * crx.h (enum reg): Rearrange registers, remove 'ccfg' and `'pc'. - (enum reg_type): Remove CRX_PC_REGTYPE, CRX_MTPR_REGTYPE. - (enum operand_type): Rearrange operands, edit comments. - replace us with ui for unsigned immediate. - replace d with disps/dispu/dispe for signed/unsigned/escaped - displacements (respectively). - replace rbase_ridx_scl2_dispu with rindex_disps for register index. - (instruction type): Add NO_TYPE_INS. - (instruction flags): Add USER_REG, CST4MAP, NO_SP, NO_RPTR. - (operand_entry): New field - 'flags'. - (operand flags): New. - - 2004-10-21 Tomer Levi - * crx.h (operand_type): Remove redundant types i3, i4, - i5, i8, i12. - Add new unsigned immediate types us3, us4, us5, us16. - -2005-04-12 Mark Kettenis - - * i386.h (i386_optab): Mark VIA PadLock instructions as ImmExt and - adjust them accordingly. - -2005-04-01 Jan Beulich - - * i386.h (i386_optab): Add rdtscp. - -2005-03-29 H.J. Lu - - * i386.h (i386_optab): Don't allow the `l' suffix for moving - between memory and segment register. Allow movq for moving between - general-purpose register and segment register. - -2005-02-09 Jan Beulich - - PR gas/707 - * i386.h (i386_optab): Add x_Suf to fbld and fbstp. Add w_Suf and - FloatMF to fldcw, fstcw, fnstcw, and the memory formas of fstsw and - fnstsw. - -2006-02-07 Nathan Sidwell - - * m68k.h (m68008, m68ec030, m68882): Remove. - (m68k_mask): New. - (cpu_m68k, cpu_cf): New. - (mcf5200, mcf5206e, mcf521x, mcf5249, mcf528x, mcf5307, mcf5407, - mcf5470, mcf5480): Rename to cpu_. Add m680x0 variants. - -2005-01-25 Alexandre Oliva - - 2004-11-10 Alexandre Oliva - * cgen.h (enum cgen_parse_operand_type): Add - CGEN_PARSE_OPERAND_SYMBOLIC. - -2005-01-21 Fred Fish - - * mips.h: Change INSN_ALIAS to INSN2_ALIAS. - Change INSN_WRITE_MDMX_ACC to INSN2_WRITE_MDMX_ACC. - Change INSN_READ_MDMX_ACC to INSN2_READ_MDMX_ACC. - -2005-01-19 Fred Fish - - * mips.h (struct mips_opcode): Add new pinfo2 member. - (INSN_ALIAS): New define for opcode table entries that are - specific instances of another entry, such as 'move' for an 'or' - with a zero operand. - (INSN_READ_MDMX_ACC): Redefine from 0 to 0x2. - (INSN_WRITE_MDMX_ACC): Redefine from 0 to 0x4. - -2004-12-09 Ian Lance Taylor - - * mips.h (CPU_RM9000): Define. - (OPCODE_IS_MEMBER): Handle CPU_RM9000. - -2004-11-25 Jan Beulich - - * i386.h: CpuNo64 mov can't reasonably have a 'q' suffix. Moves - to/from test registers are illegal in 64-bit mode. Add missing - NoRex64 to sidt. fxsave/fxrstor now allow for a 'q' suffix - (previously one had to explicitly encode a rex64 prefix). Re-enable - lahf/sahf in 64-bit mode as at least some Athlon64/Opteron steppings - support it there. Add cmpxchg16b as per Intel's 64-bit documentation. - -2004-11-23 Jan Beulich - - * i386.h (i386_optab): paddq and psubq, even in their MMX form, are - available only with SSE2. Change the MMX additions introduced by SSE - and 3DNow!A to CpuMMX2 (rather than CpuMMX). Indicate the 3DNow!A - instructions by their now designated identifier (since combining i686 - and 3DNow! does not really imply 3DNow!A). - -2004-11-19 Alan Modra - - * msp430.h (struct rcodes_s, MSP430_RLC, msp430_rcodes, - struct hcodes_s, msp430_hcodes): Move to gas/config/tc-msp430.c. - -2004-11-08 Inderpreet Singh - Vineet Sharma - - * maxq.h: New file: Disassembly information for the maxq port. - -2004-11-05 H.J. Lu - - * i386.h (i386_optab): Put back "movzb". - -2004-11-04 Hans-Peter Nilsson - - * cris.h (enum cris_insn_version_usage): Tweak formatting and - comments. Remove member cris_ver_sim. Add members - cris_ver_sim_v0_10, cris_ver_v0_10, cris_ver_v3_10, - cris_ver_v8_10, cris_ver_v10, cris_ver_v10p. - (struct cris_support_reg, struct cris_cond15): New types. - (cris_conds15): Declare. - (JUMP_PC_INCR_OPCODE_V32, BA_DWORD_OPCODE, NOP_OPCODE_COMMON) - (NOP_OPCODE_ZBITS_COMMON, LAPC_DWORD_OPCODE, LAPC_DWORD_Z_BITS) - (NOP_OPCODE_V32, NOP_Z_BITS_V32): New macros. - (NOP_Z_BITS): Define in terms of NOP_OPCODE. - (cris_imm_oprnd_size_type): New members SIZE_FIELD_SIGNED and - SIZE_FIELD_UNSIGNED. - -2004-11-04 Jan Beulich - - * i386.h (sldx_Suf): Remove. - (FP, l_FP, sl_FP, x_FP): Don't imply IgnoreSize. - (q_FP): Define, implying no REX64. - (x_FP, sl_FP): Imply FloatMF. - (i386_optab): Split reg and mem forms of moving from segment registers - so that the memory forms can ignore the 16-/32-bit operand size - distinction. Adjust a few others for Intel mode. Remove *FP uses from - all non-floating-point instructions. Unite 32- and 64-bit forms of - movsx, movzx, and movd. Adjust floating point operations for the above - changes to the *FP macros. Add DefaultSize to floating point control - insns operating on larger memory ranges. Remove left over comments - hinting at certain insns being Intel-syntax ones where the ones - actually meant are already gone. - -2004-10-07 Tomer Levi - - * crx.h: Add COPS_REG_INS - Coprocessor Special register - instruction type. - -2004-09-30 Paul Brook - - * arm.h (ARM_EXT_V6K, ARM_EXT_V6Z): Define. - (ARM_ARCH_V6K, ARM_ARCH_V6Z, ARM_ARCH_V6ZK): Define. - -2004-09-11 Theodore A. Roth - - * avr.h: Add support for - atmega48, atmega88, atmega168, attiny13, attiny2313, at90can128. - -2004-09-09 Segher Boessenkool - - * ppc.h (PPC_OPERAND_OPTIONAL): Fix comment. - -2004-08-24 Dmitry Diky - - * msp430.h (msp430_opc): Add new instructions. - (msp430_rcodes): Declare new instructions. - (msp430_hcodes): Likewise.. - -2004-08-13 Nick Clifton - - PR/301 - * h8300.h (O_JSR): Do not allow VECIND addressing for non-SX - processors. - -2004-08-30 Michal Ludvig - - * i386.h (i386_optab): Added montmul/xsha1/xsha256 insns. - -2004-07-22 H.J. Lu - - * i386.h (i386_optab): Allow cs/ds in 64bit for branch hints. - -2004-07-21 Jan Beulich - - * i386.h: Adjust instruction descriptions to better match the - specification. - -2004-07-16 Richard Earnshaw - - * arm.h: Remove all old content. Replace with architecture defines - from gas/config/tc-arm.c. - -2004-07-09 Andreas Schwab - - * m68k.h: Fix comment. - -2004-07-07 Tomer Levi - - * crx.h: New file. - -2004-06-24 Alan Modra - - * i386.h (i386_optab): Remove fildd, fistpd and fisttpd. - -2004-05-24 Peter Barada - - * m68k.h: Add 'size' to m68k_opcode. - -2004-05-05 Peter Barada - - * m68k.h: Switch from ColdFire chip name to core variant. - -2004-04-22 Peter Barada - - * m68k.h: Add mcfmac/mcfemac definitions. Update operand - descriptions for new EMAC cases. - Remove ColdFire macmw/macml/msacmw/msacmw hacks and properly - handle Motorola MAC syntax. - Allow disassembly of ColdFire V4e object files. - -2004-03-16 Alan Modra - - * ppc.h (PPC_OPERAND_GPR_0): Define. Bump other operand defines. - -2004-03-12 Jakub Jelinek - - * i386.h (i386_optab): Remove CpuNo64 from sysenter and sysexit. - -2004-03-12 Michal Ludvig - - * i386.h (i386_optab): Added xstore as an alias for xstorerng. - -2004-03-12 Michal Ludvig - - * i386.h (i386_optab): Added xstore/xcrypt insns. - -2004-02-09 Anil Paranjpe - - * h8300.h (32bit ldc/stc): Add relaxing support. - -2004-01-12 Anil Paranjpe - - * h8300.h (BITOP): Pass MEMRELAX flag. - -2004-01-09 Anil Paranjpe - - * h8300.h (BITOP): Dissallow operations on @aa:16 and @aa:32 - except for the H8S. - -For older changes see ChangeLog-9103 - -Local Variables: -mode: change-log -left-margin: 8 -fill-column: 74 -version-control: never -End: diff --git a/include/opcode/ChangeLog-9103 b/include/opcode/ChangeLog-9103 deleted file mode 100644 index 9a04bf5f5c7..00000000000 --- a/include/opcode/ChangeLog-9103 +++ /dev/null @@ -1,3121 +0,0 @@ -2005-04-13 H.J. Lu - - 2003-11-18 Maciej W. Rozycki - * mips.h: Define new enum members, M_LCA_AB and M_DLCA_AB. - - 2003-04-04 Svein E. Seldal - * tic4x.h: Namespace cleanup. Replace s/c4x/tic4x - - 2002-11-16 Klee Dienes - * m88k.h (INSTAB): Remove 'next' field. - (instruction): Remove definition; replace with extern declaration - and mark as const. - - 2002-08-28 Michael Hayes - * tic4x.h: New file. - - 2002-07-25 Richard Sandiford - * mips.h (CPU_R2000): Remove. - -2003-10-21 Peter Barada - Bernardo Innocenti - - * m68k.h: Add MCFv4/MCF5528x support. - -2003-10-19 Hans-Peter Nilsson - - * mmix.h (JMP_INSN_BYTE): Define. - -2003-09-30 Chris Demetriou - - * mips.h: Document +E, +F, +G, +H, and +I operand types. - Update documentation of I, +B and +C operand types. - (INSN_ISA64R2, ISA_MIPS64R2, CPU_MIPS64R2): New defines. - (M_DEXT, M_DINS): New enum values. - -2003-09-04 Nick Clifton - - * v850.h (PROCESSOR_V850E1): Define. - -2003-08-19 Alan Modra - - * ppc.h (PPC_OPCODE_440): Define. Formatting. Use hex for other - PPC_OPCODE_* defines. - -2003-08-16 Jason Eckhardt - - * i860.h (fmov.ds): Expand as famov.ds. - (fmov.sd): Expand as famov.sd. - (pfmov.ds): Expand as pfamov.ds. - -2003-08-07 Michael Meissner - - * cgen.h: Remove PARAM macro usage in all prototypes. - (CGEN_EXTRACT_INFO): Use void * instead of PTR. - (cgen_print_fn): Ditto. - (CGEN_HW_ENTRY): Ditto. - (CGEN_MAYBE_MULTI_IFLD): Ditto. - (struct cgen_insn): Ditto. - (CGEN_CPU_TABLE): Ditto. - -2003-08-07 Alan Modra - - * alpha.h: Remove PARAMS macro. - * arc.h: Likewise. - * d10v.h: Likewise. - * d30v.h: Likewise. - * i370.h: Likewise. - * or32.h: Likewise. - * pj.h: Likewise. - * ppc.h: Likewise. - * sparc.h: Likewise. - * tic80.h: Likewise. - * v850.h: Likewise. - -2003-07-18 Michael Snyder - - * include/opcode/h8sx.h (DO_MOVA1, DO_MOVA2): Reformatting. - -2003-07-15 Richard Sandiford - - * mips.h (CPU_RM7000): New macro. - (OPCODE_IS_MEMBER): Match CPU_RM7000 against 4650 insns. - -2003-07-09 Alexandre Oliva - - 2000-04-01 Alexandre Oliva - * mn10300.h (AM33_2): Renamed from AM33. - 2000-03-31 Alexandre Oliva - * mn10300.h (AM332, FMT_D3): Defined. - (MN10300_OPERAND_FSREG, MN10300_OPERAND_FDREG): Likewise. - (MN10300_OPERAND_FPCR): Likewise. - -2003-07-01 Martin Schwidefsky - - * s390.h (s390_opcode_cpu_val): Add enum for cpu type z990. - -2003-06-25 Richard Sandiford - - * h8300.h (IMM2_NS, IMM8_NS, IMM16_NS): Remove. - (IMM8U, IMM8U_NS): Define. - (h8_opcodes): Use IMM8U_NS for mov.[wl] #xx:8,@yy. - -2003-06-25 Richard Sandiford - - * h8300.h (h8_opcodes): Fix the mov.l @(dd:32,ERs),ERd and - mov.l ERs,@(dd:32,ERd) entries. - -2003-06-23 H.J. Lu - - * i386.h (i386_optab): Support Intel Precott New Instructions. - -2003-06-10 Gary Hade - - * ppc.h (PPC_OPERAND_DQ): Define. - -2003-06-10 Richard Sandiford - - * h8300.h (IMM4_NS, IMM8_NS): New. - (h8_opcodes): Replace IMM4 with IMM4_NS in mov.b and mov.w entries. - Likewise IMM8 for mov.w and mov.l. Likewise IMM16U for mov.l. - -2003-06-03 Michael Snyder - - * h8300.h (enum h8_model): Add AV_H8S to distinguish from H8H. - (ldc): Split ccr ops from exr ops (which are only available - on H8S or H8SX). - (stc): Ditto. - (andc, orc, xorc): Ditto. - (ldmac, stmac, clrmac, mac): Change access to AV_H8S. - -2003-06-03 Michael Snyder - and Bernd Schmidt - and Alexandre Oliva - * h8300.h: Add support for h8300sx instruction set. - -2003-05-23 Jason Eckhardt - - * i860.h (expand_type): Add XP_ONLY. - (scyc.b): New XP instruction. - (ldio.l): Likewise. - (ldio.s): Likewise. - (ldio.b): Likewise. - (ldint.l): Likewise. - (ldint.s): Likewise. - (ldint.b): Likewise. - (stio.l): Likewise. - (stio.s): Likewise. - (stio.b): Likewise. - (pfld.q): Likewise. - -2003-05-20 Jason Eckhardt - - * i860.h (flush): Set lower 3 bits properly and use 'L' - for the immediate operand type instead of 'i'. - -2003-05-20 Jason Eckhardt - - * i860.h (fzchks): Both S and R bits must be set. - (pfzchks): Likewise. - (faddp): Likewise. - (pfaddp): Likewise. - (fix.ss): Remove (invalid instruction). - (pfix.ss): Likewise. - (ftrunc.ss): Likewise. - (pftrunc.ss): Likewise. - -2003-05-18 Jason Eckhardt - - * i860.h (form, pform): Add missing .dd suffix. - -2003-05-13 Stephane Carrez - - * m68hc11.h (M68HC12_BANK_VIRT): Define to 0x010000 - -2003-04-07 Michael Snyder - - * h8300.h (ldc/stc): Fix up src/dst swaps. - -2003-04-09 J. Grant - - * mips.h: Correct comment typo. - -2003-03-21 Martin Schwidefsky - - * s390.h (s390_opcode_arch_val): Rename to s390_opcode_mode_val. - (S390_OPCODE_ESAME): Rename to S390_OPCODE_ZARCH. - (s390_opcode): Remove architecture. Add modes and min_cpu. - -2003-03-17 D.Venkatasubramanian - - * h8300.h (O_SYS_CMDLINE): New pseudo opcode for command line - processing. - -2003-02-21 Noida D.Venkatasubramanian - - * h8300.h (ldmac, stmac): Replace MACREG with MS32 and MD32. - -2003-01-23 Alan Modra - - * m68hc11.h (cpu6812s): Define. - -2003-01-07 Chris Demetriou - - * mips.h: Fix missing space in comment. - (INSN_ISA1, INSN_ISA2, INSN_ISA3, INSN_ISA4, INSN_ISA5) - (INSN_ISA32, INSN_ISA32R2, INSN_ISA64): Shift values right - by four bits. - -2003-01-02 Chris Demetriou - - * mips.h: Update copyright years to include 2002 (which had - been missed previously) and 2003. Make comments about "+A", - "+B", and "+C" operand types more descriptive. - -2002-12-31 Chris Demetriou - - * mips.h: Note that the "+D" operand type name is now used. - -2002-12-30 Chris Demetriou - - * mips.h: Document "+" as the start of two-character operand - type names, and add new "K", "+A", "+B", and "+C" operand types. - (OP_MASK_INSMSB, OP_SH_INSMSB, OP_MASK_EXTMSB) - (OP_SH_EXTMSB, INSN_ISA32R2, ISA_MIPS32R2, CPU_MIPS32R2): New - defines. - -2002-12-24 Dmitry Diky - - * msp430.h: New file. Defines msp430 opcodes. - -2002-12-30 D.Venkatasubramanian - - * h8300.h: Added some more pseudo opcodes for system call - processing. - -2002-12-19 Chris Demetriou - - * mips.h (OP_OP_COP0, OP_OP_COP1, OP_OP_COP2, OP_OP_COP3) - (OP_OP_LWC1, OP_OP_LWC2, OP_OP_LWC3, OP_OP_LDC1, OP_OP_LDC2) - (OP_OP_LDC3, OP_OP_SWC1, OP_OP_SWC2, OP_OP_SWC3, OP_OP_SDC1) - (OP_OP_SDC2, OP_OP_SDC3): Define. - -2002-12-16 Alan Modra - - * hppa.h (completer_chars): #if 0 out. - - * ns32k.h (struct ns32k_opcode): Constify "name", "operands" and - "default_args". - (struct not_wot): Constify "args". - (struct not): Constify "name". - (numopcodes): Delete. - (endop): Delete. - -2002-12-13 Alan Modra - - * pj.h (pj_opc_info_t): Add union. - -2002-12-04 David Mosberger - - * ia64.h: Fix copyright message. - (IA64_OPND_AR_CSD): New operand kind. - -2002-12-03 Richard Henderson - - * ia64.h (enum ia64_opnd): Add IA64_OPND_LDXMOV. - -2002-12-03 Alan Modra - - * cgen.h (struct cgen_maybe_multi_ifield): Add "const PTR p" to union. - Constify "leaf" and "multi". - -2002-11-19 Klee Dienes - - * h8300.h (h8_opcode): Remove 'noperands', 'idx', and 'size' - fields. - (h8_opcodes). Modify initializer and initializer macros to no - longer initialize the removed fields. - -2002-11-19 Svein E. Seldal - - * tic4x.h (c4x_insts): Fixed LDHI constraint - -2002-11-18 Klee Dienes - - * h8300.h (h8_opcode): Remove 'length' field. - (h8_opcodes): Mark as 'const' (both the declaration and - definition). Modify initializer and initializer macros to no - longer initialize the length field. - -2002-11-18 Klee Dienes - - * arc.h (arc_ext_opcodes): Declare as extern. - (arc_ext_operands): Declare as extern. - * i860.h (i860_opcodes): Declare as const. - -2002-11-18 Svein E. Seldal - - * tic4x.h: File reordering. Added enhanced opcodes. - -2002-11-16 Svein E. Seldal - - * tic4x.h: Major rewrite of entire file. Define instruction - classes, and put each instruction into a class. - -2002-11-11 Svein E. Seldal - - * tic4x.h: Added new opcodes and corrected some bugs. Add support - for new DSP types. - -2002-10-14 Alan Modra - - * cgen.h: Test __BFD_H_SEEN__ rather than BFD_VERSION_DATE. - -2002-09-30 Gavin Romig-Koch - Ken Raeburn - Aldy Hernandez - Eric Christopher - Richard Sandiford - - * mips.h: Update comment for new opcodes. - (OP_MASK_VECBYTE, OP_SH_VECBYTE): New. - (OP_MASK_VECALIGN, OP_SH_VECALIGN): New. - (INSN_4111, INSN_4120, INSN_5400, INSN_5500): New. - (CPU_VR4120, CPU_VR5400, CPU_VR5500): New. - (OPCODE_IS_MEMBER): Handle the new CPU_* values and INSN_* flags. - Don't match CPU_R4111 with INSN_4100. - -2002-08-19 Elena Zannoni - - From matthew green - - * ppc.h (PPC_OPCODE_SPE): New opcode flag for Powerpc e500 - instructions. - (PPC_OPCODE_ISEL, PPC_OPCODE_BRLOCK, PPC_OPCODE_PMR, - PPC_OPCODE_CACHELCK, PPC_OPCODE_RFMCI): New opcode flags for the - e500x2 Integer select, branch locking, performance monitor, - cache locking and machine check APUs, respectively. - (PPC_OPCODE_EFS): New opcode type for efs* instructions. - (PPC_OPCODE_CLASSIC): New opcode type for Classic PowerPC instructions. - -2002-08-13 Stephane Carrez - - * m68hc11.h (M6812_OP_PAGE): Define to identify call operand. - (M68HC12_BANK_VIRT, M68HC12_BANK_MASK, M68HC12_BANK_BASE, - M68HC12_BANK_SHIFT, M68HC12_BANK_PAGE_MASK): Define for 68HC12 - memory banks. - (M6811_OC1M5, M6811_OC1M4, M6811_MODF): Fix value. - -2002-07-09 Thiemo Seufer - - * mips.h (INSN_MIPS16): New define. - -2002-07-08 Alan Modra - - * i386.h: Remove IgnoreSize from movsx and movzx. - -2002-06-08 Alan Modra - - * a29k.h: Replace CONST with const. - (CONST): Don't define. - * convex.h: Replace CONST with const. - (CONST): Don't define. - * dlx.h: Replace CONST with const. - * or32.h (CONST): Don't define. - -2002-05-30 Chris G. Demetriou - - * mips.h (OP_SH_ALN, OP_MASK_ALN, OP_SH_VSEL, OP_MASK_VSEL) - (MDMX_FMTSEL_IMM_QH, MDMX_FMTSEL_IMM_OB, MDMX_FMTSEL_VEC_QH) - (MDMX_FMTSEL_VEC_OB, INSN_READ_MDMX_ACC, INSN_WRITE_MDMX_ACC) - (INSN_MDMX): New constants, for MDMX support. - (opcode character list): Add "O", "Q", "X", "Y", and "Z" for MDMX. - -2002-05-28 Kuang Hwa Lin - - * dlx.h: New file. - -2002-05-25 Alan Modra - - * ia64.h: Use #include "" instead of <> for local header files. - * sparc.h: Likewise. - -2002-05-22 Thiemo Seufer - - * mips.h: Add M_DROL, M_DROL_I, M_DROR, M_DROR_I macro cases. - -2002-05-17 Andrey Volkov - - * h8300.h: Corrected defs of all control regs - and eepmov instr. - -2002-04-11 Alan Modra - - * i386.h: Add intel mode cmpsd and movsd. - Put them before SSE2 insns, so that rep prefix works. - -2002-03-15 Chris G. Demetriou - - * mips.h (INSN_MIPS3D): New definition used to mark MIPS-3D - instructions. - (OPCODE_IS_MEMBER): Adjust comments to indicate that ASE bit masks - may be passed along with the ISA bitmask. - -2002-03-05 Paul Koning - - * pdp11.h: Add format codes for float instruction formats. - -2002-02-25 Alan Modra - - * ppc.h (PPC_OPCODE_POWER4, PPC_OPCODE_NOPOWER4): Define. - -Mon Feb 18 17:31:48 CET 2002 Jan Hubicka - - * i386.h (push,pop): Fix Reg64 to WordReg to allow 16bit operands. - -Mon Feb 11 12:53:19 CET 2002 Jan Hubicka - - * i386.h (push,pop): Allow 16bit operands in 64bit mode. - (xchg): Fix. - (in, out): Disable 64bit operands. - (call, jmp): Avoid REX prefixes. - (jcxz): Prohibit in 64bit mode - (jrcxz, loop): Add 64bit variants. - (movq): Fix patterns. - (movmskps, pextrw, pinstrw): Add 64bit variants. - -2002-01-31 Ivan Guzvinec - - * or32.h: New file. - -2002-01-22 Graydon Hoare - - * cgen.h (CGEN_MAYBE_MULTI_IFLD): New structure. - (CGEN_OPERAND): Add CGEN_MAYBE_MULTI_IFLD field. - -2002-01-21 Thomas Klausner - - * h8300.h: Comment typo fix. - -2002-01-03 matthew green - - * ppc.h (PPC_OPCODE_BOOKE): BookE is not Motorola specific. - (PPC_OPCODE_BOOKE64): Likewise. - -Mon Dec 31 16:45:41 2001 Jeffrey A Law (law@cygnus.com) - - * hppa.h (call, ret): Move to end of table. - (addb, addib): PA2.0 variants should have been PA2.0W. - (ldw, ldh, ldb, stw, sth, stb, stwa): Reorder to keep disassembler - happy. - (fldw, fldd, fstw, fstd, bb): Likewise. - (short loads/stores): Tweak format specifier slightly to keep - disassembler happy. - (indexed loads/stores): Likewise. - (absolute loads/stores): Likewise. - -2001-12-04 Alexandre Oliva - - * d10v.h (OPERAND_NOSP): New macro. - -2001-11-29 Alexandre Oliva - - * d10v.h (OPERAND_SP): New macro. - -2001-11-15 Alan Modra - - * ppc.h (struct powerpc_operand ): Add dialect param. - -2001-11-11 Timothy Wall - - * tic54x.h: Revise opcode layout; don't really need a separate - structure for parallel opcodes. - -2001-11-13 Zack Weinberg - Alan Modra - - * i386.h (i386_optab): Add entries for "sldr", "smsw" and "str" to - accept WordReg. - -2001-11-04 Chris Demetriou - - * mips.h (OPCODE_IS_MEMBER): Remove extra space. - -2001-10-30 Hans-Peter Nilsson - - * mmix.h: New file. - -2001-10-18 Chris Demetriou - - * mips.h (OPCODE_IS_MEMBER): Add a no-op term to the end - of the expression, to make source code merging easier. - -2001-10-17 Chris Demetriou - - * mips.h: Sort coprocessor instruction argument characters - in comment, add a few more words of description for "H". - -2001-10-17 Chris Demetriou - - * mips.h (INSN_SB1): New cpu-specific instruction bit. - (OPCODE_IS_MEMBER): Allow instructions matching INSN_SB1 - if cpu is CPU_SB1. - -2001-10-17 matthew green - - * ppc.h (PPC_OPCODE_BOOKE64): Fix typo. - -2001-10-12 matthew green - - * ppc.h (PPC_OPCODE_BOOKE, PPC_OPCODE_BOOKE64, PPC_OPCODE_403): New - opcode flags for BookE 32-bit, BookE 64-bit and PowerPC 403 - instructions, respectively. - -2001-09-27 Nick Clifton - - * v850.h: Remove spurious comment. - -2001-09-21 Nick Clifton - - * h8300.h: Fix compile time warning messages - -2001-09-04 Richard Henderson - - * alpha.h (struct alpha_operand): Pack elements into bitfields. - -2001-08-31 Eric Christopher - - * mips.h: Remove CPU_MIPS32_4K. - -2001-08-27 Torbjorn Granlund - - * ppc.h (PPC_OPERAND_DS): Define. - -2001-08-25 Andreas Jaeger - - * d30v.h: Fix declaration of reg_name_cnt. - - * d10v.h: Fix declaration of d10v_reg_name_cnt. - - * arc.h: Add prototypes from opcodes/arc-opc.c. - -2001-08-16 Thiemo Seufer - - * mips.h (INSN_10000): Define. - (OPCODE_IS_MEMBER): Check for INSN_10000. - -2001-08-10 Alan Modra - - * ppc.h: Revert 2001-08-08. - -2001-08-10 Richard Sandiford - - * mips.h (INSN_GP32): Remove. - (OPCODE_IS_MEMBER): Remove gp32 parameter. - (M_MOVE): New macro identifier. - -2001-08-08 Alan Modra - - 1999-10-25 Torbjorn Granlund - * ppc.h (struct powerpc_operand): New field `reloc'. - -2001-08-01 Aldy Hernandez - - * mips.h (INSN_ISA_MASK): Nuke bits 12-15. - -2001-07-12 Jeff Johnston - - * cgen.h (CGEN_INSN): Add regex support. - (build_insn_regex): Declare. - -2001-07-11 Frank Ch. Eigler - - * cgen.h (CGEN_MACH): Add insn_chunk_bitsize field. - (cgen_cpu_desc): Ditto. - -2001-07-07 Ben Elliston - - * m88k.h: Clean up and reformat. Remove unused code. - -2001-06-14 Geoffrey Keating - - * cgen.h (cgen_keyword): Add nonalpha_chars field. - -2001-05-23 Thiemo Seufer - - * mips.h (CPU_R12000): Define. - -2001-05-23 John Healy - - * cgen.h: Increased CGEN_MAX_SYNTAX_ELEMENTS to 48. - -2001-05-15 Thiemo Seufer - - * mips.h (INSN_ISA_MASK): Define. - -2001-05-12 Alan Modra - - * i386.h (i386_optab): Second operand of cvtps2dq is an xmm reg, - not an mmx reg. Swap xmm/mmx regs on both movdq2q and movq2dq, - and use InvMem as these insns must have register operands. - -2001-05-04 Alan Modra - - * i386.h (i386_optab): Move InvMem to first operand of pmovmskb - and pextrw to swap reg/rm assignments. - -2001-04-05 Hans-Peter Nilsson - - * cris.h (enum cris_insn_version_usage): Correct comment for - cris_ver_v3p. - -2001-03-24 Alan Modra - - * i386.h (i386_optab): Correct entry for "movntdq". Add "punpcklqdq". - Add InvMem to first operand of "maskmovdqu". - -2001-03-22 Hans-Peter Nilsson - - * cris.h (ADD_PC_INCR_OPCODE): New macro. - -2001-03-21 Kazu Hirata - - * h8300.h: Fix formatting. - -2001-03-22 Alan Modra - - * i386.h (i386_optab): Add paddq, psubq. - -2001-03-19 Alan Modra - - * i386.h (REGNAM_AL, REGNAM_AX, REGNAM_EAX): Define. - -2001-02-28 Igor Shevlyakov - - * m68k.h: new defines for Coldfire V4. Update mcf to know - about mcf5407. - -2001-02-18 lars brinkhoff - - * pdp11.h: New file. - -2001-02-12 Jan Hubicka - - * i386.h (i386_optab): SSE integer converison instructions have - 64bit versions on x86-64. - -2001-02-10 Nick Clifton - - * mips.h: Remove extraneous whitespace. Formating change to allow - for future contribution. - -2001-02-09 Martin Schwidefsky - - * s390.h: New file. - -2001-02-02 Patrick Macdonald - - * cgen.h (CGEN_SYNTAX_CHAR_TYPE): Typedef as unsigned short. - (CGEN_MAX_SYNTAX_ELEMENTS): Rename from CGEN_MAX_SYNTAX_BYTES. - (CGEN_SYNTAX): Define using CGEN_MAX_SYNTAX_ELEMENTS. - -2001-01-24 Karsten Keil - - * i386.h (i386_optab): Fix swapgs - -2001-01-14 Alan Modra - - * hppa.h: Describe new '<' and '>' operand types, and tidy - existing comments. - (pa_opcodes): Add entries for missing wide mode ldi,ldo,ldw,stw. - Remove duplicate "ldw j(s,b),x". Sort some entries. - -2001-01-13 Jan Hubicka - - * i386.h (i386_optab): Fix pusha and ret templates. - -2001-01-11 Peter Targett - - * arc.h (ARC_MACH_5, ARC_MACH_6, ARC_MACH_7, ARC_MACH_8): New - definitions for masking cpu type. - (arc_ext_operand_value) New structure for storing extended - operands. - (ARC_OPERAND_*) Flags for operand values. - -2001-01-10 Jan Hubicka - - * i386.h (pinsrw): Add. - (pshufw): Remove. - (cvttpd2dq): Fix operands. - (cvttps2dq): Likewise. - (movq2q): Rename to movdq2q. - -2001-01-10 Richard Schaal - - * i386.h: Correct movnti instruction. - -2001-01-09 Jeff Johnston - - * cgen.h (CGEN_SYNTAX_CHAR_TYPE): New typedef based on max number - of operands (unsigned char or unsigned short). - (CGEN_SYNTAX): Changed to make array CGEN_SYNTAX_CHAR_TYPE. - (CGEN_SYNTAX_CHAR): Changed to cast to unsigned char. - -2001-01-05 Jan Hubicka - - * i386.h (i386_optab): Make [sml]fence template to use immext field. - -2001-01-03 Jan Hubicka - - * i386.h (i386_optab): Fix 64bit pushf template; Add instructions - introduced by Pentium4 - -2000-12-30 Jan Hubicka - - * i386.h (i386_optab): Add "rex*" instructions; - add swapgs; disable jmp/call far direct instructions for - 64bit mode; add syscall and sysret; disable registers for 0xc6 - template. Add 'q' suffixes to extendable instructions, disable - obsolete instructions, add new sign/zero extension ones. - (i386_regtab): Add extended registers. - (*Suf): Add No_qSuf. - (q_Suf, wlq_Suf, bwlq_Suf): New. - -2000-12-20 Jan Hubicka - - * i386.h (i386_optab): Replace "Imm" with "EncImm". - (i386_regtab): Add flags field. - -2000-12-12 Nick Clifton - - * mips.h: Fix formatting. - -2000-12-01 Chris Demetriou - - mips.h (OP_MASK_SYSCALL, OP_SH_SYSCALL): Delete. - (OP_MASK_CODE20, OP_SH_CODE20): Define, with values of old - OP_*_SYSCALL definitions. - (OP_SH_CODE19, OP_MASK_CODE19): Define, for use as - 19 bit wait codes. - (MIPS operand specifier comments): Remove 'm', add 'U' and - 'J', and update the meaning of 'B' so that it's more general. - - * mips.h (INSN_ISA1, INSN_ISA2, INSN_ISA3, INSN_ISA4, - INSN_ISA5): Renumber, redefine to mean the ISA at which the - instruction was added. - (INSN_ISA32): New constant. - (INSN_4650, INSN_4010, INSN_4100, INSN_3900, INSN_GP32): - Renumber to avoid new and/or renumbered INSN_* constants. - (INSN_MIPS32): Delete. - (ISA_UNKNOWN): New constant to indicate unknown ISA. - (ISA_MIPS1, ISA_MIPS2, ISA_MIPS3, ISA_MIPS4, ISA_MIPS5, - ISA_MIPS32): New constants, defined to be the mask of INSN_* - constants available at that ISA level. - (CPU_UNKNOWN): New constant to indicate unknown CPU. - (CPU_4K, CPU_MIPS32_4K): Rename the former to the latter, - define it with a unique value. - (OPCODE_IS_MEMBER): Update for new ISA membership-related - constant meanings. - - * mips.h (INSN_ISA64, ISA_MIPS5, ISA_MIPS64): New - definitions. - - * mips.h (CPU_SB1): New constant. - -2000-10-20 Jakub Jelinek - - * sparc.h (enum sparc_opcode_arch_val): Add SPARC_OPCODE_ARCH_V9B. - Note that '3' is used for siam operand. - -2000-09-22 Jim Wilson - - * ia64.h (enum ia64_dependency_semantics): Add IA64_DVS_STOP. - -2000-09-13 Anders Norlander - - * mips.h: Use defines instead of hard-coded processor numbers. - (CPU_R2000, CPU_R3000, CPU_R3900, CPU_R4000, CPU_R4010, - CPU_VR4100, CPU_R4111, CPU_R4300, CPU_R4400, CPU_R4600, CPU_R4650, - CPU_R5000, CPU_R6000, CPU_R8000, CPU_R10000, CPU_MIPS32, CPU_4K, - CPU_4KC, CPU_4KM, CPU_4KP): Define.. - (OPCODE_IS_MEMBER): Use new defines. - (OP_MASK_SEL, OP_SH_SEL): Define. - (OP_MASK_CODE20, OP_SH_CODE20): Define. - Add 'P' to used characters. - Use 'H' for coprocessor select field. - Use 'm' for 20 bit breakpoint code. - Document new arg characters and add to used characters. - (INSN_MIPS32): New define for MIPS32 extensions. - (OPCODE_IS_MEMBER): Recognize MIPS32 instructions. - -2000-09-05 Alan Modra - - * hppa.h: Mention cz completer. - -2000-08-16 Jim Wilson - - * ia64.h (IA64_OPCODE_POSTINC): New. - -2000-08-15 H.J. Lu - - * i386.h: Swap the Intel syntax "movsx"/"movzx" due to the - IgnoreSize change. - -2000-08-08 Jason Eckhardt - - * i860.h: Small formatting adjustments. - -2000-07-29 Marek Michalkiewicz - - * avr.h (AVR_UNDEF_P, AVR_SKIP_P, AVR_DISP0_P): New macros. - Move related opcodes closer to each other. - Minor changes in comments, list undefined opcodes. - -2000-07-26 Dave Brolley - - * cgen.h (cgen_hw_lookup_by_num): Second parameter is unsigned. - -2000-07-22 Jason Eckhardt - - * i860.h (btne, bte, bla): Changed these opcodes - to use sbroff ('r') instead of split16 ('s'). - (J, K, L, M): New operand types for 16-bit aligned fields. - (ld.x, {p}fld.x, fst.x, pst.d): Changed these opcodes to - use I, J, K, L, M instead of just I. - (T, U): New operand types for split 16-bit aligned fields. - (st.x): Changed these opcodes to use S, T, U instead of just S. - (andh, andnoth, orh, xorh): Deleted 3-register forms as they do not - exist on the i860. - (pfgt.sd, pfle.sd): Deleted these as they do not exist on the i860. - (pfeq.ss, pfeq.dd): New opcodes. - (st.s): Fixed incorrect mask bits. - (fmlow): Fixed incorrect mask bits. - (fzchkl, pfzchkl): Fixed incorrect mask bits. - (faddz, pfaddz): Fixed incorrect mask bits. - (form, pform): Fixed incorrect mask bits. - (pfld.l): Fixed incorrect mask bits. - (fst.q): Fixed incorrect mask bits. - (all floating point opcodes): Fixed incorrect mask bits for - handling of dual bit. - -2000-07-20 Hans-Peter Nilsson - - cris.h: New file. - -2000-06-26 Marek Michalkiewicz - - * avr.h (AVR_ISA_WRAP): Remove, now assumed if not AVR_ISA_MEGA. - (AVR_ISA_ESPM): Remove, because ESPM removed in databook update. - (AVR_ISA_85xx): Remove, all uses changed back to AVR_ISA_2xxx. - (AVR_ISA_M83): Define for ATmega83, ATmega85. - (espm): Remove, because ESPM removed in databook update. - (eicall, eijmp): Move to the end of opcode table. - -2000-06-18 Stephane Carrez - - * m68hc11.h: New file for support of Motorola 68hc11. - -Fri Jun 9 21:51:50 2000 Denis Chertykov - - * avr.h: clr,lsl,rol, ... moved after add,adc, ... - -Wed Jun 7 21:39:54 2000 Denis Chertykov - - * avr.h: New file with AVR opcodes. - -Wed Apr 12 17:11:20 2000 Donald Lindsay - - * d10v.h: added ALONE attribute for d10v_opcode.exec_type. - -2000-05-23 Maciej W. Rozycki - - * i386.h: Allow d suffix on iret, and add DefaultSize modifier. - -2000-05-17 Maciej W. Rozycki - - * i386.h: Use sl_FP, not sl_Suf for fild. - -2000-05-16 Frank Ch. Eigler - - * cgen.h (CGEN_MAX_SYNTAX_BYTES): Increase to 32. Check that - it exceeds CGEN_ACTUAL_MAX_SYNTAX_BYTES, if set. - (CGEN_MAX_IFMT_OPERANDS): Increase to 16. Check that it exceeds - CGEN_ACTUAL_MAX_IFMT_OPERANDS, if set. - -2000-05-13 Alan Modra , - - * i386.h (i386_optab): Cpu686 for sysenter,sysexit,fxsave,fxrestore. - -2000-05-13 Alan Modra , - Alexander Sokolov - - * i386.h (i386_optab): Add cpu_flags for all instructions. - -2000-05-13 Alan Modra - - From Gavin Romig-Koch - * i386.h (wld_Suf): Define. Use on pushf, popf, pusha, popa. - -2000-05-04 Timothy Wall - - * tic54x.h: New. - -2000-05-03 J.T. Conklin - - * ppc.h (PPC_OPCODE_ALTIVEC): New opcode flag for vector unit. - (PPC_OPERAND_VR): New operand flag for vector registers. - -2000-05-01 Kazu Hirata - - * h8300.h (EOP): Add missing initializer. - -Fri Apr 21 15:03:37 2000 Jason Eckhardt - - * hppa.h (pa_opcodes): New opcodes for PA2.0 wide mode - forms of ld/st{b,h,w,d} and fld/fst{w,d} (16-bit displacements). - New operand types l,y,&,fe,fE,fx added to support above forms. - (pa_opcodes): Replaced usage of 'x' as source/target for - floating point double-word loads/stores with 'fx'. - -Fri Apr 21 13:20:53 2000 Richard Henderson - David Mosberger - Timothy Wall - Jim Wilson - - * ia64.h: New file. - -2000-03-27 Nick Clifton - - * d30v.h (SHORT_A1): Fix value. - (SHORT_AR): Renumber so that it is at the end of the list of short - instructions, not the end of the list of long instructions. - -2000-03-26 Alan Modra - - * i386.h: (UNIXWARE_COMPAT): Rename to SYSV386_COMPAT as the - problem isn't really specific to Unixware. - (OLDGCC_COMPAT): Define. - (i386_optab): If !OLDGCC_COMPAT, don't handle fsubp etc. with - destination %st(0). - Fix lots of comments. - -2000-03-02 J"orn Rennecke - - * d30v.h: - (SHORT_B2r, SHORT_B3, SHORT_B3r, SHORT_B3b, SHORT_B3br): Updated. - (SHORT_D1r, SHORT_D2, SHORT_D2r, SHORT_D2Br, SHORT_U): Updated. - (SHORT_F, SHORT_AF, SHORT_T, SHORT_A5, SHORT_CMP, SHORT_CMPU): Updated. - (SHORT_A1, SHORT_AA, SHORT_RA, SHORT_MODINC, SHORT_MODDEC): Updated. - (SHORT_C1, SHORT_C2, SHORT_UF, SHORT_A2, SHORT_NONE, LONG): Updated. - (LONG_U, LONG_Ur, LONG_CMP, LONG_M, LONG_M2, LONG_2, LONG_2r): Updated. - (LONG_2b, LONG_2br, LONG_D, LONG_Dr, LONG_Dbr): Updated. - -2000-02-25 Alan Modra - - * i386.h (fild, fistp): Change intel d_Suf form to fildd and - fistpd without suffix. - -2000-02-24 Nick Clifton - - * cgen.h (cgen_cpu_desc): Rename field 'flags' to - 'signed_overflow_ok_p'. - Delete prototypes for cgen_set_flags() and cgen_get_flags(). - -2000-02-24 Andrew Haley - - * cgen.h (CGEN_INSN_MACH_HAS_P): New macro. - (CGEN_CPU_TABLE): flags: new field. - Add prototypes for new functions. - -2000-02-24 Alan Modra - - * i386.h: Add some more UNIXWARE_COMPAT comments. - -2000-02-23 Linas Vepstas - - * i370.h: New file. - -2000-02-22 Chandra Chavva - - * d30v.h (FLAG_NOT_WITH_ADDSUBppp): Redefined as operation - cannot be combined in parallel with ADD/SUBppp. - -2000-02-22 Andrew Haley - - * mips.h: (OPCODE_IS_MEMBER): Add comment. - -1999-12-30 Andrew Haley - - * mips.h (OPCODE_IS_MEMBER): Add gp32 arg, which determines - whether synthetic opcodes (e.g. move) generate 32-bit or 64-bit - insns. - -2000-01-15 Alan Modra - - * i386.h: Qualify intel mode far call and jmp with x_Suf. - -1999-12-27 Alan Modra - - * i386.h: Add JumpAbsolute qualifier to all non-intel mode - indirect jumps and calls. Add FF/3 call for intel mode. - -Wed Dec 1 03:05:25 1999 Jeffrey A Law (law@cygnus.com) - - * mn10300.h: Add new operand types. Add new instruction formats. - -Wed Nov 24 20:28:58 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (pa_opcodes): Correctly handle immediate for PA2.0 "bb" - instruction. - -1999-11-18 Gavin Romig-Koch - - * mips.h (INSN_ISA5): New. - -1999-11-01 Gavin Romig-Koch - - * mips.h (OPCODE_IS_MEMBER): New. - -1999-10-29 Nick Clifton - - * d30v.h (SHORT_AR): Define. - -1999-10-18 Michael Meissner - - * alpha.h (alpha_num_opcodes): Convert to unsigned. - (alpha_num_operands): Ditto. - -Sun Oct 10 01:46:56 1999 Jerry Quinn - - * hppa.h (pa_opcodes): Add load and store cache control to - instructions. Add ordered access load and store. - - * hppa.h (pa_opcode): Add new entries for addb and addib. - - * hppa.h (pa_opcodes): Fix cmpb and cmpib entries. - - * hppa.h (pa_opcodes): Add entries for cmpb and cmpib. - -Thu Oct 7 00:12:25 MDT 1999 Diego Novillo - - * d10v.h: Add flag RESTRICTED_NUM3 for imm3 operands. - -Thu Sep 23 07:08:38 1999 Jerry Quinn - - * hppa.h (pa_opcodes): Add "call" and "ret". Clean up "b", "bve" - and "be" using completer prefixes. - - * hppa.h (pa_opcodes): Add initializers to silence compiler. - - * hppa.h: Update comments about character usage. - -Mon Sep 20 03:55:31 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (pa_opcodes): Fix minor thinkos introduced while cleaning - up the new fstw & bve instructions. - -Sun Sep 19 10:40:59 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (pa_opcodes): Add remaining PA2.0 integer load/store - instructions. - - * hppa.h (pa_opcodes): Add remaining PA2.0 FP load/store instructions. - - * hppa.h (pa_opcodes): Add long offset double word load/store - instructions. - - * hppa.h (pa_opcodes): Add FLAG_STRICT variants of FP loads and - stores. - - * hppa.h (pa_opcodes): Handle PA2.0 fcnv, fcmp and ftest insns. - - * hppa.h (pa_opcodes): Finish support for PA2.0 "b" instructions. - - * hppa.h (pa_opcodes): Handle PA2.0 "bve" instructions. - - * hppa.h (pa_opcodes): Add new syntax "be" instructions. - - * hppa.h (pa_opcodes): Note use of 'M' and 'L'. - - * hppa.h (pa_opcodes): Add support for "b,l". - - * hppa.h (pa_opcodes): Add support for "b,gate". - -Sat Sep 18 11:41:16 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (pa_opcodes): Use 'fX' for first register operand - in xmpyu. - - * hppa.h (pa_opcodes): Fix mask for probe and probei. - - * hppa.h (pa_opcodes): Fix mask for depwi. - -Tue Sep 7 13:44:25 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (pa_opcodes): Add "addil" variant which has the %r1 as - an explicit output argument. - -Mon Sep 6 04:41:42 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h: Add strict variants of PA1.0/PA1.1 loads and stores. - Add a few PA2.0 loads and store variants. - -1999-09-04 Steve Chamberlain - - * pj.h: New file. - -1999-08-29 Alan Modra - - * i386.h (i386_regtab): Move %st to top of table, and split off - other fp reg entries. - (i386_float_regtab): To here. - -Sat Aug 28 00:25:25 1999 Jerry Quinn - - * hppa.h (pa_opcodes): Replace 'f' by 'v'. Prefix float register args - by 'f'. - - * hppa.h (pa_opcodes): Add extrd, extrw, depd, depdi, depw, depwi. - Add supporting args. - - * hppa.h: Document new completers and args. - * hppa.h (pa_opcodes): Add 64 bit patterns and pa2.0 syntax for uxor, - uaddcm, dcor, addi, add, sub, subi, shladd, rfi, and probe. Add pa2.0 - extensions for ssm, rsm, pdtlb, pitlb. Add performance instructions - pmenb and pmdis. - - * hppa.h (pa_opcodes): Add pa2.0 instructions hadd, hshl, - hshr, hsub, mixh, mixw, permh. - - * hppa.h (pa_opcodes): Change completers in instructions to - use 'c' prefix. - - * hppa.h (pa_opcodes): Add popbts, new forms of bb, havg, - hshladd, hshradd, shrpd, and shrpw instructions. Update arg comments. - - * hppa.h (pa_opcodes): Change fmpyfadd, fmpynfadd, fneg, - fnegabs to use 'I' instead of 'F'. - -1999-08-21 Alan Modra - - * i386.h: Add AMD athlon instructions, pfnacc, pfpnacc, pswapd. - Document pf2iw and pi2fw as athlon insns. Remove pswapw. - Alphabetically sort PIII insns. - -Wed Aug 18 18:14:40 1999 Doug Evans - - * cgen.h (CGEN_INSN_MACH_HAS_P): New macro. - -Fri Aug 6 09:46:35 1999 Jerry Quinn - - * hppa.h (pa_opcodes): Add 64 bit versions of or, xor, and, - and andcm. Add 32 and 64 bit version of cmpclr, cmpiclr. - - * hppa.h: Document 64 bit condition completers. - -Thu Aug 5 16:56:07 1999 Jerry Quinn - - * hppa.h (pa_opcodes): Change condition args to use '?' prefix. - -1999-08-04 Alan Modra - - * i386.h (i386_optab): Add DefaultSize modifier to all insns - that implicitly modify %esp. #undef d_Suf, x_suf, sld_suf, - sldx_suf, bwld_Suf, d_FP, x_FP, sld_FP, sldx_FP at end of table. - -Wed Jul 28 02:04:24 1999 Jerry Quinn - Jeff Law - - * hppa.h (pa_opcodes): Add "pushnom" and "pushbts". - - * hppa.h (pa_opcodes): Mark all PA2.0 opcodes with FLAG_STRICT. - - * hppa.h (pa_opcodes): Change xmpyu, fmpyfadd, - and fmpynfadd to use 'J' and 'K' instead of 'E' and 'X'. - -1999-07-13 Alan Modra - - * i386.h: Add "undocumented" AMD 3DNow! pf2iw, pi2fw, pswapw insns. - -Thu Jul 1 00:17:24 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (struct pa_opcode): Add new field "flags". - (FLAGS_STRICT): Define. - -Fri Jun 25 04:22:04 1999 Jerry Quinn - Jeff Law - - * hppa.h (pa_opcodes): Add pa2.0 clrbts instruction. - - * hppa.h (pa_opcodes): Add entries for mfia and mtsarcm instructions. - -1999-06-23 Alan Modra - - * i386.h: Allow `l' suffix on bswap. Allow `w' suffix on arpl, - lldt, lmsw, ltr, str, verr, verw. Add FP flag to fcmov*. Add FP - flag to fcomi and friends. - -Fri May 28 15:26:11 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (pa_opcodes): Move integer arithmetic instructions after - integer logical instructions. - -1999-05-28 Linus Nordberg - - * m68k.h: Document new formats `E', `G', `H' and new places `N', - `n', `o'. - - * m68k.h: Define mcf5206e, mcf5307, mcf. Document new format `u' - and new places `m', `M', `h'. - -Thu May 27 04:13:54 1999 Joel Sherrill (joel@OARcorp.com - - * hppa.h (pa_opcodes): Add several processor specific system - instructions. - -Wed May 26 16:57:44 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (pa_opcodes): Add second entry for "comb", "comib", - "addb", and "addib" to be used by the disassembler. - -1999-05-12 Alan Modra - - * i386.h (ReverseModrm): Remove all occurences. - (InvMem): Add to control/debug/test mov insns, movhlps, movlhps, - movmskps, pextrw, pmovmskb, maskmovq. - Change NoSuf to FP on all MMX, XMM and AMD insns as these all - ignore the data size prefix. - - * i386.h (i386_optab, i386_regtab): Add support for PIII SIMD. - Mostly stolen from Doug Ledford - -Sat May 8 23:27:35 1999 Richard Henderson - - * ppc.h (PPC_OPCODE_64_BRIDGE): New. - -1999-04-14 Doug Evans - - * cgen.h (CGEN_ATTR): Delete member num_nonbools. - (CGEN_ATTR_TYPE): Update. - (CGEN_ATTR_MASK): Number booleans starting at 0. - (CGEN_ATTR_VALUE): Update. - (CGEN_INSN_ATTR): Update. - -Mon Apr 12 23:43:27 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (fmpyfadd, fmpynfadd, fneg, fnegabs): New PA2.0 - instructions. - -Tue Mar 23 11:24:38 1999 Jeffrey A Law (law@cygnus.com) - - * hppa.h (bb, bvb): Tweak opcode/mask. - - -1999-03-22 Doug Evans - - * cgen.h (CGEN_ISA,CGEN_MACH): New typedefs. - (struct cgen_cpu_desc): Rename member mach to machs. New member isas. - New members word_bitsize,default_insn_bitsize,base_insn-bitsize, - min_insn_bitsize,max_insn_bitsize,isa_table,mach_table,rebuild_tables. - Delete member max_insn_size. - (enum cgen_cpu_open_arg): New enum. - (cpu_open): Update prototype. - (cpu_open_1): Declare. - (cgen_set_cpu): Delete. - -1999-03-11 Doug Evans - - * cgen.h (CGEN_HW_TABLE): Delete `num_init_entries' member. - (CGEN_OPERAND_NIL): New macro. - (CGEN_OPERAND): New member `type'. - (@arch@_cgen_operand_table): Delete decl. - (CGEN_OPERAND_INDEX,CGEN_OPERAND_TYPE,CGEN_OPERAND_ENTRY): Delete. - (CGEN_OPERAND_TABLE): New struct. - (cgen_operand_lookup_by_name,cgen_operand_lookup_by_num): Declare. - (CGEN_OPINST): Pointer to operand table entry replaced with enum. - (CGEN_CPU_TABLE): New member `isa'. Change member `operand_table', - now a CGEN_OPERAND_TABLE. Add CGEN_CPU_DESC arg to - {get,set}_{int,vma}_operand. - (@arch@_cgen_cpu_open): New arg `isa'. - (cgen_set_cpu): Ditto. - -Fri Feb 26 02:36:45 1999 Richard Henderson - - * i386.h: Fill in cmov and fcmov alternates. Add fcomi short forms. - -1999-02-25 Doug Evans - - * cgen.h (enum cgen_asm_type): Add CGEN_ASM_NONE. - (CGEN_HW_ENTRY): Delete member `next'. Change type of `type' to - enum cgen_hw_type. - (CGEN_HW_TABLE): New struct. - (hw_table): Delete declaration. - (CGEN_OPERAND): Change member hw to hw_type, change type from pointer - to table entry to enum. - (CGEN_OPINST): Ditto. - (CGEN_CPU_TABLE): Change member hw_list to hw_table. - -Sat Feb 13 14:13:44 1999 Richard Henderson - - * alpha.h (AXP_OPCODE_EV6): New. - (AXP_OPCODE_NOPAL): Include it. - -1999-02-09 Doug Evans - - * cgen.h (CGEN_CPU_DESC): Renamed from CGEN_OPCODE_DESC. - All uses updated. New members int_insn_p, max_insn_size, - parse_operand,insert_operand,extract_operand,print_operand, - sizeof_fields,set_fields_bitsize,get_int_operand,set_int_operand, - get_vma_operand,set_vma_operand,parse_handlers,insert_handlers, - extract_handlers,print_handlers. - (CGEN_ATTR): Change type of num_nonbools to unsigned int. - (CGEN_ATTR_BOOL_OFFSET): New macro. - (CGEN_ATTR_MASK): Subtract it to compute bit number. - (CGEN_ATTR_VALUE): Redo bool/nonbool attr calculation. - (cgen_opcode_handler): Renamed from cgen_base. - (CGEN_HW_ATTR_VALUE): Renamed from CGEN_HW_ATTR, all uses updated. - (CGEN_OPERAND_ATTR_VALUE): Renamed from CGEN_OPERAND_ATTR, - all uses updated. - (CGEN_OPERAND_INDEX): Rewrite to use table entry, not global. - (enum cgen_opinst_type): Renamed from cgen_operand_instance_type. - (CGEN_IFLD_ATTR_VALUE): Renamed from CGEN_IFLD_ATTR, all uses updated. - (CGEN_OPCODE,CGEN_IBASE): New types. - (CGEN_INSN): Rewrite. - (CGEN_{ASM,DIS}_HASH*): Delete. - (init_opcode_table,init_ibld_table): Declare. - (CGEN_INSN_ATTR): New type. - -Mon Feb 1 21:09:14 1999 Catherine Moore - - * i386.h (d_Suf, x_Suf, sld_Suf, sldx_Suf, bwld_Suf): Define. - (x_FP, d_FP, dls_FP, sldx_FP): Define. - Change *Suf definitions to include x and d suffixes. - (movsx): Use w_Suf and b_Suf. - (movzx): Likewise. - (movs): Use bwld_Suf. - (fld): Change ordering. Use sld_FP. - (fild): Add Intel Syntax equivalent of fildq. - (fst): Use sld_FP. - (fist): Use sld_FP. - (fstp): Use sld_FP. Add x_FP version. - (fistp): LLongMem version for Intel Syntax. - (fcom, fcomp): Use sld_FP. - (fadd, fiadd, fsub): Use sld_FP. - (fsubr): Use sld_FP. - (fmul, fimul, fdvi, fidiv, fdivr): Use sld_FP. - -1999-01-27 Doug Evans - - * cgen.h (enum cgen_mode): Add CGEN_MODE_TARGET_MAX, CGEN_MODE_INT, - CGEN_MODE_UINT. - -1999-01-16 Jeffrey A Law (law@cygnus.com) - - * hppa.h (bv): Fix mask. - -1999-01-05 Doug Evans - - * cgen.h (CGEN_ATTR_VALUE_TYPE): New typedef. - (CGEN_ATTR): Use it. - (CGEN_ATTR_TYPE,CGEN_ATTR_ENTRY): Ditto. - (CGEN_ATTR_TABLE): New member dfault. - -1998-12-30 Gavin Romig-Koch - - * mips.h (MIPS16_INSN_BRANCH): New. - -Wed Dec 9 10:38:48 1998 David Taylor - - The following is part of a change made by Edith Epstein - as part of a project to merge in - changes by HP; HP did not create ChangeLog entries. - - * hppa.h (completer_chars): list of chars to not put a space - after. - -Sun Dec 6 13:21:34 1998 Ian Lance Taylor - - * i386.h (i386_optab): Permit w suffix on processor control and - status word instructions. - -1998-11-30 Doug Evans - - * cgen.h (struct cgen_hw_entry): Delete const on attrs member. - (struct cgen_keyword_entry): Ditto. - (struct cgen_operand): Ditto. - (CGEN_IFLD): New typedef, with associated access macros. - (CGEN_IFMT): New typedef, with associated access macros. - (CGEN_IFMT): Renamed from CGEN_FORMAT. New member `iflds'. - (CGEN_IVALUE): New typedef. - (struct cgen_insn): Delete const on syntax,attrs members. - `format' now points to format data. Type of `value' is now - CGEN_IVALUE. - (struct cgen_opcode_table): New member ifld_table. - -1998-11-18 Doug Evans - - * cgen.h (cgen_extract_fn): Update type of `base_insn' arg. - (CGEN_OPERAND_INSTANCE): New member `attrs'. - (CGEN_OPERAND_INSTANCE_{ATTRS,ATTR}): New macros. - (cgen_dis_lookup_insn): Update type of `base_insn' arg. - (cgen_opcode_table): Update type of dis_hash fn. - (extract_operand): Update type of `insn_value' arg. - -Thu Oct 29 11:38:36 1998 Doug Evans - - * cgen.h (CGEN_VERSION_{MAJOR,MINOR,FIXLEVEL}): Delete. - -Tue Oct 27 08:57:59 1998 Gavin Romig-Koch - - * mips.h (INSN_MULT): Added. - -Tue Oct 20 11:31:34 1998 Alan Modra - - * i386.h (MAX_MNEM_SIZE): Rename from MAX_OPCODE_SIZE. - -Mon Oct 19 12:50:00 1998 Doug Evans - - * cgen.h (CGEN_INSN_INT): New typedef. - (CGEN_INT_INSN_P): Renamed from CGEN_INT_INSN. - (CGEN_INSN_BYTES): Renamed from cgen_insn_t. - (CGEN_INSN_BYTES_PTR): New typedef. - (CGEN_EXTRACT_INFO): New typedef. - (cgen_insert_fn,cgen_extract_fn): Update. - (cgen_opcode_table): New member `insn_endian'. - (assemble_insn,lookup_insn,lookup_get_insn_operands): Update. - (insert_operand,extract_operand): Update. - (cgen_get_insn_value,cgen_put_insn_value): Add prototypes. - -Fri Oct 9 13:38:13 1998 Doug Evans - - * cgen.h (CGEN_ATTR_BOOLS): New macro. - (struct CGEN_HW_ENTRY): New member `attrs'. - (CGEN_HW_ATTR): New macro. - (struct CGEN_OPERAND_INSTANCE): New member `name'. - (CGEN_INSN_INVALID_P): New macro. - -Mon Oct 5 00:21:07 1998 Jeffrey A Law (law@cygnus.com) - - * hppa.h: Add "fid". - -Sun Oct 4 21:00:00 1998 Alan Modra - - From Robert Andrew Dale - * i386.h (i386_optab): Add AMD 3DNow! instructions. - (AMD_3DNOW_OPCODE): Define. - -Tue Sep 22 17:53:47 1998 Nick Clifton - - * d30v.h (EITHER_BUT_PREFER_MU): Define. - -Mon Aug 10 14:09:38 1998 Doug Evans - - * cgen.h (cgen_insn): #if 0 out element `cdx'. - -Mon Aug 3 12:21:57 1998 Doug Evans - - Move all global state data into opcode table struct, and treat - opcode table as something that is "opened/closed". - * cgen.h (CGEN_OPCODE_DESC): New type. - (all fns): New first arg of opcode table descriptor. - (cgen_set_parse_operand_fn): Add prototype. - (cgen_current_machine,cgen_current_endian): Delete. - (CGEN_OPCODE_TABLE): New members mach,endian,operand_table, - parse_operand_fn,asm_hash_table,asm_hash_table_entries, - dis_hash_table,dis_hash_table_entries. - (opcode_open,opcode_close): Add prototypes. - - * cgen.h (cgen_insn): New element `cdx'. - -Thu Jul 30 21:44:25 1998 Frank Ch. Eigler - - * d30v.h (FLAG_LKR): New flag for "left-kills-right" instructions. - -Tue Jul 28 10:59:07 1998 Jeffrey A Law (law@cygnus.com) - - * mn10300.h: Add "no_match_operands" field for instructions. - (MN10300_MAX_OPERANDS): Define. - -Fri Jul 24 11:44:24 1998 Doug Evans - - * cgen.h (cgen_macro_insn_count): Declare. - -Tue Jul 21 13:12:13 1998 Doug Evans - - * cgen.h (CGEN_VERSION_{MAJOR,MINOR,FIXLEVEL}): Define. - (cgen_insert_fn,cgen_extract_fn): New arg `pc'. - (get_operand,put_operand): Replaced with get_{int,vma}_operand, - set_{int,vma}_operand. - -Fri Jun 26 11:09:06 1998 Jeffrey A Law (law@cygnus.com) - - * mn10300.h: Add "machine" field for instructions. - (MN103, AM30): Define machine types. - -Fri Jun 19 16:09:09 1998 Alan Modra - - * i386.h: Use FP, not sl_Suf, for fxsave and fxrstor. - -1998-06-18 Ulrich Drepper - - * i386.h: Add support for fxsave, fxrstor, sysenter and sysexit. - -Sat Jun 13 11:31:35 1998 Alan Modra - - * i386.h (i386_optab): Add general form of aad and aam. Add ud2a - and ud2b. - (i386_regtab): Allow cr0..7, db0..7, dr0..7, tr0..7, not just - those that happen to be implemented on pentiums. - -Tue Jun 9 12:16:01 1998 Alan Modra - - * i386.h: Change occurences of Data16 to Size16, Data32 to Size32, - IgnoreDataSize to IgnoreSize. Flag address and data size prefixes - with Size16|IgnoreSize or Size32|IgnoreSize. - -Mon Jun 8 12:15:52 1998 Alan Modra - - * i386.h (REPNE): Rename to REPNE_PREFIX_OPCODE. - (REPE): Rename to REPE_PREFIX_OPCODE. - (i386_regtab_end): Remove. - (i386_prefixtab, i386_prefixtab_end): Remove. - (i386_optab): Use NULL as sentinel rather than "" to suit rewrite - of md_begin. - (MAX_OPCODE_SIZE): Define. - (i386_optab_end): Remove. - (sl_Suf): Define. - (sl_FP): Use sl_Suf. - - * i386.h (i386_optab): Allow 16 bit displacement for `mov - mem,acc'. Combine 16 and 32 bit forms of various insns. Allow 16 - bit form of ljmp. Add IsPrefix modifier to prefixes. Add addr32, - data32, dword, and adword prefixes. - (i386_regtab): Add BaseIndex modifier to valid 16 bit base/index - regs. - -Fri Jun 5 23:42:43 1998 Alan Modra - - * i386.h (i386_regtab): Remove BaseIndex modifier from esp. - - * i386.h: Allow `l' suffix on fld, fst, fstp, fcom, fcomp with - register operands, because this is a common idiom. Flag them with - a warning. Allow illegal faddp, fsubp, fsubrp, fmulp, fdivp, - fdivrp because gcc erroneously generates them. Also flag with a - warning. - - * i386.h: Add suffix modifiers to most insns, and tighter operand - checks in some cases. Fix a number of UnixWare compatibility - issues with float insns. Merge some floating point opcodes, using - new FloatMF modifier. - (WORD_PREFIX_OPCODE): Rename to DATA_PREFIX_OPCODE for - consistency. - - * i386.h: Change occurence of ShortformW to W|ShortForm. Add - IgnoreDataSize where appropriate. - -Wed Jun 3 18:28:45 1998 Alan Modra - - * i386.h: (one_byte_segment_defaults): Remove. - (two_byte_segment_defaults): Remove. - (i386_regtab): Add BaseIndex to 32 bit regs reg_type. - -Fri May 15 15:59:04 1998 Doug Evans - - * cgen.h (cgen_hw_lookup_by_name): Renamed from cgen_hw_lookup. - (cgen_hw_lookup_by_num): Declare. - -Thu May 7 09:27:58 1998 Frank Ch. Eigler - - * mips.h (OP_{SH,MASK}_CODE2): Added "q" operand format for lower - ten bits of MIPS ISA1 "break" instruction, and for "sdbbp" - -Thu May 7 02:14:08 1998 Doug Evans - - * cgen.h (cgen_asm_init_parse): Delete. - (cgen_save_fixups,cgen_restore_fixups,cgen_swap_fixups): Delete. - (cgen_asm_record_register,cgen_asm_finish_insn): Delete. - -Mon Apr 27 10:13:11 1998 Doug Evans - - * cgen.h (CGEN_ATTR_TYPE): Delete `const', moved to uses. - (cgen_asm_finish_insn): Update prototype. - (cgen_insn): New members num, data. - (CGEN_INSN_TABLE): Members asm_hash, asm_hash_table_size, - dis_hash, dis_hash_table_size moved to ... - (CGEN_OPCODE_TABLE). Here. Renamed from CGEN_OPCODE_DATA. - All uses updated. New members asm_hash_p, dis_hash_p. - (CGEN_MINSN_EXPANSION): New struct. - (cgen_expand_macro_insn): Declare. - (cgen_macro_insn_count): Declare. - (get_insn_operands): Update prototype. - (lookup_get_insn_operands): Declare. - -Tue Apr 21 17:11:32 1998 Alan Modra - - * i386.h (i386_optab): Change iclrKludge and imulKludge to - regKludge. Add operands types for string instructions. - -Mon Apr 20 14:40:29 1998 Tom Tromey - - * i386.h (X): Renamed from `Z_' to preserve formatting of opcode - table. - -Sun Apr 19 13:54:06 1998 Tom Tromey - - * i386.h (Z_): Renamed from `_' to avoid clash with common alias - for `gettext'. - -Fri Apr 3 12:04:48 1998 Alan Modra - - * i386.h: Remove NoModrm flag from all insns: it's never checked. - Add IsString flag to string instructions. - (IS_STRING): Don't define. - (LOCK_PREFIX_OPCODE, CS_PREFIX_OPCODE, DS_PREFIX_OPCODE): Define. - (ES_PREFIX_OPCODE, FS_PREFIX_OPCODE, GS_PREFIX_OPCODE): Define. - (SS_PREFIX_OPCODE): Define. - -Mon Mar 30 21:31:56 1998 Ian Lance Taylor - - * i386.h: Revert March 24 patch; no more LinearAddress. - -Mon Mar 30 10:25:54 1998 Alan Modra - - * i386.h (i386_optab): Remove fwait (9b) from all floating point - instructions, and instead add FWait opcode modifier. Add short - form of fldenv and fstenv. - (FWAIT_OPCODE): Define. - - * i386.h (i386_optab): Change second operand constraint of `mov - sreg,reg|mem' instruction from Reg16|Mem to WordReg|WordMem to - allow legal instructions such as `movl %gs,%esi' - -Fri Mar 27 18:30:52 1998 Ian Lance Taylor - - * h8300.h: Various changes to fully bracket initializers. - -Tue Mar 24 18:32:47 1998 H.J. Lu - - * i386.h: Set LinearAddress for lidt and lgdt. - -Mon Mar 2 10:44:07 1998 Doug Evans - - * cgen.h (CGEN_BOOL_ATTR): New macro. - -Thu Feb 26 15:54:31 1998 Michael Meissner - - * d30v.h (FLAG_DELAY): New flag for delayed branches/jumps. - -Mon Feb 23 10:38:21 1998 Doug Evans - - * cgen.h (CGEN_CAT3): Delete. Use CONCAT3 now. - (cgen_insn): Record syntax and format entries here, rather than - separately. - -Tue Feb 17 21:42:56 1998 Nick Clifton - - * cgen.h (CGEN_SYNTAX_MAKE_FIELD): New macro. - -Tue Feb 17 16:00:56 1998 Doug Evans - - * cgen.h (cgen_insert_fn): Change type of result to const char *. - (cgen_parse_{signed,unsigned}_integer): Delete min,max arguments. - (CGEN_{INSN,KEYWORD,OPERAND}_NBOOL_ATTRS): Renamed from ..._MAX_ATTRS. - -Thu Feb 12 18:30:41 1998 Doug Evans - - * cgen.h (lookup_insn): New argument alias_p. - -Thu Feb 12 03:41:00 1998 J"orn Rennecke - -Fix rac to accept only a0: - * d10v.h (OPERAND_ACC): Split into: - (OPERAND_ACC0, OPERAND_ACC1) . - (OPERAND_GPR): Define. - -Wed Feb 11 17:31:53 1998 Doug Evans - - * cgen.h (CGEN_FIELDS): Define here. - (CGEN_HW_ENTRY): New member `type'. - (hw_list): Delete decl. - (enum cgen_mode): Declare. - (CGEN_OPERAND): New member `hw'. - (enum cgen_operand_instance_type): Declare. - (CGEN_OPERAND_INSTANCE): New type. - (CGEN_INSN): New member `operands'. - (CGEN_OPCODE_DATA): Make hw_list const. - (get_insn_operands,lookup_insn): Add prototypes for. - -Tue Feb 3 17:11:23 1998 Doug Evans - - * cgen.h (CGEN_INSN_MAX_ATTRS): Renamed from CGEN_MAX_INSN_ATTRS. - (CGEN_HW_ENTRY): Move `next' entry to end of struct. - (CGEN_KEYWORD_MAX_ATTRS): Renamed from CGEN_MAX_KEYWORD_ATTRS. - (CGEN_OPERAND_MAX_ATTRS): Renamed from CGEN_MAX_OPERAND_ATTRS. - -Mon Feb 2 19:19:15 1998 Ian Lance Taylor - - * cgen.h: Correct typo in comment end marker. - -Mon Feb 2 17:10:38 1998 Steve Haworth - - * tic30.h: New file. - -Thu Jan 22 17:54:56 1998 Nick Clifton - - * cgen.h: Add prototypes for cgen_save_fixups(), - cgen_restore_fixups(), and cgen_swap_fixups(). Change prototype - of cgen_asm_finish_insn() to return a char *. - -Wed Jan 14 17:21:43 1998 Nick Clifton - - * cgen.h: Formatting changes to improve readability. - -Mon Jan 12 11:37:36 1998 Doug Evans - - * cgen.h (*): Clean up pass over `struct foo' usage. - (CGEN_ATTR): Make unsigned char. - (CGEN_ATTR_TYPE): Update. - (CGEN_ATTR_{ENTRY,TABLE}): New types. - (cgen_base): Move member `attrs' to cgen_insn. - (CGEN_KEYWORD): New member `null_entry'. - (CGEN_{SYNTAX,FORMAT}): New types. - (cgen_insn): Format and syntax separated from each other. - -Tue Dec 16 15:15:52 1997 Michael Meissner - - * d30v.h (d30v_opcode): Reorder flags somewhat, add new flags for - 2 word load/store, ADDppp/SUBppp, 16/32 bit multiply. Make - flags_{used,set} long. - (d30v_operand): Make flags field long. - -Mon Dec 1 12:24:44 1997 Andreas Schwab - - * m68k.h: Fix comment describing operand types. - -Sun Nov 23 22:31:27 1997 Michael Meissner - - * d30v.h (SHORT_CMPU): Add case for cmpu instruction, and move - everything else after down. - -Tue Nov 18 18:45:14 1997 J"orn Rennecke - - * d10v.h (OPERAND_FLAG): Split into: - (OPERAND_FFLAG, OPERAND_CFLAG) . - -Thu Nov 13 11:04:24 1997 Gavin Koch - - * mips.h (struct mips_opcode): Changed comments to reflect new - field usage. - -Fri Oct 24 22:36:20 1997 Ken Raeburn - - * mips.h: Added to comments a quick-ref list of all assigned - operand type characters. - (OP_{MASK,SH}_PERFREG): New macros. - -Wed Oct 22 17:28:33 1997 Richard Henderson - - * sparc.h: Add '_' and '/' for v9a asr's. - Patch from David Miller - -Tue Oct 14 13:22:29 1997 Jeffrey A Law (law@cygnus.com) - - * h8300.h: Bit ops with absolute addresses not in the 8 bit - area are not available in the base model (H8/300). - -Thu Sep 25 13:03:41 1997 Ian Lance Taylor - - * m68k.h: Remove documentation of ` operand specifier. - -Wed Sep 24 19:00:34 1997 Ian Lance Taylor - - * m68k.h: Document q and v operand specifiers. - -Mon Sep 15 18:28:37 1997 Nick Clifton - - * v850.h (struct v850_opcode): Add processors field. - (PROCESSOR_V850, PROCESSOR_ALL): New bit constants. - (PROCESSOR_V850E, PROCESSOR_NOT_V850): New bit constants. - (PROCESSOR_V850EA): New bit constants. - -Mon Sep 15 11:29:43 1997 Ken Raeburn - - Merge changes from Martin Hunt: - - * d30v.h: Allow up to 64 control registers. Add - SHORT_A5S format. - - * d30v.h (LONG_Db): New form for delayed branches. - - * d30v.h: (LONG_Db): New form for repeati. - - * d30v.h (SHORT_D2B): New form. - - * d30v.h (SHORT_A2): New form. - - * d30v.h (OPERAND_2REG): Add new operand to indicate 2 - registers are used. Needed for VLIW optimization. - -Mon Sep 8 14:05:45 1997 Doug Evans - - * cgen.h: Move assembler interface section - up so cgen_parse_operand_result is defined for cgen_parse_address. - (cgen_parse_address): Update prototype. - -Tue Sep 2 15:32:32 1997 Nick Clifton - - * v850.h (V850_OPREAND_ADJUST_SHORT_MEMORY): Removed. - -Tue Aug 26 12:21:52 1997 Ian Lance Taylor - - * i386.h (two_byte_segment_defaults): Correct base register 5 in - modes 1 and 2 to be ss rather than ds. From Gabriel Paubert - . - - * i386.h: Set ud2 to 0x0f0b. From Gabriel Paubert - . - - * i386.h: Comment fixes for ficom[p]?{s,l} from Gabriel Paubert - . - - * i386.h (JUMP_ON_CX_ZERO): Uncomment (define again). - (JUMP_ON_ECX_ZERO): Remove commented out macro. - -Fri Aug 22 10:38:29 1997 Nick Clifton - - * v850.h (V850_NOT_R0): New flag. - -Mon Aug 18 11:05:58 1997 Nick Clifton - - * v850.h (struct v850_opcode): Remove flags field. - -Wed Aug 13 18:45:48 1997 Nick Clifton - - * v850.h (struct v850_opcode): Add flags field. - (struct v850_operand): Extend meaning of 'bits' and 'shift' - fields. - (V850E_INSTRUCTION, V850EA_INSTRUCTION): New flags. - (V850E_PUSH_POP, V850E_IMMEDIATE16, V850E_IMMEDIATE32): New flags. - -Fri Aug 8 16:58:42 1997 Doug Evans - - * arc.h: New file. - -Thu Jul 24 21:16:58 1997 Doug Evans - - * sparc.h (sparc_opcodes): Declare as const. - -Thu Jul 10 12:53:25 1997 Jeffrey A Law (law@cygnus.com) - - * mips.h (FP_S, FP_D): Define. Bitmasks indicating if an insn - uses single or double precision floating point resources. - (INSN_NO_ISA, INSN_ISA1): Define. - (cpu specific INSN macros): Tweak into bitmasks outside the range - of INSN_ISA field. - -Mon Jun 16 14:10:00 1997 H.J. Lu - - * i386.h: Fix pand opcode. - -Mon Jun 2 11:35:09 1997 Gavin Koch - - * mips.h: Widen INSN_ISA and move it to a more convenient - bit position. Add INSN_3900. - -Tue May 20 11:25:29 1997 Gavin Koch - - * mips.h (struct mips_opcode): added new field membership. - -Mon May 12 16:26:50 1997 H.J. Lu - - * i386.h (movd): only Reg32 is allowed. - - * i386.h: add fcomp and ud2. From Wayne Scott - . - -Mon May 5 17:16:21 1997 Ian Lance Taylor - - * i386.h: Add MMX instructions. - -Mon May 5 12:45:19 1997 H.J. Lu - - * i386.h: Remove W modifier from conditional move instructions. - -Mon Apr 14 14:56:58 1997 Ian Lance Taylor - - * i386.h: Change the opcodes for fsubp, fsubrp, fdivp, and fdivrp - with no arguments to match that generated by the UnixWare - assembler. - -Thu Apr 10 14:35:00 1997 Doug Evans - - * cgen.h (_cgen_assemble_insn): New arg for errmsg. - (cgen_parse_operand_fn): Declare. - (cgen_init_parse_operand): Declare. - (cgen_parse_operand): Renamed from cgen_asm_parse_operand, - new argument `want'. - (enum cgen_parse_operand_result): Renamed from cgen_asm_result. - (enum cgen_parse_operand_type): New enum. - -Sat Apr 5 13:14:05 1997 Ian Lance Taylor - - * i386.h: Revert last patch for the NON_BROKEN_OPCODES cases. - -Fri Apr 4 11:46:11 1997 Doug Evans - - * cgen.h: New file. - -Fri Apr 4 14:02:32 1997 Ian Lance Taylor - - * i386.h: Correct opcode values for fsubp, fsubrp, fdivp, and - fdivrp. - -Tue Mar 25 22:57:26 1997 Stu Grossman (grossman@critters.cygnus.com) - - * v850.h (extract): Make unsigned. - -Mon Mar 24 14:38:15 1997 Ian Lance Taylor - - * i386.h: Add iclr. - -Thu Mar 20 19:49:10 1997 Ian Lance Taylor - - * i386.h: Change DW to W for cmpxchg and xadd, since they don't - take a direction bit. - -Sat Mar 15 19:03:29 1997 H.J. Lu - - * sparc.h (sparc_opcode_lookup_arch): Use full prototype. - -Fri Mar 14 15:22:01 1997 Ian Lance Taylor - - * sparc.h: Include . Update function declarations to - use prototypes, and to use const when appropriate. - -Thu Mar 6 14:18:30 1997 Jeffrey A Law (law@cygnus.com) - - * mn10300.h (MN10300_OPERAND_RELAX): Define. - -Mon Feb 24 15:15:56 1997 Martin M. Hunt - - * d10v.h: Change pre_defined_registers to - d10v_predefined_registers and reg_name_cnt to d10v_reg_name_cnt. - -Sat Feb 22 21:25:00 1997 Dawn Perchik - - * mips.h: Add macros for cop0, cop1 cop2 and cop3. - Change mips_opcodes from const array to a pointer, - and change bfd_mips_num_opcodes from const int to int, - so that we can increase the size of the mips opcodes table - dynamically. - -Fri Feb 21 16:34:18 1997 Martin M. Hunt - - * d30v.h (FLAG_X): Remove unused flag. - -Tue Feb 18 17:37:20 1997 Martin M. Hunt - - * d30v.h: New file. - -Fri Feb 14 13:16:15 1997 Fred Fish - - * tic80.h (PDS_NAME): Macro to access name field of predefined symbols. - (PDS_VALUE): Macro to access value field of predefined symbols. - (tic80_next_predefined_symbol): Add prototype. - -Mon Feb 10 10:32:17 1997 Fred Fish - - * tic80.h (tic80_symbol_to_value): Change prototype to match - change in function, added class parameter. - -Thu Feb 6 17:30:15 1997 Fred Fish - - * tic80.h (TIC80_OPERAND_ENDMASK): Add for flagging TIc80 - endmask fields, which are somewhat weird in that 0 and 32 are - treated exactly the same. - -Thu Jan 30 13:46:18 1997 Fred Fish - - * tic80.h: Change all the OPERAND defines to use the form (1 << X) - rather than a constant that is 2**X. Reorder them to put bits for - operands that have symbolic names in the upper bits, so they can - be packed into an int where the lower bits contain the value that - corresponds to that symbolic name. - (predefined_symbo): Add struct. - (tic80_predefined_symbols): Declare array of translations. - (tic80_num_predefined_symbols): Declare size of that array. - (tic80_value_to_symbol): Declare function. - (tic80_symbol_to_value): Declare function. - -Wed Jan 29 09:37:25 1997 Jeffrey A Law (law@cygnus.com) - - * mn10200.h (MN10200_OPERAND_RELAX): Define. - -Sat Jan 18 15:18:59 1997 Fred Fish - - * tic80.h (TIC80_NO_R0_DEST): Add for opcodes where r0 cannot - be the destination register. - -Thu Jan 16 20:48:55 1997 Fred Fish - - * tic80.h (struct tic80_opcode): Change "format" field to "flags". - (FMT_UNUSED, FMT_SI, FMT_LI, FMT_REG): Delete. - (TIC80_VECTOR): Define a flag bit for the flags. This one means - that the opcode can have two vector instructions in a single - 32 bit word and we have to encode/decode both. - -Tue Jan 14 19:37:09 1997 Fred Fish - - * tic80.h (TIC80_OPERAND_PCREL): Renamed from - TIC80_OPERAND_RELATIVE for PC relative. - (TIC80_OPERAND_BASEREL): New flag bit for register - base relative. - -Mon Jan 13 15:56:38 1997 Fred Fish - - * tic80.h (TIC80_OPERAND_FLOAT): Add for floating point operands. - -Mon Jan 6 10:51:15 1997 Fred Fish - - * tic80.h (TIC80_OPERAND_SCALED): Operand may have optional - ":s" modifier for scaling. - -Sun Jan 5 12:12:19 1997 Fred Fish - - * tic80.h (TIC80_OPERAND_M_SI): Add operand modifier for ":m". - (TIC80_OPERAND_M_LI): Ditto - -Sat Jan 4 19:02:44 1997 Fred Fish - - * tic80.h (TIC80_OPERAND_BITNUM): Renamed from TIC80_OPERAND_CC_SZ. - (TIC80_OPERAND_CC): New define for condition code operand. - (TIC80_OPERAND_CR): New define for control register operand. - -Fri Jan 3 16:22:23 1997 Fred Fish - - * tic80.h (struct tic80_opcode): Name changed. - (struct tic80_opcode): Remove format field. - (struct tic80_operand): Add insertion and extraction functions. - (TIC80_OPERAND_*): Remove old bogus values, start adding new - correct ones. - (FMT_*): Ditto. - -Tue Dec 31 15:05:41 1996 Michael Meissner - - * v850.h (V850_OPERAND_ADJUST_SHORT_MEMORY): New flag to adjust - type IV instruction offsets. - -Fri Dec 27 22:23:10 1996 Fred Fish - - * tic80.h: New file. - -Wed Dec 18 10:06:31 1996 Jeffrey A Law (law@cygnus.com) - - * mn10200.h (MN10200_OPERAND_NOCHECK): Define. - -Sat Dec 14 10:48:31 1996 Fred Fish - - * mn10200.h: Fix comment, mn10200_operand not powerpc_operand. - * mn10300.h: Fix comment, mn10300_operand not powerpc_operand. - * v850.h: Fix comment, v850_operand not powerpc_operand. - -Mon Dec 9 16:45:39 1996 Jeffrey A Law (law@cygnus.com) - - * mn10200.h: Flesh out structures and definitions needed by - the mn10200 assembler & disassembler. - -Tue Nov 26 10:46:56 1996 Ian Lance Taylor - - * mips.h: Add mips16 definitions. - -Mon Nov 25 17:56:54 1996 J.T. Conklin - - * m68k.h: Document new <, >, m, n, o and p operand specifiers. - -Wed Nov 20 10:59:41 1996 Jeffrey A Law (law@cygnus.com) - - * mn10300.h (MN10300_OPERAND_PCREL): Define. - (MN10300_OPERAND_MEMADDR): Define. - -Tue Nov 19 13:30:40 1996 Jeffrey A Law (law@cygnus.com) - - * mn10300.h (MN10300_OPERAND_REG_LIST): Define. - -Wed Nov 6 13:41:08 1996 Jeffrey A Law (law@cygnus.com) - - * mn10300.h (MN10300_OPERAND_SPLIT): Define. - -Tue Nov 5 13:26:12 1996 Jeffrey A Law (law@cygnus.com) - - * mn10300.h (MN10300_OPERAND_EXTENDED): Define. - -Mon Nov 4 12:52:48 1996 Jeffrey A Law (law@cygnus.com) - - * mn10300.h (MN10300_OPERAND_REPEATED): Define. - -Fri Nov 1 10:31:02 1996 Richard Henderson - - * alpha.h: Don't include "bfd.h"; private relocation types are now - negative to minimize problems with shared libraries. Organize - instruction subsets by AMASK extensions and PALcode - implementation. - (struct alpha_operand): Move flags slot for better packing. - -Tue Oct 29 12:19:10 1996 Jeffrey A Law (law@cygnus.com) - - * v850.h (V850_OPERAND_RELAX): New operand flag. - -Thu Oct 10 14:29:11 1996 Jeffrey A Law (law@cygnus.com) - - * mn10300.h (FMT_*): Move operand format definitions - here. - -Tue Oct 8 14:48:07 1996 Jeffrey A Law (law@cygnus.com) - - * mn10300.h (MN10300_OPERAND_PAREN): Define. - -Mon Oct 7 16:52:11 1996 Jeffrey A Law (law@cygnus.com) - - * mn10300.h (mn10300_opcode): Add "format" field. - (MN10300_OPERAND_*): Define. - -Thu Oct 3 10:33:46 1996 Jeffrey A Law (law@cygnus.com) - - * mn10x00.h: Delete. - * mn10200.h, mn10300.h: New files. - -Wed Oct 2 21:31:26 1996 Jeffrey A Law (law@cygnus.com) - - * mn10x00.h: New file. - -Fri Sep 27 18:26:46 1996 Stu Grossman (grossman@critters.cygnus.com) - - * v850.h: Add new flag to indicate this instruction uses a PC - displacement. - -Fri Sep 13 14:58:13 1996 Jeffrey A Law (law@cygnus.com) - - * h8300.h (stmac): Add missing instruction. - -Sat Aug 31 16:02:03 1996 Jeffrey A Law (law@cygnus.com) - - * v850.h (v850_opcode): Remove "size" field. Add "memop" - field. - -Fri Aug 23 10:39:08 1996 Jeffrey A Law (law@cygnus.com) - - * v850.h (V850_OPERAND_EP): Define. - - * v850.h (v850_opcode): Add size field. - -Thu Aug 22 16:51:25 1996 J.T. Conklin - - * v850.h (v850_operands): Add insert and extract fields, pointers - to functions used to handle unusual operand encoding. - (V850_OPERAND_REG, V850_OPERAND_SRG, V850_OPERAND_CC, - V850_OPERAND_SIGNED): Defined. - -Wed Aug 21 17:45:10 1996 J.T. Conklin - - * v850.h (v850_operands): Add flags field. - (OPERAND_REG, OPERAND_NUM): Defined. - -Tue Aug 20 14:52:02 1996 J.T. Conklin - - * v850.h: New file. - -Fri Aug 16 14:44:15 1996 James G. Smith - - * mips.h (OP_SH_LOCC, OP_SH_HICC, OP_MASK_CC, OP_SH_COP1NORM, - OP_MASK_COP1NORM, OP_SH_COP1SPEC, OP_MASK_COP1SPEC, - OP_MASK_COP1SCLR, OP_MASK_COP1CMP, OP_SH_COP1CMP, OP_SH_FORMAT, - OP_MASK_FORMAT, OP_SH_TRUE, OP_MASK_TRUE, OP_SH_GE, OP_MASK_GE, - OP_SH_UNSIGNED, OP_MASK_UNSIGNED, OP_SH_HINT, OP_MASK_HINT): - Defined. - -Fri Aug 16 00:15:15 1996 Jeffrey A Law (law@cygnus.com) - - * hppa.h (pitlb, pitlbe, iitlba, iitlbp, fic, fice): Accept - a 3 bit space id instead of a 2 bit space id. - -Thu Aug 15 13:11:46 1996 Martin M. Hunt - - * d10v.h: Add some additional defines to support the - assembler in determining which operations can be done in parallel. - -Tue Aug 6 11:13:22 1996 Jeffrey A Law (law@cygnus.com) - - * h8300.h (SN): Define. - (eepmov.b): Renamed from "eepmov" - (nop, bpt, rte, rts, sleep, clrmac): These have no size associated - with them. - -Fri Jul 26 11:47:10 1996 Martin M. Hunt - - * d10v.h (OPERAND_SHIFT): New operand flag. - -Thu Jul 25 12:06:22 1996 Martin M. Hunt - - * d10v.h: Changes for divs, parallel-only instructions, and - signed numbers. - -Mon Jul 22 11:21:15 1996 Martin M. Hunt - - * d10v.h (pd_reg): Define. Putting the definition here allows - the assembler and disassembler to share the same struct. - -Mon Jul 22 12:15:25 1996 Ian Lance Taylor - - * i960.h (i960_opcodes): "halt" takes an argument. From Stephen - Williams . - -Wed Jul 17 14:46:38 1996 Martin M. Hunt - - * d10v.h: New file. - -Thu Jul 11 12:09:15 1996 Jeffrey A Law (law@cygnus.com) - - * h8300.h (band, bclr): Force high bit of immediate nibble to zero. - -Wed Jul 3 14:30:12 1996 J.T. Conklin - - * m68k.h (mcf5200): New macro. - Document names of coldfire control registers. - -Tue Jul 2 23:05:45 1996 Jeffrey A Law (law@cygnus.com) - - * h8300.h (SRC_IN_DST): Define. - - * h8300.h (UNOP3): Mark the register operand in this insn - as a source operand, not a destination operand. - (SHIFT_2, SHIFT_IMM): Remove. Eliminate all references. - (UNOP3): Change SHIFT_IMM to IMM for H8/S bitops. Mark - register operand with SRC_IN_DST. - -Fri Jun 21 13:52:17 1996 Richard Henderson - - * alpha.h: New file. - -Thu Jun 20 15:02:57 1996 Ian Lance Taylor - - * rs6k.h: Remove obsolete file. - -Wed Jun 19 15:29:38 1996 Ian Lance Taylor - - * i386.h: Correct opcode values for faddp, fsubp, fsubrp, fmulp, - fdivp, and fdivrp. Add ffreep. - -Tue Jun 18 16:06:00 1996 Jeffrey A. Law - - * h8300.h: Reorder various #defines for readability. - (ABS32SRC, ABS32DST, DSP32LIST, ABS32LIST, A32LIST): Define. - (BITOP): Accept additional (unused) argument. All callers changed. - (EBITOP): Likewise. - (O_LAST): Bump. - (ldc, stc, movb, movw, movl): Use 32bit offsets and absolutes. - - * h8300.h (EXR, SHIFT_2, MACREG, SHIFT_IMM, RDINC): Define. - (O_TAS, O_CLRMAC, O_LDMAC, O_MAC, O_LDM, O_STM): Define. - (BITOP, EBITOP): Handle new H8/S addressing modes for - bit insns. - (UNOP3): Handle new shift/rotate insns on the H8/S. - (insns using exr): New instructions. - (tas, mac, ldmac, clrmac, ldm, stm): New instructions. - -Thu May 23 16:56:48 1996 Jeffrey A Law (law@cygnus.com) - - * h8300.h (add.l): Undo Apr 5th change. The manual I had - was incorrect. - -Mon May 6 23:38:22 1996 Jeffrey A Law (law@cygnus.com) - - * h8300.h (START): Remove. - (MEMRELAX): Define. Mark absolute memory operands in mov.b, mov.w - and mov.l insns that can be relaxed. - -Tue Apr 30 18:30:58 1996 Ian Lance Taylor - - * i386.h: Remove Abs32 from lcall. - -Mon Apr 22 17:09:23 1996 Doug Evans - - * sparc.h (SPARC_OPCODE_ARCH_V9_P): New macro. - (SLCPOP): New macro. - Mark X,Y opcode letters as in use. - -Thu Apr 11 17:28:18 1996 Ian Lance Taylor - - * sparc.h (F_FLOAT, F_FBR): Define. - -Fri Apr 5 16:55:34 1996 Jeffrey A Law (law@cygnus.com) - - * h8300.h (ABS8MEM): Renamed from ABSMOV. Remove ABSMOV - from all insns. - (ABS8SRC,ABS8DST): Add ABS8MEM. - (add.l): Fix reg+reg variant. - (eepmov.w): Renamed from eepmovw. - (ldc,stc): Fix many cases. - -Sun Mar 31 13:30:03 1996 Doug Evans - - * sparc.h (SPARC_OPCODE_ARCH_MASK): New macro. - -Thu Mar 7 15:08:23 1996 Doug Evans - - * sparc.h (O): Mark operand letter as in use. - -Tue Feb 20 20:46:21 1996 Doug Evans - - * sparc.h (sparc_{encode,decode}_sparclet_cpreg): Declare. - Mark operand letters uU as in use. - -Mon Feb 19 01:59:08 1996 Doug Evans - - * sparc.h (sparc_opcode_arch_val): Add SPARC_OPCODE_ARCH_SPARCLET. - (sparc_opcode_arch): Delete member `conflicts'. Add `supported'. - (SPARC_OPCODE_SUPPORTED): New macro. - (SPARC_OPCODE_CONFLICT_P): Rewrite. - (F_NOTV9): Delete. - -Fri Feb 16 12:23:34 1996 Jeffrey A Law (law@cygnus.com) - - * sparc.h (sparc_opcode_lookup_arch) Make return type in - declaration consistent with return type in definition. - -Wed Feb 14 18:14:11 1996 Alan Modra - - * i386.h (i386_optab): Remove Data32 from pushf and popf. - -Thu Feb 8 14:27:21 1996 James Carlson - - * i386.h (i386_regtab): Add 80486 test registers. - -Mon Feb 5 18:35:46 1996 Ian Lance Taylor - - * i960.h (I_HX): Define. - (i960_opcodes): Add HX instruction. - -Mon Jan 29 12:43:39 1996 Ken Raeburn - - * i386.h: Fix waiting forms of finit, fstenv, fsave, fstsw, fstcw, - and fclex. - -Wed Jan 24 22:36:59 1996 Doug Evans - - * sparc.h (enum sparc_opcode_arch_val): Replaces sparc_architecture. - (SPARC_OPCODE_CONFLICT_P): Renamed from ARCHITECTURES_CONFLICT_P. - (bfd_* defines): Delete. - (sparc_opcode_archs): Replaces architecture_pname. - (sparc_opcode_lookup_arch): Declare. - (NUMOPCODES): Delete. - -Mon Jan 22 08:24:32 1996 Doug Evans - - * sparc.h (enum sparc_architecture): Add v9a. - (ARCHITECTURES_CONFLICT_P): Update. - -Thu Dec 28 13:27:53 1995 John Hassey - - * i386.h: Added Pentium Pro instructions. - -Thu Nov 2 22:59:22 1995 Ian Lance Taylor - - * m68k.h: Document new 'W' operand place. - -Tue Oct 24 10:49:10 1995 Jeffrey A Law (law@cygnus.com) - - * hppa.h: Add lci and syncdma instructions. - -Mon Oct 23 11:09:16 1995 James G. Smith - - * mips.h: Added INSN_4100 flag to mark NEC VR4100 specific - instructions. - -Mon Oct 16 10:28:15 1995 Michael Meissner - - * ppc.h (PPC_OPCODE_{COMMON,ANY}): New opcode flags for - assembler's -mcom and -many switches. - -Wed Oct 11 16:56:33 1995 Ken Raeburn - - * i386.h: Fix cmpxchg8b extension opcode description. - -Thu Oct 5 18:03:36 1995 Ken Raeburn - - * i386.h: Add Pentium instructions wrmsr, rdtsc, rdmsr, cmpxchg8b, - and register cr4. - -Tue Sep 19 15:26:43 1995 Ian Lance Taylor - - * m68k.h: Change comment: split type P into types 0, 1 and 2. - -Wed Aug 30 13:50:55 1995 Doug Evans - - * sparc.h (sparc_{encode,decode}_prefetch): Declare. - -Tue Aug 29 15:34:58 1995 Doug Evans - - * sparc.h (sparc_{encode,decode}_{asi,membar}): Declare. - -Wed Aug 2 18:32:19 1995 Ian Lance Taylor - - * m68kmri.h: Remove. - - * m68k.h: Move tables into opcodes/m68k-opc.c, leaving just the - declarations. Remove F_ALIAS and flag field of struct - m68k_opcode. Change arch field of struct m68k_opcode to unsigned - int. Make name and args fields of struct m68k_opcode const. - -Wed Aug 2 08:16:46 1995 Doug Evans - - * sparc.h (F_NOTV9): Define. - -Tue Jul 11 14:20:42 1995 Jeff Spiegel - - * mips.h (INSN_4010): Define. - -Wed Jun 21 18:49:51 1995 Ken Raeburn - - * m68k.h (TBL1): Reverse sense of "round" argument in result. - - Changes from Andreas Schwab : - * m68k.h: Fix argument descriptions of coprocessor - instructions to allow only alterable operands where appropriate. - [!NO_DEFAULT_SIZES]: An omitted size defaults to `w'. - (m68k_opcode_aliases): Add more aliases. - -Fri Apr 14 22:15:34 1995 Ken Raeburn - - * m68k.h: Added explcitly short-sized conditional branches, and a - bunch of aliases (fmov*, ftest*, tdivul) to support gcc's - svr4-based configurations. - -Mon Mar 13 21:30:01 1995 Ken Raeburn - - Mon Feb 27 08:36:39 1995 Bryan Ford - * i386.h: added missing Data16/Data32 flags to a few instructions. - -Wed Mar 8 15:19:53 1995 Ian Lance Taylor - - * mips.h (OP_MASK_FR, OP_SH_FR): Define. - (OP_MASK_BCC, OP_SH_BCC): Define. - (OP_MASK_PREFX, OP_SH_PREFX): Define. - (OP_MASK_CCC, OP_SH_CCC): Define. - (INSN_READ_FPR_R): Define. - (INSN_RFE): Delete. - -Wed Mar 8 03:13:23 1995 Ken Raeburn - - * m68k.h (enum m68k_architecture): Deleted. - (struct m68k_opcode_alias): New type. - (m68k_opcodes): Now const. Deleted opcode aliases with exactly - matching constraints, values and flags. As a side effect of this, - the MOTOROLA_SYNTAX_ONLY and MIT_SYNTAX_ONLY macros, which so far - as I know were never used, now may need re-examining. - (numopcodes): Now const. - (m68k_opcode_aliases, numaliases): New variables. - (endop): Deleted. - [DONT_DEFINE_TABLE]: Declare numopcodes, numaliases, and - m68k_opcode_aliases; update declaration of m68k_opcodes. - -Mon Mar 6 10:02:00 1995 Jeff Law (law@snake.cs.utah.edu) - - * hppa.h (delay_type): Delete unused enumeration. - (pa_opcode): Replace unused delayed field with an architecture - field. - (pa_opcodes): Mark each instruction as either PA1.0 or PA1.1. - -Fri Mar 3 16:10:24 1995 Ian Lance Taylor - - * mips.h (INSN_ISA4): Define. - -Fri Feb 24 19:13:37 1995 Ian Lance Taylor - - * mips.h (M_DLA_AB, M_DLI): Define. - -Thu Feb 23 17:33:09 1995 Jeff Law (law@snake.cs.utah.edu) - - * hppa.h (fstwx): Fix single-bit error. - -Wed Feb 15 12:19:52 1995 Ian Lance Taylor - - * mips.h (M_ULD, M_ULD_A, M_USD, M_USD_A): Define. - -Mon Feb 6 10:35:23 1995 J.T. Conklin - - * i386.h: added cpuid instruction , and dr[0-7] aliases for the - debug registers. From Charles Hannum (mycroft@netbsd.org). - -Mon Feb 6 03:31:54 1995 Ken Raeburn - - Changes from Bryan Ford for 16-bit - i386 support: - * i386.h (MOV_AX_DISP32): New macro. - (i386_optab): Added Data16 and Data32 as needed. Added "w" forms - of several call/return instructions. - (ADDR_PREFIX_OPCODE): New macro. - -Mon Jan 23 16:45:43 1995 Ken Raeburn - - Sat Jan 21 17:50:38 1995 Pat Rankin (rankin@eql.caltech.edu) - - * vax.h (struct vot_wot, field `args'): Make it pointer to const - char. - (struct vot, field `name'): ditto. - -Thu Jan 19 14:47:53 1995 Ken Raeburn - - * vax.h: Supply and properly group all values in end sentinel. - -Tue Jan 17 10:55:30 1995 Ian Lance Taylor - - * mips.h (INSN_ISA, INSN_4650): Define. - -Wed Oct 19 13:34:17 1994 Ian Lance Taylor - - * a29k.h: Add operand type 'I' for `inv' and `iretinv'. On - systems with a separate instruction and data cache, such as the - 29040, these instructions take an optional argument. - -Wed Sep 14 17:44:20 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * mips.h (INSN_STORE_MEMORY): Correct value to not conflict with - INSN_TRAP. - -Tue Sep 6 11:39:08 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * mips.h (INSN_STORE_MEMORY): Define. - -Thu Jul 28 19:28:07 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * sparc.h: Document new operand type 'x'. - -Tue Jul 26 17:48:05 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * i960.h (I_CX2): New instruction category. It includes - instructions available on Cx and Jx processors. - (I_JX): New instruction category, for JX-only instructions. - (i960_opcodes): Put eshro and sysctl in I_CX2 category. Added - Jx-only instructions, in I_JX category. - -Wed Jul 13 18:43:47 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * ns32k.h (endop): Made pointer const too. - -Sun Jul 10 11:01:09 1994 Ian Dall (dall@hfrd.dsto.gov.au) - - * ns32k.h: Drop Q operand type as there is no correct use - for it. Add I and Z operand types which allow better checking. - -Thu Jul 7 12:34:48 1994 Steve Chamberlain (sac@jonny.cygnus.com) - - * h8300.h (xor.l) :fix bit pattern. - (L_2): New size of operand. - (trapa): Use it. - -Fri Jun 10 16:38:11 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * m68k.h: Move "trap" before "tpcc" to change disassembly. - -Fri Jun 3 15:57:36 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * sparc.h: Include v9 definitions. - -Thu Jun 2 12:23:17 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * m68k.h (m68060): Defined. - (m68040up, mfloat, mmmu): Include it. - (struct m68k_opcode): Widen `arch' field. - (m68k_opcodes): Updated for M68060. Removed comments that were - instructions commented out by "JF" years ago. - -Thu Apr 28 18:31:14 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * m68k.h (struct m68k_opcode): Shorten `arch' field to 8 bits, and - add a one-bit `flags' field. - (F_ALIAS): New macro. - -Wed Apr 27 11:29:52 1994 Steve Chamberlain (sac@cygnus.com) - - * h8300.h (dec, inc): Get encoding right. - -Mon Apr 4 13:12:43 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ppc.h (struct powerpc_operand): Removed signedp field; just use - a flag instead. - (PPC_OPERAND_SIGNED): Define. - (PPC_OPERAND_SIGNOPT): Define. - -Thu Mar 31 19:34:08 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * i386.h (IS_JUMP_ON_ECX_ZERO, "jcxz" pattern): Operand size - prefix is 0x66, not 0x67. Patch from H.J. Lu (hlu@nynexst.com). - -Thu Mar 3 15:51:05 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * i386.h: Reverse last change. It'll be handled in gas instead. - -Thu Feb 24 15:29:05 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * i386.h (sar): Disabled the two-operand Imm1 form, since it was - slower on the 486 and used the implicit shift count despite the - explicit operand. The one-operand form is still available to get - the shorter form with the implicit shift count. - -Thu Feb 17 12:27:52 1994 Torbjorn Granlund (tege@mexican.cygnus.com) - - * hppa.h: Fix typo in fstws arg string. - -Wed Feb 9 21:23:52 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ppc.h (struct powerpc_opcode): Make operands field unsigned. - -Mon Feb 7 19:14:58 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ppc.h (PPC_OPCODE_601): Define. - -Fri Feb 4 23:43:50 1994 Jeffrey A. Law (law@snake.cs.utah.edu) - - * hppa.h (addb): Use '@' for addb and addib pseudo ops. - (so we can determine valid completers for both addb and addb[tf].) - - * hppa.h (xmpyu): No floating point format specifier for the - xmpyu instruction. - -Fri Feb 4 23:36:52 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ppc.h (PPC_OPERAND_NEXT): Define. - (PPC_OPERAND_NEGATIVE): Change value to make room for above. - (struct powerpc_macro): Define. - (powerpc_macros, powerpc_num_macros): Declare. - -Fri Jan 21 19:13:50 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * ppc.h: New file. Header file for PowerPC opcode table. - -Mon Jan 17 00:14:23 1994 Jeffrey A. Law (law@snake.cs.utah.edu) - - * hppa.h: More minor template fixes for sfu and copr (to allow - for easier disassembly). - - * hppa.h: Fix templates for all the sfu and copr instructions. - -Wed Dec 15 15:12:42 1993 Ken Raeburn (raeburn@cujo.cygnus.com) - - * i386.h (push): Permit Imm16 operand too. - -Sat Dec 11 16:14:06 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * h8300.h (andc): Exists in base arch. - -Wed Dec 1 12:15:32 1993 Jeffrey A. Law (law@snake.cs.utah.edu) - - * From Hisashi MINAMINO - * hppa.h: #undef NONE to avoid conflict with hiux include files. - -Sun Nov 21 22:06:57 1993 Jeffrey A. Law (law@snake.cs.utah.edu) - - * hppa.h: Add FP quadword store instructions. - -Wed Nov 17 17:13:16 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h: (M_J_A): Added. - (M_LA): Removed. - -Mon Nov 8 12:12:47 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h (OP_MASK_CACHE, OP_SH_CACHE): Define. From Ted Lemon - . - -Sun Nov 7 00:30:11 1993 Jeffrey A. Law (law@snake.cs.utah.edu) - - * hppa.h: Immediate field in probei instructions is unsigned, - not low-sign extended. - -Wed Nov 3 10:30:00 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * m88k.h (RRI10MASK): Change from 0xfc00ffe0 to 0xfc00fc00. - -Tue Nov 2 12:41:30 1993 Ken Raeburn (raeburn@rover.cygnus.com) - - * i386.h: Add "fxch" without operand. - -Mon Nov 1 18:13:03 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h (M_JAL_1, M_JAL_2, M_JAL_A): Added. - -Sat Oct 2 22:26:11 1993 Jeffrey A Law (law@snake.cs.utah.edu) - - * hppa.h: Add gfw and gfr to the opcode table. - -Wed Sep 29 16:23:00 1993 K. Richard Pixley (rich@sendai.cygnus.com) - - * m88k.h: extended to handle m88110. - -Tue Sep 28 19:19:08 1993 Jeffrey A Law (law@snake.cs.utah.edu) - - * hppa.h (be, ble): Use operand type 'z' to denote absolute branch - addresses. - -Tue Sep 14 14:04:35 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * i960.h (i960_opcodes): Properly bracket initializers. - -Mon Sep 13 12:50:52 1993 K. Richard Pixley (rich@sendai.cygnus.com) - - * m88k.h (BOFLAG): rewrite to avoid nested comment. - -Mon Sep 13 15:46:06 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * m68k.h (two): Protect second argument with parentheses. - -Fri Sep 10 16:29:47 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * i386.h (i386_optab): Added new instruction "rsm" (for i386sl). - Deleted old in/out instructions in "#if 0" section. - -Thu Sep 9 17:42:19 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * i386.h (i386_optab): Properly bracket initializers. - -Wed Aug 25 13:50:56 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * hppa.h (pa_opcode): Use '|' for movb and movib insns. (From - Jeff Law, law@cs.utah.edu). - -Mon Aug 23 16:55:03 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * i386.h (lcall): Accept Imm32 operand also. - -Mon Aug 23 12:43:11 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h (M_ABSU): Removed (absolute value of unsigned number??). - (M_DABS): Added. - -Thu Aug 19 15:08:37 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h (INSN_*): Changed values. Removed unused definitions. - Added INSN_COND_BRANCH_LIKELY, INSN_ISA2 and INSN_ISA3. Split - INSN_LOAD_DELAY into INSN_LOAD_MEMORY_DELAY and - INSN_LOAD_COPROC_DELAY. Split INSN_COPROC_DELAY into - INSN_COPROC_MOVE_DELAY and INSN_COPROC_MEMORY_DELAY. - (M_*): Added new values for r6000 and r4000 macros. - (ANY_DELAY): Removed. - -Wed Aug 18 15:37:48 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h: Added M_LI_S and M_LI_SS. - -Tue Aug 17 07:08:08 1993 Steve Chamberlain (sac@phydeaux.cygnus.com) - - * h8300.h: Get some rare mov.bs correct. - -Thu Aug 5 09:15:17 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * sparc.h: Don't define const ourself; rely on ansidecl.h having - been included. - -Fri Jul 30 18:41:11 1993 John Gilmore (gnu@cygnus.com) - - * sparc.h (F_JSR, F_UNBR, F_CONDBR): Add new flags to mark - jump instructions, for use in disassemblers. - -Thu Jul 22 07:25:27 1993 Ian Lance Taylor (ian@cygnus.com) - - * m88k.h: Make bitfields just unsigned, not unsigned long or - unsigned short. - -Wed Jul 21 11:55:31 1993 Jim Kingdon (kingdon@deneb.cygnus.com) - - * hppa.h: New argument type 'y'. Use in various float instructions. - -Mon Jul 19 17:17:03 1993 Jim Kingdon (kingdon@deneb.cygnus.com) - - * hppa.h (break): First immediate field is unsigned. - - * hppa.h: Add rfir instruction. - -Sun Jul 18 16:28:08 1993 Jim Kingdon (kingdon@rtl.cygnus.com) - - * mips.h: Split the actual table out into ../../opcodes/mips-opc.c. - -Fri Jul 16 09:59:29 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.h: Reworked the hazard information somewhat, and fixed some - bugs in the instruction hazard descriptions. - -Thu Jul 15 12:42:01 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * m88k.h: Corrected a couple of opcodes. - -Tue Jul 6 15:17:35 1993 Ian Lance Taylor (ian@cygnus.com) - - * mips.h: Replaced with version from Ralph Campbell and OSF. The - new version includes instruction hazard information, but is - otherwise reasonably similar. - -Thu Jul 1 20:36:17 1993 Doug Evans (dje@canuck.cygnus.com) - - * h8300.h: Fix typo in UNOP3 (affected sh[al][lr].l). - -Fri Jun 11 18:38:44 1993 Ken Raeburn (raeburn@cygnus.com) - - Patches from Jeff Law, law@cs.utah.edu: - * hppa.h: Clean up some of the OLD_TABLE, non-OLD_TABLE braindamage. - Make the tables be the same for the following instructions: - "bb", "addb[tf]", "addib[tf]", "add", "add[loc]", "addco", - "sh[123]add", "sh[123]add[lo]", "sub", "sub[obt]", "sub[bt]o", - "ds", "comclr", "addi", "addi[ot]", "addito", "subi", "subio", - "comiclr", "fadd", "fsub", "fmpy", "fdiv", "fsqrt", "fabs", - "frnd", "fcpy", "fcnvff", "fcnvxf", "fcnvfx", "fcnvfxt", - "fcmp", and "ftest". - - * hppa.h: Make new and old tables the same for "break", "mtctl", - "mfctl", "bb", "ssm", "rsm", "xmpyu", "fmpyadd", "fmpysub". - Fix typo in last patch. Collapse several #ifdefs into a - single #ifdef. - - * hppa.h: Delete remaining OLD_TABLE code. Bring some - of the comments up-to-date. - - * hppa.h: Update "free list" of letters and update - comments describing each letter's function. - -Thu Jul 8 09:05:26 1993 Doug Evans (dje@canuck.cygnus.com) - - * h8300.h: Lots of little fixes for the h8/300h. - -Tue Jun 8 12:16:03 1993 Steve Chamberlain (sac@phydeaux.cygnus.com) - - Support for H8/300-H - * h8300.h: Lots of new opcodes. - -Fri Jun 4 15:41:37 1993 Steve Chamberlain (sac@phydeaux.cygnus.com) - - * h8300.h: checkpoint, includes H8/300-H opcodes. - -Thu Jun 3 15:42:59 1993 Stu Grossman (grossman@cygnus.com) - - * Patches from Jeffrey Law . - * hppa.h: Rework single precision FP - instructions so that they correctly disassemble code - PA1.1 code. - -Thu May 27 19:21:22 1993 Bruce Bauman (boot@osf.org) - - * i386.h (i386_optab, mov pattern): Remove Mem16 restriction from - mov to allow instructions like mov ss,xyz(ecx) to assemble. - -Tue May 25 00:39:40 1993 Ken Raeburn (raeburn@cygnus.com) - - * hppa.h: Use new version from Utah if OLD_TABLE isn't defined; - gdb will define it for now. - -Mon May 24 15:20:06 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * sparc.h: Don't end enumerator list with comma. - -Fri May 14 15:15:50 1993 Ian Lance Taylor (ian@cygnus.com) - - * Based on patches from davidj@ICSI.Berkeley.EDU (David Johnson): - * mips.h (OP_MASK_COPZ, OP_SH_COPZ): Define. - ("bc2t"): Correct typo. - ("[ls]wc[023]"): Use T rather than t. - ("c[0123]"): Define general coprocessor instructions. - -Mon May 10 06:02:25 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com) - - * m68k.h: Move split point for gcc compilation more towards - middle. - -Fri Apr 9 13:26:16 1993 Jim Kingdon (kingdon@cygnus.com) - - * rs6k.h: Clean up instructions for primary opcode 19 (many were - simply wrong, ics, rfi, & rfsvc were missing). - Add "a" to opr_ext for "bb". Doc fix. - -Thu Mar 18 13:45:31 1993 Per Bothner (bothner@rtl.cygnus.com) - - * i386.h: 486 extensions from John Hassey (hassey@dg-rtp.dg.com). - * mips.h: Add casts, to suppress warnings about shifting too much. - * m68k.h: Document the placement code '9'. - -Thu Feb 18 02:03:14 1993 John Gilmore (gnu@cygnus.com) - - * m68k.h (BREAK_UP_BIG_DECL, AND_OTHER_PART): Add kludge which - allows callers to break up the large initialized struct full of - opcodes into two half-sized ones. This permits GCC to compile - this module, since it takes exponential space for initializers. - (numopcodes, endop): Revise to use AND_OTHER_PART in size calcs. - -Thu Feb 4 02:06:56 1993 John Gilmore (gnu@cygnus.com) - - * a29k.h: Remove RCS crud, update GPL to v2, update copyrights. - * convex.h: Added, from GDB's convx-opcode.h. Added CONST to all - initialized structs in it. - -Thu Jan 28 21:32:22 1993 John Gilmore (gnu@cygnus.com) - - Delta 88 changes inspired by Carl Greco, : - * m88k.h (PMEM): Avoid previous definition from . - (AND): Change to AND_ to avoid ansidecl.h `AND' conflict. - -Sat Jan 23 18:10:49 PST 1993 Ralph Campbell (ralphc@pyramid.com) - - * mips.h: document "i" and "j" operands correctly. - -Thu Jan 7 15:58:13 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * mips.h: Removed endianness dependency. - -Sun Jan 3 14:13:35 1993 Steve Chamberlain (sac@thepub.cygnus.com) - - * h8300.h: include info on number of cycles per instruction. - -Mon Dec 21 21:29:08 1992 Stu Grossman (grossman at cygnus.com) - - * hppa.h: Move handy aliases to the front. Fix masks for extract - and deposit instructions. - -Sat Dec 12 16:09:48 1992 Ian Lance Taylor (ian@cygnus.com) - - * i386.h: accept shld and shrd both with and without the shift - count argument, which is always %cl. - -Fri Nov 27 17:13:18 1992 Ken Raeburn (raeburn at cygnus.com) - - * i386.h (i386_optab_end, i386_regtab_end): Now const. - (one_byte_segment_defaults, two_byte_segment_defaults, - i386_prefixtab_end): Ditto. - -Mon Nov 23 10:47:25 1992 Ken Raeburn (raeburn@cygnus.com) - - * vax.h (bb*): Use "v" (bitfield type), not "a" (address operand) - for operand 2; from John Carr, jfc@dsg.dec.com. - -Wed Nov 4 07:36:49 1992 Ken Raeburn (raeburn@cygnus.com) - - * m68k.h: Define FIXED_SIZE_BRANCH, so bsr and bra instructions - always use 16-bit offsets. Makes calculated-size jump tables - feasible. - -Fri Oct 16 22:52:43 1992 Ken Raeburn (raeburn@cygnus.com) - - * i386.h: Fix one-operand forms of in* and out* patterns. - -Tue Sep 22 14:08:14 1992 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * m68k.h: Added CPU32 support. - -Tue Sep 22 00:38:41 1992 John Gilmore (gnu@cygnus.com) - - * mips.h (break): Disassemble the argument. Patch from - jonathan@cs.stanford.edu (Jonathan Stone). - -Wed Sep 9 11:25:28 1992 Ian Lance Taylor (ian@cygnus.com) - - * m68k.h: merged Motorola and MIT syntax. - -Thu Sep 3 09:33:22 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * m68k.h (pmove): make the tests less strict, the 68k book is - wrong. - -Tue Aug 25 23:25:19 1992 Ken Raeburn (raeburn@cambridge.cygnus.com) - - * m68k.h (m68ec030): Defined as alias for 68030. - (m68k_opcodes): New type characters "3" for 68030 MMU regs and "t" - for immediate 0-7 added. Set up some opcodes (ptest, bkpt) to use - them. Tightened description of "fmovex" to distinguish it from - some "pmove" encodings. Added "pmove" for 68030 MMU regs, cleaned - up descriptions that claimed versions were available for chips not - supporting them. Added "pmovefd". - -Mon Aug 24 12:04:51 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * m68k.h: fix where the . goes in divull - -Wed Aug 19 11:22:24 1992 Ian Lance Taylor (ian@cygnus.com) - - * m68k.h: the cas2 instruction is supposed to be written with - indirection on the last two operands, which can be either data or - address registers. Added a new operand type 'r' which accepts - either register type. Added new cases for cas2l and cas2w which - use them. Corrected masks for cas2 which failed to recognize use - of address register. - -Fri Aug 14 14:20:38 1992 Per Bothner (bothner@cygnus.com) - - * m68k.h: Merged in patches (mostly m68040-specific) from - Colin Smith . - - * m68k.h: Merged m68kmri.h and m68k.h (using the former as a - base). Also cleaned up duplicates, re-ordered instructions for - the sake of dis-assembling (so aliases come after standard names). - * m68kmri.h: Now just defines some macros, and #includes m68k.h. - -Wed Aug 12 16:38:15 1992 Steve Chamberlain (sac@thepub.cygnus.com) - - * m68kmri.h: added various opcodes. Moved jbxx to bxxes. Filled in - all missing .s - -Mon Aug 10 23:22:33 1992 Ken Raeburn (raeburn@cygnus.com) - - * sparc.h: Moved tables to BFD library. - - * i386.h (i386_optab): Add fildq, fistpq aliases used by gcc. - -Sun Jun 28 13:29:03 1992 Fred Fish (fnf@cygnus.com) - - * h8300.h: Finish filling in all the holes in the opcode table, - so that the Lucid C compiler can digest this as well... - -Fri Jun 26 21:27:17 1992 John Gilmore (gnu at cygnus.com) - - * i386.h: Add setc, setnc, addr16, data16, repz, repnz aliases. - Fix opcodes on various sizes of fild/fist instructions - (16bit=no suffix, 32bit="l" suffix, 64bit="ll" suffix). - Use tabs to indent for comments. Fixes suggested by Minh Tran-Le. - -Thu Jun 25 16:13:26 1992 Stu Grossman (grossman at cygnus.com) - - * h8300.h: Fill in all the holes in the opcode table so that the - losing HPUX C compiler can digest this... - -Thu Jun 11 12:15:25 1992 John Gilmore (gnu at cygnus.com) - - * mips.h: Fix decoding of coprocessor instructions, somewhat. - (Fix by Eric Anderson, 3jean@maas-neotek.arc.nasa.gov.) - -Thu May 28 11:17:44 1992 Jim Wilson (wilson@sphagnum.cygnus.com) - - * sparc.h: Add new architecture variant sparclite; add its scan - and divscc opcodes. Define ARCHITECTURES_CONFLICT_P macro. - -Tue May 5 14:23:27 1992 Per Bothner (bothner@rtl.cygnus.com) - - * mips.h: Add some more opcode synonyms (from Frank Yellin, - fy@lucid.com). - -Thu Apr 16 18:25:26 1992 Per Bothner (bothner@cygnus.com) - - * rs6k.h: New version from IBM (Metin). - -Thu Apr 9 00:31:19 1992 Per Bothner (bothner@rtl.cygnus.com) - - * rs6k.h: Fix incorrect extended opcode for instructions `fm' - and `fd'. (From metin@ibmpa.awdpa.ibm.com (Metin G. Ozisik).) - -Tue Apr 7 13:38:47 1992 Stu Grossman (grossman at cygnus.com) - - * rs6k.h: Move from ../../gdb/rs6k-opcode.h. - -Fri Apr 3 11:30:20 1992 Fred Fish (fnf@cygnus.com) - - * m68k.h (one, two): Cast macro args to unsigned to suppress - complaints from compiler and lint about integer overflow during - shift. - -Sun Mar 29 12:22:08 1992 John Gilmore (gnu at cygnus.com) - - * sparc.h (OP): Avoid signed overflow when shifting to high order bit. - -Fri Mar 6 00:22:38 1992 John Gilmore (gnu at cygnus.com) - - * mips.h: Make bitfield layout depend on the HOST compiler, - not on the TARGET system. - -Fri Feb 21 01:29:51 1992 K. Richard Pixley (rich@cygnus.com) - - * i386.h: added inb, inw, outb, outw opcodes, added att syntax for - scmp, slod, smov, ssca, ssto. Curtesy Minh Tran-Le - . - -Thu Jan 30 07:31:44 1992 Steve Chamberlain (sac at rtl.cygnus.com) - - * h8300.h: turned op_type enum into #define list - -Thu Jan 30 01:07:24 1992 John Gilmore (gnu at cygnus.com) - - * sparc.h: Remove "cypress" architecture. Remove "fitox" and - similar instructions -- they've been renamed to "fitoq", etc. - REALLY fix tsubcctv. Fix "fcmpeq" and "fcmpq" which had wrong - number of arguments. - * h8300.h: Remove extra ; which produces compiler warning. - -Tue Jan 28 22:59:22 1992 Stu Grossman (grossman at cygnus.com) - - * sparc.h: fix opcode for tsubcctv. - -Tue Jan 7 17:19:39 1992 K. Richard Pixley (rich at cygnus.com) - - * sparc.h: fba and cba are now aliases for fb and cb respectively. - -Fri Dec 27 10:55:50 1991 Per Bothner (bothner at cygnus.com) - - * sparc.h (nop): Made the 'lose' field be even tighter, - so only a standard 'nop' is disassembled as a nop. - -Sun Dec 22 12:18:18 1991 Michael Tiemann (tiemann at cygnus.com) - - * sparc.h (nop): Add RD_GO to `lose' so that only %g0 in dest is - disassembled as a nop. - -Wed Dec 18 17:19:44 1991 Stu Grossman (grossman at cygnus.com) - - * m68k.h, sparc.h: ANSIfy enums. - -Tue Dec 10 00:22:20 1991 K. Richard Pixley (rich at rtl.cygnus.com) - - * sparc.h: fix a typo. - -Sat Nov 30 20:40:51 1991 Steve Chamberlain (sac at rtl.cygnus.com) - - * a29k.h, arm.h, h8300.h, i386.h, i860.h, i960.h , m68k.h, - m88k.h, mips.h , np1.h, ns32k.h, pn.h, pyr.h, sparc.h, tahoe.h, - vax.h: Renamed from ../-opcode.h. - - -Local Variables: -version-control: never -End: diff --git a/include/opcode/alpha.h b/include/opcode/alpha.h deleted file mode 100644 index 22c85a1f5ef..00000000000 --- a/include/opcode/alpha.h +++ /dev/null @@ -1,237 +0,0 @@ -/* alpha.h -- Header file for Alpha opcode table - Copyright 1996, 1999, 2001, 2003 Free Software Foundation, Inc. - Contributed by Richard Henderson , - patterned after the PPC opcode table written by Ian Lance Taylor. - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef OPCODE_ALPHA_H -#define OPCODE_ALPHA_H - -/* The opcode table is an array of struct alpha_opcode. */ - -struct alpha_opcode -{ - /* The opcode name. */ - const char *name; - - /* The opcode itself. Those bits which will be filled in with - operands are zeroes. */ - unsigned opcode; - - /* The opcode mask. This is used by the disassembler. This is a - mask containing ones indicating those bits which must match the - opcode field, and zeroes indicating those bits which need not - match (and are presumably filled in by operands). */ - unsigned mask; - - /* One bit flags for the opcode. These are primarily used to - indicate specific processors and environments support the - instructions. The defined values are listed below. */ - unsigned flags; - - /* An array of operand codes. Each code is an index into the - operand table. They appear in the order which the operands must - appear in assembly code, and are terminated by a zero. */ - unsigned char operands[4]; -}; - -/* The table itself is sorted by major opcode number, and is otherwise - in the order in which the disassembler should consider - instructions. */ -extern const struct alpha_opcode alpha_opcodes[]; -extern const unsigned alpha_num_opcodes; - -/* Values defined for the flags field of a struct alpha_opcode. */ - -/* CPU Availability */ -#define AXP_OPCODE_BASE 0x0001 /* Base architecture -- all cpus. */ -#define AXP_OPCODE_EV4 0x0002 /* EV4 specific PALcode insns. */ -#define AXP_OPCODE_EV5 0x0004 /* EV5 specific PALcode insns. */ -#define AXP_OPCODE_EV6 0x0008 /* EV6 specific PALcode insns. */ -#define AXP_OPCODE_BWX 0x0100 /* Byte/word extension (amask bit 0). */ -#define AXP_OPCODE_CIX 0x0200 /* "Count" extension (amask bit 1). */ -#define AXP_OPCODE_MAX 0x0400 /* Multimedia extension (amask bit 8). */ - -#define AXP_OPCODE_NOPAL (~(AXP_OPCODE_EV4|AXP_OPCODE_EV5|AXP_OPCODE_EV6)) - -/* A macro to extract the major opcode from an instruction. */ -#define AXP_OP(i) (((i) >> 26) & 0x3F) - -/* The total number of major opcodes. */ -#define AXP_NOPS 0x40 - - -/* The operands table is an array of struct alpha_operand. */ - -struct alpha_operand -{ - /* The number of bits in the operand. */ - unsigned int bits : 5; - - /* How far the operand is left shifted in the instruction. */ - unsigned int shift : 5; - - /* The default relocation type for this operand. */ - signed int default_reloc : 16; - - /* One bit syntax flags. */ - unsigned int flags : 16; - - /* Insertion function. This is used by the assembler. To insert an - operand value into an instruction, check this field. - - If it is NULL, execute - i |= (op & ((1 << o->bits) - 1)) << o->shift; - (i is the instruction which we are filling in, o is a pointer to - this structure, and op is the opcode value; this assumes twos - complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction and the operand value. It will return the new value - of the instruction. If the ERRMSG argument is not NULL, then if - the operand value is illegal, *ERRMSG will be set to a warning - string (the operand will be inserted in any case). If the - operand value is legal, *ERRMSG will be unchanged (most operands - can accept any value). */ - unsigned (*insert) (unsigned instruction, int op, const char **errmsg); - - /* Extraction function. This is used by the disassembler. To - extract this operand type from an instruction, check this field. - - If it is NULL, compute - op = ((i) >> o->shift) & ((1 << o->bits) - 1); - if ((o->flags & AXP_OPERAND_SIGNED) != 0 - && (op & (1 << (o->bits - 1))) != 0) - op -= 1 << o->bits; - (i is the instruction, o is a pointer to this structure, and op - is the result; this assumes twos complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction value. It will return the value of the operand. If - the INVALID argument is not NULL, *INVALID will be set to - non-zero if this operand type can not actually be extracted from - this operand (i.e., the instruction does not match). If the - operand is valid, *INVALID will not be changed. */ - int (*extract) (unsigned instruction, int *invalid); -}; - -/* Elements in the table are retrieved by indexing with values from - the operands field of the alpha_opcodes table. */ - -extern const struct alpha_operand alpha_operands[]; -extern const unsigned alpha_num_operands; - -/* Values defined for the flags field of a struct alpha_operand. */ - -/* Mask for selecting the type for typecheck purposes */ -#define AXP_OPERAND_TYPECHECK_MASK \ - (AXP_OPERAND_PARENS | AXP_OPERAND_COMMA | AXP_OPERAND_IR | \ - AXP_OPERAND_FPR | AXP_OPERAND_RELATIVE | AXP_OPERAND_SIGNED | \ - AXP_OPERAND_UNSIGNED) - -/* This operand does not actually exist in the assembler input. This - is used to support extended mnemonics, for which two operands fields - are identical. The assembler should call the insert function with - any op value. The disassembler should call the extract function, - ignore the return value, and check the value placed in the invalid - argument. */ -#define AXP_OPERAND_FAKE 01 - -/* The operand should be wrapped in parentheses rather than separated - from the previous by a comma. This is used for the load and store - instructions which want their operands to look like "Ra,disp(Rb)". */ -#define AXP_OPERAND_PARENS 02 - -/* Used in combination with PARENS, this supresses the supression of - the comma. This is used for "jmp Ra,(Rb),hint". */ -#define AXP_OPERAND_COMMA 04 - -/* This operand names an integer register. */ -#define AXP_OPERAND_IR 010 - -/* This operand names a floating point register. */ -#define AXP_OPERAND_FPR 020 - -/* This operand is a relative branch displacement. The disassembler - prints these symbolically if possible. */ -#define AXP_OPERAND_RELATIVE 040 - -/* This operand takes signed values. */ -#define AXP_OPERAND_SIGNED 0100 - -/* This operand takes unsigned values. This exists primarily so that - a flags value of 0 can be treated as end-of-arguments. */ -#define AXP_OPERAND_UNSIGNED 0200 - -/* Supress overflow detection on this field. This is used for hints. */ -#define AXP_OPERAND_NOOVERFLOW 0400 - -/* Mask for optional argument default value. */ -#define AXP_OPERAND_OPTIONAL_MASK 07000 - -/* This operand defaults to zero. This is used for jump hints. */ -#define AXP_OPERAND_DEFAULT_ZERO 01000 - -/* This operand should default to the first (real) operand and is used - in conjunction with AXP_OPERAND_OPTIONAL. This allows - "and $0,3,$0" to be written as "and $0,3", etc. I don't like - it, but it's what DEC does. */ -#define AXP_OPERAND_DEFAULT_FIRST 02000 - -/* Similarly, this operand should default to the second (real) operand. - This allows "negl $0" instead of "negl $0,$0". */ -#define AXP_OPERAND_DEFAULT_SECOND 04000 - - -/* Register common names */ - -#define AXP_REG_V0 0 -#define AXP_REG_T0 1 -#define AXP_REG_T1 2 -#define AXP_REG_T2 3 -#define AXP_REG_T3 4 -#define AXP_REG_T4 5 -#define AXP_REG_T5 6 -#define AXP_REG_T6 7 -#define AXP_REG_T7 8 -#define AXP_REG_S0 9 -#define AXP_REG_S1 10 -#define AXP_REG_S2 11 -#define AXP_REG_S3 12 -#define AXP_REG_S4 13 -#define AXP_REG_S5 14 -#define AXP_REG_FP 15 -#define AXP_REG_A0 16 -#define AXP_REG_A1 17 -#define AXP_REG_A2 18 -#define AXP_REG_A3 19 -#define AXP_REG_A4 20 -#define AXP_REG_A5 21 -#define AXP_REG_T8 22 -#define AXP_REG_T9 23 -#define AXP_REG_T10 24 -#define AXP_REG_T11 25 -#define AXP_REG_RA 26 -#define AXP_REG_PV 27 -#define AXP_REG_T12 27 -#define AXP_REG_AT 28 -#define AXP_REG_GP 29 -#define AXP_REG_SP 30 -#define AXP_REG_ZERO 31 - -#endif /* OPCODE_ALPHA_H */ diff --git a/include/opcode/arc.h b/include/opcode/arc.h deleted file mode 100644 index 8ddcf5433a4..00000000000 --- a/include/opcode/arc.h +++ /dev/null @@ -1,323 +0,0 @@ -/* Opcode table for the ARC. - Copyright 1994, 1995, 1997, 2001, 2002, 2003 - Free Software Foundation, Inc. - Contributed by Doug Evans (dje@cygnus.com). - - This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and - the GNU Binutils. - - GAS/GDB 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, or (at your option) - any later version. - - GAS/GDB 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 GAS or GDB; see the file COPYING. If not, write to - the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - - -/* List of the various cpu types. - The tables currently use bit masks to say whether the instruction or - whatever is supported by a particular cpu. This lets us have one entry - apply to several cpus. - - The `base' cpu must be 0. The cpu type is treated independently of - endianness. The complete `mach' number includes endianness. - These values are internal to opcodes/bfd/binutils/gas. */ -#define ARC_MACH_5 0 -#define ARC_MACH_6 1 -#define ARC_MACH_7 2 -#define ARC_MACH_8 4 - -/* Additional cpu values can be inserted here and ARC_MACH_BIG moved down. */ -#define ARC_MACH_BIG 16 - -/* Mask of number of bits necessary to record cpu type. */ -#define ARC_MACH_CPU_MASK (ARC_MACH_BIG - 1) - -/* Mask of number of bits necessary to record cpu type + endianness. */ -#define ARC_MACH_MASK ((ARC_MACH_BIG << 1) - 1) - -/* Type to denote an ARC instruction (at least a 32 bit unsigned int). */ - -typedef unsigned int arc_insn; - -struct arc_opcode { - char *syntax; /* syntax of insn */ - unsigned long mask, value; /* recognize insn if (op&mask) == value */ - int flags; /* various flag bits */ - -/* Values for `flags'. */ - -/* Return CPU number, given flag bits. */ -#define ARC_OPCODE_CPU(bits) ((bits) & ARC_MACH_CPU_MASK) - -/* Return MACH number, given flag bits. */ -#define ARC_OPCODE_MACH(bits) ((bits) & ARC_MACH_MASK) - -/* First opcode flag bit available after machine mask. */ -#define ARC_OPCODE_FLAG_START (ARC_MACH_MASK + 1) - -/* This insn is a conditional branch. */ -#define ARC_OPCODE_COND_BRANCH (ARC_OPCODE_FLAG_START) -#define SYNTAX_3OP (ARC_OPCODE_COND_BRANCH << 1) -#define SYNTAX_LENGTH (SYNTAX_3OP ) -#define SYNTAX_2OP (SYNTAX_3OP << 1) -#define OP1_MUST_BE_IMM (SYNTAX_2OP << 1) -#define OP1_IMM_IMPLIED (OP1_MUST_BE_IMM << 1) -#define SYNTAX_VALID (OP1_IMM_IMPLIED << 1) - -#define I(x) (((x) & 31) << 27) -#define A(x) (((x) & ARC_MASK_REG) << ARC_SHIFT_REGA) -#define B(x) (((x) & ARC_MASK_REG) << ARC_SHIFT_REGB) -#define C(x) (((x) & ARC_MASK_REG) << ARC_SHIFT_REGC) -#define R(x,b,m) (((x) & (m)) << (b)) /* value X, mask M, at bit B */ - -/* These values are used to optimize assembly and disassembly. Each insn - is on a list of related insns (same first letter for assembly, same - insn code for disassembly). */ - - struct arc_opcode *next_asm; /* Next instr to try during assembly. */ - struct arc_opcode *next_dis; /* Next instr to try during disassembly. */ - -/* Macros to create the hash values for the lists. */ -#define ARC_HASH_OPCODE(string) \ - ((string)[0] >= 'a' && (string)[0] <= 'z' ? (string)[0] - 'a' : 26) -#define ARC_HASH_ICODE(insn) \ - ((unsigned int) (insn) >> 27) - - /* Macros to access `next_asm', `next_dis' so users needn't care about the - underlying mechanism. */ -#define ARC_OPCODE_NEXT_ASM(op) ((op)->next_asm) -#define ARC_OPCODE_NEXT_DIS(op) ((op)->next_dis) -}; - -/* this is an "insert at front" linked list per Metaware spec - that new definitions override older ones. */ -extern struct arc_opcode *arc_ext_opcodes; - -struct arc_operand_value { - char *name; /* eg: "eq" */ - short value; /* eg: 1 */ - unsigned char type; /* index into `arc_operands' */ - unsigned char flags; /* various flag bits */ - -/* Values for `flags'. */ - -/* Return CPU number, given flag bits. */ -#define ARC_OPVAL_CPU(bits) ((bits) & ARC_MACH_CPU_MASK) -/* Return MACH number, given flag bits. */ -#define ARC_OPVAL_MACH(bits) ((bits) & ARC_MACH_MASK) -}; - -struct arc_ext_operand_value { - struct arc_ext_operand_value *next; - struct arc_operand_value operand; -}; - -extern struct arc_ext_operand_value *arc_ext_operands; - -struct arc_operand { -/* One of the insn format chars. */ - unsigned char fmt; - -/* The number of bits in the operand (may be unused for a modifier). */ - unsigned char bits; - -/* How far the operand is left shifted in the instruction, or - the modifier's flag bit (may be unused for a modifier. */ - unsigned char shift; - -/* Various flag bits. */ - int flags; - -/* Values for `flags'. */ - -/* This operand is a suffix to the opcode. */ -#define ARC_OPERAND_SUFFIX 1 - -/* This operand is a relative branch displacement. The disassembler - prints these symbolically if possible. */ -#define ARC_OPERAND_RELATIVE_BRANCH 2 - -/* This operand is an absolute branch address. The disassembler - prints these symbolically if possible. */ -#define ARC_OPERAND_ABSOLUTE_BRANCH 4 - -/* This operand is an address. The disassembler - prints these symbolically if possible. */ -#define ARC_OPERAND_ADDRESS 8 - -/* This operand is a long immediate value. */ -#define ARC_OPERAND_LIMM 0x10 - -/* This operand takes signed values. */ -#define ARC_OPERAND_SIGNED 0x20 - -/* This operand takes signed values, but also accepts a full positive - range of values. That is, if bits is 16, it takes any value from - -0x8000 to 0xffff. */ -#define ARC_OPERAND_SIGNOPT 0x40 - -/* This operand should be regarded as a negative number for the - purposes of overflow checking (i.e., the normal most negative - number is disallowed and one more than the normal most positive - number is allowed). This flag will only be set for a signed - operand. */ -#define ARC_OPERAND_NEGATIVE 0x80 - -/* This operand doesn't really exist. The program uses these operands - in special ways. */ -#define ARC_OPERAND_FAKE 0x100 - -/* separate flags operand for j and jl instructions */ -#define ARC_OPERAND_JUMPFLAGS 0x200 - -/* allow warnings and errors to be issued after call to insert_xxxxxx */ -#define ARC_OPERAND_WARN 0x400 -#define ARC_OPERAND_ERROR 0x800 - -/* this is a load operand */ -#define ARC_OPERAND_LOAD 0x8000 - -/* this is a store operand */ -#define ARC_OPERAND_STORE 0x10000 - -/* Modifier values. */ -/* A dot is required before a suffix. Eg: .le */ -#define ARC_MOD_DOT 0x1000 - -/* A normal register is allowed (not used, but here for completeness). */ -#define ARC_MOD_REG 0x2000 - -/* An auxiliary register name is expected. */ -#define ARC_MOD_AUXREG 0x4000 - -/* Sum of all ARC_MOD_XXX bits. */ -#define ARC_MOD_BITS 0x7000 - -/* Non-zero if the operand type is really a modifier. */ -#define ARC_MOD_P(X) ((X) & ARC_MOD_BITS) - -/* enforce read/write only register restrictions */ -#define ARC_REGISTER_READONLY 0x01 -#define ARC_REGISTER_WRITEONLY 0x02 -#define ARC_REGISTER_NOSHORT_CUT 0x04 - -/* Insertion function. This is used by the assembler. To insert an - operand value into an instruction, check this field. - - If it is NULL, execute - i |= (p & ((1 << o->bits) - 1)) << o->shift; - (I is the instruction which we are filling in, O is a pointer to - this structure, and OP is the opcode value; this assumes twos - complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction and the operand value. It will return the new value - of the instruction. If the ERRMSG argument is not NULL, then if - the operand value is illegal, *ERRMSG will be set to a warning - string (the operand will be inserted in any case). If the - operand value is legal, *ERRMSG will be unchanged. - - REG is non-NULL when inserting a register value. */ - - arc_insn (*insert) - (arc_insn insn, const struct arc_operand *operand, int mods, - const struct arc_operand_value *reg, long value, const char **errmsg); - -/* Extraction function. This is used by the disassembler. To - extract this operand type from an instruction, check this field. - - If it is NULL, compute - op = ((i) >> o->shift) & ((1 << o->bits) - 1); - if ((o->flags & ARC_OPERAND_SIGNED) != 0 - && (op & (1 << (o->bits - 1))) != 0) - op -= 1 << o->bits; - (I is the instruction, O is a pointer to this structure, and OP - is the result; this assumes twos complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction value. It will return the value of the operand. If - the INVALID argument is not NULL, *INVALID will be set to - non-zero if this operand type can not actually be extracted from - this operand (i.e., the instruction does not match). If the - operand is valid, *INVALID will not be changed. - - INSN is a pointer to an array of two `arc_insn's. The first element is - the insn, the second is the limm if present. - - Operands that have a printable form like registers and suffixes have - their struct arc_operand_value pointer stored in OPVAL. */ - - long (*extract) - (arc_insn *insn, const struct arc_operand *operand, int mods, - const struct arc_operand_value **opval, int *invalid); -}; - -/* Bits that say what version of cpu we have. These should be passed to - arc_init_opcode_tables. At present, all there is is the cpu type. */ - -/* CPU number, given value passed to `arc_init_opcode_tables'. */ -#define ARC_HAVE_CPU(bits) ((bits) & ARC_MACH_CPU_MASK) -/* MACH number, given value passed to `arc_init_opcode_tables'. */ -#define ARC_HAVE_MACH(bits) ((bits) & ARC_MACH_MASK) - -/* Special register values: */ -#define ARC_REG_SHIMM_UPDATE 61 -#define ARC_REG_SHIMM 63 -#define ARC_REG_LIMM 62 - -/* Non-zero if REG is a constant marker. */ -#define ARC_REG_CONSTANT_P(REG) ((REG) >= 61) - -/* Positions and masks of various fields: */ -#define ARC_SHIFT_REGA 21 -#define ARC_SHIFT_REGB 15 -#define ARC_SHIFT_REGC 9 -#define ARC_MASK_REG 63 - -/* Delay slot types. */ -#define ARC_DELAY_NONE 0 /* no delay slot */ -#define ARC_DELAY_NORMAL 1 /* delay slot in both cases */ -#define ARC_DELAY_JUMP 2 /* delay slot only if branch taken */ - -/* Non-zero if X will fit in a signed 9 bit field. */ -#define ARC_SHIMM_CONST_P(x) ((long) (x) >= -256 && (long) (x) <= 255) - -extern const struct arc_operand arc_operands[]; -extern const int arc_operand_count; -extern struct arc_opcode arc_opcodes[]; -extern const int arc_opcodes_count; -extern const struct arc_operand_value arc_suffixes[]; -extern const int arc_suffixes_count; -extern const struct arc_operand_value arc_reg_names[]; -extern const int arc_reg_names_count; -extern unsigned char arc_operand_map[]; - -/* Utility fns in arc-opc.c. */ -int arc_get_opcode_mach (int, int); - -/* `arc_opcode_init_tables' must be called before `arc_xxx_supported'. */ -void arc_opcode_init_tables (int); -void arc_opcode_init_insert (void); -void arc_opcode_init_extract (void); -const struct arc_opcode *arc_opcode_lookup_asm (const char *); -const struct arc_opcode *arc_opcode_lookup_dis (unsigned int); -int arc_opcode_limm_p (long *); -const struct arc_operand_value *arc_opcode_lookup_suffix - (const struct arc_operand *type, int value); -int arc_opcode_supported (const struct arc_opcode *); -int arc_opval_supported (const struct arc_operand_value *); -int arc_limm_fixup_adjust (arc_insn); -int arc_insn_is_j (arc_insn); -int arc_insn_not_jl (arc_insn); -int arc_operand_type (int); -struct arc_operand_value *get_ext_suffix (char *); -int arc_get_noshortcut_flag (void); diff --git a/include/opcode/arm.h b/include/opcode/arm.h deleted file mode 100644 index f142fca9a5c..00000000000 --- a/include/opcode/arm.h +++ /dev/null @@ -1,194 +0,0 @@ -/* ARM assembler/disassembler support. - Copyright 2004 Free Software Foundation, Inc. - - This file is part of GDB and GAS. - - GDB and GAS are 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 1, or (at - your option) any later version. - - GDB and GAS are 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 GDB or GAS; see the file COPYING. If not, write to the - Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA - 02110-1301, USA. */ - -/* The following bitmasks control CPU extensions: */ -#define ARM_EXT_V1 0x00000001 /* All processors (core set). */ -#define ARM_EXT_V2 0x00000002 /* Multiply instructions. */ -#define ARM_EXT_V2S 0x00000004 /* SWP instructions. */ -#define ARM_EXT_V3 0x00000008 /* MSR MRS. */ -#define ARM_EXT_V3M 0x00000010 /* Allow long multiplies. */ -#define ARM_EXT_V4 0x00000020 /* Allow half word loads. */ -#define ARM_EXT_V4T 0x00000040 /* Thumb. */ -#define ARM_EXT_V5 0x00000080 /* Allow CLZ, etc. */ -#define ARM_EXT_V5T 0x00000100 /* Improved interworking. */ -#define ARM_EXT_V5ExP 0x00000200 /* DSP core set. */ -#define ARM_EXT_V5E 0x00000400 /* DSP Double transfers. */ -#define ARM_EXT_V5J 0x00000800 /* Jazelle extension. */ -#define ARM_EXT_V6 0x00001000 /* ARM V6. */ -#define ARM_EXT_V6K 0x00002000 /* ARM V6K. */ -#define ARM_EXT_V6Z 0x00004000 /* ARM V6Z. */ -#define ARM_EXT_V6T2 0x00008000 /* Thumb-2. */ -#define ARM_EXT_DIV 0x00010000 /* Integer division. */ -/* The 'M' in Arm V7M stands for Microcontroller. - On earlier architecture variants it stands for Multiply. */ -#define ARM_EXT_V5E_NOTM 0x00020000 /* Arm V5E but not Arm V7M. */ -#define ARM_EXT_V6_NOTM 0x00040000 /* Arm V6 but not Arm V7M. */ -#define ARM_EXT_V7 0x00080000 /* Arm V7. */ -#define ARM_EXT_V7A 0x00100000 /* Arm V7A. */ -#define ARM_EXT_V7R 0x00200000 /* Arm V7R. */ -#define ARM_EXT_V7M 0x00400000 /* Arm V7M. */ - -/* Co-processor space extensions. */ -#define ARM_CEXT_XSCALE 0x00000001 /* Allow MIA etc. */ -#define ARM_CEXT_MAVERICK 0x00000002 /* Use Cirrus/DSP coprocessor. */ -#define ARM_CEXT_IWMMXT 0x00000004 /* Intel Wireless MMX technology coprocessor. */ - -#define FPU_ENDIAN_PURE 0x80000000 /* Pure-endian doubles. */ -#define FPU_ENDIAN_BIG 0 /* Double words-big-endian. */ -#define FPU_FPA_EXT_V1 0x40000000 /* Base FPA instruction set. */ -#define FPU_FPA_EXT_V2 0x20000000 /* LFM/SFM. */ -#define FPU_MAVERICK 0x10000000 /* Cirrus Maverick. */ -#define FPU_VFP_EXT_V1xD 0x08000000 /* Base VFP instruction set. */ -#define FPU_VFP_EXT_V1 0x04000000 /* Double-precision insns. */ -#define FPU_VFP_EXT_V2 0x02000000 /* ARM10E VFPr1. */ -#define FPU_VFP_EXT_V3 0x01000000 /* VFPv3 insns. */ -#define FPU_NEON_EXT_V1 0x00800000 /* Neon (SIMD) insns. */ - -/* Architectures are the sum of the base and extensions. The ARM ARM (rev E) - defines the following: ARMv3, ARMv3M, ARMv4xM, ARMv4, ARMv4TxM, ARMv4T, - ARMv5xM, ARMv5, ARMv5TxM, ARMv5T, ARMv5TExP, ARMv5TE. To these we add - three more to cover cores prior to ARM6. Finally, there are cores which - implement further extensions in the co-processor space. */ -#define ARM_AEXT_V1 ARM_EXT_V1 -#define ARM_AEXT_V2 (ARM_AEXT_V1 | ARM_EXT_V2) -#define ARM_AEXT_V2S (ARM_AEXT_V2 | ARM_EXT_V2S) -#define ARM_AEXT_V3 (ARM_AEXT_V2S | ARM_EXT_V3) -#define ARM_AEXT_V3M (ARM_AEXT_V3 | ARM_EXT_V3M) -#define ARM_AEXT_V4xM (ARM_AEXT_V3 | ARM_EXT_V4) -#define ARM_AEXT_V4 (ARM_AEXT_V3M | ARM_EXT_V4) -#define ARM_AEXT_V4TxM (ARM_AEXT_V4xM | ARM_EXT_V4T) -#define ARM_AEXT_V4T (ARM_AEXT_V4 | ARM_EXT_V4T) -#define ARM_AEXT_V5xM (ARM_AEXT_V4xM | ARM_EXT_V5) -#define ARM_AEXT_V5 (ARM_AEXT_V4 | ARM_EXT_V5) -#define ARM_AEXT_V5TxM (ARM_AEXT_V5xM | ARM_EXT_V4T | ARM_EXT_V5T) -#define ARM_AEXT_V5T (ARM_AEXT_V5 | ARM_EXT_V4T | ARM_EXT_V5T) -#define ARM_AEXT_V5TExP (ARM_AEXT_V5T | ARM_EXT_V5ExP) -#define ARM_AEXT_V5TE (ARM_AEXT_V5TExP | ARM_EXT_V5E) -#define ARM_AEXT_V5TEJ (ARM_AEXT_V5TE | ARM_EXT_V5J) -#define ARM_AEXT_V6 (ARM_AEXT_V5TEJ | ARM_EXT_V6) -#define ARM_AEXT_V6K (ARM_AEXT_V6 | ARM_EXT_V6K) -#define ARM_AEXT_V6Z (ARM_AEXT_V6 | ARM_EXT_V6Z) -#define ARM_AEXT_V6ZK (ARM_AEXT_V6 | ARM_EXT_V6K | ARM_EXT_V6Z) -#define ARM_AEXT_V6T2 (ARM_AEXT_V6 | ARM_EXT_V6T2 | ARM_EXT_V6_NOTM) -#define ARM_AEXT_V6KT2 (ARM_AEXT_V6T2 | ARM_EXT_V6K) -#define ARM_AEXT_V6ZT2 (ARM_AEXT_V6T2 | ARM_EXT_V6Z) -#define ARM_AEXT_V6ZKT2 (ARM_AEXT_V6T2 | ARM_EXT_V6K | ARM_EXT_V6Z) -#define ARM_AEXT_V7_ARM (ARM_AEXT_V6ZKT2 | ARM_EXT_V7) -#define ARM_AEXT_V7A (ARM_AEXT_V7_ARM | ARM_EXT_V7A) -#define ARM_AEXT_V7R (ARM_AEXT_V7_ARM | ARM_EXT_V7R | ARM_EXT_DIV) -#define ARM_AEXT_NOTM \ - (ARM_AEXT_V4 | ARM_EXT_V5ExP | ARM_EXT_V5J | ARM_EXT_V6_NOTM) -#define ARM_AEXT_V7M \ - ((ARM_AEXT_V7_ARM | ARM_EXT_V7M | ARM_EXT_DIV) & ~(ARM_AEXT_NOTM)) -#define ARM_AEXT_V7 (ARM_AEXT_V7A & ARM_AEXT_V7R & ARM_AEXT_V7M) - -/* Processors with specific extensions in the co-processor space. */ -#define ARM_ARCH_XSCALE ARM_FEATURE (ARM_AEXT_V5TE, ARM_CEXT_XSCALE) -#define ARM_ARCH_IWMMXT \ - ARM_FEATURE (ARM_AEXT_V5TE, ARM_CEXT_XSCALE | ARM_CEXT_IWMMXT) - -#define FPU_VFP_V1xD (FPU_VFP_EXT_V1xD | FPU_ENDIAN_PURE) -#define FPU_VFP_V1 (FPU_VFP_V1xD | FPU_VFP_EXT_V1) -#define FPU_VFP_V2 (FPU_VFP_V1 | FPU_VFP_EXT_V2) -#define FPU_VFP_V3 (FPU_VFP_V2 | FPU_VFP_EXT_V3) -#define FPU_VFP_HARD (FPU_VFP_EXT_V1xD | FPU_VFP_EXT_V1 | FPU_VFP_EXT_V2 \ - | FPU_VFP_EXT_V3 | FPU_NEON_EXT_V1) -#define FPU_FPA (FPU_FPA_EXT_V1 | FPU_FPA_EXT_V2) - -/* Deprecated */ -#define FPU_ARCH_VFP ARM_FEATURE (0, FPU_ENDIAN_PURE) - -#define FPU_ARCH_FPE ARM_FEATURE (0, FPU_FPA_EXT_V1) -#define FPU_ARCH_FPA ARM_FEATURE (0, FPU_FPA) - -#define FPU_ARCH_VFP_V1xD ARM_FEATURE (0, FPU_VFP_V1xD) -#define FPU_ARCH_VFP_V1 ARM_FEATURE (0, FPU_VFP_V1) -#define FPU_ARCH_VFP_V2 ARM_FEATURE (0, FPU_VFP_V2) -#define FPU_ARCH_VFP_V3 ARM_FEATURE (0, FPU_VFP_V3) -#define FPU_ARCH_NEON_V1 ARM_FEATURE (0, FPU_NEON_EXT_V1) -#define FPU_ARCH_VFP_V3_PLUS_NEON_V1 \ - ARM_FEATURE (0, FPU_VFP_V3 | FPU_NEON_EXT_V1) -#define FPU_ARCH_VFP_HARD ARM_FEATURE (0, FPU_VFP_HARD) - -#define FPU_ARCH_ENDIAN_PURE ARM_FEATURE (0, FPU_ENDIAN_PURE) - -#define FPU_ARCH_MAVERICK ARM_FEATURE (0, FPU_MAVERICK) - -#define ARM_ARCH_V1 ARM_FEATURE (ARM_AEXT_V1, 0) -#define ARM_ARCH_V2 ARM_FEATURE (ARM_AEXT_V2, 0) -#define ARM_ARCH_V2S ARM_FEATURE (ARM_AEXT_V2S, 0) -#define ARM_ARCH_V3 ARM_FEATURE (ARM_AEXT_V3, 0) -#define ARM_ARCH_V3M ARM_FEATURE (ARM_AEXT_V3M, 0) -#define ARM_ARCH_V4xM ARM_FEATURE (ARM_AEXT_V4xM, 0) -#define ARM_ARCH_V4 ARM_FEATURE (ARM_AEXT_V4, 0) -#define ARM_ARCH_V4TxM ARM_FEATURE (ARM_AEXT_V4TxM, 0) -#define ARM_ARCH_V4T ARM_FEATURE (ARM_AEXT_V4T, 0) -#define ARM_ARCH_V5xM ARM_FEATURE (ARM_AEXT_V5xM, 0) -#define ARM_ARCH_V5 ARM_FEATURE (ARM_AEXT_V5, 0) -#define ARM_ARCH_V5TxM ARM_FEATURE (ARM_AEXT_V5TxM, 0) -#define ARM_ARCH_V5T ARM_FEATURE (ARM_AEXT_V5T, 0) -#define ARM_ARCH_V5TExP ARM_FEATURE (ARM_AEXT_V5TExP, 0) -#define ARM_ARCH_V5TE ARM_FEATURE (ARM_AEXT_V5TE, 0) -#define ARM_ARCH_V5TEJ ARM_FEATURE (ARM_AEXT_V5TEJ, 0) -#define ARM_ARCH_V6 ARM_FEATURE (ARM_AEXT_V6, 0) -#define ARM_ARCH_V6K ARM_FEATURE (ARM_AEXT_V6K, 0) -#define ARM_ARCH_V6Z ARM_FEATURE (ARM_AEXT_V6Z, 0) -#define ARM_ARCH_V6ZK ARM_FEATURE (ARM_AEXT_V6ZK, 0) -#define ARM_ARCH_V6T2 ARM_FEATURE (ARM_AEXT_V6T2, 0) -#define ARM_ARCH_V6KT2 ARM_FEATURE (ARM_AEXT_V6KT2, 0) -#define ARM_ARCH_V6ZT2 ARM_FEATURE (ARM_AEXT_V6ZT2, 0) -#define ARM_ARCH_V6ZKT2 ARM_FEATURE (ARM_AEXT_V6ZKT2, 0) -#define ARM_ARCH_V7 ARM_FEATURE (ARM_AEXT_V7, 0) -#define ARM_ARCH_V7A ARM_FEATURE (ARM_AEXT_V7A, 0) -#define ARM_ARCH_V7R ARM_FEATURE (ARM_AEXT_V7R, 0) -#define ARM_ARCH_V7M ARM_FEATURE (ARM_AEXT_V7M, 0) - -/* Some useful combinations: */ -#define ARM_ARCH_NONE ARM_FEATURE (0, 0) -#define FPU_NONE ARM_FEATURE (0, 0) -#define ARM_ANY ARM_FEATURE (-1, 0) /* Any basic core. */ -#define FPU_ANY_HARD ARM_FEATURE (0, FPU_FPA | FPU_VFP_HARD | FPU_MAVERICK) -#define ARM_ARCH_THUMB2 ARM_FEATURE (ARM_EXT_V6T2 | ARM_EXT_V7 | ARM_EXT_V7A | ARM_EXT_V7R | ARM_EXT_V7M | ARM_EXT_DIV, 0) - -/* There are too many feature bits to fit in a single word, so use a - structure. For simplicity we put all core features in one word and - everything else in the other. */ -typedef struct -{ - unsigned long core; - unsigned long coproc; -} arm_feature_set; - -#define ARM_CPU_HAS_FEATURE(CPU,FEAT) \ - (((CPU).core & (FEAT).core) != 0 || ((CPU).coproc & (FEAT).coproc) != 0) - -#define ARM_MERGE_FEATURE_SETS(TARG,F1,F2) \ - do { \ - (TARG).core = (F1).core | (F2).core; \ - (TARG).coproc = (F1).coproc | (F2).coproc; \ - } while (0) - -#define ARM_CLEAR_FEATURE(TARG,F1,F2) \ - do { \ - (TARG).core = (F1).core &~ (F2).core; \ - (TARG).coproc = (F1).coproc &~ (F2).coproc; \ - } while (0) - -#define ARM_FEATURE(core, coproc) {(core), (coproc)} diff --git a/include/opcode/avr.h b/include/opcode/avr.h deleted file mode 100644 index 55bb1610345..00000000000 --- a/include/opcode/avr.h +++ /dev/null @@ -1,266 +0,0 @@ -/* Opcode table for the Atmel AVR micro controllers. - - Copyright 2000, 2001, 2004, 2006 Free Software Foundation, Inc. - Contributed by Denis Chertykov - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define AVR_ISA_1200 0x0001 /* In the beginning there was ... */ -#define AVR_ISA_LPM 0x0002 /* device has LPM */ -#define AVR_ISA_LPMX 0x0004 /* device has LPM Rd,Z[+] */ -#define AVR_ISA_SRAM 0x0008 /* device has SRAM (LD, ST, PUSH, POP, ...) */ -#define AVR_ISA_MEGA 0x0020 /* device has >8K program memory (JMP and CALL - supported, no 8K wrap on RJMP and RCALL) */ -#define AVR_ISA_MUL 0x0040 /* device has new core (MUL, FMUL, ...) */ -#define AVR_ISA_ELPM 0x0080 /* device has >64K program memory (ELPM) */ -#define AVR_ISA_ELPMX 0x0100 /* device has ELPM Rd,Z[+] */ -#define AVR_ISA_SPM 0x0200 /* device can program itself */ -#define AVR_ISA_BRK 0x0400 /* device has BREAK (on-chip debug) */ -#define AVR_ISA_EIND 0x0800 /* device has >128K program memory (none yet) */ -#define AVR_ISA_MOVW 0x1000 /* device has MOVW */ - -#define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM) -#define AVR_ISA_PWMx (AVR_ISA_M8 | AVR_ISA_BRK) -#define AVR_ISA_2xxx (AVR_ISA_TINY1 | AVR_ISA_SRAM) -#define AVR_ISA_TINY2 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX | \ - AVR_ISA_SPM | AVR_ISA_BRK) -#define AVR_ISA_M8 (AVR_ISA_2xxx | AVR_ISA_MUL | AVR_ISA_MOVW | \ - AVR_ISA_LPMX | AVR_ISA_SPM) -#define AVR_ISA_M603 (AVR_ISA_2xxx | AVR_ISA_MEGA) -#define AVR_ISA_M103 (AVR_ISA_M603 | AVR_ISA_ELPM) -#define AVR_ISA_M161 (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | \ - AVR_ISA_LPMX | AVR_ISA_SPM) -#define AVR_ISA_94K (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | AVR_ISA_LPMX) -#define AVR_ISA_M323 (AVR_ISA_M161 | AVR_ISA_BRK) -#define AVR_ISA_M128 (AVR_ISA_M323 | AVR_ISA_ELPM | AVR_ISA_ELPMX) - -#define AVR_ISA_ALL 0xFFFF - -#define REGISTER_P(x) ((x) == 'r' \ - || (x) == 'd' \ - || (x) == 'w' \ - || (x) == 'a' \ - || (x) == 'v') - -/* Undefined combination of operands - does the register - operand overlap with pre-decremented or post-incremented - pointer register (like ld r31,Z+)? */ -#define AVR_UNDEF_P(x) (((x) & 0xFFED) == 0x91E5 || \ - ((x) & 0xFDEF) == 0x91AD || ((x) & 0xFDEF) == 0x91AE || \ - ((x) & 0xFDEF) == 0x91C9 || ((x) & 0xFDEF) == 0x91CA || \ - ((x) & 0xFDEF) == 0x91E1 || ((x) & 0xFDEF) == 0x91E2) - -/* Is this a skip instruction {cpse,sbic,sbis,sbrc,sbrs}? */ -#define AVR_SKIP_P(x) (((x) & 0xFC00) == 0x1000 || \ - ((x) & 0xFD00) == 0x9900 || ((x) & 0xFC08) == 0xFC00) - -/* Is this `ldd r,b+0' or `std b+0,r' (b={Y,Z}, disassembled as - `ld r,b' or `st b,r' respectively - next opcode entry)? */ -#define AVR_DISP0_P(x) (((x) & 0xFC07) == 0x8000) - -/* constraint letters - r - any register - d - `ldi' register (r16-r31) - v - `movw' even register (r0, r2, ..., r28, r30) - a - `fmul' register (r16-r23) - w - `adiw' register (r24,r26,r28,r30) - e - pointer registers (X,Y,Z) - b - base pointer register and displacement ([YZ]+disp) - z - Z pointer register (for [e]lpm Rd,Z[+]) - M - immediate value from 0 to 255 - n - immediate value from 0 to 255 ( n = ~M ). Relocation impossible - s - immediate value from 0 to 7 - P - Port address value from 0 to 63. (in, out) - p - Port address value from 0 to 31. (cbi, sbi, sbic, sbis) - K - immediate value from 0 to 63 (used in `adiw', `sbiw') - i - immediate value - l - signed pc relative offset from -64 to 63 - L - signed pc relative offset from -2048 to 2047 - h - absolute code address (call, jmp) - S - immediate value from 0 to 7 (S = s << 4) - ? - use this opcode entry if no parameters, else use next opcode entry - - Order is important - some binary opcodes have more than one name, - the disassembler will only see the first match. - - Remaining undefined opcodes (1699 total - some of them might work - as normal instructions if not all of the bits are decoded): - - 0x0001...0x00ff (255) (known to be decoded as `nop' by the old core) - "100100xxxxxxx011" (128) 0x9[0-3][0-9a-f][3b] - "100100xxxxxx1000" (64) 0x9[0-3][0-9a-f]8 - "1001001xxxxx01xx" (128) 0x9[23][0-9a-f][4-7] - "1001010xxxxx0100" (32) 0x9[45][0-9a-f]4 - "1001010x001x1001" (4) 0x9[45][23]9 - "1001010x01xx1001" (8) 0x9[45][4-7]9 - "1001010x1xxx1001" (16) 0x9[45][8-9a-f]9 - "1001010xxxxx1011" (32) 0x9[45][0-9a-f]b - "10010101001x1000" (2) 0x95[23]8 - "1001010101xx1000" (4) 0x95[4-7]8 - "1001010110111000" (1) 0x95b8 - "1001010111111000" (1) 0x95f8 (`espm' removed in databook update) - "11111xxxxxxx1xxx" (1024) 0xf[8-9a-f][0-9a-f][8-9a-f] - */ - -AVR_INSN (clc, "", "1001010010001000", 1, AVR_ISA_1200, 0x9488) -AVR_INSN (clh, "", "1001010011011000", 1, AVR_ISA_1200, 0x94d8) -AVR_INSN (cli, "", "1001010011111000", 1, AVR_ISA_1200, 0x94f8) -AVR_INSN (cln, "", "1001010010101000", 1, AVR_ISA_1200, 0x94a8) -AVR_INSN (cls, "", "1001010011001000", 1, AVR_ISA_1200, 0x94c8) -AVR_INSN (clt, "", "1001010011101000", 1, AVR_ISA_1200, 0x94e8) -AVR_INSN (clv, "", "1001010010111000", 1, AVR_ISA_1200, 0x94b8) -AVR_INSN (clz, "", "1001010010011000", 1, AVR_ISA_1200, 0x9498) - -AVR_INSN (sec, "", "1001010000001000", 1, AVR_ISA_1200, 0x9408) -AVR_INSN (seh, "", "1001010001011000", 1, AVR_ISA_1200, 0x9458) -AVR_INSN (sei, "", "1001010001111000", 1, AVR_ISA_1200, 0x9478) -AVR_INSN (sen, "", "1001010000101000", 1, AVR_ISA_1200, 0x9428) -AVR_INSN (ses, "", "1001010001001000", 1, AVR_ISA_1200, 0x9448) -AVR_INSN (set, "", "1001010001101000", 1, AVR_ISA_1200, 0x9468) -AVR_INSN (sev, "", "1001010000111000", 1, AVR_ISA_1200, 0x9438) -AVR_INSN (sez, "", "1001010000011000", 1, AVR_ISA_1200, 0x9418) - - /* Same as {cl,se}[chinstvz] above. */ -AVR_INSN (bclr, "S", "100101001SSS1000", 1, AVR_ISA_1200, 0x9488) -AVR_INSN (bset, "S", "100101000SSS1000", 1, AVR_ISA_1200, 0x9408) - -AVR_INSN (icall,"", "1001010100001001", 1, AVR_ISA_2xxx, 0x9509) -AVR_INSN (ijmp, "", "1001010000001001", 1, AVR_ISA_2xxx, 0x9409) - -AVR_INSN (lpm, "?", "1001010111001000", 1, AVR_ISA_TINY1,0x95c8) -AVR_INSN (lpm, "r,z", "1001000ddddd010+", 1, AVR_ISA_LPMX, 0x9004) -AVR_INSN (elpm, "?", "1001010111011000", 1, AVR_ISA_ELPM, 0x95d8) -AVR_INSN (elpm, "r,z", "1001000ddddd011+", 1, AVR_ISA_ELPMX,0x9006) - -AVR_INSN (nop, "", "0000000000000000", 1, AVR_ISA_1200, 0x0000) -AVR_INSN (ret, "", "1001010100001000", 1, AVR_ISA_1200, 0x9508) -AVR_INSN (reti, "", "1001010100011000", 1, AVR_ISA_1200, 0x9518) -AVR_INSN (sleep,"", "1001010110001000", 1, AVR_ISA_1200, 0x9588) -AVR_INSN (break,"", "1001010110011000", 1, AVR_ISA_BRK, 0x9598) -AVR_INSN (wdr, "", "1001010110101000", 1, AVR_ISA_1200, 0x95a8) -AVR_INSN (spm, "", "1001010111101000", 1, AVR_ISA_SPM, 0x95e8) - -AVR_INSN (adc, "r,r", "000111rdddddrrrr", 1, AVR_ISA_1200, 0x1c00) -AVR_INSN (add, "r,r", "000011rdddddrrrr", 1, AVR_ISA_1200, 0x0c00) -AVR_INSN (and, "r,r", "001000rdddddrrrr", 1, AVR_ISA_1200, 0x2000) -AVR_INSN (cp, "r,r", "000101rdddddrrrr", 1, AVR_ISA_1200, 0x1400) -AVR_INSN (cpc, "r,r", "000001rdddddrrrr", 1, AVR_ISA_1200, 0x0400) -AVR_INSN (cpse, "r,r", "000100rdddddrrrr", 1, AVR_ISA_1200, 0x1000) -AVR_INSN (eor, "r,r", "001001rdddddrrrr", 1, AVR_ISA_1200, 0x2400) -AVR_INSN (mov, "r,r", "001011rdddddrrrr", 1, AVR_ISA_1200, 0x2c00) -AVR_INSN (mul, "r,r", "100111rdddddrrrr", 1, AVR_ISA_MUL, 0x9c00) -AVR_INSN (or, "r,r", "001010rdddddrrrr", 1, AVR_ISA_1200, 0x2800) -AVR_INSN (sbc, "r,r", "000010rdddddrrrr", 1, AVR_ISA_1200, 0x0800) -AVR_INSN (sub, "r,r", "000110rdddddrrrr", 1, AVR_ISA_1200, 0x1800) - - /* Shorthand for {eor,add,adc,and} r,r above. */ -AVR_INSN (clr, "r=r", "001001rdddddrrrr", 1, AVR_ISA_1200, 0x2400) -AVR_INSN (lsl, "r=r", "000011rdddddrrrr", 1, AVR_ISA_1200, 0x0c00) -AVR_INSN (rol, "r=r", "000111rdddddrrrr", 1, AVR_ISA_1200, 0x1c00) -AVR_INSN (tst, "r=r", "001000rdddddrrrr", 1, AVR_ISA_1200, 0x2000) - -AVR_INSN (andi, "d,M", "0111KKKKddddKKKK", 1, AVR_ISA_1200, 0x7000) - /*XXX special case*/ -AVR_INSN (cbr, "d,n", "0111KKKKddddKKKK", 1, AVR_ISA_1200, 0x7000) - -AVR_INSN (ldi, "d,M", "1110KKKKddddKKKK", 1, AVR_ISA_1200, 0xe000) -AVR_INSN (ser, "d", "11101111dddd1111", 1, AVR_ISA_1200, 0xef0f) - -AVR_INSN (ori, "d,M", "0110KKKKddddKKKK", 1, AVR_ISA_1200, 0x6000) -AVR_INSN (sbr, "d,M", "0110KKKKddddKKKK", 1, AVR_ISA_1200, 0x6000) - -AVR_INSN (cpi, "d,M", "0011KKKKddddKKKK", 1, AVR_ISA_1200, 0x3000) -AVR_INSN (sbci, "d,M", "0100KKKKddddKKKK", 1, AVR_ISA_1200, 0x4000) -AVR_INSN (subi, "d,M", "0101KKKKddddKKKK", 1, AVR_ISA_1200, 0x5000) - -AVR_INSN (sbrc, "r,s", "1111110rrrrr0sss", 1, AVR_ISA_1200, 0xfc00) -AVR_INSN (sbrs, "r,s", "1111111rrrrr0sss", 1, AVR_ISA_1200, 0xfe00) -AVR_INSN (bld, "r,s", "1111100ddddd0sss", 1, AVR_ISA_1200, 0xf800) -AVR_INSN (bst, "r,s", "1111101ddddd0sss", 1, AVR_ISA_1200, 0xfa00) - -AVR_INSN (in, "r,P", "10110PPdddddPPPP", 1, AVR_ISA_1200, 0xb000) -AVR_INSN (out, "P,r", "10111PPrrrrrPPPP", 1, AVR_ISA_1200, 0xb800) - -AVR_INSN (adiw, "w,K", "10010110KKddKKKK", 1, AVR_ISA_2xxx, 0x9600) -AVR_INSN (sbiw, "w,K", "10010111KKddKKKK", 1, AVR_ISA_2xxx, 0x9700) - -AVR_INSN (cbi, "p,s", "10011000pppppsss", 1, AVR_ISA_1200, 0x9800) -AVR_INSN (sbi, "p,s", "10011010pppppsss", 1, AVR_ISA_1200, 0x9a00) -AVR_INSN (sbic, "p,s", "10011001pppppsss", 1, AVR_ISA_1200, 0x9900) -AVR_INSN (sbis, "p,s", "10011011pppppsss", 1, AVR_ISA_1200, 0x9b00) - -AVR_INSN (brcc, "l", "111101lllllll000", 1, AVR_ISA_1200, 0xf400) -AVR_INSN (brcs, "l", "111100lllllll000", 1, AVR_ISA_1200, 0xf000) -AVR_INSN (breq, "l", "111100lllllll001", 1, AVR_ISA_1200, 0xf001) -AVR_INSN (brge, "l", "111101lllllll100", 1, AVR_ISA_1200, 0xf404) -AVR_INSN (brhc, "l", "111101lllllll101", 1, AVR_ISA_1200, 0xf405) -AVR_INSN (brhs, "l", "111100lllllll101", 1, AVR_ISA_1200, 0xf005) -AVR_INSN (brid, "l", "111101lllllll111", 1, AVR_ISA_1200, 0xf407) -AVR_INSN (brie, "l", "111100lllllll111", 1, AVR_ISA_1200, 0xf007) -AVR_INSN (brlo, "l", "111100lllllll000", 1, AVR_ISA_1200, 0xf000) -AVR_INSN (brlt, "l", "111100lllllll100", 1, AVR_ISA_1200, 0xf004) -AVR_INSN (brmi, "l", "111100lllllll010", 1, AVR_ISA_1200, 0xf002) -AVR_INSN (brne, "l", "111101lllllll001", 1, AVR_ISA_1200, 0xf401) -AVR_INSN (brpl, "l", "111101lllllll010", 1, AVR_ISA_1200, 0xf402) -AVR_INSN (brsh, "l", "111101lllllll000", 1, AVR_ISA_1200, 0xf400) -AVR_INSN (brtc, "l", "111101lllllll110", 1, AVR_ISA_1200, 0xf406) -AVR_INSN (brts, "l", "111100lllllll110", 1, AVR_ISA_1200, 0xf006) -AVR_INSN (brvc, "l", "111101lllllll011", 1, AVR_ISA_1200, 0xf403) -AVR_INSN (brvs, "l", "111100lllllll011", 1, AVR_ISA_1200, 0xf003) - - /* Same as br?? above. */ -AVR_INSN (brbc, "s,l", "111101lllllllsss", 1, AVR_ISA_1200, 0xf400) -AVR_INSN (brbs, "s,l", "111100lllllllsss", 1, AVR_ISA_1200, 0xf000) - -AVR_INSN (rcall, "L", "1101LLLLLLLLLLLL", 1, AVR_ISA_1200, 0xd000) -AVR_INSN (rjmp, "L", "1100LLLLLLLLLLLL", 1, AVR_ISA_1200, 0xc000) - -AVR_INSN (call, "h", "1001010hhhhh111h", 2, AVR_ISA_MEGA, 0x940e) -AVR_INSN (jmp, "h", "1001010hhhhh110h", 2, AVR_ISA_MEGA, 0x940c) - -AVR_INSN (asr, "r", "1001010rrrrr0101", 1, AVR_ISA_1200, 0x9405) -AVR_INSN (com, "r", "1001010rrrrr0000", 1, AVR_ISA_1200, 0x9400) -AVR_INSN (dec, "r", "1001010rrrrr1010", 1, AVR_ISA_1200, 0x940a) -AVR_INSN (inc, "r", "1001010rrrrr0011", 1, AVR_ISA_1200, 0x9403) -AVR_INSN (lsr, "r", "1001010rrrrr0110", 1, AVR_ISA_1200, 0x9406) -AVR_INSN (neg, "r", "1001010rrrrr0001", 1, AVR_ISA_1200, 0x9401) -AVR_INSN (pop, "r", "1001000rrrrr1111", 1, AVR_ISA_2xxx, 0x900f) -AVR_INSN (push, "r", "1001001rrrrr1111", 1, AVR_ISA_2xxx, 0x920f) -AVR_INSN (ror, "r", "1001010rrrrr0111", 1, AVR_ISA_1200, 0x9407) -AVR_INSN (swap, "r", "1001010rrrrr0010", 1, AVR_ISA_1200, 0x9402) - - /* Known to be decoded as `nop' by the old core. */ -AVR_INSN (movw, "v,v", "00000001ddddrrrr", 1, AVR_ISA_MOVW, 0x0100) -AVR_INSN (muls, "d,d", "00000010ddddrrrr", 1, AVR_ISA_MUL, 0x0200) -AVR_INSN (mulsu,"a,a", "000000110ddd0rrr", 1, AVR_ISA_MUL, 0x0300) -AVR_INSN (fmul, "a,a", "000000110ddd1rrr", 1, AVR_ISA_MUL, 0x0308) -AVR_INSN (fmuls,"a,a", "000000111ddd0rrr", 1, AVR_ISA_MUL, 0x0380) -AVR_INSN (fmulsu,"a,a","000000111ddd1rrr", 1, AVR_ISA_MUL, 0x0388) - -AVR_INSN (sts, "i,r", "1001001ddddd0000", 2, AVR_ISA_2xxx, 0x9200) -AVR_INSN (lds, "r,i", "1001000ddddd0000", 2, AVR_ISA_2xxx, 0x9000) - - /* Special case for b+0, `e' must be next entry after `b', - b={Y=1,Z=0}, ee={X=11,Y=10,Z=00}, !=1 if -e or e+ or X. */ -AVR_INSN (ldd, "r,b", "10o0oo0dddddbooo", 1, AVR_ISA_2xxx, 0x8000) -AVR_INSN (ld, "r,e", "100!000dddddee-+", 1, AVR_ISA_1200, 0x8000) -AVR_INSN (std, "b,r", "10o0oo1rrrrrbooo", 1, AVR_ISA_2xxx, 0x8200) -AVR_INSN (st, "e,r", "100!001rrrrree-+", 1, AVR_ISA_1200, 0x8200) - - /* These are for devices that don't exist yet - (>128K program memory, PC = EIND:Z). */ -AVR_INSN (eicall, "", "1001010100011001", 1, AVR_ISA_EIND, 0x9519) -AVR_INSN (eijmp, "", "1001010000011001", 1, AVR_ISA_EIND, 0x9419) - diff --git a/include/opcode/bfin.h b/include/opcode/bfin.h deleted file mode 100755 index 4466fdce7a4..00000000000 --- a/include/opcode/bfin.h +++ /dev/null @@ -1,1693 +0,0 @@ -/* bfin.h -- Header file for ADI Blackfin opcode table - Copyright 2005 Free Software Foundation, Inc. - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Common to all DSP32 instructions. */ -#define BIT_MULTI_INS 0x0800 - -/* This just sets the multi instruction bit of a DSP32 instruction. */ -#define SET_MULTI_INSTRUCTION_BIT(x) x->value |= BIT_MULTI_INS; - - -/* DSP instructions (32 bit) */ - -/* dsp32mac -+----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 0 | 0 |.M.| 0 | 0 |.mmod..........|.MM|.P.|.w1|.op1...| -|.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1......| -+----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned long opcode; - int bits_src1; - int mask_src1; - int bits_src0; - int mask_src0; - int bits_dst; - int mask_dst; - int bits_h10; - int mask_h10; - int bits_h00; - int mask_h00; - int bits_op0; - int mask_op0; - int bits_w0; - int mask_w0; - int bits_h11; - int mask_h11; - int bits_h01; - int mask_h01; - int bits_op1; - int mask_op1; - int bits_w1; - int mask_w1; - int bits_P; - int mask_P; - int bits_MM; - int mask_MM; - int bits_mmod; - int mask_mmod; - int bits_code2; - int mask_code2; - int bits_M; - int mask_M; - int bits_code; - int mask_code; -} DSP32Mac; - -#define DSP32Mac_opcode 0xc0000000 -#define DSP32Mac_src1_bits 0 -#define DSP32Mac_src1_mask 0x7 -#define DSP32Mac_src0_bits 3 -#define DSP32Mac_src0_mask 0x7 -#define DSP32Mac_dst_bits 6 -#define DSP32Mac_dst_mask 0x7 -#define DSP32Mac_h10_bits 9 -#define DSP32Mac_h10_mask 0x1 -#define DSP32Mac_h00_bits 10 -#define DSP32Mac_h00_mask 0x1 -#define DSP32Mac_op0_bits 11 -#define DSP32Mac_op0_mask 0x3 -#define DSP32Mac_w0_bits 13 -#define DSP32Mac_w0_mask 0x1 -#define DSP32Mac_h11_bits 14 -#define DSP32Mac_h11_mask 0x1 -#define DSP32Mac_h01_bits 15 -#define DSP32Mac_h01_mask 0x1 -#define DSP32Mac_op1_bits 16 -#define DSP32Mac_op1_mask 0x3 -#define DSP32Mac_w1_bits 18 -#define DSP32Mac_w1_mask 0x1 -#define DSP32Mac_p_bits 19 -#define DSP32Mac_p_mask 0x1 -#define DSP32Mac_MM_bits 20 -#define DSP32Mac_MM_mask 0x1 -#define DSP32Mac_mmod_bits 21 -#define DSP32Mac_mmod_mask 0xf -#define DSP32Mac_code2_bits 25 -#define DSP32Mac_code2_mask 0x3 -#define DSP32Mac_M_bits 27 -#define DSP32Mac_M_mask 0x1 -#define DSP32Mac_code_bits 28 -#define DSP32Mac_code_mask 0xf - -#define init_DSP32Mac \ -{ \ - DSP32Mac_opcode, \ - DSP32Mac_src1_bits, DSP32Mac_src1_mask, \ - DSP32Mac_src0_bits, DSP32Mac_src0_mask, \ - DSP32Mac_dst_bits, DSP32Mac_dst_mask, \ - DSP32Mac_h10_bits, DSP32Mac_h10_mask, \ - DSP32Mac_h00_bits, DSP32Mac_h00_mask, \ - DSP32Mac_op0_bits, DSP32Mac_op0_mask, \ - DSP32Mac_w0_bits, DSP32Mac_w0_mask, \ - DSP32Mac_h11_bits, DSP32Mac_h11_mask, \ - DSP32Mac_h01_bits, DSP32Mac_h01_mask, \ - DSP32Mac_op1_bits, DSP32Mac_op1_mask, \ - DSP32Mac_w1_bits, DSP32Mac_w1_mask, \ - DSP32Mac_p_bits, DSP32Mac_p_mask, \ - DSP32Mac_MM_bits, DSP32Mac_MM_mask, \ - DSP32Mac_mmod_bits, DSP32Mac_mmod_mask, \ - DSP32Mac_code2_bits, DSP32Mac_code2_mask, \ - DSP32Mac_M_bits, DSP32Mac_M_mask, \ - DSP32Mac_code_bits, DSP32Mac_code_mask \ -}; - -/* dsp32mult -+----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 0 | 0 |.M.| 0 | 1 |.mmod..........|.MM|.P.|.w1|.op1...| -|.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1......| -+----+----+---+---|---+----+----+---|---+---+---+---|---+---+---+---+ -*/ - -typedef DSP32Mac DSP32Mult; -#define DSP32Mult_opcode 0xc2000000 - -#define init_DSP32Mult \ -{ \ - DSP32Mult_opcode, \ - DSP32Mac_src1_bits, DSP32Mac_src1_mask, \ - DSP32Mac_src0_bits, DSP32Mac_src0_mask, \ - DSP32Mac_dst_bits, DSP32Mac_dst_mask, \ - DSP32Mac_h10_bits, DSP32Mac_h10_mask, \ - DSP32Mac_h00_bits, DSP32Mac_h00_mask, \ - DSP32Mac_op0_bits, DSP32Mac_op0_mask, \ - DSP32Mac_w0_bits, DSP32Mac_w0_mask, \ - DSP32Mac_h11_bits, DSP32Mac_h11_mask, \ - DSP32Mac_h01_bits, DSP32Mac_h01_mask, \ - DSP32Mac_op1_bits, DSP32Mac_op1_mask, \ - DSP32Mac_w1_bits, DSP32Mac_w1_mask, \ - DSP32Mac_p_bits, DSP32Mac_p_mask, \ - DSP32Mac_MM_bits, DSP32Mac_MM_mask, \ - DSP32Mac_mmod_bits, DSP32Mac_mmod_mask, \ - DSP32Mac_code2_bits, DSP32Mac_code2_mask, \ - DSP32Mac_M_bits, DSP32Mac_M_mask, \ - DSP32Mac_code_bits, DSP32Mac_code_mask \ -}; - -/* dsp32alu -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 0 | 0 |.M.| 1 | 0 | - | - | - |.HL|.aopcde............| -|.aop...|.s.|.x.|.dst0......|.dst1......|.src0......|.src1......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned long opcode; - int bits_src1; - int mask_src1; - int bits_src0; - int mask_src0; - int bits_dst1; - int mask_dst1; - int bits_dst0; - int mask_dst0; - int bits_x; - int mask_x; - int bits_s; - int mask_s; - int bits_aop; - int mask_aop; - int bits_aopcde; - int mask_aopcde; - int bits_HL; - int mask_HL; - int bits_dontcare; - int mask_dontcare; - int bits_code2; - int mask_code2; - int bits_M; - int mask_M; - int bits_code; - int mask_code; -} DSP32Alu; - -#define DSP32Alu_opcode 0xc4000000 -#define DSP32Alu_src1_bits 0 -#define DSP32Alu_src1_mask 0x7 -#define DSP32Alu_src0_bits 3 -#define DSP32Alu_src0_mask 0x7 -#define DSP32Alu_dst1_bits 6 -#define DSP32Alu_dst1_mask 0x7 -#define DSP32Alu_dst0_bits 9 -#define DSP32Alu_dst0_mask 0x7 -#define DSP32Alu_x_bits 12 -#define DSP32Alu_x_mask 0x1 -#define DSP32Alu_s_bits 13 -#define DSP32Alu_s_mask 0x1 -#define DSP32Alu_aop_bits 14 -#define DSP32Alu_aop_mask 0x3 -#define DSP32Alu_aopcde_bits 16 -#define DSP32Alu_aopcde_mask 0x1f -#define DSP32Alu_HL_bits 21 -#define DSP32Alu_HL_mask 0x1 -#define DSP32Alu_dontcare_bits 22 -#define DSP32Alu_dontcare_mask 0x7 -#define DSP32Alu_code2_bits 25 -#define DSP32Alu_code2_mask 0x3 -#define DSP32Alu_M_bits 27 -#define DSP32Alu_M_mask 0x1 -#define DSP32Alu_code_bits 28 -#define DSP32Alu_code_mask 0xf - -#define init_DSP32Alu \ -{ \ - DSP32Alu_opcode, \ - DSP32Alu_src1_bits, DSP32Alu_src1_mask, \ - DSP32Alu_src0_bits, DSP32Alu_src0_mask, \ - DSP32Alu_dst1_bits, DSP32Alu_dst1_mask, \ - DSP32Alu_dst0_bits, DSP32Alu_dst0_mask, \ - DSP32Alu_x_bits, DSP32Alu_x_mask, \ - DSP32Alu_s_bits, DSP32Alu_s_mask, \ - DSP32Alu_aop_bits, DSP32Alu_aop_mask, \ - DSP32Alu_aopcde_bits, DSP32Alu_aopcde_mask, \ - DSP32Alu_HL_bits, DSP32Alu_HL_mask, \ - DSP32Alu_dontcare_bits, DSP32Alu_dontcare_mask, \ - DSP32Alu_code2_bits, DSP32Alu_code2_mask, \ - DSP32Alu_M_bits, DSP32Alu_M_mask, \ - DSP32Alu_code_bits, DSP32Alu_code_mask \ -}; - -/* dsp32shift -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 0 | - | - |.sopcde............| -|.sop...|.HLs...|.dst0......| - | - | - |.src0......|.src1......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned long opcode; - int bits_src1; - int mask_src1; - int bits_src0; - int mask_src0; - int bits_dst1; - int mask_dst1; - int bits_dst0; - int mask_dst0; - int bits_HLs; - int mask_HLs; - int bits_sop; - int mask_sop; - int bits_sopcde; - int mask_sopcde; - int bits_dontcare; - int mask_dontcare; - int bits_code2; - int mask_code2; - int bits_M; - int mask_M; - int bits_code; - int mask_code; -} DSP32Shift; - -#define DSP32Shift_opcode 0xc6000000 -#define DSP32Shift_src1_bits 0 -#define DSP32Shift_src1_mask 0x7 -#define DSP32Shift_src0_bits 3 -#define DSP32Shift_src0_mask 0x7 -#define DSP32Shift_dst1_bits 6 -#define DSP32Shift_dst1_mask 0x7 -#define DSP32Shift_dst0_bits 9 -#define DSP32Shift_dst0_mask 0x7 -#define DSP32Shift_HLs_bits 12 -#define DSP32Shift_HLs_mask 0x3 -#define DSP32Shift_sop_bits 14 -#define DSP32Shift_sop_mask 0x3 -#define DSP32Shift_sopcde_bits 16 -#define DSP32Shift_sopcde_mask 0x1f -#define DSP32Shift_dontcare_bits 21 -#define DSP32Shift_dontcare_mask 0x3 -#define DSP32Shift_code2_bits 23 -#define DSP32Shift_code2_mask 0xf -#define DSP32Shift_M_bits 27 -#define DSP32Shift_M_mask 0x1 -#define DSP32Shift_code_bits 28 -#define DSP32Shift_code_mask 0xf - -#define init_DSP32Shift \ -{ \ - DSP32Shift_opcode, \ - DSP32Shift_src1_bits, DSP32Shift_src1_mask, \ - DSP32Shift_src0_bits, DSP32Shift_src0_mask, \ - DSP32Shift_dst1_bits, DSP32Shift_dst1_mask, \ - DSP32Shift_dst0_bits, DSP32Shift_dst0_mask, \ - DSP32Shift_HLs_bits, DSP32Shift_HLs_mask, \ - DSP32Shift_sop_bits, DSP32Shift_sop_mask, \ - DSP32Shift_sopcde_bits, DSP32Shift_sopcde_mask, \ - DSP32Shift_dontcare_bits, DSP32Shift_dontcare_mask, \ - DSP32Shift_code2_bits, DSP32Shift_code2_mask, \ - DSP32Shift_M_bits, DSP32Shift_M_mask, \ - DSP32Shift_code_bits, DSP32Shift_code_mask \ -}; - -/* dsp32shiftimm -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 1 | - | - |.sopcde............| -|.sop...|.HLs...|.dst0......|.immag.................|.src1......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned long opcode; - int bits_src1; - int mask_src1; - int bits_immag; - int mask_immag; - int bits_dst0; - int mask_dst0; - int bits_HLs; - int mask_HLs; - int bits_sop; - int mask_sop; - int bits_sopcde; - int mask_sopcde; - int bits_dontcare; - int mask_dontcare; - int bits_code2; - int mask_code2; - int bits_M; - int mask_M; - int bits_code; - int mask_code; -} DSP32ShiftImm; - -#define DSP32ShiftImm_opcode 0xc6800000 -#define DSP32ShiftImm_src1_bits 0 -#define DSP32ShiftImm_src1_mask 0x7 -#define DSP32ShiftImm_immag_bits 3 -#define DSP32ShiftImm_immag_mask 0x3f -#define DSP32ShiftImm_dst0_bits 9 -#define DSP32ShiftImm_dst0_mask 0x7 -#define DSP32ShiftImm_HLs_bits 12 -#define DSP32ShiftImm_HLs_mask 0x3 -#define DSP32ShiftImm_sop_bits 14 -#define DSP32ShiftImm_sop_mask 0x3 -#define DSP32ShiftImm_sopcde_bits 16 -#define DSP32ShiftImm_sopcde_mask 0x1f -#define DSP32ShiftImm_dontcare_bits 21 -#define DSP32ShiftImm_dontcare_mask 0x3 -#define DSP32ShiftImm_code2_bits 23 -#define DSP32ShiftImm_code2_mask 0xf -#define DSP32ShiftImm_M_bits 27 -#define DSP32ShiftImm_M_mask 0x1 -#define DSP32ShiftImm_code_bits 28 -#define DSP32ShiftImm_code_mask 0xf - -#define init_DSP32ShiftImm \ -{ \ - DSP32ShiftImm_opcode, \ - DSP32ShiftImm_src1_bits, DSP32ShiftImm_src1_mask, \ - DSP32ShiftImm_immag_bits, DSP32ShiftImm_immag_mask, \ - DSP32ShiftImm_dst0_bits, DSP32ShiftImm_dst0_mask, \ - DSP32ShiftImm_HLs_bits, DSP32ShiftImm_HLs_mask, \ - DSP32ShiftImm_sop_bits, DSP32ShiftImm_sop_mask, \ - DSP32ShiftImm_sopcde_bits, DSP32ShiftImm_sopcde_mask, \ - DSP32ShiftImm_dontcare_bits, DSP32ShiftImm_dontcare_mask, \ - DSP32ShiftImm_code2_bits, DSP32ShiftImm_code2_mask, \ - DSP32ShiftImm_M_bits, DSP32ShiftImm_M_mask, \ - DSP32ShiftImm_code_bits, DSP32ShiftImm_code_mask \ -}; - -/* LOAD / STORE */ - -/* LDSTidxI -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 1 | 0 | 0 | 1 |.W.|.Z.|.sz....|.ptr.......|.reg.......| -|.offset........................................................| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned long opcode; - int bits_offset; - int mask_offset; - int bits_reg; - int mask_reg; - int bits_ptr; - int mask_ptr; - int bits_sz; - int mask_sz; - int bits_Z; - int mask_Z; - int bits_W; - int mask_W; - int bits_code; - int mask_code; -} LDSTidxI; - -#define LDSTidxI_opcode 0xe4000000 -#define LDSTidxI_offset_bits 0 -#define LDSTidxI_offset_mask 0xffff -#define LDSTidxI_reg_bits 16 -#define LDSTidxI_reg_mask 0x7 -#define LDSTidxI_ptr_bits 19 -#define LDSTidxI_ptr_mask 0x7 -#define LDSTidxI_sz_bits 22 -#define LDSTidxI_sz_mask 0x3 -#define LDSTidxI_Z_bits 24 -#define LDSTidxI_Z_mask 0x1 -#define LDSTidxI_W_bits 25 -#define LDSTidxI_W_mask 0x1 -#define LDSTidxI_code_bits 26 -#define LDSTidxI_code_mask 0x3f - -#define init_LDSTidxI \ -{ \ - LDSTidxI_opcode, \ - LDSTidxI_offset_bits, LDSTidxI_offset_mask, \ - LDSTidxI_reg_bits, LDSTidxI_reg_mask, \ - LDSTidxI_ptr_bits, LDSTidxI_ptr_mask, \ - LDSTidxI_sz_bits, LDSTidxI_sz_mask, \ - LDSTidxI_Z_bits, LDSTidxI_Z_mask, \ - LDSTidxI_W_bits, LDSTidxI_W_mask, \ - LDSTidxI_code_bits, LDSTidxI_code_mask \ -}; - - -/* LDST -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 0 | 0 | 1 |.sz....|.W.|.aop...|.Z.|.ptr.......|.reg.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_reg; - int mask_reg; - int bits_ptr; - int mask_ptr; - int bits_Z; - int mask_Z; - int bits_aop; - int mask_aop; - int bits_W; - int mask_W; - int bits_sz; - int mask_sz; - int bits_code; - int mask_code; -} LDST; - -#define LDST_opcode 0x9000 -#define LDST_reg_bits 0 -#define LDST_reg_mask 0x7 -#define LDST_ptr_bits 3 -#define LDST_ptr_mask 0x7 -#define LDST_Z_bits 6 -#define LDST_Z_mask 0x1 -#define LDST_aop_bits 7 -#define LDST_aop_mask 0x3 -#define LDST_W_bits 9 -#define LDST_W_mask 0x1 -#define LDST_sz_bits 10 -#define LDST_sz_mask 0x3 -#define LDST_code_bits 12 -#define LDST_code_mask 0xf - -#define init_LDST \ -{ \ - LDST_opcode, \ - LDST_reg_bits, LDST_reg_mask, \ - LDST_ptr_bits, LDST_ptr_mask, \ - LDST_Z_bits, LDST_Z_mask, \ - LDST_aop_bits, LDST_aop_mask, \ - LDST_W_bits, LDST_W_mask, \ - LDST_sz_bits, LDST_sz_mask, \ - LDST_code_bits, LDST_code_mask \ -}; - -/* LDSTii -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 0 | 1 |.W.|.op....|.offset........|.ptr.......|.reg.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_reg; - int mask_reg; - int bits_ptr; - int mask_ptr; - int bits_offset; - int mask_offset; - int bits_op; - int mask_op; - int bits_W; - int mask_W; - int bits_code; - int mask_code; -} LDSTii; - -#define LDSTii_opcode 0xa000 -#define LDSTii_reg_bit 0 -#define LDSTii_reg_mask 0x7 -#define LDSTii_ptr_bit 3 -#define LDSTii_ptr_mask 0x7 -#define LDSTii_offset_bit 6 -#define LDSTii_offset_mask 0xf -#define LDSTii_op_bit 10 -#define LDSTii_op_mask 0x3 -#define LDSTii_W_bit 12 -#define LDSTii_W_mask 0x1 -#define LDSTii_code_bit 13 -#define LDSTii_code_mask 0x7 - -#define init_LDSTii \ -{ \ - LDSTii_opcode, \ - LDSTii_reg_bit, LDSTii_reg_mask, \ - LDSTii_ptr_bit, LDSTii_ptr_mask, \ - LDSTii_offset_bit, LDSTii_offset_mask, \ - LDSTii_op_bit, LDSTii_op_mask, \ - LDSTii_W_bit, LDSTii_W_mask, \ - LDSTii_code_bit, LDSTii_code_mask \ -}; - - -/* LDSTiiFP -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 0 | 1 | 1 | 1 | 0 |.W.|.offset............|.reg...........| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_reg; - int mask_reg; - int bits_offset; - int mask_offset; - int bits_W; - int mask_W; - int bits_code; - int mask_code; -} LDSTiiFP; - -#define LDSTiiFP_opcode 0xb800 -#define LDSTiiFP_reg_bits 0 -#define LDSTiiFP_reg_mask 0xf -#define LDSTiiFP_offset_bits 4 -#define LDSTiiFP_offset_mask 0x1f -#define LDSTiiFP_W_bits 9 -#define LDSTiiFP_W_mask 0x1 -#define LDSTiiFP_code_bits 10 -#define LDSTiiFP_code_mask 0x3f - -#define init_LDSTiiFP \ -{ \ - LDSTiiFP_opcode, \ - LDSTiiFP_reg_bits, LDSTiiFP_reg_mask, \ - LDSTiiFP_offset_bits, LDSTiiFP_offset_mask, \ - LDSTiiFP_W_bits, LDSTiiFP_W_mask, \ - LDSTiiFP_code_bits, LDSTiiFP_code_mask \ -}; - -/* dspLDST -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 0 | 0 | 1 | 1 | 1 |.W.|.aop...|.m.....|.i.....|.reg.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_reg; - int mask_reg; - int bits_i; - int mask_i; - int bits_m; - int mask_m; - int bits_aop; - int mask_aop; - int bits_W; - int mask_W; - int bits_code; - int mask_code; -} DspLDST; - -#define DspLDST_opcode 0x9c00 -#define DspLDST_reg_bits 0 -#define DspLDST_reg_mask 0x7 -#define DspLDST_i_bits 3 -#define DspLDST_i_mask 0x3 -#define DspLDST_m_bits 5 -#define DspLDST_m_mask 0x3 -#define DspLDST_aop_bits 7 -#define DspLDST_aop_mask 0x3 -#define DspLDST_W_bits 9 -#define DspLDST_W_mask 0x1 -#define DspLDST_code_bits 10 -#define DspLDST_code_mask 0x3f - -#define init_DspLDST \ -{ \ - DspLDST_opcode, \ - DspLDST_reg_bits, DspLDST_reg_mask, \ - DspLDST_i_bits, DspLDST_i_mask, \ - DspLDST_m_bits, DspLDST_m_mask, \ - DspLDST_aop_bits, DspLDST_aop_mask, \ - DspLDST_W_bits, DspLDST_W_mask, \ - DspLDST_code_bits, DspLDST_code_mask \ -}; - - -/* LDSTpmod -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 0 | 0 | 0 |.W.|.aop...|.reg.......|.idx.......|.ptr.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_ptr; - int mask_ptr; - int bits_idx; - int mask_idx; - int bits_reg; - int mask_reg; - int bits_aop; - int mask_aop; - int bits_W; - int mask_W; - int bits_code; - int mask_code; -} LDSTpmod; - -#define LDSTpmod_opcode 0x8000 -#define LDSTpmod_ptr_bits 0 -#define LDSTpmod_ptr_mask 0x7 -#define LDSTpmod_idx_bits 3 -#define LDSTpmod_idx_mask 0x7 -#define LDSTpmod_reg_bits 6 -#define LDSTpmod_reg_mask 0x7 -#define LDSTpmod_aop_bits 9 -#define LDSTpmod_aop_mask 0x3 -#define LDSTpmod_W_bits 11 -#define LDSTpmod_W_mask 0x1 -#define LDSTpmod_code_bits 12 -#define LDSTpmod_code_mask 0xf - -#define init_LDSTpmod \ -{ \ - LDSTpmod_opcode, \ - LDSTpmod_ptr_bits, LDSTpmod_ptr_mask, \ - LDSTpmod_idx_bits, LDSTpmod_idx_mask, \ - LDSTpmod_reg_bits, LDSTpmod_reg_mask, \ - LDSTpmod_aop_bits, LDSTpmod_aop_mask, \ - LDSTpmod_W_bits, LDSTpmod_W_mask, \ - LDSTpmod_code_bits, LDSTpmod_code_mask \ -}; - - -/* LOGI2op -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 1 | 0 | 0 | 1 |.opc.......|.src...............|.dst.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_dst; - int mask_dst; - int bits_src; - int mask_src; - int bits_opc; - int mask_opc; - int bits_code; - int mask_code; -} LOGI2op; - -#define LOGI2op_opcode 0x4800 -#define LOGI2op_dst_bits 0 -#define LOGI2op_dst_mask 0x7 -#define LOGI2op_src_bits 3 -#define LOGI2op_src_mask 0x1f -#define LOGI2op_opc_bits 8 -#define LOGI2op_opc_mask 0x7 -#define LOGI2op_code_bits 11 -#define LOGI2op_code_mask 0x1f - -#define init_LOGI2op \ -{ \ - LOGI2op_opcode, \ - LOGI2op_dst_bits, LOGI2op_dst_mask, \ - LOGI2op_src_bits, LOGI2op_src_mask, \ - LOGI2op_opc_bits, LOGI2op_opc_mask, \ - LOGI2op_code_bits, LOGI2op_code_mask \ -}; - - -/* ALU2op -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 1 | 0 | 0 | 0 | 0 |.opc...........|.src.......|.dst.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_dst; - int mask_dst; - int bits_src; - int mask_src; - int bits_opc; - int mask_opc; - int bits_code; - int mask_code; -} ALU2op; - -#define ALU2op_opcode 0x4000 -#define ALU2op_dst_bits 0 -#define ALU2op_dst_mask 0x7 -#define ALU2op_src_bits 3 -#define ALU2op_src_mask 0x7 -#define ALU2op_opc_bits 6 -#define ALU2op_opc_mask 0xf -#define ALU2op_code_bits 10 -#define ALU2op_code_mask 0x3f - -#define init_ALU2op \ -{ \ - ALU2op_opcode, \ - ALU2op_dst_bits, ALU2op_dst_mask, \ - ALU2op_src_bits, ALU2op_src_mask, \ - ALU2op_opc_bits, ALU2op_opc_mask, \ - ALU2op_code_bits, ALU2op_code_mask \ -}; - - -/* BRCC -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 0 | 0 | 1 |.T.|.B.|.offset................................| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_offset; - int mask_offset; - int bits_B; - int mask_B; - int bits_T; - int mask_T; - int bits_code; - int mask_code; -} BRCC; - -#define BRCC_opcode 0x1000 -#define BRCC_offset_bits 0 -#define BRCC_offset_mask 0x3ff -#define BRCC_B_bits 10 -#define BRCC_B_mask 0x1 -#define BRCC_T_bits 11 -#define BRCC_T_mask 0x1 -#define BRCC_code_bits 12 -#define BRCC_code_mask 0xf - -#define init_BRCC \ -{ \ - BRCC_opcode, \ - BRCC_offset_bits, BRCC_offset_mask, \ - BRCC_B_bits, BRCC_B_mask, \ - BRCC_T_bits, BRCC_T_mask, \ - BRCC_code_bits, BRCC_code_mask \ -}; - - -/* UJUMP -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 0 | 1 | 0 |.offset........................................| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_offset; - int mask_offset; - int bits_code; - int mask_code; -} UJump; - -#define UJump_opcode 0x2000 -#define UJump_offset_bits 0 -#define UJump_offset_mask 0xfff -#define UJump_code_bits 12 -#define UJump_code_mask 0xf - -#define init_UJump \ -{ \ - UJump_opcode, \ - UJump_offset_bits, UJump_offset_mask, \ - UJump_code_bits, UJump_code_mask \ -}; - - -/* ProgCtrl -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |.prgfunc.......|.poprnd........| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_poprnd; - int mask_poprnd; - int bits_prgfunc; - int mask_prgfunc; - int bits_code; - int mask_code; -} ProgCtrl; - -#define ProgCtrl_opcode 0x0000 -#define ProgCtrl_poprnd_bits 0 -#define ProgCtrl_poprnd_mask 0xf -#define ProgCtrl_prgfunc_bits 4 -#define ProgCtrl_prgfunc_mask 0xf -#define ProgCtrl_code_bits 8 -#define ProgCtrl_code_mask 0xff - -#define init_ProgCtrl \ -{ \ - ProgCtrl_opcode, \ - ProgCtrl_poprnd_bits, ProgCtrl_poprnd_mask, \ - ProgCtrl_prgfunc_bits, ProgCtrl_prgfunc_mask, \ - ProgCtrl_code_bits, ProgCtrl_code_mask \ -}; - -/* CALLa -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 1 | 0 | 0 | 0 | 1 |.S.|.msw...........................| -|.lsw...........................................................| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - - -typedef struct -{ - unsigned long opcode; - int bits_addr; - int mask_addr; - int bits_S; - int mask_S; - int bits_code; - int mask_code; -} CALLa; - -#define CALLa_opcode 0xe2000000 -#define CALLa_addr_bits 0 -#define CALLa_addr_mask 0xffffff -#define CALLa_S_bits 24 -#define CALLa_S_mask 0x1 -#define CALLa_code_bits 25 -#define CALLa_code_mask 0x7f - -#define init_CALLa \ -{ \ - CALLa_opcode, \ - CALLa_addr_bits, CALLa_addr_mask, \ - CALLa_S_bits, CALLa_S_mask, \ - CALLa_code_bits, CALLa_code_mask \ -}; - - -/* pseudoDEBUG -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |.fn....|.grp.......|.reg.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_reg; - int mask_reg; - int bits_grp; - int mask_grp; - int bits_fn; - int mask_fn; - int bits_code; - int mask_code; -} PseudoDbg; - -#define PseudoDbg_opcode 0xf800 -#define PseudoDbg_reg_bits 0 -#define PseudoDbg_reg_mask 0x7 -#define PseudoDbg_grp_bits 3 -#define PseudoDbg_grp_mask 0x7 -#define PseudoDbg_fn_bits 6 -#define PseudoDbg_fn_mask 0x3 -#define PseudoDbg_code_bits 8 -#define PseudoDbg_code_mask 0xff - -#define init_PseudoDbg \ -{ \ - PseudoDbg_opcode, \ - PseudoDbg_reg_bits, PseudoDbg_reg_mask, \ - PseudoDbg_grp_bits, PseudoDbg_grp_mask, \ - PseudoDbg_fn_bits, PseudoDbg_fn_mask, \ - PseudoDbg_code_bits, PseudoDbg_code_mask \ -}; - -/* PseudoDbg_assert -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 1 | 1 | 0 | - | - | - | - | - |.dbgop.....|.regtest...| -|.expected......................................................| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned long opcode; - int bits_expected; - int mask_expected; - int bits_regtest; - int mask_regtest; - int bits_dbgop; - int mask_dbgop; - int bits_dontcare; - int mask_dontcare; - int bits_code; - int mask_code; -} PseudoDbg_Assert; - -#define PseudoDbg_Assert_opcode 0xf0000000 -#define PseudoDbg_Assert_expected_bits 0 -#define PseudoDbg_Assert_expected_mask 0xffff -#define PseudoDbg_Assert_regtest_bits 16 -#define PseudoDbg_Assert_regtest_mask 0x7 -#define PseudoDbg_Assert_dbgop_bits 19 -#define PseudoDbg_Assert_dbgop_mask 0x7 -#define PseudoDbg_Assert_dontcare_bits 22 -#define PseudoDbg_Assert_dontcare_mask 0x1f -#define PseudoDbg_Assert_code_bits 27 -#define PseudoDbg_Assert_code_mask 0x1f - -#define init_PseudoDbg_Assert \ -{ \ - PseudoDbg_Assert_opcode, \ - PseudoDbg_Assert_expected_bits, PseudoDbg_Assert_expected_mask, \ - PseudoDbg_Assert_regtest_bits, PseudoDbg_Assert_regtest_mask, \ - PseudoDbg_Assert_dbgop_bits, PseudoDbg_Assert_dbgop_mask, \ - PseudoDbg_Assert_dontcare_bits, PseudoDbg_Assert_dontcare_mask, \ - PseudoDbg_Assert_code_bits, PseudoDbg_Assert_code_mask \ -}; - -/* CaCTRL -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |.a.|.op....|.reg.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_reg; - int mask_reg; - int bits_op; - int mask_op; - int bits_a; - int mask_a; - int bits_code; - int mask_code; -} CaCTRL; - -#define CaCTRL_opcode 0x0240 -#define CaCTRL_reg_bits 0 -#define CaCTRL_reg_mask 0x7 -#define CaCTRL_op_bits 3 -#define CaCTRL_op_mask 0x3 -#define CaCTRL_a_bits 5 -#define CaCTRL_a_mask 0x1 -#define CaCTRL_code_bits 6 -#define CaCTRL_code_mask 0x3fff - -#define init_CaCTRL \ -{ \ - CaCTRL_opcode, \ - CaCTRL_reg_bits, CaCTRL_reg_mask, \ - CaCTRL_op_bits, CaCTRL_op_mask, \ - CaCTRL_a_bits, CaCTRL_a_mask, \ - CaCTRL_code_bits, CaCTRL_code_mask \ -}; - -/* PushPopMultiple -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 0 | 0 | 0 | 0 | 1 | 0 |.d.|.p.|.W.|.dr........|.pr........| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_pr; - int mask_pr; - int bits_dr; - int mask_dr; - int bits_W; - int mask_W; - int bits_p; - int mask_p; - int bits_d; - int mask_d; - int bits_code; - int mask_code; -} PushPopMultiple; - -#define PushPopMultiple_opcode 0x0400 -#define PushPopMultiple_pr_bits 0 -#define PushPopMultiple_pr_mask 0x7 -#define PushPopMultiple_dr_bits 3 -#define PushPopMultiple_dr_mask 0x7 -#define PushPopMultiple_W_bits 6 -#define PushPopMultiple_W_mask 0x1 -#define PushPopMultiple_p_bits 7 -#define PushPopMultiple_p_mask 0x1 -#define PushPopMultiple_d_bits 8 -#define PushPopMultiple_d_mask 0x1 -#define PushPopMultiple_code_bits 8 -#define PushPopMultiple_code_mask 0x1 - -#define init_PushPopMultiple \ -{ \ - PushPopMultiple_opcode, \ - PushPopMultiple_pr_bits, PushPopMultiple_pr_mask, \ - PushPopMultiple_dr_bits, PushPopMultiple_dr_mask, \ - PushPopMultiple_W_bits, PushPopMultiple_W_mask, \ - PushPopMultiple_p_bits, PushPopMultiple_p_mask, \ - PushPopMultiple_d_bits, PushPopMultiple_d_mask, \ - PushPopMultiple_code_bits, PushPopMultiple_code_mask \ -}; - -/* PushPopReg -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |.W.|.grp.......|.reg.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_reg; - int mask_reg; - int bits_grp; - int mask_grp; - int bits_W; - int mask_W; - int bits_code; - int mask_code; -} PushPopReg; - -#define PushPopReg_opcode 0x0100 -#define PushPopReg_reg_bits 0 -#define PushPopReg_reg_mask 0x7 -#define PushPopReg_grp_bits 3 -#define PushPopReg_grp_mask 0x7 -#define PushPopReg_W_bits 6 -#define PushPopReg_W_mask 0x1 -#define PushPopReg_code_bits 7 -#define PushPopReg_code_mask 0x1ff - -#define init_PushPopReg \ -{ \ - PushPopReg_opcode, \ - PushPopReg_reg_bits, PushPopReg_reg_mask, \ - PushPopReg_grp_bits, PushPopReg_grp_mask, \ - PushPopReg_W_bits, PushPopReg_W_mask, \ - PushPopReg_code_bits, PushPopReg_code_mask, \ -}; - -/* linkage -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |.R.| -|.framesize.....................................................| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned long opcode; - int bits_framesize; - int mask_framesize; - int bits_R; - int mask_R; - int bits_code; - int mask_code; -} Linkage; - -#define Linkage_opcode 0xe8000000 -#define Linkage_framesize_bits 0 -#define Linkage_framesize_mask 0xffff -#define Linkage_R_bits 16 -#define Linkage_R_mask 0x1 -#define Linkage_code_bits 17 -#define Linkage_code_mask 0x7fff - -#define init_Linkage \ -{ \ - Linkage_opcode, \ - Linkage_framesize_bits, Linkage_framesize_mask, \ - Linkage_R_bits, Linkage_R_mask, \ - Linkage_code_bits, Linkage_code_mask \ -}; - -/* LoopSetup -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |.rop...|.c.|.soffset.......| -|.reg...........| - | - |.eoffset...............................| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned long opcode; - int bits_eoffset; - int mask_eoffset; - int bits_dontcare; - int mask_dontcare; - int bits_reg; - int mask_reg; - int bits_soffset; - int mask_soffset; - int bits_c; - int mask_c; - int bits_rop; - int mask_rop; - int bits_code; - int mask_code; -} LoopSetup; - -#define LoopSetup_opcode 0xe0800000 -#define LoopSetup_eoffset_bits 0 -#define LoopSetup_eoffset_mask 0x3ff -#define LoopSetup_dontcare_bits 10 -#define LoopSetup_dontcare_mask 0x3 -#define LoopSetup_reg_bits 12 -#define LoopSetup_reg_mask 0xf -#define LoopSetup_soffset_bits 16 -#define LoopSetup_soffset_mask 0xf -#define LoopSetup_c_bits 20 -#define LoopSetup_c_mask 0x1 -#define LoopSetup_rop_bits 21 -#define LoopSetup_rop_mask 0x3 -#define LoopSetup_code_bits 23 -#define LoopSetup_code_mask 0x1ff - -#define init_LoopSetup \ -{ \ - LoopSetup_opcode, \ - LoopSetup_eoffset_bits, LoopSetup_eoffset_mask, \ - LoopSetup_dontcare_bits, LoopSetup_dontcare_mask, \ - LoopSetup_reg_bits, LoopSetup_reg_mask, \ - LoopSetup_soffset_bits, LoopSetup_soffset_mask, \ - LoopSetup_c_bits, LoopSetup_c_mask, \ - LoopSetup_rop_bits, LoopSetup_rop_mask, \ - LoopSetup_code_bits, LoopSetup_code_mask \ -}; - -/* LDIMMhalf -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |.Z.|.H.|.S.|.grp...|.reg.......| -|.hword.........................................................| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned long opcode; - int bits_hword; - int mask_hword; - int bits_reg; - int mask_reg; - int bits_grp; - int mask_grp; - int bits_S; - int mask_S; - int bits_H; - int mask_H; - int bits_Z; - int mask_Z; - int bits_code; - int mask_code; -} LDIMMhalf; - -#define LDIMMhalf_opcode 0xe1000000 -#define LDIMMhalf_hword_bits 0 -#define LDIMMhalf_hword_mask 0xffff -#define LDIMMhalf_reg_bits 16 -#define LDIMMhalf_reg_mask 0x7 -#define LDIMMhalf_grp_bits 19 -#define LDIMMhalf_grp_mask 0x3 -#define LDIMMhalf_S_bits 21 -#define LDIMMhalf_S_mask 0x1 -#define LDIMMhalf_H_bits 22 -#define LDIMMhalf_H_mask 0x1 -#define LDIMMhalf_Z_bits 23 -#define LDIMMhalf_Z_mask 0x1 -#define LDIMMhalf_code_bits 24 -#define LDIMMhalf_code_mask 0xff - -#define init_LDIMMhalf \ -{ \ - LDIMMhalf_opcode, \ - LDIMMhalf_hword_bits, LDIMMhalf_hword_mask, \ - LDIMMhalf_reg_bits, LDIMMhalf_reg_mask, \ - LDIMMhalf_grp_bits, LDIMMhalf_grp_mask, \ - LDIMMhalf_S_bits, LDIMMhalf_S_mask, \ - LDIMMhalf_H_bits, LDIMMhalf_H_mask, \ - LDIMMhalf_Z_bits, LDIMMhalf_Z_mask, \ - LDIMMhalf_code_bits, LDIMMhalf_code_mask \ -}; - - -/* CC2dreg -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |.op....|.reg.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_reg; - int mask_reg; - int bits_op; - int mask_op; - int bits_code; - int mask_code; -} CC2dreg; - -#define CC2dreg_opcode 0x0200 -#define CC2dreg_reg_bits 0 -#define CC2dreg_reg_mask 0x7 -#define CC2dreg_op_bits 3 -#define CC2dreg_op_mask 0x3 -#define CC2dreg_code_bits 5 -#define CC2dreg_code_mask 0x7fff - -#define init_CC2dreg \ -{ \ - CC2dreg_opcode, \ - CC2dreg_reg_bits, CC2dreg_reg_mask, \ - CC2dreg_op_bits, CC2dreg_op_mask, \ - CC2dreg_code_bits, CC2dreg_code_mask \ -}; - - -/* PTR2op -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 1 | 0 | 0 | 0 | 1 | 0 |.opc.......|.src.......|.dst.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_dst; - int mask_dst; - int bits_src; - int mask_src; - int bits_opc; - int mask_opc; - int bits_code; - int mask_code; -} PTR2op; - -#define PTR2op_opcode 0x4400 -#define PTR2op_dst_bits 0 -#define PTR2op_dst_mask 0x7 -#define PTR2op_src_bits 3 -#define PTR2op_src_mask 0x7 -#define PTR2op_opc_bits 6 -#define PTR2op_opc_mask 0x7 -#define PTR2op_code_bits 9 -#define PTR2op_code_mask 0x7f - -#define init_PTR2op \ -{ \ - PTR2op_opcode, \ - PTR2op_dst_bits, PTR2op_dst_mask, \ - PTR2op_src_bits, PTR2op_src_mask, \ - PTR2op_opc_bits, PTR2op_opc_mask, \ - PTR2op_code_bits, PTR2op_code_mask \ -}; - - -/* COMP3op -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 1 | 0 | 1 |.opc.......|.dst.......|.src1......|.src0......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_src0; - int mask_src0; - int bits_src1; - int mask_src1; - int bits_dst; - int mask_dst; - int bits_opc; - int mask_opc; - int bits_code; - int mask_code; -} COMP3op; - -#define COMP3op_opcode 0x5000 -#define COMP3op_src0_bits 0 -#define COMP3op_src0_mask 0x7 -#define COMP3op_src1_bits 3 -#define COMP3op_src1_mask 0x7 -#define COMP3op_dst_bits 6 -#define COMP3op_dst_mask 0x7 -#define COMP3op_opc_bits 9 -#define COMP3op_opc_mask 0x7 -#define COMP3op_code_bits 12 -#define COMP3op_code_mask 0xf - -#define init_COMP3op \ -{ \ - COMP3op_opcode, \ - COMP3op_src0_bits, COMP3op_src0_mask, \ - COMP3op_src1_bits, COMP3op_src1_mask, \ - COMP3op_dst_bits, COMP3op_dst_mask, \ - COMP3op_opc_bits, COMP3op_opc_mask, \ - COMP3op_code_bits, COMP3op_code_mask \ -}; - -/* ccMV -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 0 | 0 | 0 | 0 | 1 | 1 |.T.|.d.|.s.|.dst.......|.src.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_src; - int mask_src; - int bits_dst; - int mask_dst; - int bits_s; - int mask_s; - int bits_d; - int mask_d; - int bits_T; - int mask_T; - int bits_code; - int mask_code; -} CCmv; - -#define CCmv_opcode 0x0600 -#define CCmv_src_bits 0 -#define CCmv_src_mask 0x7 -#define CCmv_dst_bits 3 -#define CCmv_dst_mask 0x7 -#define CCmv_s_bits 6 -#define CCmv_s_mask 0x1 -#define CCmv_d_bits 7 -#define CCmv_d_mask 0x1 -#define CCmv_T_bits 8 -#define CCmv_T_mask 0x1 -#define CCmv_code_bits 9 -#define CCmv_code_mask 0x7f - -#define init_CCmv \ -{ \ - CCmv_opcode, \ - CCmv_src_bits, CCmv_src_mask, \ - CCmv_dst_bits, CCmv_dst_mask, \ - CCmv_s_bits, CCmv_s_mask, \ - CCmv_d_bits, CCmv_d_mask, \ - CCmv_T_bits, CCmv_T_mask, \ - CCmv_code_bits, CCmv_code_mask \ -}; - - -/* CCflag -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 0 | 0 | 0 | 1 |.I.|.opc.......|.G.|.y.........|.x.........| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_x; - int mask_x; - int bits_y; - int mask_y; - int bits_G; - int mask_G; - int bits_opc; - int mask_opc; - int bits_I; - int mask_I; - int bits_code; - int mask_code; -} CCflag; - -#define CCflag_opcode 0x0800 -#define CCflag_x_bits 0 -#define CCflag_x_mask 0x7 -#define CCflag_y_bits 3 -#define CCflag_y_mask 0x7 -#define CCflag_G_bits 6 -#define CCflag_G_mask 0x1 -#define CCflag_opc_bits 7 -#define CCflag_opc_mask 0x7 -#define CCflag_I_bits 10 -#define CCflag_I_mask 0x1 -#define CCflag_code_bits 11 -#define CCflag_code_mask 0x1f - -#define init_CCflag \ -{ \ - CCflag_opcode, \ - CCflag_x_bits, CCflag_x_mask, \ - CCflag_y_bits, CCflag_y_mask, \ - CCflag_G_bits, CCflag_G_mask, \ - CCflag_opc_bits, CCflag_opc_mask, \ - CCflag_I_bits, CCflag_I_mask, \ - CCflag_code_bits, CCflag_code_mask, \ -}; - - -/* CC2stat -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |.D.|.op....|.cbit..............| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_cbit; - int mask_cbit; - int bits_op; - int mask_op; - int bits_D; - int mask_D; - int bits_code; - int mask_code; -} CC2stat; - -#define CC2stat_opcode 0x0300 -#define CC2stat_cbit_bits 0 -#define CC2stat_cbit_mask 0x1f -#define CC2stat_op_bits 5 -#define CC2stat_op_mask 0x3 -#define CC2stat_D_bits 7 -#define CC2stat_D_mask 0x1 -#define CC2stat_code_bits 8 -#define CC2stat_code_mask 0xff - -#define init_CC2stat \ -{ \ - CC2stat_opcode, \ - CC2stat_cbit_bits, CC2stat_cbit_mask, \ - CC2stat_op_bits, CC2stat_op_mask, \ - CC2stat_D_bits, CC2stat_D_mask, \ - CC2stat_code_bits, CC2stat_code_mask \ -}; - - -/* REGMV -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 0 | 1 | 1 |.gd........|.gs........|.dst.......|.src.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_src; - int mask_src; - int bits_dst; - int mask_dst; - int bits_gs; - int mask_gs; - int bits_gd; - int mask_gd; - int bits_code; - int mask_code; -} RegMv; - -#define RegMv_opcode 0x3000 -#define RegMv_src_bits 0 -#define RegMv_src_mask 0x7 -#define RegMv_dst_bits 3 -#define RegMv_dst_mask 0x7 -#define RegMv_gs_bits 6 -#define RegMv_gs_mask 0x7 -#define RegMv_gd_bits 9 -#define RegMv_gd_mask 0x7 -#define RegMv_code_bits 12 -#define RegMv_code_mask 0xf - -#define init_RegMv \ -{ \ - RegMv_opcode, \ - RegMv_src_bits, RegMv_src_mask, \ - RegMv_dst_bits, RegMv_dst_mask, \ - RegMv_gs_bits, RegMv_gs_mask, \ - RegMv_gd_bits, RegMv_gd_mask, \ - RegMv_code_bits, RegMv_code_mask \ -}; - - -/* COMPI2opD -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 1 | 1 | 0 | 0 |.op|.isrc......................|.dst.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_dst; - int mask_dst; - int bits_src; - int mask_src; - int bits_op; - int mask_op; - int bits_code; - int mask_code; -} COMPI2opD; - -#define COMPI2opD_opcode 0x6000 -#define COMPI2opD_dst_bits 0 -#define COMPI2opD_dst_mask 0x7 -#define COMPI2opD_src_bits 3 -#define COMPI2opD_src_mask 0x7f -#define COMPI2opD_op_bits 10 -#define COMPI2opD_op_mask 0x1 -#define COMPI2opD_code_bits 11 -#define COMPI2opD_code_mask 0x1f - -#define init_COMPI2opD \ -{ \ - COMPI2opD_opcode, \ - COMPI2opD_dst_bits, COMPI2opD_dst_mask, \ - COMPI2opD_src_bits, COMPI2opD_src_mask, \ - COMPI2opD_op_bits, COMPI2opD_op_mask, \ - COMPI2opD_code_bits, COMPI2opD_code_mask \ -}; - -/* COMPI2opP -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 0 | 1 | 1 | 0 | 1 |.op|.src.......................|.dst.......| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef COMPI2opD COMPI2opP; - -#define COMPI2opP_opcode 0x6800 -#define COMPI2opP_dst_bits 0 -#define COMPI2opP_dst_mask 0x7 -#define COMPI2opP_src_bits 3 -#define COMPI2opP_src_mask 0x7f -#define COMPI2opP_op_bits 10 -#define COMPI2opP_op_mask 0x1 -#define COMPI2opP_code_bits 11 -#define COMPI2opP_code_mask 0x1f - -#define init_COMPI2opP \ -{ \ - COMPI2opP_opcode, \ - COMPI2opP_dst_bits, COMPI2opP_dst_mask, \ - COMPI2opP_src_bits, COMPI2opP_src_mask, \ - COMPI2opP_op_bits, COMPI2opP_op_mask, \ - COMPI2opP_code_bits, COMPI2opP_code_mask \ -}; - - -/* dagMODim -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |.br| 1 | 1 |.op|.m.....|.i.....| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_i; - int mask_i; - int bits_m; - int mask_m; - int bits_op; - int mask_op; - int bits_code2; - int mask_code2; - int bits_br; - int mask_br; - int bits_code; - int mask_code; -} DagMODim; - -#define DagMODim_opcode 0x9e60 -#define DagMODim_i_bits 0 -#define DagMODim_i_mask 0x3 -#define DagMODim_m_bits 2 -#define DagMODim_m_mask 0x3 -#define DagMODim_op_bits 4 -#define DagMODim_op_mask 0x1 -#define DagMODim_code2_bits 5 -#define DagMODim_code2_mask 0x3 -#define DagMODim_br_bits 7 -#define DagMODim_br_mask 0x1 -#define DagMODim_code_bits 8 -#define DagMODim_code_mask 0xff - -#define init_DagMODim \ -{ \ - DagMODim_opcode, \ - DagMODim_i_bits, DagMODim_i_mask, \ - DagMODim_m_bits, DagMODim_m_mask, \ - DagMODim_op_bits, DagMODim_op_mask, \ - DagMODim_code2_bits, DagMODim_code2_mask, \ - DagMODim_br_bits, DagMODim_br_mask, \ - DagMODim_code_bits, DagMODim_code_mask \ -}; - -/* dagMODik -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -| 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |.op....|.i.....| -+---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ -*/ - -typedef struct -{ - unsigned short opcode; - int bits_i; - int mask_i; - int bits_op; - int mask_op; - int bits_code; - int mask_code; -} DagMODik; - -#define DagMODik_opcode 0x9f60 -#define DagMODik_i_bits 0 -#define DagMODik_i_mask 0x3 -#define DagMODik_op_bits 2 -#define DagMODik_op_mask 0x3 -#define DagMODik_code_bits 3 -#define DagMODik_code_mask 0xfff - -#define init_DagMODik \ -{ \ - DagMODik_opcode, \ - DagMODik_i_bits, DagMODik_i_mask, \ - DagMODik_op_bits, DagMODik_op_mask, \ - DagMODik_code_bits, DagMODik_code_mask \ -}; diff --git a/include/opcode/cgen-bitset.h b/include/opcode/cgen-bitset.h deleted file mode 100644 index 1b6fbe32cf9..00000000000 --- a/include/opcode/cgen-bitset.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Header file the type CGEN_BITSET. - -Copyright 2002, 2005 Free Software Foundation, Inc. - -This file is part of GDB, the GNU debugger, and the GNU Binutils. - -This program 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. */ -#ifndef CGEN_BITSET_H -#define CGEN_BITSET_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* A bitmask represented as a string. - Each member of the set is represented as a bit - in the string. Bytes are indexed from left to right in the string and - bits from most significant to least within each byte. - - For example, the bit representing member number 6 is (set->bits[0] & 0x02). -*/ -typedef struct cgen_bitset -{ - unsigned length; - char *bits; -} CGEN_BITSET; - -extern CGEN_BITSET *cgen_bitset_create PARAMS ((unsigned)); -extern void cgen_bitset_init PARAMS ((CGEN_BITSET *, unsigned)); -extern void cgen_bitset_clear PARAMS ((CGEN_BITSET *)); -extern void cgen_bitset_add PARAMS ((CGEN_BITSET *, unsigned)); -extern void cgen_bitset_set PARAMS ((CGEN_BITSET *, unsigned)); -extern int cgen_bitset_compare PARAMS ((CGEN_BITSET *, CGEN_BITSET *)); -extern void cgen_bitset_union PARAMS ((CGEN_BITSET *, CGEN_BITSET *, CGEN_BITSET *)); -extern int cgen_bitset_intersect_p PARAMS ((CGEN_BITSET *, CGEN_BITSET *)); -extern int cgen_bitset_contains PARAMS ((CGEN_BITSET *, unsigned)); -extern CGEN_BITSET *cgen_bitset_copy PARAMS ((CGEN_BITSET *)); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif diff --git a/include/opcode/cgen.h b/include/opcode/cgen.h deleted file mode 100644 index e8fd5d3d9f7..00000000000 --- a/include/opcode/cgen.h +++ /dev/null @@ -1,1473 +0,0 @@ -/* Header file for targets using CGEN: Cpu tools GENerator. - -Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 -Free Software Foundation, Inc. - -This file is part of GDB, the GNU debugger, and the GNU Binutils. - -This program 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., -51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef CGEN_H -#define CGEN_H - -#include "symcat.h" -#include "cgen-bitset.h" -/* ??? This file requires bfd.h but only to get bfd_vma. - Seems like an awful lot to require just to get such a fundamental type. - Perhaps the definition of bfd_vma can be moved outside of bfd.h. - Or perhaps one could duplicate its definition in another file. - Until such time, this file conditionally compiles definitions that require - bfd_vma using __BFD_H_SEEN__. */ - -/* Enums must be defined before they can be used. - Allow them to be used in struct definitions, even though the enum must - be defined elsewhere. - If CGEN_ARCH isn't defined, this file is being included by something other - than -desc.h. */ - -/* Prepend the arch name, defined in -desc.h, and _cgen_ to symbol S. - The lack of spaces in the arg list is important for non-stdc systems. - This file is included by -desc.h. - It can be included independently of -desc.h, in which case the arch - dependent portions will be declared as "unknown_cgen_foo". */ - -#ifndef CGEN_SYM -#define CGEN_SYM(s) CONCAT3 (unknown,_cgen_,s) -#endif - -/* This file contains the static (unchanging) pieces and as much other stuff - as we can reasonably put here. It's generally cleaner to put stuff here - rather than having it machine generated if possible. */ - -/* The assembler syntax is made up of expressions (duh...). - At the lowest level the values are mnemonics, register names, numbers, etc. - Above that are subexpressions, if any (an example might be the - "effective address" in m68k cpus). Subexpressions are wip. - At the second highest level are the insns themselves. Above that are - pseudo-insns, synthetic insns, and macros, if any. */ - -/* Lots of cpu's have a fixed insn size, or one which rarely changes, - and it's generally easier to handle these by treating the insn as an - integer type, rather than an array of characters. So we allow targets - to control this. When an integer type the value is in host byte order, - when an array of characters the value is in target byte order. */ - -typedef unsigned int CGEN_INSN_INT; -#if CGEN_INT_INSN_P -typedef CGEN_INSN_INT CGEN_INSN_BYTES; -typedef CGEN_INSN_INT *CGEN_INSN_BYTES_PTR; -#else -typedef unsigned char *CGEN_INSN_BYTES; -typedef unsigned char *CGEN_INSN_BYTES_PTR; -#endif - -#ifdef __GNUC__ -#define CGEN_INLINE __inline__ -#else -#define CGEN_INLINE -#endif - -enum cgen_endian -{ - CGEN_ENDIAN_UNKNOWN, - CGEN_ENDIAN_LITTLE, - CGEN_ENDIAN_BIG -}; - -/* Forward decl. */ - -typedef struct cgen_insn CGEN_INSN; - -/* Opaque pointer version for use by external world. */ - -typedef struct cgen_cpu_desc *CGEN_CPU_DESC; - -/* Attributes. - Attributes are used to describe various random things associated with - an object (ifield, hardware, operand, insn, whatever) and are specified - as name/value pairs. - Integer attributes computed at compile time are currently all that's - supported, though adding string attributes and run-time computation is - straightforward. Integer attribute values are always host int's - (signed or unsigned). For portability, this means 32 bits. - Integer attributes are further categorized as boolean, bitset, integer, - and enum types. Boolean attributes appear frequently enough that they're - recorded in one host int. This limits the maximum number of boolean - attributes to 32, though that's a *lot* of attributes. */ - -/* Type of attribute values. */ - -typedef CGEN_BITSET CGEN_ATTR_VALUE_BITSET_TYPE; -typedef int CGEN_ATTR_VALUE_ENUM_TYPE; -typedef union -{ - CGEN_ATTR_VALUE_BITSET_TYPE bitset; - CGEN_ATTR_VALUE_ENUM_TYPE nonbitset; -} CGEN_ATTR_VALUE_TYPE; - -/* Struct to record attribute information. */ - -typedef struct -{ - /* Boolean attributes. */ - unsigned int bool; - /* Non-boolean integer attributes. */ - CGEN_ATTR_VALUE_TYPE nonbool[1]; -} CGEN_ATTR; - -/* Define a structure member for attributes with N non-boolean entries. - There is no maximum number of non-boolean attributes. - There is a maximum of 32 boolean attributes (since they are all recorded - in one host int). */ - -#define CGEN_ATTR_TYPE(n) \ -struct { unsigned int bool; \ - CGEN_ATTR_VALUE_TYPE nonbool[(n) ? (n) : 1]; } - -/* Return the boolean attributes. */ - -#define CGEN_ATTR_BOOLS(a) ((a)->bool) - -/* Non-boolean attribute numbers are offset by this much. */ - -#define CGEN_ATTR_NBOOL_OFFSET 32 - -/* Given a boolean attribute number, return its mask. */ - -#define CGEN_ATTR_MASK(attr) (1 << (attr)) - -/* Return the value of boolean attribute ATTR in ATTRS. */ - -#define CGEN_BOOL_ATTR(attrs, attr) ((CGEN_ATTR_MASK (attr) & (attrs)) != 0) - -/* Return value of attribute ATTR in ATTR_TABLE for OBJ. - OBJ is a pointer to the entity that has the attributes - (??? not used at present but is reserved for future purposes - eventually - the goal is to allow recording attributes in source form and computing - them lazily at runtime, not sure of the details yet). */ - -#define CGEN_ATTR_VALUE(obj, attr_table, attr) \ -((unsigned int) (attr) < CGEN_ATTR_NBOOL_OFFSET \ - ? ((CGEN_ATTR_BOOLS (attr_table) & CGEN_ATTR_MASK (attr)) != 0) \ - : ((attr_table)->nonbool[(attr) - CGEN_ATTR_NBOOL_OFFSET].nonbitset)) -#define CGEN_BITSET_ATTR_VALUE(obj, attr_table, attr) \ - ((attr_table)->nonbool[(attr) - CGEN_ATTR_NBOOL_OFFSET].bitset) - -/* Attribute name/value tables. - These are used to assist parsing of descriptions at run-time. */ - -typedef struct -{ - const char * name; - unsigned value; -} CGEN_ATTR_ENTRY; - -/* For each domain (ifld,hw,operand,insn), list of attributes. */ - -typedef struct -{ - const char * name; - const CGEN_ATTR_ENTRY * dfault; - const CGEN_ATTR_ENTRY * vals; -} CGEN_ATTR_TABLE; - -/* Instruction set variants. */ - -typedef struct { - const char *name; - - /* Default instruction size (in bits). - This is used by the assembler when it encounters an unknown insn. */ - unsigned int default_insn_bitsize; - - /* Base instruction size (in bits). - For non-LIW cpus this is generally the length of the smallest insn. - For LIW cpus its wip (work-in-progress). For the m32r its 32. */ - unsigned int base_insn_bitsize; - - /* Minimum/maximum instruction size (in bits). */ - unsigned int min_insn_bitsize; - unsigned int max_insn_bitsize; -} CGEN_ISA; - -/* Machine variants. */ - -typedef struct { - const char *name; - /* The argument to bfd_arch_info->scan. */ - const char *bfd_name; - /* one of enum mach_attr */ - int num; - /* parameter from mach->cpu */ - unsigned int insn_chunk_bitsize; -} CGEN_MACH; - -/* Parse result (also extraction result). - - The result of parsing an insn is stored here. - To generate the actual insn, this is passed to the insert handler. - When printing an insn, the result of extraction is stored here. - To print the insn, this is passed to the print handler. - - It is machine generated so we don't define it here, - but we do need a forward decl for the handler fns. - - There is one member for each possible field in the insn. - The type depends on the field. - Also recorded here is the computed length of the insn for architectures - where it varies. -*/ - -typedef struct cgen_fields CGEN_FIELDS; - -/* Total length of the insn, as recorded in the `fields' struct. */ -/* ??? The field insert handler has lots of opportunities for optimization - if it ever gets inlined. On architectures where insns all have the same - size, may wish to detect that and make this macro a constant - to allow - further optimizations. */ - -#define CGEN_FIELDS_BITSIZE(fields) ((fields)->length) - -/* Extraction support for variable length insn sets. */ - -/* When disassembling we don't know the number of bytes to read at the start. - So the first CGEN_BASE_INSN_SIZE bytes are read at the start and the rest - are read when needed. This struct controls this. It is basically the - disassemble_info stuff, except that we provide a cache for values already - read (since bytes can typically be read several times to fetch multiple - operands that may be in them), and that extraction of fields is needed - in contexts other than disassembly. */ - -typedef struct { - /* A pointer to the disassemble_info struct. - We don't require dis-asm.h so we use void * for the type here. - If NULL, BYTES is full of valid data (VALID == -1). */ - void *dis_info; - /* Points to a working buffer of sufficient size. */ - unsigned char *insn_bytes; - /* Mask of bytes that are valid in INSN_BYTES. */ - unsigned int valid; -} CGEN_EXTRACT_INFO; - -/* Associated with each insn or expression is a set of "handlers" for - performing operations like parsing, printing, etc. These require a bfd_vma - value to be passed around but we don't want all applications to need bfd.h. - So this stuff is only provided if bfd.h has been included. */ - -/* Parse handler. - CD is a cpu table descriptor. - INSN is a pointer to a struct describing the insn being parsed. - STRP is a pointer to a pointer to the text being parsed. - FIELDS is a pointer to a cgen_fields struct in which the results are placed. - If the expression is successfully parsed, *STRP is updated. - If not it is left alone. - The result is NULL if success or an error message. */ -typedef const char * (cgen_parse_fn) - (CGEN_CPU_DESC, const CGEN_INSN *insn_, - const char **strp_, CGEN_FIELDS *fields_); - -/* Insert handler. - CD is a cpu table descriptor. - INSN is a pointer to a struct describing the insn being parsed. - FIELDS is a pointer to a cgen_fields struct from which the values - are fetched. - INSNP is a pointer to a buffer in which to place the insn. - PC is the pc value of the insn. - The result is an error message or NULL if success. */ - -#ifdef __BFD_H_SEEN__ -typedef const char * (cgen_insert_fn) - (CGEN_CPU_DESC, const CGEN_INSN *insn_, - CGEN_FIELDS *fields_, CGEN_INSN_BYTES_PTR insnp_, - bfd_vma pc_); -#else -typedef const char * (cgen_insert_fn) (); -#endif - -/* Extract handler. - CD is a cpu table descriptor. - INSN is a pointer to a struct describing the insn being parsed. - The second argument is a pointer to a struct controlling extraction - (only used for variable length insns). - EX_INFO is a pointer to a struct for controlling reading of further - bytes for the insn. - BASE_INSN is the first CGEN_BASE_INSN_SIZE bytes (host order). - FIELDS is a pointer to a cgen_fields struct in which the results are placed. - PC is the pc value of the insn. - The result is the length of the insn in bits or zero if not recognized. */ - -#ifdef __BFD_H_SEEN__ -typedef int (cgen_extract_fn) - (CGEN_CPU_DESC, const CGEN_INSN *insn_, - CGEN_EXTRACT_INFO *ex_info_, CGEN_INSN_INT base_insn_, - CGEN_FIELDS *fields_, bfd_vma pc_); -#else -typedef int (cgen_extract_fn) (); -#endif - -/* Print handler. - CD is a cpu table descriptor. - INFO is a pointer to the disassembly info. - Eg: disassemble_info. It's defined as `PTR' so this file can be included - without dis-asm.h. - INSN is a pointer to a struct describing the insn being printed. - FIELDS is a pointer to a cgen_fields struct. - PC is the pc value of the insn. - LEN is the length of the insn, in bits. */ - -#ifdef __BFD_H_SEEN__ -typedef void (cgen_print_fn) - (CGEN_CPU_DESC, void * info_, const CGEN_INSN *insn_, - CGEN_FIELDS *fields_, bfd_vma pc_, int len_); -#else -typedef void (cgen_print_fn) (); -#endif - -/* Parse/insert/extract/print handlers. - - Indices into the handler tables. - We could use pointers here instead, but 90% of them are generally identical - and that's a lot of redundant data. Making these unsigned char indices - into tables of pointers saves a bit of space. - Using indices also keeps assembler code out of the disassembler and - vice versa. */ - -struct cgen_opcode_handler -{ - unsigned char parse, insert, extract, print; -}; - -/* Assembler interface. - - The interface to the assembler is intended to be clean in the sense that - libopcodes.a is a standalone entity and could be used with any assembler. - Not that one would necessarily want to do that but rather that it helps - keep a clean interface. The interface will obviously be slanted towards - GAS, but at least it's a start. - ??? Note that one possible user of the assembler besides GAS is GDB. - - Parsing is controlled by the assembler which calls - CGEN_SYM (assemble_insn). If it can parse and build the entire insn - it doesn't call back to the assembler. If it needs/wants to call back - to the assembler, cgen_parse_operand_fn is called which can either - - - return a number to be inserted in the insn - - return a "register" value to be inserted - (the register might not be a register per pe) - - queue the argument and return a marker saying the expression has been - queued (eg: a fix-up) - - return an error message indicating the expression wasn't recognizable - - The result is an error message or NULL for success. - The parsed value is stored in the bfd_vma *. */ - -/* Values for indicating what the caller wants. */ - -enum cgen_parse_operand_type -{ - CGEN_PARSE_OPERAND_INIT, - CGEN_PARSE_OPERAND_INTEGER, - CGEN_PARSE_OPERAND_ADDRESS, - CGEN_PARSE_OPERAND_SYMBOLIC -}; - -/* Values for indicating what was parsed. */ - -enum cgen_parse_operand_result -{ - CGEN_PARSE_OPERAND_RESULT_NUMBER, - CGEN_PARSE_OPERAND_RESULT_REGISTER, - CGEN_PARSE_OPERAND_RESULT_QUEUED, - CGEN_PARSE_OPERAND_RESULT_ERROR -}; - -#ifdef __BFD_H_SEEN__ /* Don't require bfd.h unnecessarily. */ -typedef const char * (cgen_parse_operand_fn) - (CGEN_CPU_DESC, - enum cgen_parse_operand_type, const char **, int, int, - enum cgen_parse_operand_result *, bfd_vma *); -#else -typedef const char * (cgen_parse_operand_fn) (); -#endif - -/* Set the cgen_parse_operand_fn callback. */ - -extern void cgen_set_parse_operand_fn - (CGEN_CPU_DESC, cgen_parse_operand_fn); - -/* Called before trying to match a table entry with the insn. */ - -extern void cgen_init_parse_operand (CGEN_CPU_DESC); - -/* Operand values (keywords, integers, symbols, etc.) */ - -/* Types of assembler elements. */ - -enum cgen_asm_type -{ - CGEN_ASM_NONE, CGEN_ASM_KEYWORD, CGEN_ASM_MAX -}; - -#ifndef CGEN_ARCH -enum cgen_hw_type { CGEN_HW_MAX }; -#endif - -/* List of hardware elements. */ - -typedef struct -{ - char *name; - enum cgen_hw_type type; - /* There is currently no example where both index specs and value specs - are required, so for now both are clumped under "asm_data". */ - enum cgen_asm_type asm_type; - void *asm_data; -#ifndef CGEN_HW_NBOOL_ATTRS -#define CGEN_HW_NBOOL_ATTRS 1 -#endif - CGEN_ATTR_TYPE (CGEN_HW_NBOOL_ATTRS) attrs; -#define CGEN_HW_ATTRS(hw) (&(hw)->attrs) -} CGEN_HW_ENTRY; - -/* Return value of attribute ATTR in HW. */ - -#define CGEN_HW_ATTR_VALUE(hw, attr) \ -CGEN_ATTR_VALUE ((hw), CGEN_HW_ATTRS (hw), (attr)) - -/* Table of hardware elements for selected mach, computed at runtime. - enum cgen_hw_type is an index into this table (specifically `entries'). */ - -typedef struct { - /* Pointer to null terminated table of all compiled in entries. */ - const CGEN_HW_ENTRY *init_entries; - unsigned int entry_size; /* since the attribute member is variable sized */ - /* Array of all entries, initial and run-time added. */ - const CGEN_HW_ENTRY **entries; - /* Number of elements in `entries'. */ - unsigned int num_entries; - /* For now, xrealloc is called each time a new entry is added at runtime. - ??? May wish to keep track of some slop to reduce the number of calls to - xrealloc, except that there's unlikely to be many and not expected to be - in speed critical code. */ -} CGEN_HW_TABLE; - -extern const CGEN_HW_ENTRY * cgen_hw_lookup_by_name - (CGEN_CPU_DESC, const char *); -extern const CGEN_HW_ENTRY * cgen_hw_lookup_by_num - (CGEN_CPU_DESC, unsigned int); - -/* This struct is used to describe things like register names, etc. */ - -typedef struct cgen_keyword_entry -{ - /* Name (as in register name). */ - char * name; - - /* Value (as in register number). - The value cannot be -1 as that is used to indicate "not found". - IDEA: Have "FUNCTION" attribute? [function is called to fetch value]. */ - int value; - - /* Attributes. - This should, but technically needn't, appear last. It is a variable sized - array in that one architecture may have 1 nonbool attribute and another - may have more. Having this last means the non-architecture specific code - needn't care. The goal is to eventually record - attributes in their raw form, evaluate them at run-time, and cache the - values, so this worry will go away anyway. */ - /* ??? Moving this last should be done by treating keywords like insn lists - and moving the `next' fields into a CGEN_KEYWORD_LIST struct. */ - /* FIXME: Not used yet. */ -#ifndef CGEN_KEYWORD_NBOOL_ATTRS -#define CGEN_KEYWORD_NBOOL_ATTRS 1 -#endif - CGEN_ATTR_TYPE (CGEN_KEYWORD_NBOOL_ATTRS) attrs; - - /* ??? Putting these here means compiled in entries can't be const. - Not a really big deal, but something to consider. */ - /* Next name hash table entry. */ - struct cgen_keyword_entry *next_name; - /* Next value hash table entry. */ - struct cgen_keyword_entry *next_value; -} CGEN_KEYWORD_ENTRY; - -/* Top level struct for describing a set of related keywords - (e.g. register names). - - This struct supports run-time entry of new values, and hashed lookups. */ - -typedef struct cgen_keyword -{ - /* Pointer to initial [compiled in] values. */ - CGEN_KEYWORD_ENTRY *init_entries; - - /* Number of entries in `init_entries'. */ - unsigned int num_init_entries; - - /* Hash table used for name lookup. */ - CGEN_KEYWORD_ENTRY **name_hash_table; - - /* Hash table used for value lookup. */ - CGEN_KEYWORD_ENTRY **value_hash_table; - - /* Number of entries in the hash_tables. */ - unsigned int hash_table_size; - - /* Pointer to null keyword "" entry if present. */ - const CGEN_KEYWORD_ENTRY *null_entry; - - /* String containing non-alphanumeric characters used - in keywords. - At present, the highest number of entries used is 1. */ - char nonalpha_chars[8]; -} CGEN_KEYWORD; - -/* Structure used for searching. */ - -typedef struct -{ - /* Table being searched. */ - const CGEN_KEYWORD *table; - - /* Specification of what is being searched for. */ - const char *spec; - - /* Current index in hash table. */ - unsigned int current_hash; - - /* Current element in current hash chain. */ - CGEN_KEYWORD_ENTRY *current_entry; -} CGEN_KEYWORD_SEARCH; - -/* Lookup a keyword from its name. */ - -const CGEN_KEYWORD_ENTRY *cgen_keyword_lookup_name - (CGEN_KEYWORD *, const char *); - -/* Lookup a keyword from its value. */ - -const CGEN_KEYWORD_ENTRY *cgen_keyword_lookup_value - (CGEN_KEYWORD *, int); - -/* Add a keyword. */ - -void cgen_keyword_add (CGEN_KEYWORD *, CGEN_KEYWORD_ENTRY *); - -/* Keyword searching. - This can be used to retrieve every keyword, or a subset. */ - -CGEN_KEYWORD_SEARCH cgen_keyword_search_init - (CGEN_KEYWORD *, const char *); -const CGEN_KEYWORD_ENTRY *cgen_keyword_search_next - (CGEN_KEYWORD_SEARCH *); - -/* Operand value support routines. */ - -extern const char *cgen_parse_keyword - (CGEN_CPU_DESC, const char **, CGEN_KEYWORD *, long *); -#ifdef __BFD_H_SEEN__ /* Don't require bfd.h unnecessarily. */ -extern const char *cgen_parse_signed_integer - (CGEN_CPU_DESC, const char **, int, long *); -extern const char *cgen_parse_unsigned_integer - (CGEN_CPU_DESC, const char **, int, unsigned long *); -extern const char *cgen_parse_address - (CGEN_CPU_DESC, const char **, int, int, - enum cgen_parse_operand_result *, bfd_vma *); -extern const char *cgen_validate_signed_integer - (long, long, long); -extern const char *cgen_validate_unsigned_integer - (unsigned long, unsigned long, unsigned long); -#endif - -/* Operand modes. */ - -/* ??? This duplicates the values in arch.h. Revisit. - These however need the CGEN_ prefix [as does everything in this file]. */ -/* ??? Targets may need to add their own modes so we may wish to move this - to -opc.h, or add a hook. */ - -enum cgen_mode { - CGEN_MODE_VOID, /* ??? rename simulator's VM to VOID? */ - CGEN_MODE_BI, CGEN_MODE_QI, CGEN_MODE_HI, CGEN_MODE_SI, CGEN_MODE_DI, - CGEN_MODE_UBI, CGEN_MODE_UQI, CGEN_MODE_UHI, CGEN_MODE_USI, CGEN_MODE_UDI, - CGEN_MODE_SF, CGEN_MODE_DF, CGEN_MODE_XF, CGEN_MODE_TF, - CGEN_MODE_TARGET_MAX, - CGEN_MODE_INT, CGEN_MODE_UINT, - CGEN_MODE_MAX -}; - -/* FIXME: Until simulator is updated. */ - -#define CGEN_MODE_VM CGEN_MODE_VOID - -/* Operands. */ - -#ifndef CGEN_ARCH -enum cgen_operand_type { CGEN_OPERAND_MAX }; -#endif - -/* "nil" indicator for the operand instance table */ -#define CGEN_OPERAND_NIL CGEN_OPERAND_MAX - -/* A tree of these structs represents the multi-ifield - structure of an operand's hw-index value, if it exists. */ - -struct cgen_ifld; - -typedef struct cgen_maybe_multi_ifield -{ - int count; /* 0: indexed by single cgen_ifld (possibly null: dead entry); - n: indexed by array of more cgen_maybe_multi_ifields. */ - union - { - const void *p; - const struct cgen_maybe_multi_ifield * multi; - const struct cgen_ifld * leaf; - } val; -} -CGEN_MAYBE_MULTI_IFLD; - -/* This struct defines each entry in the operand table. */ - -typedef struct -{ - /* Name as it appears in the syntax string. */ - char *name; - - /* Operand type. */ - enum cgen_operand_type type; - - /* The hardware element associated with this operand. */ - enum cgen_hw_type hw_type; - - /* FIXME: We don't yet record ifield definitions, which we should. - When we do it might make sense to delete start/length (since they will - be duplicated in the ifield's definition) and replace them with a - pointer to the ifield entry. */ - - /* Bit position. - This is just a hint, and may be unused in more complex operands. - May be unused for a modifier. */ - unsigned char start; - - /* The number of bits in the operand. - This is just a hint, and may be unused in more complex operands. - May be unused for a modifier. */ - unsigned char length; - - /* The (possibly-multi) ifield used as an index for this operand, if it - is indexed by a field at all. This substitutes / extends the start and - length fields above, but unsure at this time whether they are used - anywhere. */ - CGEN_MAYBE_MULTI_IFLD index_fields; -#if 0 /* ??? Interesting idea but relocs tend to get too complicated, - and ABI dependent, for simple table lookups to work. */ - /* Ideally this would be the internal (external?) reloc type. */ - int reloc_type; -#endif - - /* Attributes. - This should, but technically needn't, appear last. It is a variable sized - array in that one architecture may have 1 nonbool attribute and another - may have more. Having this last means the non-architecture specific code - needn't care, now or tomorrow. The goal is to eventually record - attributes in their raw form, evaluate them at run-time, and cache the - values, so this worry will go away anyway. */ -#ifndef CGEN_OPERAND_NBOOL_ATTRS -#define CGEN_OPERAND_NBOOL_ATTRS 1 -#endif - CGEN_ATTR_TYPE (CGEN_OPERAND_NBOOL_ATTRS) attrs; -#define CGEN_OPERAND_ATTRS(operand) (&(operand)->attrs) -} CGEN_OPERAND; - -/* Return value of attribute ATTR in OPERAND. */ - -#define CGEN_OPERAND_ATTR_VALUE(operand, attr) \ -CGEN_ATTR_VALUE ((operand), CGEN_OPERAND_ATTRS (operand), (attr)) - -/* Table of operands for selected mach/isa, computed at runtime. - enum cgen_operand_type is an index into this table (specifically - `entries'). */ - -typedef struct { - /* Pointer to null terminated table of all compiled in entries. */ - const CGEN_OPERAND *init_entries; - unsigned int entry_size; /* since the attribute member is variable sized */ - /* Array of all entries, initial and run-time added. */ - const CGEN_OPERAND **entries; - /* Number of elements in `entries'. */ - unsigned int num_entries; - /* For now, xrealloc is called each time a new entry is added at runtime. - ??? May wish to keep track of some slop to reduce the number of calls to - xrealloc, except that there's unlikely to be many and not expected to be - in speed critical code. */ -} CGEN_OPERAND_TABLE; - -extern const CGEN_OPERAND * cgen_operand_lookup_by_name - (CGEN_CPU_DESC, const char *); -extern const CGEN_OPERAND * cgen_operand_lookup_by_num - (CGEN_CPU_DESC, int); - -/* Instruction operand instances. - - For each instruction, a list of the hardware elements that are read and - written are recorded. */ - -/* The type of the instance. */ - -enum cgen_opinst_type { - /* End of table marker. */ - CGEN_OPINST_END = 0, - CGEN_OPINST_INPUT, CGEN_OPINST_OUTPUT -}; - -typedef struct -{ - /* Input or output indicator. */ - enum cgen_opinst_type type; - - /* Name of operand. */ - const char *name; - - /* The hardware element referenced. */ - enum cgen_hw_type hw_type; - - /* The mode in which the operand is being used. */ - enum cgen_mode mode; - - /* The operand table entry CGEN_OPERAND_NIL if there is none - (i.e. an explicit hardware reference). */ - enum cgen_operand_type op_type; - - /* If `operand' is "nil", the index (e.g. into array of registers). */ - int index; - - /* Attributes. - ??? This perhaps should be a real attribute struct but there's - no current need, so we save a bit of space and just have a set of - flags. The interface is such that this can easily be made attributes - should it prove useful. */ - unsigned int attrs; -#define CGEN_OPINST_ATTRS(opinst) ((opinst)->attrs) -/* Return value of attribute ATTR in OPINST. */ -#define CGEN_OPINST_ATTR(opinst, attr) \ -((CGEN_OPINST_ATTRS (opinst) & (attr)) != 0) -/* Operand is conditionally referenced (read/written). */ -#define CGEN_OPINST_COND_REF 1 -} CGEN_OPINST; - -/* Syntax string. - - Each insn format and subexpression has one of these. - - The syntax "string" consists of characters (n > 0 && n < 128), and operand - values (n >= 128), and is terminated by 0. Operand values are 128 + index - into the operand table. The operand table doesn't exist in C, per se, as - the data is recorded in the parse/insert/extract/print switch statements. */ - -/* This should be at least as large as necessary for any target. */ -#define CGEN_MAX_SYNTAX_ELEMENTS 48 - -/* A target may know its own precise maximum. Assert that it falls below - the above limit. */ -#ifdef CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS -#if CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS > CGEN_MAX_SYNTAX_ELEMENTS -#error "CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS too high - enlarge CGEN_MAX_SYNTAX_ELEMENTS" -#endif -#endif - -typedef unsigned short CGEN_SYNTAX_CHAR_TYPE; - -typedef struct -{ - CGEN_SYNTAX_CHAR_TYPE syntax[CGEN_MAX_SYNTAX_ELEMENTS]; -} CGEN_SYNTAX; - -#define CGEN_SYNTAX_STRING(syn) (syn->syntax) -#define CGEN_SYNTAX_CHAR_P(c) ((c) < 128) -#define CGEN_SYNTAX_CHAR(c) ((unsigned char)c) -#define CGEN_SYNTAX_FIELD(c) ((c) - 128) -#define CGEN_SYNTAX_MAKE_FIELD(c) ((c) + 128) - -/* ??? I can't currently think of any case where the mnemonic doesn't come - first [and if one ever doesn't building the hash tables will be tricky]. - However, we treat mnemonics as just another operand of the instruction. - A value of 1 means "this is where the mnemonic appears". 1 isn't - special other than it's a non-printable ASCII char. */ - -#define CGEN_SYNTAX_MNEMONIC 1 -#define CGEN_SYNTAX_MNEMONIC_P(ch) ((ch) == CGEN_SYNTAX_MNEMONIC) - -/* Instruction fields. - - ??? We currently don't allow adding fields at run-time. - Easy to fix when needed. */ - -typedef struct cgen_ifld { - /* Enum of ifield. */ - int num; -#define CGEN_IFLD_NUM(f) ((f)->num) - - /* Name of the field, distinguishes it from all other fields. */ - const char *name; -#define CGEN_IFLD_NAME(f) ((f)->name) - - /* Default offset, in bits, from the start of the insn to the word - containing the field. */ - int word_offset; -#define CGEN_IFLD_WORD_OFFSET(f) ((f)->word_offset) - - /* Default length of the word containing the field. */ - int word_size; -#define CGEN_IFLD_WORD_SIZE(f) ((f)->word_size) - - /* Default starting bit number. - Whether lsb=0 or msb=0 is determined by CGEN_INSN_LSB0_P. */ - int start; -#define CGEN_IFLD_START(f) ((f)->start) - - /* Length of the field, in bits. */ - int length; -#define CGEN_IFLD_LENGTH(f) ((f)->length) - -#ifndef CGEN_IFLD_NBOOL_ATTRS -#define CGEN_IFLD_NBOOL_ATTRS 1 -#endif - CGEN_ATTR_TYPE (CGEN_IFLD_NBOOL_ATTRS) attrs; -#define CGEN_IFLD_ATTRS(f) (&(f)->attrs) -} CGEN_IFLD; - -/* Return value of attribute ATTR in IFLD. */ -#define CGEN_IFLD_ATTR_VALUE(ifld, attr) \ -CGEN_ATTR_VALUE ((ifld), CGEN_IFLD_ATTRS (ifld), (attr)) - -/* Instruction data. */ - -/* Instruction formats. - - Instructions are grouped by format. Associated with an instruction is its - format. Each insn's opcode table entry contains a format table entry. - ??? There is usually very few formats compared with the number of insns, - so one can reduce the size of the opcode table by recording the format table - as a separate entity. Given that we currently don't, format table entries - are also distinguished by their operands. This increases the size of the - table, but reduces the number of tables. It's all minutiae anyway so it - doesn't really matter [at this point in time]. - - ??? Support for variable length ISA's is wip. */ - -/* Accompanying each iformat description is a list of its fields. */ - -typedef struct { - const CGEN_IFLD *ifld; -#define CGEN_IFMT_IFLD_IFLD(ii) ((ii)->ifld) -} CGEN_IFMT_IFLD; - -/* This should be at least as large as necessary for any target. */ -#define CGEN_MAX_IFMT_OPERANDS 16 - -/* A target may know its own precise maximum. Assert that it falls below - the above limit. */ -#ifdef CGEN_ACTUAL_MAX_IFMT_OPERANDS -#if CGEN_ACTUAL_MAX_IFMT_OPERANDS > CGEN_MAX_IFMT_OPERANDS -#error "CGEN_ACTUAL_MAX_IFMT_OPERANDS too high - enlarge CGEN_MAX_IFMT_OPERANDS" -#endif -#endif - - -typedef struct -{ - /* Length that MASK and VALUE have been calculated to - [VALUE is recorded elsewhere]. - Normally it is base_insn_bitsize. On [V]LIW architectures where the base - insn size may be larger than the size of an insn, this field is less than - base_insn_bitsize. */ - unsigned char mask_length; -#define CGEN_IFMT_MASK_LENGTH(ifmt) ((ifmt)->mask_length) - - /* Total length of instruction, in bits. */ - unsigned char length; -#define CGEN_IFMT_LENGTH(ifmt) ((ifmt)->length) - - /* Mask to apply to the first MASK_LENGTH bits. - Each insn's value is stored with the insn. - The first step in recognizing an insn for disassembly is - (opcode & mask) == value. */ - CGEN_INSN_INT mask; -#define CGEN_IFMT_MASK(ifmt) ((ifmt)->mask) - - /* Instruction fields. - +1 for trailing NULL. */ - CGEN_IFMT_IFLD iflds[CGEN_MAX_IFMT_OPERANDS + 1]; -#define CGEN_IFMT_IFLDS(ifmt) ((ifmt)->iflds) -} CGEN_IFMT; - -/* Instruction values. */ - -typedef struct -{ - /* The opcode portion of the base insn. */ - CGEN_INSN_INT base_value; - -#ifdef CGEN_MAX_EXTRA_OPCODE_OPERANDS - /* Extra opcode values beyond base_value. */ - unsigned long ifield_values[CGEN_MAX_EXTRA_OPCODE_OPERANDS]; -#endif -} CGEN_IVALUE; - -/* Instruction opcode table. - This contains the syntax and format data of an instruction. */ - -/* ??? Some ports already have an opcode table yet still need to use the rest - of what cgen_insn has. Plus keeping the opcode data with the operand - instance data can create a pretty big file. So we keep them separately. - Not sure this is a good idea in the long run. */ - -typedef struct -{ - /* Indices into parse/insert/extract/print handler tables. */ - struct cgen_opcode_handler handlers; -#define CGEN_OPCODE_HANDLERS(opc) (& (opc)->handlers) - - /* Syntax string. */ - CGEN_SYNTAX syntax; -#define CGEN_OPCODE_SYNTAX(opc) (& (opc)->syntax) - - /* Format entry. */ - const CGEN_IFMT *format; -#define CGEN_OPCODE_FORMAT(opc) ((opc)->format) -#define CGEN_OPCODE_MASK_BITSIZE(opc) CGEN_IFMT_MASK_LENGTH (CGEN_OPCODE_FORMAT (opc)) -#define CGEN_OPCODE_BITSIZE(opc) CGEN_IFMT_LENGTH (CGEN_OPCODE_FORMAT (opc)) -#define CGEN_OPCODE_IFLDS(opc) CGEN_IFMT_IFLDS (CGEN_OPCODE_FORMAT (opc)) - - /* Instruction opcode value. */ - CGEN_IVALUE value; -#define CGEN_OPCODE_VALUE(opc) (& (opc)->value) -#define CGEN_OPCODE_BASE_VALUE(opc) (CGEN_OPCODE_VALUE (opc)->base_value) -#define CGEN_OPCODE_BASE_MASK(opc) CGEN_IFMT_MASK (CGEN_OPCODE_FORMAT (opc)) -} CGEN_OPCODE; - -/* Instruction attributes. - This is made a published type as applications can cache a pointer to - the attributes for speed. */ - -#ifndef CGEN_INSN_NBOOL_ATTRS -#define CGEN_INSN_NBOOL_ATTRS 1 -#endif -typedef CGEN_ATTR_TYPE (CGEN_INSN_NBOOL_ATTRS) CGEN_INSN_ATTR_TYPE; - -/* Enum of architecture independent attributes. */ - -#ifndef CGEN_ARCH -/* ??? Numbers here are recorded in two places. */ -typedef enum cgen_insn_attr { - CGEN_INSN_ALIAS = 0 -} CGEN_INSN_ATTR; -#define CGEN_ATTR_CGEN_INSN_ALIAS_VALUE(attrs) ((attrs)->bool & (1 << CGEN_INSN_ALIAS)) -#endif - -/* This struct defines each entry in the instruction table. */ - -typedef struct -{ - /* Each real instruction is enumerated. */ - /* ??? This may go away in time. */ - int num; -#define CGEN_INSN_NUM(insn) ((insn)->base->num) - - /* Name of entry (that distinguishes it from all other entries). */ - /* ??? If mnemonics have operands, try to print full mnemonic. */ - const char *name; -#define CGEN_INSN_NAME(insn) ((insn)->base->name) - - /* Mnemonic. This is used when parsing and printing the insn. - In the case of insns that have operands on the mnemonics, this is - only the constant part. E.g. for conditional execution of an `add' insn, - where the full mnemonic is addeq, addne, etc., and the condition is - treated as an operand, this is only "add". */ - const char *mnemonic; -#define CGEN_INSN_MNEMONIC(insn) ((insn)->base->mnemonic) - - /* Total length of instruction, in bits. */ - int bitsize; -#define CGEN_INSN_BITSIZE(insn) ((insn)->base->bitsize) - -#if 0 /* ??? Disabled for now as there is a problem with embedded newlines - and the table is already pretty big. Should perhaps be moved - to a file of its own. */ - /* Semantics, as RTL. */ - /* ??? Plain text or bytecodes? */ - /* ??? Note that the operand instance table could be computed at run-time - if we parse this and cache the results. Something to eventually do. */ - const char *rtx; -#define CGEN_INSN_RTX(insn) ((insn)->base->rtx) -#endif - - /* Attributes. - This must appear last. It is a variable sized array in that one - architecture may have 1 nonbool attribute and another may have more. - Having this last means the non-architecture specific code needn't - care. The goal is to eventually record attributes in their raw form, - evaluate them at run-time, and cache the values, so this worry will go - away anyway. */ - CGEN_INSN_ATTR_TYPE attrs; -#define CGEN_INSN_ATTRS(insn) (&(insn)->base->attrs) -/* Return value of attribute ATTR in INSN. */ -#define CGEN_INSN_ATTR_VALUE(insn, attr) \ -CGEN_ATTR_VALUE ((insn), CGEN_INSN_ATTRS (insn), (attr)) -#define CGEN_INSN_BITSET_ATTR_VALUE(insn, attr) \ - CGEN_BITSET_ATTR_VALUE ((insn), CGEN_INSN_ATTRS (insn), (attr)) -} CGEN_IBASE; - -/* Return non-zero if INSN is the "invalid" insn marker. */ - -#define CGEN_INSN_INVALID_P(insn) (CGEN_INSN_MNEMONIC (insn) == 0) - -/* Main struct contain instruction information. - BASE is always present, the rest is present only if asked for. */ - -struct cgen_insn -{ - /* ??? May be of use to put a type indicator here. - Then this struct could different info for different classes of insns. */ - /* ??? A speedup can be had by moving `base' into this struct. - Maybe later. */ - const CGEN_IBASE *base; - const CGEN_OPCODE *opcode; - const CGEN_OPINST *opinst; - - /* Regex to disambiguate overloaded opcodes */ - void *rx; -#define CGEN_INSN_RX(insn) ((insn)->rx) -#define CGEN_MAX_RX_ELEMENTS (CGEN_MAX_SYNTAX_ELEMENTS * 5) -}; - -/* Instruction lists. - This is used for adding new entries and for creating the hash lists. */ - -typedef struct cgen_insn_list -{ - struct cgen_insn_list *next; - const CGEN_INSN *insn; -} CGEN_INSN_LIST; - -/* Table of instructions. */ - -typedef struct -{ - const CGEN_INSN *init_entries; - unsigned int entry_size; /* since the attribute member is variable sized */ - unsigned int num_init_entries; - CGEN_INSN_LIST *new_entries; -} CGEN_INSN_TABLE; - -/* Return number of instructions. This includes any added at run-time. */ - -extern int cgen_insn_count (CGEN_CPU_DESC); -extern int cgen_macro_insn_count (CGEN_CPU_DESC); - -/* Macros to access the other insn elements not recorded in CGEN_IBASE. */ - -/* Fetch INSN's operand instance table. */ -/* ??? Doesn't handle insns added at runtime. */ -#define CGEN_INSN_OPERANDS(insn) ((insn)->opinst) - -/* Return INSN's opcode table entry. */ -#define CGEN_INSN_OPCODE(insn) ((insn)->opcode) - -/* Return INSN's handler data. */ -#define CGEN_INSN_HANDLERS(insn) CGEN_OPCODE_HANDLERS (CGEN_INSN_OPCODE (insn)) - -/* Return INSN's syntax. */ -#define CGEN_INSN_SYNTAX(insn) CGEN_OPCODE_SYNTAX (CGEN_INSN_OPCODE (insn)) - -/* Return size of base mask in bits. */ -#define CGEN_INSN_MASK_BITSIZE(insn) \ - CGEN_OPCODE_MASK_BITSIZE (CGEN_INSN_OPCODE (insn)) - -/* Return mask of base part of INSN. */ -#define CGEN_INSN_BASE_MASK(insn) \ - CGEN_OPCODE_BASE_MASK (CGEN_INSN_OPCODE (insn)) - -/* Return value of base part of INSN. */ -#define CGEN_INSN_BASE_VALUE(insn) \ - CGEN_OPCODE_BASE_VALUE (CGEN_INSN_OPCODE (insn)) - -/* Standard way to test whether INSN is supported by MACH. - MACH is one of enum mach_attr. - The "|1" is because the base mach is always selected. */ -#define CGEN_INSN_MACH_HAS_P(insn, mach) \ -((CGEN_INSN_ATTR_VALUE ((insn), CGEN_INSN_MACH) & ((1 << (mach)) | 1)) != 0) - -/* Macro instructions. - Macro insns aren't real insns, they map to one or more real insns. - E.g. An architecture's "nop" insn may actually be an "mv r0,r0" or - some such. - - Macro insns can expand to nothing (e.g. a nop that is optimized away). - This is useful in multi-insn macros that build a constant in a register. - Of course this isn't the default behaviour and must be explicitly enabled. - - Assembly of macro-insns is relatively straightforward. Disassembly isn't. - However, disassembly of at least some kinds of macro insns is important - in order that the disassembled code preserve the readability of the original - insn. What is attempted here is to disassemble all "simple" macro-insns, - where "simple" is currently defined to mean "expands to one real insn". - - Simple macro-insns are handled specially. They are emitted as ALIAS's - of real insns. This simplifies their handling since there's usually more - of them than any other kind of macro-insn, and proper disassembly of them - falls out for free. */ - -/* For each macro-insn there may be multiple expansion possibilities, - depending on the arguments. This structure is accessed via the `data' - member of CGEN_INSN. */ - -typedef struct cgen_minsn_expansion { - /* Function to do the expansion. - If the expansion fails (e.g. "no match") NULL is returned. - Space for the expansion is obtained with malloc. - It is up to the caller to free it. */ - const char * (* fn) - (const struct cgen_minsn_expansion *, - const char *, const char **, int *, - CGEN_OPERAND **); -#define CGEN_MIEXPN_FN(ex) ((ex)->fn) - - /* Instruction(s) the macro expands to. - The format of STR is defined by FN. - It is typically the assembly code of the real insn, but it could also be - the original Scheme expression or a tokenized form of it (with FN being - an appropriate interpreter). */ - const char * str; -#define CGEN_MIEXPN_STR(ex) ((ex)->str) -} CGEN_MINSN_EXPANSION; - -/* Normal expander. - When supported, this function will convert the input string to another - string and the parser will be invoked recursively. The output string - may contain further macro invocations. */ - -extern const char * cgen_expand_macro_insn - (CGEN_CPU_DESC, const struct cgen_minsn_expansion *, - const char *, const char **, int *, CGEN_OPERAND **); - -/* The assembler insn table is hashed based on some function of the mnemonic - (the actually hashing done is up to the target, but we provide a few - examples like the first letter or a function of the entire mnemonic). */ - -extern CGEN_INSN_LIST * cgen_asm_lookup_insn - (CGEN_CPU_DESC, const char *); -#define CGEN_ASM_LOOKUP_INSN(cd, string) cgen_asm_lookup_insn ((cd), (string)) -#define CGEN_ASM_NEXT_INSN(insn) ((insn)->next) - -/* The disassembler insn table is hashed based on some function of machine - instruction (the actually hashing done is up to the target). */ - -extern CGEN_INSN_LIST * cgen_dis_lookup_insn - (CGEN_CPU_DESC, const char *, CGEN_INSN_INT); -/* FIXME: delete these two */ -#define CGEN_DIS_LOOKUP_INSN(cd, buf, value) cgen_dis_lookup_insn ((cd), (buf), (value)) -#define CGEN_DIS_NEXT_INSN(insn) ((insn)->next) - -/* The CPU description. - A copy of this is created when the cpu table is "opened". - All global state information is recorded here. - Access macros are provided for "public" members. */ - -typedef struct cgen_cpu_desc -{ - /* Bitmap of selected machine(s) (a la BFD machine number). */ - int machs; - - /* Bitmap of selected isa(s). */ - CGEN_BITSET *isas; -#define CGEN_CPU_ISAS(cd) ((cd)->isas) - - /* Current endian. */ - enum cgen_endian endian; -#define CGEN_CPU_ENDIAN(cd) ((cd)->endian) - - /* Current insn endian. */ - enum cgen_endian insn_endian; -#define CGEN_CPU_INSN_ENDIAN(cd) ((cd)->insn_endian) - - /* Word size (in bits). */ - /* ??? Or maybe maximum word size - might we ever need to allow a cpu table - to be opened for both sparc32/sparc64? - ??? Another alternative is to create a table of selected machs and - lazily fetch the data from there. */ - unsigned int word_bitsize; - - /* Instruction chunk size (in bits), for purposes of endianness - conversion. */ - unsigned int insn_chunk_bitsize; - - /* Indicator if sizes are unknown. - This is used by default_insn_bitsize,base_insn_bitsize if there is a - difference between the selected isa's. */ -#define CGEN_SIZE_UNKNOWN 65535 - - /* Default instruction size (in bits). - This is used by the assembler when it encounters an unknown insn. */ - unsigned int default_insn_bitsize; - - /* Base instruction size (in bits). - For non-LIW cpus this is generally the length of the smallest insn. - For LIW cpus its wip (work-in-progress). For the m32r its 32. */ - unsigned int base_insn_bitsize; - - /* Minimum/maximum instruction size (in bits). */ - unsigned int min_insn_bitsize; - unsigned int max_insn_bitsize; - - /* Instruction set variants. */ - const CGEN_ISA *isa_table; - - /* Machine variants. */ - const CGEN_MACH *mach_table; - - /* Hardware elements. */ - CGEN_HW_TABLE hw_table; - - /* Instruction fields. */ - const CGEN_IFLD *ifld_table; - - /* Operands. */ - CGEN_OPERAND_TABLE operand_table; - - /* Main instruction table. */ - CGEN_INSN_TABLE insn_table; -#define CGEN_CPU_INSN_TABLE(cd) (& (cd)->insn_table) - - /* Macro instructions are defined separately and are combined with real - insns during hash table computation. */ - CGEN_INSN_TABLE macro_insn_table; - - /* Copy of CGEN_INT_INSN_P. */ - int int_insn_p; - - /* Called to rebuild the tables after something has changed. */ - void (*rebuild_tables) (CGEN_CPU_DESC); - - /* Operand parser callback. */ - cgen_parse_operand_fn * parse_operand_fn; - - /* Parse/insert/extract/print cover fns for operands. */ - const char * (*parse_operand) - (CGEN_CPU_DESC, int opindex_, const char **, CGEN_FIELDS *fields_); -#ifdef __BFD_H_SEEN__ - const char * (*insert_operand) - (CGEN_CPU_DESC, int opindex_, CGEN_FIELDS *fields_, - CGEN_INSN_BYTES_PTR, bfd_vma pc_); - int (*extract_operand) - (CGEN_CPU_DESC, int opindex_, CGEN_EXTRACT_INFO *, CGEN_INSN_INT, - CGEN_FIELDS *fields_, bfd_vma pc_); - void (*print_operand) - (CGEN_CPU_DESC, int opindex_, void * info_, CGEN_FIELDS * fields_, - void const *attrs_, bfd_vma pc_, int length_); -#else - const char * (*insert_operand) (); - int (*extract_operand) (); - void (*print_operand) (); -#endif -#define CGEN_CPU_PARSE_OPERAND(cd) ((cd)->parse_operand) -#define CGEN_CPU_INSERT_OPERAND(cd) ((cd)->insert_operand) -#define CGEN_CPU_EXTRACT_OPERAND(cd) ((cd)->extract_operand) -#define CGEN_CPU_PRINT_OPERAND(cd) ((cd)->print_operand) - - /* Size of CGEN_FIELDS struct. */ - unsigned int sizeof_fields; -#define CGEN_CPU_SIZEOF_FIELDS(cd) ((cd)->sizeof_fields) - - /* Set the bitsize field. */ - void (*set_fields_bitsize) (CGEN_FIELDS *fields_, int size_); -#define CGEN_CPU_SET_FIELDS_BITSIZE(cd) ((cd)->set_fields_bitsize) - - /* CGEN_FIELDS accessors. */ - int (*get_int_operand) - (CGEN_CPU_DESC, int opindex_, const CGEN_FIELDS *fields_); - void (*set_int_operand) - (CGEN_CPU_DESC, int opindex_, CGEN_FIELDS *fields_, int value_); -#ifdef __BFD_H_SEEN__ - bfd_vma (*get_vma_operand) - (CGEN_CPU_DESC, int opindex_, const CGEN_FIELDS *fields_); - void (*set_vma_operand) - (CGEN_CPU_DESC, int opindex_, CGEN_FIELDS *fields_, bfd_vma value_); -#else - long (*get_vma_operand) (); - void (*set_vma_operand) (); -#endif -#define CGEN_CPU_GET_INT_OPERAND(cd) ((cd)->get_int_operand) -#define CGEN_CPU_SET_INT_OPERAND(cd) ((cd)->set_int_operand) -#define CGEN_CPU_GET_VMA_OPERAND(cd) ((cd)->get_vma_operand) -#define CGEN_CPU_SET_VMA_OPERAND(cd) ((cd)->set_vma_operand) - - /* Instruction parse/insert/extract/print handlers. */ - /* FIXME: make these types uppercase. */ - cgen_parse_fn * const *parse_handlers; - cgen_insert_fn * const *insert_handlers; - cgen_extract_fn * const *extract_handlers; - cgen_print_fn * const *print_handlers; -#define CGEN_PARSE_FN(cd, insn) (cd->parse_handlers[(insn)->opcode->handlers.parse]) -#define CGEN_INSERT_FN(cd, insn) (cd->insert_handlers[(insn)->opcode->handlers.insert]) -#define CGEN_EXTRACT_FN(cd, insn) (cd->extract_handlers[(insn)->opcode->handlers.extract]) -#define CGEN_PRINT_FN(cd, insn) (cd->print_handlers[(insn)->opcode->handlers.print]) - - /* Return non-zero if insn should be added to hash table. */ - int (* asm_hash_p) (const CGEN_INSN *); - - /* Assembler hash function. */ - unsigned int (* asm_hash) (const char *); - - /* Number of entries in assembler hash table. */ - unsigned int asm_hash_size; - - /* Return non-zero if insn should be added to hash table. */ - int (* dis_hash_p) (const CGEN_INSN *); - - /* Disassembler hash function. */ - unsigned int (* dis_hash) (const char *, CGEN_INSN_INT); - - /* Number of entries in disassembler hash table. */ - unsigned int dis_hash_size; - - /* Assembler instruction hash table. */ - CGEN_INSN_LIST **asm_hash_table; - CGEN_INSN_LIST *asm_hash_table_entries; - - /* Disassembler instruction hash table. */ - CGEN_INSN_LIST **dis_hash_table; - CGEN_INSN_LIST *dis_hash_table_entries; - - /* This field could be turned into a bitfield if room for other flags is needed. */ - unsigned int signed_overflow_ok_p; - -} CGEN_CPU_TABLE; - -/* wip */ -#ifndef CGEN_WORD_ENDIAN -#define CGEN_WORD_ENDIAN(cd) CGEN_CPU_ENDIAN (cd) -#endif -#ifndef CGEN_INSN_WORD_ENDIAN -#define CGEN_INSN_WORD_ENDIAN(cd) CGEN_CPU_INSN_ENDIAN (cd) -#endif - -/* Prototypes of major functions. */ -/* FIXME: Move more CGEN_SYM-defined functions into CGEN_CPU_DESC. - Not the init fns though, as that would drag in things that mightn't be - used and might not even exist. */ - -/* Argument types to cpu_open. */ - -enum cgen_cpu_open_arg { - CGEN_CPU_OPEN_END, - /* Select instruction set(s), arg is bitmap or 0 meaning "unspecified". */ - CGEN_CPU_OPEN_ISAS, - /* Select machine(s), arg is bitmap or 0 meaning "unspecified". */ - CGEN_CPU_OPEN_MACHS, - /* Select machine, arg is mach's bfd name. - Multiple machines can be specified by repeated use. */ - CGEN_CPU_OPEN_BFDMACH, - /* Select endian, arg is CGEN_ENDIAN_*. */ - CGEN_CPU_OPEN_ENDIAN -}; - -/* Open a cpu descriptor table for use. - ??? We only support ISO C stdargs here, not K&R. - Laziness, plus experiment to see if anything requires K&R - eventually - K&R will no longer be supported - e.g. GDB is currently trying this. */ - -extern CGEN_CPU_DESC CGEN_SYM (cpu_open) (enum cgen_cpu_open_arg, ...); - -/* Cover fn to handle simple case. */ - -extern CGEN_CPU_DESC CGEN_SYM (cpu_open_1) - (const char *mach_name_, enum cgen_endian endian_); - -/* Close it. */ - -extern void CGEN_SYM (cpu_close) (CGEN_CPU_DESC); - -/* Initialize the opcode table for use. - Called by init_asm/init_dis. */ - -extern void CGEN_SYM (init_opcode_table) (CGEN_CPU_DESC cd_); - -/* build the insn selection regex. - called by init_opcode_table */ - -extern char * CGEN_SYM(build_insn_regex) (CGEN_INSN *insn_); - -/* Initialize the ibld table for use. - Called by init_asm/init_dis. */ - -extern void CGEN_SYM (init_ibld_table) (CGEN_CPU_DESC cd_); - -/* Initialize an cpu table for assembler or disassembler use. - These must be called immediately after cpu_open. */ - -extern void CGEN_SYM (init_asm) (CGEN_CPU_DESC); -extern void CGEN_SYM (init_dis) (CGEN_CPU_DESC); - -/* Initialize the operand instance table for use. */ - -extern void CGEN_SYM (init_opinst_table) (CGEN_CPU_DESC cd_); - -/* Assemble an instruction. */ - -extern const CGEN_INSN * CGEN_SYM (assemble_insn) - (CGEN_CPU_DESC, const char *, CGEN_FIELDS *, - CGEN_INSN_BYTES_PTR, char **); - -extern const CGEN_KEYWORD CGEN_SYM (operand_mach); -extern int CGEN_SYM (get_mach) (const char *); - -/* Operand index computation. */ -extern const CGEN_INSN * cgen_lookup_insn - (CGEN_CPU_DESC, const CGEN_INSN * insn_, - CGEN_INSN_INT int_value_, unsigned char *bytes_value_, - int length_, CGEN_FIELDS *fields_, int alias_p_); -extern void cgen_get_insn_operands - (CGEN_CPU_DESC, const CGEN_INSN * insn_, - const CGEN_FIELDS *fields_, int *indices_); -extern const CGEN_INSN * cgen_lookup_get_insn_operands - (CGEN_CPU_DESC, const CGEN_INSN *insn_, - CGEN_INSN_INT int_value_, unsigned char *bytes_value_, - int length_, int *indices_, CGEN_FIELDS *fields_); - -/* Cover fns to bfd_get/set. */ - -extern CGEN_INSN_INT cgen_get_insn_value - (CGEN_CPU_DESC, unsigned char *, int); -extern void cgen_put_insn_value - (CGEN_CPU_DESC, unsigned char *, int, CGEN_INSN_INT); - -/* Read in a cpu description file. - ??? For future concerns, including adding instructions to the assembler/ - disassembler at run-time. */ - -extern const char * cgen_read_cpu_file (CGEN_CPU_DESC, const char * filename_); - -/* Allow signed overflow of instruction fields. */ -extern void cgen_set_signed_overflow_ok (CGEN_CPU_DESC); - -/* Generate an error message if a signed field in an instruction overflows. */ -extern void cgen_clear_signed_overflow_ok (CGEN_CPU_DESC); - -/* Will an error message be generated if a signed field in an instruction overflows ? */ -extern unsigned int cgen_signed_overflow_ok_p (CGEN_CPU_DESC); - -#endif /* CGEN_H */ diff --git a/include/opcode/convex.h b/include/opcode/convex.h deleted file mode 100644 index 7843dce8b5b..00000000000 --- a/include/opcode/convex.h +++ /dev/null @@ -1,1707 +0,0 @@ -/* Information for instruction disassembly on the Convex. - Copyright 1989, 1993, 2002 Free Software Foundation, Inc. - -This file is part of GDB. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#define xxx 0 -#define rrr 1 -#define rr 2 -#define rxr 3 -#define r 4 -#define nops 5 -#define nr 6 -#define pcrel 7 -#define lr 8 -#define rxl 9 -#define rlr 10 -#define rrl 11 -#define iml 12 -#define imr 13 -#define a1r 14 -#define a1l 15 -#define a2r 16 -#define a2l 17 -#define a3 18 -#define a4 19 -#define a5 20 -#define V 1 -#define S 2 -#define VM 3 -#define A 4 -#define VL 5 -#define VS 6 -#define VLS 7 -#define PSW 8 -/* Prevent an error during "make depend". */ -#if !defined (PC) -#define PC 9 -#endif -#define ITR 10 -#define VV 11 -#define ITSR 12 -#define TOC 13 -#define CIR 14 -#define TTR 15 -#define VMU 16 -#define VML 17 -#define ICR 18 -#define TCPU 19 -#define CPUID 20 -#define TID 21 - -const char *op[] = { - "", - "v0\0v1\0v2\0v3\0v4\0v5\0v6\0v7", - "s0\0s1\0s2\0s3\0s4\0s5\0s6\0s7", - "vm", - "sp\0a1\0a2\0a3\0a4\0a5\0ap\0fp", - "vl", - "vs", - "vls", - "psw", - "pc", - "itr", - "vv", - "itsr", - "toc", - "cir", - "ttr", - "vmu", - "vml", - "icr", - "tcpu", - "cpuid", - "tid", -}; - -const struct formstr format0[] = { - {0,0,rrr,V,S,S}, /* mov */ - {0,0,rrr,S,S,V}, /* mov */ - {1,1,rrr,V,V,V}, /* merg.t */ - {2,1,rrr,V,V,V}, /* mask.t */ - {1,2,rrr,V,S,V}, /* merg.f */ - {2,2,rrr,V,S,V}, /* mask.f */ - {1,1,rrr,V,S,V}, /* merg.t */ - {2,1,rrr,V,S,V}, /* mask.t */ - {3,3,rrr,V,V,V}, /* mul.s */ - {3,4,rrr,V,V,V}, /* mul.d */ - {4,3,rrr,V,V,V}, /* div.s */ - {4,4,rrr,V,V,V}, /* div.d */ - {3,3,rrr,V,S,V}, /* mul.s */ - {3,4,rrr,V,S,V}, /* mul.d */ - {4,3,rrr,V,S,V}, /* div.s */ - {4,4,rrr,V,S,V}, /* div.d */ - {5,0,rrr,V,V,V}, /* and */ - {6,0,rrr,V,V,V}, /* or */ - {7,0,rrr,V,V,V}, /* xor */ - {8,0,rrr,V,V,V}, /* shf */ - {5,0,rrr,V,S,V}, /* and */ - {6,0,rrr,V,S,V}, /* or */ - {7,0,rrr,V,S,V}, /* xor */ - {8,0,rrr,V,S,V}, /* shf */ - {9,3,rrr,V,V,V}, /* add.s */ - {9,4,rrr,V,V,V}, /* add.d */ - {10,3,rrr,V,V,V}, /* sub.s */ - {10,4,rrr,V,V,V}, /* sub.d */ - {9,3,rrr,V,S,V}, /* add.s */ - {9,4,rrr,V,S,V}, /* add.d */ - {10,3,rrr,V,S,V}, /* sub.s */ - {10,4,rrr,V,S,V}, /* sub.d */ - {9,5,rrr,V,V,V}, /* add.b */ - {9,6,rrr,V,V,V}, /* add.h */ - {9,7,rrr,V,V,V}, /* add.w */ - {9,8,rrr,V,V,V}, /* add.l */ - {9,5,rrr,V,S,V}, /* add.b */ - {9,6,rrr,V,S,V}, /* add.h */ - {9,7,rrr,V,S,V}, /* add.w */ - {9,8,rrr,V,S,V}, /* add.l */ - {10,5,rrr,V,V,V}, /* sub.b */ - {10,6,rrr,V,V,V}, /* sub.h */ - {10,7,rrr,V,V,V}, /* sub.w */ - {10,8,rrr,V,V,V}, /* sub.l */ - {10,5,rrr,V,S,V}, /* sub.b */ - {10,6,rrr,V,S,V}, /* sub.h */ - {10,7,rrr,V,S,V}, /* sub.w */ - {10,8,rrr,V,S,V}, /* sub.l */ - {3,5,rrr,V,V,V}, /* mul.b */ - {3,6,rrr,V,V,V}, /* mul.h */ - {3,7,rrr,V,V,V}, /* mul.w */ - {3,8,rrr,V,V,V}, /* mul.l */ - {3,5,rrr,V,S,V}, /* mul.b */ - {3,6,rrr,V,S,V}, /* mul.h */ - {3,7,rrr,V,S,V}, /* mul.w */ - {3,8,rrr,V,S,V}, /* mul.l */ - {4,5,rrr,V,V,V}, /* div.b */ - {4,6,rrr,V,V,V}, /* div.h */ - {4,7,rrr,V,V,V}, /* div.w */ - {4,8,rrr,V,V,V}, /* div.l */ - {4,5,rrr,V,S,V}, /* div.b */ - {4,6,rrr,V,S,V}, /* div.h */ - {4,7,rrr,V,S,V}, /* div.w */ - {4,8,rrr,V,S,V}, /* div.l */ -}; - -const struct formstr format1[] = { - {11,0,xxx,0,0,0}, /* exit */ - {12,0,a3,0,0,0}, /* jmp */ - {13,2,a3,0,0,0}, /* jmpi.f */ - {13,1,a3,0,0,0}, /* jmpi.t */ - {14,2,a3,0,0,0}, /* jmpa.f */ - {14,1,a3,0,0,0}, /* jmpa.t */ - {15,2,a3,0,0,0}, /* jmps.f */ - {15,1,a3,0,0,0}, /* jmps.t */ - {16,0,a3,0,0,0}, /* tac */ - {17,0,a1r,A,0,0}, /* ldea */ - {18,8,a1l,VLS,0,0}, /* ld.l */ - {18,9,a1l,VM,0,0}, /* ld.x */ - {19,0,a3,0,0,0}, /* tas */ - {20,0,a3,0,0,0}, /* pshea */ - {21,8,a2l,VLS,0,0}, /* st.l */ - {21,9,a2l,VM,0,0}, /* st.x */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {22,0,a3,0,0,0}, /* call */ - {23,0,a3,0,0,0}, /* calls */ - {24,0,a3,0,0,0}, /* callq */ - {25,0,a1r,A,0,0}, /* pfork */ - {26,5,a2r,S,0,0}, /* ste.b */ - {26,6,a2r,S,0,0}, /* ste.h */ - {26,7,a2r,S,0,0}, /* ste.w */ - {26,8,a2r,S,0,0}, /* ste.l */ - {18,5,a1r,A,0,0}, /* ld.b */ - {18,6,a1r,A,0,0}, /* ld.h */ - {18,7,a1r,A,0,0}, /* ld.w */ - {27,7,a1r,A,0,0}, /* incr.w */ - {21,5,a2r,A,0,0}, /* st.b */ - {21,6,a2r,A,0,0}, /* st.h */ - {21,7,a2r,A,0,0}, /* st.w */ - {27,8,a1r,S,0,0}, /* incr.l */ - {18,5,a1r,S,0,0}, /* ld.b */ - {18,6,a1r,S,0,0}, /* ld.h */ - {18,7,a1r,S,0,0}, /* ld.w */ - {18,8,a1r,S,0,0}, /* ld.l */ - {21,5,a2r,S,0,0}, /* st.b */ - {21,6,a2r,S,0,0}, /* st.h */ - {21,7,a2r,S,0,0}, /* st.w */ - {21,8,a2r,S,0,0}, /* st.l */ - {18,5,a1r,V,0,0}, /* ld.b */ - {18,6,a1r,V,0,0}, /* ld.h */ - {18,7,a1r,V,0,0}, /* ld.w */ - {18,8,a1r,V,0,0}, /* ld.l */ - {21,5,a2r,V,0,0}, /* st.b */ - {21,6,a2r,V,0,0}, /* st.h */ - {21,7,a2r,V,0,0}, /* st.w */ - {21,8,a2r,V,0,0}, /* st.l */ -}; - -const struct formstr format2[] = { - {28,5,rr,A,A,0}, /* cvtw.b */ - {28,6,rr,A,A,0}, /* cvtw.h */ - {29,7,rr,A,A,0}, /* cvtb.w */ - {30,7,rr,A,A,0}, /* cvth.w */ - {28,5,rr,S,S,0}, /* cvtw.b */ - {28,6,rr,S,S,0}, /* cvtw.h */ - {29,7,rr,S,S,0}, /* cvtb.w */ - {30,7,rr,S,S,0}, /* cvth.w */ - {28,3,rr,S,S,0}, /* cvtw.s */ - {31,7,rr,S,S,0}, /* cvts.w */ - {32,3,rr,S,S,0}, /* cvtd.s */ - {31,4,rr,S,S,0}, /* cvts.d */ - {31,8,rr,S,S,0}, /* cvts.l */ - {32,8,rr,S,S,0}, /* cvtd.l */ - {33,3,rr,S,S,0}, /* cvtl.s */ - {33,4,rr,S,S,0}, /* cvtl.d */ - {34,0,rr,A,A,0}, /* ldpa */ - {8,0,nr,A,0,0}, /* shf */ - {18,6,nr,A,0,0}, /* ld.h */ - {18,7,nr,A,0,0}, /* ld.w */ - {33,7,rr,S,S,0}, /* cvtl.w */ - {28,8,rr,S,S,0}, /* cvtw.l */ - {35,1,rr,S,S,0}, /* plc.t */ - {36,0,rr,S,S,0}, /* tzc */ - {37,6,rr,A,A,0}, /* eq.h */ - {37,7,rr,A,A,0}, /* eq.w */ - {37,6,nr,A,0,0}, /* eq.h */ - {37,7,nr,A,0,0}, /* eq.w */ - {37,5,rr,S,S,0}, /* eq.b */ - {37,6,rr,S,S,0}, /* eq.h */ - {37,7,rr,S,S,0}, /* eq.w */ - {37,8,rr,S,S,0}, /* eq.l */ - {38,6,rr,A,A,0}, /* leu.h */ - {38,7,rr,A,A,0}, /* leu.w */ - {38,6,nr,A,0,0}, /* leu.h */ - {38,7,nr,A,0,0}, /* leu.w */ - {38,5,rr,S,S,0}, /* leu.b */ - {38,6,rr,S,S,0}, /* leu.h */ - {38,7,rr,S,S,0}, /* leu.w */ - {38,8,rr,S,S,0}, /* leu.l */ - {39,6,rr,A,A,0}, /* ltu.h */ - {39,7,rr,A,A,0}, /* ltu.w */ - {39,6,nr,A,0,0}, /* ltu.h */ - {39,7,nr,A,0,0}, /* ltu.w */ - {39,5,rr,S,S,0}, /* ltu.b */ - {39,6,rr,S,S,0}, /* ltu.h */ - {39,7,rr,S,S,0}, /* ltu.w */ - {39,8,rr,S,S,0}, /* ltu.l */ - {40,6,rr,A,A,0}, /* le.h */ - {40,7,rr,A,A,0}, /* le.w */ - {40,6,nr,A,0,0}, /* le.h */ - {40,7,nr,A,0,0}, /* le.w */ - {40,5,rr,S,S,0}, /* le.b */ - {40,6,rr,S,S,0}, /* le.h */ - {40,7,rr,S,S,0}, /* le.w */ - {40,8,rr,S,S,0}, /* le.l */ - {41,6,rr,A,A,0}, /* lt.h */ - {41,7,rr,A,A,0}, /* lt.w */ - {41,6,nr,A,0,0}, /* lt.h */ - {41,7,nr,A,0,0}, /* lt.w */ - {41,5,rr,S,S,0}, /* lt.b */ - {41,6,rr,S,S,0}, /* lt.h */ - {41,7,rr,S,S,0}, /* lt.w */ - {41,8,rr,S,S,0}, /* lt.l */ - {9,7,rr,S,A,0}, /* add.w */ - {8,0,rr,A,A,0}, /* shf */ - {0,0,rr,A,A,0}, /* mov */ - {0,0,rr,S,A,0}, /* mov */ - {0,7,rr,S,S,0}, /* mov.w */ - {8,0,rr,S,S,0}, /* shf */ - {0,0,rr,S,S,0}, /* mov */ - {0,0,rr,A,S,0}, /* mov */ - {5,0,rr,A,A,0}, /* and */ - {6,0,rr,A,A,0}, /* or */ - {7,0,rr,A,A,0}, /* xor */ - {42,0,rr,A,A,0}, /* not */ - {5,0,rr,S,S,0}, /* and */ - {6,0,rr,S,S,0}, /* or */ - {7,0,rr,S,S,0}, /* xor */ - {42,0,rr,S,S,0}, /* not */ - {40,3,rr,S,S,0}, /* le.s */ - {40,4,rr,S,S,0}, /* le.d */ - {41,3,rr,S,S,0}, /* lt.s */ - {41,4,rr,S,S,0}, /* lt.d */ - {9,3,rr,S,S,0}, /* add.s */ - {9,4,rr,S,S,0}, /* add.d */ - {10,3,rr,S,S,0}, /* sub.s */ - {10,4,rr,S,S,0}, /* sub.d */ - {37,3,rr,S,S,0}, /* eq.s */ - {37,4,rr,S,S,0}, /* eq.d */ - {43,6,rr,A,A,0}, /* neg.h */ - {43,7,rr,A,A,0}, /* neg.w */ - {3,3,rr,S,S,0}, /* mul.s */ - {3,4,rr,S,S,0}, /* mul.d */ - {4,3,rr,S,S,0}, /* div.s */ - {4,4,rr,S,S,0}, /* div.d */ - {9,6,rr,A,A,0}, /* add.h */ - {9,7,rr,A,A,0}, /* add.w */ - {9,6,nr,A,0,0}, /* add.h */ - {9,7,nr,A,0,0}, /* add.w */ - {9,5,rr,S,S,0}, /* add.b */ - {9,6,rr,S,S,0}, /* add.h */ - {9,7,rr,S,S,0}, /* add.w */ - {9,8,rr,S,S,0}, /* add.l */ - {10,6,rr,A,A,0}, /* sub.h */ - {10,7,rr,A,A,0}, /* sub.w */ - {10,6,nr,A,0,0}, /* sub.h */ - {10,7,nr,A,0,0}, /* sub.w */ - {10,5,rr,S,S,0}, /* sub.b */ - {10,6,rr,S,S,0}, /* sub.h */ - {10,7,rr,S,S,0}, /* sub.w */ - {10,8,rr,S,S,0}, /* sub.l */ - {3,6,rr,A,A,0}, /* mul.h */ - {3,7,rr,A,A,0}, /* mul.w */ - {3,6,nr,A,0,0}, /* mul.h */ - {3,7,nr,A,0,0}, /* mul.w */ - {3,5,rr,S,S,0}, /* mul.b */ - {3,6,rr,S,S,0}, /* mul.h */ - {3,7,rr,S,S,0}, /* mul.w */ - {3,8,rr,S,S,0}, /* mul.l */ - {4,6,rr,A,A,0}, /* div.h */ - {4,7,rr,A,A,0}, /* div.w */ - {4,6,nr,A,0,0}, /* div.h */ - {4,7,nr,A,0,0}, /* div.w */ - {4,5,rr,S,S,0}, /* div.b */ - {4,6,rr,S,S,0}, /* div.h */ - {4,7,rr,S,S,0}, /* div.w */ - {4,8,rr,S,S,0}, /* div.l */ -}; - -const struct formstr format3[] = { - {32,3,rr,V,V,0}, /* cvtd.s */ - {31,4,rr,V,V,0}, /* cvts.d */ - {33,4,rr,V,V,0}, /* cvtl.d */ - {32,8,rr,V,V,0}, /* cvtd.l */ - {0,0,rrl,S,S,VM}, /* mov */ - {0,0,rlr,S,VM,S}, /* mov */ - {0,0,0,0,0,0}, - {44,0,rr,S,S,0}, /* lop */ - {36,0,rr,V,V,0}, /* tzc */ - {44,0,rr,V,V,0}, /* lop */ - {0,0,0,0,0,0}, - {42,0,rr,V,V,0}, /* not */ - {8,0,rr,S,V,0}, /* shf */ - {35,1,rr,V,V,0}, /* plc.t */ - {45,2,rr,V,V,0}, /* cprs.f */ - {45,1,rr,V,V,0}, /* cprs.t */ - {37,3,rr,V,V,0}, /* eq.s */ - {37,4,rr,V,V,0}, /* eq.d */ - {43,3,rr,V,V,0}, /* neg.s */ - {43,4,rr,V,V,0}, /* neg.d */ - {37,3,rr,S,V,0}, /* eq.s */ - {37,4,rr,S,V,0}, /* eq.d */ - {43,3,rr,S,S,0}, /* neg.s */ - {43,4,rr,S,S,0}, /* neg.d */ - {40,3,rr,V,V,0}, /* le.s */ - {40,4,rr,V,V,0}, /* le.d */ - {41,3,rr,V,V,0}, /* lt.s */ - {41,4,rr,V,V,0}, /* lt.d */ - {40,3,rr,S,V,0}, /* le.s */ - {40,4,rr,S,V,0}, /* le.d */ - {41,3,rr,S,V,0}, /* lt.s */ - {41,4,rr,S,V,0}, /* lt.d */ - {37,5,rr,V,V,0}, /* eq.b */ - {37,6,rr,V,V,0}, /* eq.h */ - {37,7,rr,V,V,0}, /* eq.w */ - {37,8,rr,V,V,0}, /* eq.l */ - {37,5,rr,S,V,0}, /* eq.b */ - {37,6,rr,S,V,0}, /* eq.h */ - {37,7,rr,S,V,0}, /* eq.w */ - {37,8,rr,S,V,0}, /* eq.l */ - {40,5,rr,V,V,0}, /* le.b */ - {40,6,rr,V,V,0}, /* le.h */ - {40,7,rr,V,V,0}, /* le.w */ - {40,8,rr,V,V,0}, /* le.l */ - {40,5,rr,S,V,0}, /* le.b */ - {40,6,rr,S,V,0}, /* le.h */ - {40,7,rr,S,V,0}, /* le.w */ - {40,8,rr,S,V,0}, /* le.l */ - {41,5,rr,V,V,0}, /* lt.b */ - {41,6,rr,V,V,0}, /* lt.h */ - {41,7,rr,V,V,0}, /* lt.w */ - {41,8,rr,V,V,0}, /* lt.l */ - {41,5,rr,S,V,0}, /* lt.b */ - {41,6,rr,S,V,0}, /* lt.h */ - {41,7,rr,S,V,0}, /* lt.w */ - {41,8,rr,S,V,0}, /* lt.l */ - {43,5,rr,V,V,0}, /* neg.b */ - {43,6,rr,V,V,0}, /* neg.h */ - {43,7,rr,V,V,0}, /* neg.w */ - {43,8,rr,V,V,0}, /* neg.l */ - {43,5,rr,S,S,0}, /* neg.b */ - {43,6,rr,S,S,0}, /* neg.h */ - {43,7,rr,S,S,0}, /* neg.w */ - {43,8,rr,S,S,0}, /* neg.l */ -}; - -const struct formstr format4[] = { - {46,0,nops,0,0,0}, /* nop */ - {47,0,pcrel,0,0,0}, /* br */ - {48,2,pcrel,0,0,0}, /* bri.f */ - {48,1,pcrel,0,0,0}, /* bri.t */ - {49,2,pcrel,0,0,0}, /* bra.f */ - {49,1,pcrel,0,0,0}, /* bra.t */ - {50,2,pcrel,0,0,0}, /* brs.f */ - {50,1,pcrel,0,0,0}, /* brs.t */ -}; - -const struct formstr format5[] = { - {51,5,rr,V,V,0}, /* ldvi.b */ - {51,6,rr,V,V,0}, /* ldvi.h */ - {51,7,rr,V,V,0}, /* ldvi.w */ - {51,8,rr,V,V,0}, /* ldvi.l */ - {28,3,rr,V,V,0}, /* cvtw.s */ - {31,7,rr,V,V,0}, /* cvts.w */ - {28,8,rr,V,V,0}, /* cvtw.l */ - {33,7,rr,V,V,0}, /* cvtl.w */ - {52,5,rxr,V,V,0}, /* stvi.b */ - {52,6,rxr,V,V,0}, /* stvi.h */ - {52,7,rxr,V,V,0}, /* stvi.w */ - {52,8,rxr,V,V,0}, /* stvi.l */ - {52,5,rxr,S,V,0}, /* stvi.b */ - {52,6,rxr,S,V,0}, /* stvi.h */ - {52,7,rxr,S,V,0}, /* stvi.w */ - {52,8,rxr,S,V,0}, /* stvi.l */ -}; - -const struct formstr format6[] = { - {53,0,r,A,0,0}, /* ldsdr */ - {54,0,r,A,0,0}, /* ldkdr */ - {55,3,r,S,0,0}, /* ln.s */ - {55,4,r,S,0,0}, /* ln.d */ - {56,0,nops,0,0,0}, /* patu */ - {57,0,r,A,0,0}, /* pate */ - {58,0,nops,0,0,0}, /* pich */ - {59,0,nops,0,0,0}, /* plch */ - {0,0,lr,PSW,A,0}, /* mov */ - {0,0,rxl,A,PSW,0}, /* mov */ - {0,0,lr,PC,A,0}, /* mov */ - {60,0,r,S,0,0}, /* idle */ - {0,0,lr,ITR,S,0}, /* mov */ - {0,0,rxl,S,ITR,0}, /* mov */ - {0,0,0,0,0,0}, - {0,0,rxl,S,ITSR,0}, /* mov */ - {61,0,nops,0,0,0}, /* rtnq */ - {62,0,nops,0,0,0}, /* cfork */ - {63,0,nops,0,0,0}, /* rtn */ - {64,0,nops,0,0,0}, /* wfork */ - {65,0,nops,0,0,0}, /* join */ - {66,0,nops,0,0,0}, /* rtnc */ - {67,3,r,S,0,0}, /* exp.s */ - {67,4,r,S,0,0}, /* exp.d */ - {68,3,r,S,0,0}, /* sin.s */ - {68,4,r,S,0,0}, /* sin.d */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {69,3,r,S,0,0}, /* cos.s */ - {69,4,r,S,0,0}, /* cos.d */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {70,7,r,A,0,0}, /* psh.w */ - {0,0,0,0,0,0}, - {71,7,r,A,0,0}, /* pop.w */ - {0,0,0,0,0,0}, - {70,7,r,S,0,0}, /* psh.w */ - {70,8,r,S,0,0}, /* psh.l */ - {71,7,r,S,0,0}, /* pop.w */ - {71,8,r,S,0,0}, /* pop.l */ - {72,0,nops,0,0,0}, /* eni */ - {73,0,nops,0,0,0}, /* dsi */ - {74,0,nops,0,0,0}, /* bkpt */ - {75,0,nops,0,0,0}, /* msync */ - {76,0,r,S,0,0}, /* mski */ - {77,0,r,S,0,0}, /* xmti */ - {0,0,rxl,S,VV,0}, /* mov */ - {78,0,nops,0,0,0}, /* tstvv */ - {0,0,lr,VS,A,0}, /* mov */ - {0,0,rxl,A,VS,0}, /* mov */ - {0,0,lr,VL,A,0}, /* mov */ - {0,0,rxl,A,VL,0}, /* mov */ - {0,7,lr,VS,S,0}, /* mov.w */ - {0,7,rxl,S,VS,0}, /* mov.w */ - {0,7,lr,VL,S,0}, /* mov.w */ - {0,7,rxl,S,VL,0}, /* mov.w */ - {79,0,r,A,0,0}, /* diag */ - {80,0,nops,0,0,0}, /* pbkpt */ - {81,3,r,S,0,0}, /* sqrt.s */ - {81,4,r,S,0,0}, /* sqrt.d */ - {82,0,nops,0,0,0}, /* casr */ - {0,0,0,0,0,0}, - {83,3,r,S,0,0}, /* atan.s */ - {83,4,r,S,0,0}, /* atan.d */ -}; - -const struct formstr format7[] = { - {84,5,r,V,0,0}, /* sum.b */ - {84,6,r,V,0,0}, /* sum.h */ - {84,7,r,V,0,0}, /* sum.w */ - {84,8,r,V,0,0}, /* sum.l */ - {85,0,r,V,0,0}, /* all */ - {86,0,r,V,0,0}, /* any */ - {87,0,r,V,0,0}, /* parity */ - {0,0,0,0,0,0}, - {88,5,r,V,0,0}, /* max.b */ - {88,6,r,V,0,0}, /* max.h */ - {88,7,r,V,0,0}, /* max.w */ - {88,8,r,V,0,0}, /* max.l */ - {89,5,r,V,0,0}, /* min.b */ - {89,6,r,V,0,0}, /* min.h */ - {89,7,r,V,0,0}, /* min.w */ - {89,8,r,V,0,0}, /* min.l */ - {84,3,r,V,0,0}, /* sum.s */ - {84,4,r,V,0,0}, /* sum.d */ - {90,3,r,V,0,0}, /* prod.s */ - {90,4,r,V,0,0}, /* prod.d */ - {88,3,r,V,0,0}, /* max.s */ - {88,4,r,V,0,0}, /* max.d */ - {89,3,r,V,0,0}, /* min.s */ - {89,4,r,V,0,0}, /* min.d */ - {90,5,r,V,0,0}, /* prod.b */ - {90,6,r,V,0,0}, /* prod.h */ - {90,7,r,V,0,0}, /* prod.w */ - {90,8,r,V,0,0}, /* prod.l */ - {35,2,lr,VM,S,0}, /* plc.f */ - {35,1,lr,VM,S,0}, /* plc.t */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, -}; - -const struct formstr formatx[] = { - {0,0,0,0,0,0}, -}; - -const struct formstr format1a[] = { - {91,0,imr,A,0,0}, /* halt */ - {92,0,a4,0,0,0}, /* sysc */ - {18,6,imr,A,0,0}, /* ld.h */ - {18,7,imr,A,0,0}, /* ld.w */ - {5,0,imr,A,0,0}, /* and */ - {6,0,imr,A,0,0}, /* or */ - {7,0,imr,A,0,0}, /* xor */ - {8,0,imr,A,0,0}, /* shf */ - {9,6,imr,A,0,0}, /* add.h */ - {9,7,imr,A,0,0}, /* add.w */ - {10,6,imr,A,0,0}, /* sub.h */ - {10,7,imr,A,0,0}, /* sub.w */ - {3,6,imr,A,0,0}, /* mul.h */ - {3,7,imr,A,0,0}, /* mul.w */ - {4,6,imr,A,0,0}, /* div.h */ - {4,7,imr,A,0,0}, /* div.w */ - {18,7,iml,VL,0,0}, /* ld.w */ - {18,7,iml,VS,0,0}, /* ld.w */ - {0,0,0,0,0,0}, - {8,7,imr,S,0,0}, /* shf.w */ - {93,0,a5,0,0,0}, /* trap */ - {0,0,0,0,0,0}, - {37,6,imr,A,0,0}, /* eq.h */ - {37,7,imr,A,0,0}, /* eq.w */ - {38,6,imr,A,0,0}, /* leu.h */ - {38,7,imr,A,0,0}, /* leu.w */ - {39,6,imr,A,0,0}, /* ltu.h */ - {39,7,imr,A,0,0}, /* ltu.w */ - {40,6,imr,A,0,0}, /* le.h */ - {40,7,imr,A,0,0}, /* le.w */ - {41,6,imr,A,0,0}, /* lt.h */ - {41,7,imr,A,0,0}, /* lt.w */ -}; - -const struct formstr format1b[] = { - {18,4,imr,S,0,0}, /* ld.d */ - {18,10,imr,S,0,0}, /* ld.u */ - {18,8,imr,S,0,0}, /* ld.l */ - {18,7,imr,S,0,0}, /* ld.w */ - {5,0,imr,S,0,0}, /* and */ - {6,0,imr,S,0,0}, /* or */ - {7,0,imr,S,0,0}, /* xor */ - {8,0,imr,S,0,0}, /* shf */ - {9,6,imr,S,0,0}, /* add.h */ - {9,7,imr,S,0,0}, /* add.w */ - {10,6,imr,S,0,0}, /* sub.h */ - {10,7,imr,S,0,0}, /* sub.w */ - {3,6,imr,S,0,0}, /* mul.h */ - {3,7,imr,S,0,0}, /* mul.w */ - {4,6,imr,S,0,0}, /* div.h */ - {4,7,imr,S,0,0}, /* div.w */ - {9,3,imr,S,0,0}, /* add.s */ - {10,3,imr,S,0,0}, /* sub.s */ - {3,3,imr,S,0,0}, /* mul.s */ - {4,3,imr,S,0,0}, /* div.s */ - {40,3,imr,S,0,0}, /* le.s */ - {41,3,imr,S,0,0}, /* lt.s */ - {37,6,imr,S,0,0}, /* eq.h */ - {37,7,imr,S,0,0}, /* eq.w */ - {38,6,imr,S,0,0}, /* leu.h */ - {38,7,imr,S,0,0}, /* leu.w */ - {39,6,imr,S,0,0}, /* ltu.h */ - {39,7,imr,S,0,0}, /* ltu.w */ - {40,6,imr,S,0,0}, /* le.h */ - {40,7,imr,S,0,0}, /* le.w */ - {41,6,imr,S,0,0}, /* lt.h */ - {41,7,imr,S,0,0}, /* lt.w */ -}; - -const struct formstr e0_format0[] = { - {10,3,rrr,S,V,V}, /* sub.s */ - {10,4,rrr,S,V,V}, /* sub.d */ - {4,3,rrr,S,V,V}, /* div.s */ - {4,4,rrr,S,V,V}, /* div.d */ - {10,11,rrr,S,V,V}, /* sub.s.f */ - {10,12,rrr,S,V,V}, /* sub.d.f */ - {4,11,rrr,S,V,V}, /* div.s.f */ - {4,12,rrr,S,V,V}, /* div.d.f */ - {3,11,rrr,V,V,V}, /* mul.s.f */ - {3,12,rrr,V,V,V}, /* mul.d.f */ - {4,11,rrr,V,V,V}, /* div.s.f */ - {4,12,rrr,V,V,V}, /* div.d.f */ - {3,11,rrr,V,S,V}, /* mul.s.f */ - {3,12,rrr,V,S,V}, /* mul.d.f */ - {4,11,rrr,V,S,V}, /* div.s.f */ - {4,12,rrr,V,S,V}, /* div.d.f */ - {5,2,rrr,V,V,V}, /* and.f */ - {6,2,rrr,V,V,V}, /* or.f */ - {7,2,rrr,V,V,V}, /* xor.f */ - {8,2,rrr,V,V,V}, /* shf.f */ - {5,2,rrr,V,S,V}, /* and.f */ - {6,2,rrr,V,S,V}, /* or.f */ - {7,2,rrr,V,S,V}, /* xor.f */ - {8,2,rrr,V,S,V}, /* shf.f */ - {9,11,rrr,V,V,V}, /* add.s.f */ - {9,12,rrr,V,V,V}, /* add.d.f */ - {10,11,rrr,V,V,V}, /* sub.s.f */ - {10,12,rrr,V,V,V}, /* sub.d.f */ - {9,11,rrr,V,S,V}, /* add.s.f */ - {9,12,rrr,V,S,V}, /* add.d.f */ - {10,11,rrr,V,S,V}, /* sub.s.f */ - {10,12,rrr,V,S,V}, /* sub.d.f */ - {9,13,rrr,V,V,V}, /* add.b.f */ - {9,14,rrr,V,V,V}, /* add.h.f */ - {9,15,rrr,V,V,V}, /* add.w.f */ - {9,16,rrr,V,V,V}, /* add.l.f */ - {9,13,rrr,V,S,V}, /* add.b.f */ - {9,14,rrr,V,S,V}, /* add.h.f */ - {9,15,rrr,V,S,V}, /* add.w.f */ - {9,16,rrr,V,S,V}, /* add.l.f */ - {10,13,rrr,V,V,V}, /* sub.b.f */ - {10,14,rrr,V,V,V}, /* sub.h.f */ - {10,15,rrr,V,V,V}, /* sub.w.f */ - {10,16,rrr,V,V,V}, /* sub.l.f */ - {10,13,rrr,V,S,V}, /* sub.b.f */ - {10,14,rrr,V,S,V}, /* sub.h.f */ - {10,15,rrr,V,S,V}, /* sub.w.f */ - {10,16,rrr,V,S,V}, /* sub.l.f */ - {3,13,rrr,V,V,V}, /* mul.b.f */ - {3,14,rrr,V,V,V}, /* mul.h.f */ - {3,15,rrr,V,V,V}, /* mul.w.f */ - {3,16,rrr,V,V,V}, /* mul.l.f */ - {3,13,rrr,V,S,V}, /* mul.b.f */ - {3,14,rrr,V,S,V}, /* mul.h.f */ - {3,15,rrr,V,S,V}, /* mul.w.f */ - {3,16,rrr,V,S,V}, /* mul.l.f */ - {4,13,rrr,V,V,V}, /* div.b.f */ - {4,14,rrr,V,V,V}, /* div.h.f */ - {4,15,rrr,V,V,V}, /* div.w.f */ - {4,16,rrr,V,V,V}, /* div.l.f */ - {4,13,rrr,V,S,V}, /* div.b.f */ - {4,14,rrr,V,S,V}, /* div.h.f */ - {4,15,rrr,V,S,V}, /* div.w.f */ - {4,16,rrr,V,S,V}, /* div.l.f */ -}; - -const struct formstr e0_format1[] = { - {0,0,0,0,0,0}, - {94,0,a3,0,0,0}, /* tst */ - {95,0,a3,0,0,0}, /* lck */ - {96,0,a3,0,0,0}, /* ulk */ - {17,0,a1r,S,0,0}, /* ldea */ - {97,0,a1r,A,0,0}, /* spawn */ - {98,0,a1r,A,0,0}, /* ldcmr */ - {99,0,a2r,A,0,0}, /* stcmr */ - {100,0,a1r,A,0,0}, /* popr */ - {101,0,a2r,A,0,0}, /* pshr */ - {102,7,a1r,A,0,0}, /* rcvr.w */ - {103,7,a2r,A,0,0}, /* matm.w */ - {104,7,a2r,A,0,0}, /* sndr.w */ - {104,8,a2r,S,0,0}, /* sndr.l */ - {102,8,a1r,S,0,0}, /* rcvr.l */ - {103,8,a2r,S,0,0}, /* matm.l */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {105,7,a2r,A,0,0}, /* putr.w */ - {105,8,a2r,S,0,0}, /* putr.l */ - {106,7,a1r,A,0,0}, /* getr.w */ - {106,8,a1r,S,0,0}, /* getr.l */ - {26,13,a2r,S,0,0}, /* ste.b.f */ - {26,14,a2r,S,0,0}, /* ste.h.f */ - {26,15,a2r,S,0,0}, /* ste.w.f */ - {26,16,a2r,S,0,0}, /* ste.l.f */ - {107,7,a2r,A,0,0}, /* matr.w */ - {108,7,a2r,A,0,0}, /* mat.w */ - {109,7,a1r,A,0,0}, /* get.w */ - {110,7,a1r,A,0,0}, /* rcv.w */ - {0,0,0,0,0,0}, - {111,7,a1r,A,0,0}, /* inc.w */ - {112,7,a2r,A,0,0}, /* put.w */ - {113,7,a2r,A,0,0}, /* snd.w */ - {107,8,a2r,S,0,0}, /* matr.l */ - {108,8,a2r,S,0,0}, /* mat.l */ - {109,8,a1r,S,0,0}, /* get.l */ - {110,8,a1r,S,0,0}, /* rcv.l */ - {0,0,0,0,0,0}, - {111,8,a1r,S,0,0}, /* inc.l */ - {112,8,a2r,S,0,0}, /* put.l */ - {113,8,a2r,S,0,0}, /* snd.l */ - {18,13,a1r,V,0,0}, /* ld.b.f */ - {18,14,a1r,V,0,0}, /* ld.h.f */ - {18,15,a1r,V,0,0}, /* ld.w.f */ - {18,16,a1r,V,0,0}, /* ld.l.f */ - {21,13,a2r,V,0,0}, /* st.b.f */ - {21,14,a2r,V,0,0}, /* st.h.f */ - {21,15,a2r,V,0,0}, /* st.w.f */ - {21,16,a2r,V,0,0}, /* st.l.f */ -}; - -const struct formstr e0_format2[] = { - {28,5,rr,V,V,0}, /* cvtw.b */ - {28,6,rr,V,V,0}, /* cvtw.h */ - {29,7,rr,V,V,0}, /* cvtb.w */ - {30,7,rr,V,V,0}, /* cvth.w */ - {28,13,rr,V,V,0}, /* cvtw.b.f */ - {28,14,rr,V,V,0}, /* cvtw.h.f */ - {29,15,rr,V,V,0}, /* cvtb.w.f */ - {30,15,rr,V,V,0}, /* cvth.w.f */ - {31,8,rr,V,V,0}, /* cvts.l */ - {32,7,rr,V,V,0}, /* cvtd.w */ - {33,3,rr,V,V,0}, /* cvtl.s */ - {28,4,rr,V,V,0}, /* cvtw.d */ - {31,16,rr,V,V,0}, /* cvts.l.f */ - {32,15,rr,V,V,0}, /* cvtd.w.f */ - {33,11,rr,V,V,0}, /* cvtl.s.f */ - {28,12,rr,V,V,0}, /* cvtw.d.f */ - {114,0,rr,S,S,0}, /* enal */ - {8,7,rr,S,S,0}, /* shf.w */ - {115,0,rr,S,S,0}, /* enag */ - {0,0,0,0,0,0}, - {28,4,rr,S,S,0}, /* cvtw.d */ - {32,7,rr,S,S,0}, /* cvtd.w */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {116,3,rr,S,S,0}, /* frint.s */ - {116,4,rr,S,S,0}, /* frint.d */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {116,3,rr,V,V,0}, /* frint.s */ - {116,4,rr,V,V,0}, /* frint.d */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {116,11,rr,V,V,0}, /* frint.s.f */ - {116,12,rr,V,V,0}, /* frint.d.f */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {81,3,rr,V,V,0}, /* sqrt.s */ - {81,4,rr,V,V,0}, /* sqrt.d */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {81,11,rr,V,V,0}, /* sqrt.s.f */ - {81,12,rr,V,V,0}, /* sqrt.d.f */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, -}; - -const struct formstr e0_format3[] = { - {32,11,rr,V,V,0}, /* cvtd.s.f */ - {31,12,rr,V,V,0}, /* cvts.d.f */ - {33,12,rr,V,V,0}, /* cvtl.d.f */ - {32,16,rr,V,V,0}, /* cvtd.l.f */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {36,2,rr,V,V,0}, /* tzc.f */ - {44,2,rr,V,V,0}, /* lop.f */ - {117,2,rr,V,V,0}, /* xpnd.f */ - {42,2,rr,V,V,0}, /* not.f */ - {8,2,rr,S,V,0}, /* shf.f */ - {35,17,rr,V,V,0}, /* plc.t.f */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {37,11,rr,V,V,0}, /* eq.s.f */ - {37,12,rr,V,V,0}, /* eq.d.f */ - {43,11,rr,V,V,0}, /* neg.s.f */ - {43,12,rr,V,V,0}, /* neg.d.f */ - {37,11,rr,S,V,0}, /* eq.s.f */ - {37,12,rr,S,V,0}, /* eq.d.f */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {40,11,rr,V,V,0}, /* le.s.f */ - {40,12,rr,V,V,0}, /* le.d.f */ - {41,11,rr,V,V,0}, /* lt.s.f */ - {41,12,rr,V,V,0}, /* lt.d.f */ - {40,11,rr,S,V,0}, /* le.s.f */ - {40,12,rr,S,V,0}, /* le.d.f */ - {41,11,rr,S,V,0}, /* lt.s.f */ - {41,12,rr,S,V,0}, /* lt.d.f */ - {37,13,rr,V,V,0}, /* eq.b.f */ - {37,14,rr,V,V,0}, /* eq.h.f */ - {37,15,rr,V,V,0}, /* eq.w.f */ - {37,16,rr,V,V,0}, /* eq.l.f */ - {37,13,rr,S,V,0}, /* eq.b.f */ - {37,14,rr,S,V,0}, /* eq.h.f */ - {37,15,rr,S,V,0}, /* eq.w.f */ - {37,16,rr,S,V,0}, /* eq.l.f */ - {40,13,rr,V,V,0}, /* le.b.f */ - {40,14,rr,V,V,0}, /* le.h.f */ - {40,15,rr,V,V,0}, /* le.w.f */ - {40,16,rr,V,V,0}, /* le.l.f */ - {40,13,rr,S,V,0}, /* le.b.f */ - {40,14,rr,S,V,0}, /* le.h.f */ - {40,15,rr,S,V,0}, /* le.w.f */ - {40,16,rr,S,V,0}, /* le.l.f */ - {41,13,rr,V,V,0}, /* lt.b.f */ - {41,14,rr,V,V,0}, /* lt.h.f */ - {41,15,rr,V,V,0}, /* lt.w.f */ - {41,16,rr,V,V,0}, /* lt.l.f */ - {41,13,rr,S,V,0}, /* lt.b.f */ - {41,14,rr,S,V,0}, /* lt.h.f */ - {41,15,rr,S,V,0}, /* lt.w.f */ - {41,16,rr,S,V,0}, /* lt.l.f */ - {43,13,rr,V,V,0}, /* neg.b.f */ - {43,14,rr,V,V,0}, /* neg.h.f */ - {43,15,rr,V,V,0}, /* neg.w.f */ - {43,16,rr,V,V,0}, /* neg.l.f */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, -}; - -const struct formstr e0_format4[] = { - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, -}; - -const struct formstr e0_format5[] = { - {51,13,rr,V,V,0}, /* ldvi.b.f */ - {51,14,rr,V,V,0}, /* ldvi.h.f */ - {51,15,rr,V,V,0}, /* ldvi.w.f */ - {51,16,rr,V,V,0}, /* ldvi.l.f */ - {28,11,rr,V,V,0}, /* cvtw.s.f */ - {31,15,rr,V,V,0}, /* cvts.w.f */ - {28,16,rr,V,V,0}, /* cvtw.l.f */ - {33,15,rr,V,V,0}, /* cvtl.w.f */ - {52,13,rxr,V,V,0}, /* stvi.b.f */ - {52,14,rxr,V,V,0}, /* stvi.h.f */ - {52,15,rxr,V,V,0}, /* stvi.w.f */ - {52,16,rxr,V,V,0}, /* stvi.l.f */ - {52,13,rxr,S,V,0}, /* stvi.b.f */ - {52,14,rxr,S,V,0}, /* stvi.h.f */ - {52,15,rxr,S,V,0}, /* stvi.w.f */ - {52,16,rxr,S,V,0}, /* stvi.l.f */ -}; - -const struct formstr e0_format6[] = { - {0,0,rxl,S,CIR,0}, /* mov */ - {0,0,lr,CIR,S,0}, /* mov */ - {0,0,lr,TOC,S,0}, /* mov */ - {0,0,lr,CPUID,S,0}, /* mov */ - {0,0,rxl,S,TTR,0}, /* mov */ - {0,0,lr,TTR,S,0}, /* mov */ - {118,0,nops,0,0,0}, /* ctrsl */ - {119,0,nops,0,0,0}, /* ctrsg */ - {0,0,rxl,S,VMU,0}, /* mov */ - {0,0,lr,VMU,S,0}, /* mov */ - {0,0,rxl,S,VML,0}, /* mov */ - {0,0,lr,VML,S,0}, /* mov */ - {0,0,rxl,S,ICR,0}, /* mov */ - {0,0,lr,ICR,S,0}, /* mov */ - {0,0,rxl,S,TCPU,0}, /* mov */ - {0,0,lr,TCPU,S,0}, /* mov */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {120,0,nops,0,0,0}, /* stop */ - {0,0,0,0,0,0}, - {0,0,rxl,S,TID,0}, /* mov */ - {0,0,lr,TID,S,0}, /* mov */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, -}; - -const struct formstr e0_format7[] = { - {84,13,r,V,0,0}, /* sum.b.f */ - {84,14,r,V,0,0}, /* sum.h.f */ - {84,15,r,V,0,0}, /* sum.w.f */ - {84,16,r,V,0,0}, /* sum.l.f */ - {85,2,r,V,0,0}, /* all.f */ - {86,2,r,V,0,0}, /* any.f */ - {87,2,r,V,0,0}, /* parity.f */ - {0,0,0,0,0,0}, - {88,13,r,V,0,0}, /* max.b.f */ - {88,14,r,V,0,0}, /* max.h.f */ - {88,15,r,V,0,0}, /* max.w.f */ - {88,16,r,V,0,0}, /* max.l.f */ - {89,13,r,V,0,0}, /* min.b.f */ - {89,14,r,V,0,0}, /* min.h.f */ - {89,15,r,V,0,0}, /* min.w.f */ - {89,16,r,V,0,0}, /* min.l.f */ - {84,11,r,V,0,0}, /* sum.s.f */ - {84,12,r,V,0,0}, /* sum.d.f */ - {90,11,r,V,0,0}, /* prod.s.f */ - {90,12,r,V,0,0}, /* prod.d.f */ - {88,11,r,V,0,0}, /* max.s.f */ - {88,12,r,V,0,0}, /* max.d.f */ - {89,11,r,V,0,0}, /* min.s.f */ - {89,12,r,V,0,0}, /* min.d.f */ - {90,13,r,V,0,0}, /* prod.b.f */ - {90,14,r,V,0,0}, /* prod.h.f */ - {90,15,r,V,0,0}, /* prod.w.f */ - {90,16,r,V,0,0}, /* prod.l.f */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, -}; - -const struct formstr e1_format0[] = { - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {10,18,rrr,S,V,V}, /* sub.s.t */ - {10,19,rrr,S,V,V}, /* sub.d.t */ - {4,18,rrr,S,V,V}, /* div.s.t */ - {4,19,rrr,S,V,V}, /* div.d.t */ - {3,18,rrr,V,V,V}, /* mul.s.t */ - {3,19,rrr,V,V,V}, /* mul.d.t */ - {4,18,rrr,V,V,V}, /* div.s.t */ - {4,19,rrr,V,V,V}, /* div.d.t */ - {3,18,rrr,V,S,V}, /* mul.s.t */ - {3,19,rrr,V,S,V}, /* mul.d.t */ - {4,18,rrr,V,S,V}, /* div.s.t */ - {4,19,rrr,V,S,V}, /* div.d.t */ - {5,1,rrr,V,V,V}, /* and.t */ - {6,1,rrr,V,V,V}, /* or.t */ - {7,1,rrr,V,V,V}, /* xor.t */ - {8,1,rrr,V,V,V}, /* shf.t */ - {5,1,rrr,V,S,V}, /* and.t */ - {6,1,rrr,V,S,V}, /* or.t */ - {7,1,rrr,V,S,V}, /* xor.t */ - {8,1,rrr,V,S,V}, /* shf.t */ - {9,18,rrr,V,V,V}, /* add.s.t */ - {9,19,rrr,V,V,V}, /* add.d.t */ - {10,18,rrr,V,V,V}, /* sub.s.t */ - {10,19,rrr,V,V,V}, /* sub.d.t */ - {9,18,rrr,V,S,V}, /* add.s.t */ - {9,19,rrr,V,S,V}, /* add.d.t */ - {10,18,rrr,V,S,V}, /* sub.s.t */ - {10,19,rrr,V,S,V}, /* sub.d.t */ - {9,20,rrr,V,V,V}, /* add.b.t */ - {9,21,rrr,V,V,V}, /* add.h.t */ - {9,22,rrr,V,V,V}, /* add.w.t */ - {9,23,rrr,V,V,V}, /* add.l.t */ - {9,20,rrr,V,S,V}, /* add.b.t */ - {9,21,rrr,V,S,V}, /* add.h.t */ - {9,22,rrr,V,S,V}, /* add.w.t */ - {9,23,rrr,V,S,V}, /* add.l.t */ - {10,20,rrr,V,V,V}, /* sub.b.t */ - {10,21,rrr,V,V,V}, /* sub.h.t */ - {10,22,rrr,V,V,V}, /* sub.w.t */ - {10,23,rrr,V,V,V}, /* sub.l.t */ - {10,20,rrr,V,S,V}, /* sub.b.t */ - {10,21,rrr,V,S,V}, /* sub.h.t */ - {10,22,rrr,V,S,V}, /* sub.w.t */ - {10,23,rrr,V,S,V}, /* sub.l.t */ - {3,20,rrr,V,V,V}, /* mul.b.t */ - {3,21,rrr,V,V,V}, /* mul.h.t */ - {3,22,rrr,V,V,V}, /* mul.w.t */ - {3,23,rrr,V,V,V}, /* mul.l.t */ - {3,20,rrr,V,S,V}, /* mul.b.t */ - {3,21,rrr,V,S,V}, /* mul.h.t */ - {3,22,rrr,V,S,V}, /* mul.w.t */ - {3,23,rrr,V,S,V}, /* mul.l.t */ - {4,20,rrr,V,V,V}, /* div.b.t */ - {4,21,rrr,V,V,V}, /* div.h.t */ - {4,22,rrr,V,V,V}, /* div.w.t */ - {4,23,rrr,V,V,V}, /* div.l.t */ - {4,20,rrr,V,S,V}, /* div.b.t */ - {4,21,rrr,V,S,V}, /* div.h.t */ - {4,22,rrr,V,S,V}, /* div.w.t */ - {4,23,rrr,V,S,V}, /* div.l.t */ -}; - -const struct formstr e1_format1[] = { - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {26,20,a2r,S,0,0}, /* ste.b.t */ - {26,21,a2r,S,0,0}, /* ste.h.t */ - {26,22,a2r,S,0,0}, /* ste.w.t */ - {26,23,a2r,S,0,0}, /* ste.l.t */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {18,20,a1r,V,0,0}, /* ld.b.t */ - {18,21,a1r,V,0,0}, /* ld.h.t */ - {18,22,a1r,V,0,0}, /* ld.w.t */ - {18,23,a1r,V,0,0}, /* ld.l.t */ - {21,20,a2r,V,0,0}, /* st.b.t */ - {21,21,a2r,V,0,0}, /* st.h.t */ - {21,22,a2r,V,0,0}, /* st.w.t */ - {21,23,a2r,V,0,0}, /* st.l.t */ -}; - -const struct formstr e1_format2[] = { - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {28,20,rr,V,V,0}, /* cvtw.b.t */ - {28,21,rr,V,V,0}, /* cvtw.h.t */ - {29,22,rr,V,V,0}, /* cvtb.w.t */ - {30,22,rr,V,V,0}, /* cvth.w.t */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {31,23,rr,V,V,0}, /* cvts.l.t */ - {32,22,rr,V,V,0}, /* cvtd.w.t */ - {33,18,rr,V,V,0}, /* cvtl.s.t */ - {28,19,rr,V,V,0}, /* cvtw.d.t */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {116,18,rr,V,V,0}, /* frint.s.t */ - {116,19,rr,V,V,0}, /* frint.d.t */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {81,18,rr,V,V,0}, /* sqrt.s.t */ - {81,19,rr,V,V,0}, /* sqrt.d.t */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, -}; - -const struct formstr e1_format3[] = { - {32,18,rr,V,V,0}, /* cvtd.s.t */ - {31,19,rr,V,V,0}, /* cvts.d.t */ - {33,19,rr,V,V,0}, /* cvtl.d.t */ - {32,23,rr,V,V,0}, /* cvtd.l.t */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {36,1,rr,V,V,0}, /* tzc.t */ - {44,1,rr,V,V,0}, /* lop.t */ - {117,1,rr,V,V,0}, /* xpnd.t */ - {42,1,rr,V,V,0}, /* not.t */ - {8,1,rr,S,V,0}, /* shf.t */ - {35,24,rr,V,V,0}, /* plc.t.t */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {37,18,rr,V,V,0}, /* eq.s.t */ - {37,19,rr,V,V,0}, /* eq.d.t */ - {43,18,rr,V,V,0}, /* neg.s.t */ - {43,19,rr,V,V,0}, /* neg.d.t */ - {37,18,rr,S,V,0}, /* eq.s.t */ - {37,19,rr,S,V,0}, /* eq.d.t */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {40,18,rr,V,V,0}, /* le.s.t */ - {40,19,rr,V,V,0}, /* le.d.t */ - {41,18,rr,V,V,0}, /* lt.s.t */ - {41,19,rr,V,V,0}, /* lt.d.t */ - {40,18,rr,S,V,0}, /* le.s.t */ - {40,19,rr,S,V,0}, /* le.d.t */ - {41,18,rr,S,V,0}, /* lt.s.t */ - {41,19,rr,S,V,0}, /* lt.d.t */ - {37,20,rr,V,V,0}, /* eq.b.t */ - {37,21,rr,V,V,0}, /* eq.h.t */ - {37,22,rr,V,V,0}, /* eq.w.t */ - {37,23,rr,V,V,0}, /* eq.l.t */ - {37,20,rr,S,V,0}, /* eq.b.t */ - {37,21,rr,S,V,0}, /* eq.h.t */ - {37,22,rr,S,V,0}, /* eq.w.t */ - {37,23,rr,S,V,0}, /* eq.l.t */ - {40,20,rr,V,V,0}, /* le.b.t */ - {40,21,rr,V,V,0}, /* le.h.t */ - {40,22,rr,V,V,0}, /* le.w.t */ - {40,23,rr,V,V,0}, /* le.l.t */ - {40,20,rr,S,V,0}, /* le.b.t */ - {40,21,rr,S,V,0}, /* le.h.t */ - {40,22,rr,S,V,0}, /* le.w.t */ - {40,23,rr,S,V,0}, /* le.l.t */ - {41,20,rr,V,V,0}, /* lt.b.t */ - {41,21,rr,V,V,0}, /* lt.h.t */ - {41,22,rr,V,V,0}, /* lt.w.t */ - {41,23,rr,V,V,0}, /* lt.l.t */ - {41,20,rr,S,V,0}, /* lt.b.t */ - {41,21,rr,S,V,0}, /* lt.h.t */ - {41,22,rr,S,V,0}, /* lt.w.t */ - {41,23,rr,S,V,0}, /* lt.l.t */ - {43,20,rr,V,V,0}, /* neg.b.t */ - {43,21,rr,V,V,0}, /* neg.h.t */ - {43,22,rr,V,V,0}, /* neg.w.t */ - {43,23,rr,V,V,0}, /* neg.l.t */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, -}; - -const struct formstr e1_format4[] = { - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, -}; - -const struct formstr e1_format5[] = { - {51,20,rr,V,V,0}, /* ldvi.b.t */ - {51,21,rr,V,V,0}, /* ldvi.h.t */ - {51,22,rr,V,V,0}, /* ldvi.w.t */ - {51,23,rr,V,V,0}, /* ldvi.l.t */ - {28,18,rr,V,V,0}, /* cvtw.s.t */ - {31,22,rr,V,V,0}, /* cvts.w.t */ - {28,23,rr,V,V,0}, /* cvtw.l.t */ - {33,22,rr,V,V,0}, /* cvtl.w.t */ - {52,20,rxr,V,V,0}, /* stvi.b.t */ - {52,21,rxr,V,V,0}, /* stvi.h.t */ - {52,22,rxr,V,V,0}, /* stvi.w.t */ - {52,23,rxr,V,V,0}, /* stvi.l.t */ - {52,20,rxr,S,V,0}, /* stvi.b.t */ - {52,21,rxr,S,V,0}, /* stvi.h.t */ - {52,22,rxr,S,V,0}, /* stvi.w.t */ - {52,23,rxr,S,V,0}, /* stvi.l.t */ -}; - -const struct formstr e1_format6[] = { - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, -}; - -const struct formstr e1_format7[] = { - {84,20,r,V,0,0}, /* sum.b.t */ - {84,21,r,V,0,0}, /* sum.h.t */ - {84,22,r,V,0,0}, /* sum.w.t */ - {84,23,r,V,0,0}, /* sum.l.t */ - {85,1,r,V,0,0}, /* all.t */ - {86,1,r,V,0,0}, /* any.t */ - {87,1,r,V,0,0}, /* parity.t */ - {0,0,0,0,0,0}, - {88,20,r,V,0,0}, /* max.b.t */ - {88,21,r,V,0,0}, /* max.h.t */ - {88,22,r,V,0,0}, /* max.w.t */ - {88,23,r,V,0,0}, /* max.l.t */ - {89,20,r,V,0,0}, /* min.b.t */ - {89,21,r,V,0,0}, /* min.h.t */ - {89,22,r,V,0,0}, /* min.w.t */ - {89,23,r,V,0,0}, /* min.l.t */ - {84,18,r,V,0,0}, /* sum.s.t */ - {84,19,r,V,0,0}, /* sum.d.t */ - {90,18,r,V,0,0}, /* prod.s.t */ - {90,19,r,V,0,0}, /* prod.d.t */ - {88,18,r,V,0,0}, /* max.s.t */ - {88,19,r,V,0,0}, /* max.d.t */ - {89,18,r,V,0,0}, /* min.s.t */ - {89,19,r,V,0,0}, /* min.d.t */ - {90,20,r,V,0,0}, /* prod.b.t */ - {90,21,r,V,0,0}, /* prod.h.t */ - {90,22,r,V,0,0}, /* prod.w.t */ - {90,23,r,V,0,0}, /* prod.l.t */ - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, - {0,0,0,0,0,0}, -}; - -char *lop[] = { - "mov", /* 0 */ - "merg", /* 1 */ - "mask", /* 2 */ - "mul", /* 3 */ - "div", /* 4 */ - "and", /* 5 */ - "or", /* 6 */ - "xor", /* 7 */ - "shf", /* 8 */ - "add", /* 9 */ - "sub", /* 10 */ - "exit", /* 11 */ - "jmp", /* 12 */ - "jmpi", /* 13 */ - "jmpa", /* 14 */ - "jmps", /* 15 */ - "tac", /* 16 */ - "ldea", /* 17 */ - "ld", /* 18 */ - "tas", /* 19 */ - "pshea", /* 20 */ - "st", /* 21 */ - "call", /* 22 */ - "calls", /* 23 */ - "callq", /* 24 */ - "pfork", /* 25 */ - "ste", /* 26 */ - "incr", /* 27 */ - "cvtw", /* 28 */ - "cvtb", /* 29 */ - "cvth", /* 30 */ - "cvts", /* 31 */ - "cvtd", /* 32 */ - "cvtl", /* 33 */ - "ldpa", /* 34 */ - "plc", /* 35 */ - "tzc", /* 36 */ - "eq", /* 37 */ - "leu", /* 38 */ - "ltu", /* 39 */ - "le", /* 40 */ - "lt", /* 41 */ - "not", /* 42 */ - "neg", /* 43 */ - "lop", /* 44 */ - "cprs", /* 45 */ - "nop", /* 46 */ - "br", /* 47 */ - "bri", /* 48 */ - "bra", /* 49 */ - "brs", /* 50 */ - "ldvi", /* 51 */ - "stvi", /* 52 */ - "ldsdr", /* 53 */ - "ldkdr", /* 54 */ - "ln", /* 55 */ - "patu", /* 56 */ - "pate", /* 57 */ - "pich", /* 58 */ - "plch", /* 59 */ - "idle", /* 60 */ - "rtnq", /* 61 */ - "cfork", /* 62 */ - "rtn", /* 63 */ - "wfork", /* 64 */ - "join", /* 65 */ - "rtnc", /* 66 */ - "exp", /* 67 */ - "sin", /* 68 */ - "cos", /* 69 */ - "psh", /* 70 */ - "pop", /* 71 */ - "eni", /* 72 */ - "dsi", /* 73 */ - "bkpt", /* 74 */ - "msync", /* 75 */ - "mski", /* 76 */ - "xmti", /* 77 */ - "tstvv", /* 78 */ - "diag", /* 79 */ - "pbkpt", /* 80 */ - "sqrt", /* 81 */ - "casr", /* 82 */ - "atan", /* 83 */ - "sum", /* 84 */ - "all", /* 85 */ - "any", /* 86 */ - "parity", /* 87 */ - "max", /* 88 */ - "min", /* 89 */ - "prod", /* 90 */ - "halt", /* 91 */ - "sysc", /* 92 */ - "trap", /* 93 */ - "tst", /* 94 */ - "lck", /* 95 */ - "ulk", /* 96 */ - "spawn", /* 97 */ - "ldcmr", /* 98 */ - "stcmr", /* 99 */ - "popr", /* 100 */ - "pshr", /* 101 */ - "rcvr", /* 102 */ - "matm", /* 103 */ - "sndr", /* 104 */ - "putr", /* 105 */ - "getr", /* 106 */ - "matr", /* 107 */ - "mat", /* 108 */ - "get", /* 109 */ - "rcv", /* 110 */ - "inc", /* 111 */ - "put", /* 112 */ - "snd", /* 113 */ - "enal", /* 114 */ - "enag", /* 115 */ - "frint", /* 116 */ - "xpnd", /* 117 */ - "ctrsl", /* 118 */ - "ctrsg", /* 119 */ - "stop", /* 120 */ -}; - -char *rop[] = { - "", /* 0 */ - ".t", /* 1 */ - ".f", /* 2 */ - ".s", /* 3 */ - ".d", /* 4 */ - ".b", /* 5 */ - ".h", /* 6 */ - ".w", /* 7 */ - ".l", /* 8 */ - ".x", /* 9 */ - ".u", /* 10 */ - ".s.f", /* 11 */ - ".d.f", /* 12 */ - ".b.f", /* 13 */ - ".h.f", /* 14 */ - ".w.f", /* 15 */ - ".l.f", /* 16 */ - ".t.f", /* 17 */ - ".s.t", /* 18 */ - ".d.t", /* 19 */ - ".b.t", /* 20 */ - ".h.t", /* 21 */ - ".w.t", /* 22 */ - ".l.t", /* 23 */ - ".t.t", /* 24 */ -}; diff --git a/include/opcode/cris.h b/include/opcode/cris.h deleted file mode 100644 index 00ddde010fb..00000000000 --- a/include/opcode/cris.h +++ /dev/null @@ -1,366 +0,0 @@ -/* cris.h -- Header file for CRIS opcode and register tables. - Copyright (C) 2000, 2001, 2004 Free Software Foundation, Inc. - Contributed by Axis Communications AB, Lund, Sweden. - Originally written for GAS 1.38.1 by Mikael Asker. - Updated, BFDized and GNUified by Hans-Peter Nilsson. - -This file is part of GAS, GDB and the GNU binutils. - -GAS, GDB, and GNU binutils 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, or (at your -option) any later version. - -GAS, GDB, and GNU binutils are distributed in the hope that they 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef __CRIS_H_INCLUDED_ -#define __CRIS_H_INCLUDED_ - -#if !defined(__STDC__) && !defined(const) -#define const -#endif - - -/* Registers. */ -#define MAX_REG (15) -#define REG_SP (14) -#define REG_PC (15) - -/* CPU version control of disassembly and assembly of instructions. - May affect how the instruction is assembled, at least the size of - immediate operands. */ -enum cris_insn_version_usage -{ - /* Any version. */ - cris_ver_version_all=0, - - /* Indeterminate (intended for disassembly only, or obsolete). */ - cris_ver_warning, - - /* Only for v0..3 (Etrax 1..4). */ - cris_ver_v0_3, - - /* Only for v3 or higher (ETRAX 4 and beyond). */ - cris_ver_v3p, - - /* Only for v8 (Etrax 100). */ - cris_ver_v8, - - /* Only for v8 or higher (ETRAX 100, ETRAX 100 LX). */ - cris_ver_v8p, - - /* Only for v0..10. FIXME: Not sure what to do with this. */ - cris_ver_sim_v0_10, - - /* Only for v0..10. */ - cris_ver_v0_10, - - /* Only for v3..10. (ETRAX 4, ETRAX 100 and ETRAX 100 LX). */ - cris_ver_v3_10, - - /* Only for v8..10 (ETRAX 100 and ETRAX 100 LX). */ - cris_ver_v8_10, - - /* Only for v10 (ETRAX 100 LX) and same series. */ - cris_ver_v10, - - /* Only for v10 (ETRAX 100 LX) and same series. */ - cris_ver_v10p, - - /* Only for v32 or higher (codename GUINNESS). - Of course some or all these of may change to cris_ver_v32p if/when - there's a new revision. */ - cris_ver_v32p -}; - - -/* Special registers. */ -struct cris_spec_reg -{ - const char *const name; - unsigned int number; - - /* The size of the register. */ - unsigned int reg_size; - - /* What CPU version the special register of that name is implemented - in. If cris_ver_warning, emit an unimplemented-warning. */ - enum cris_insn_version_usage applicable_version; - - /* There might be a specific warning for using a special register - here. */ - const char *const warning; -}; -extern const struct cris_spec_reg cris_spec_regs[]; - - -/* Support registers (kind of special too, but not named as such). */ -struct cris_support_reg -{ - const char *const name; - unsigned int number; -}; -extern const struct cris_support_reg cris_support_regs[]; - -struct cris_cond15 -{ - /* The name of the condition. */ - const char *const name; - - /* What CPU version this condition name applies to. */ - enum cris_insn_version_usage applicable_version; -}; -extern const struct cris_cond15 cris_conds15[]; - -/* Opcode-dependent constants. */ -#define AUTOINCR_BIT (0x04) - -/* Prefixes. */ -#define BDAP_QUICK_OPCODE (0x0100) -#define BDAP_QUICK_Z_BITS (0x0e00) - -#define BIAP_OPCODE (0x0540) -#define BIAP_Z_BITS (0x0a80) - -#define DIP_OPCODE (0x0970) -#define DIP_Z_BITS (0xf280) - -#define BDAP_INDIR_LOW (0x40) -#define BDAP_INDIR_LOW_Z (0x80) -#define BDAP_INDIR_HIGH (0x09) -#define BDAP_INDIR_HIGH_Z (0x02) - -#define BDAP_INDIR_OPCODE (BDAP_INDIR_HIGH * 0x0100 + BDAP_INDIR_LOW) -#define BDAP_INDIR_Z_BITS (BDAP_INDIR_HIGH_Z * 0x100 + BDAP_INDIR_LOW_Z) -#define BDAP_PC_LOW (BDAP_INDIR_LOW + REG_PC) -#define BDAP_INCR_HIGH (BDAP_INDIR_HIGH + AUTOINCR_BIT) - -/* No prefix must have this code for its "match" bits in the - opcode-table. "BCC .+2" will do nicely. */ -#define NO_CRIS_PREFIX 0 - -/* Definitions for condition codes. */ -#define CC_CC 0x0 -#define CC_HS 0x0 -#define CC_CS 0x1 -#define CC_LO 0x1 -#define CC_NE 0x2 -#define CC_EQ 0x3 -#define CC_VC 0x4 -#define CC_VS 0x5 -#define CC_PL 0x6 -#define CC_MI 0x7 -#define CC_LS 0x8 -#define CC_HI 0x9 -#define CC_GE 0xA -#define CC_LT 0xB -#define CC_GT 0xC -#define CC_LE 0xD -#define CC_A 0xE -#define CC_EXT 0xF - -/* A table of strings "cc", "cs"... indexed with condition code - values as above. */ -extern const char *const cris_cc_strings[]; - -/* Bcc quick. */ -#define BRANCH_QUICK_LOW (0) -#define BRANCH_QUICK_HIGH (0) -#define BRANCH_QUICK_OPCODE (BRANCH_QUICK_HIGH * 0x0100 + BRANCH_QUICK_LOW) -#define BRANCH_QUICK_Z_BITS (0x0F00) - -/* BA quick. */ -#define BA_QUICK_HIGH (BRANCH_QUICK_HIGH + CC_A * 0x10) -#define BA_QUICK_OPCODE (BA_QUICK_HIGH * 0x100 + BRANCH_QUICK_LOW) - -/* Bcc [PC+]. */ -#define BRANCH_PC_LOW (0xFF) -#define BRANCH_INCR_HIGH (0x0D) -#define BA_PC_INCR_OPCODE \ - ((BRANCH_INCR_HIGH + CC_A * 0x10) * 0x0100 + BRANCH_PC_LOW) - -/* Jump. */ -/* Note that old versions generated special register 8 (in high bits) - and not-that-old versions recognized it as a jump-instruction. - That opcode now belongs to JUMPU. */ -#define JUMP_INDIR_OPCODE (0x0930) -#define JUMP_INDIR_Z_BITS (0xf2c0) -#define JUMP_PC_INCR_OPCODE \ - (JUMP_INDIR_OPCODE + AUTOINCR_BIT * 0x0100 + REG_PC) - -#define MOVE_M_TO_PREG_OPCODE 0x0a30 -#define MOVE_M_TO_PREG_ZBITS 0x01c0 - -/* BDAP.D N,PC. */ -#define MOVE_PC_INCR_OPCODE_PREFIX \ - (((BDAP_INCR_HIGH | (REG_PC << 4)) << 8) | BDAP_PC_LOW | (2 << 4)) -#define MOVE_PC_INCR_OPCODE_SUFFIX \ - (MOVE_M_TO_PREG_OPCODE | REG_PC | (AUTOINCR_BIT << 8)) - -#define JUMP_PC_INCR_OPCODE_V32 (0x0DBF) - -/* BA DWORD (V32). */ -#define BA_DWORD_OPCODE (0x0EBF) - -/* Nop. */ -#define NOP_OPCODE (0x050F) -#define NOP_Z_BITS (0xFFFF ^ NOP_OPCODE) - -#define NOP_OPCODE_V32 (0x05B0) -#define NOP_Z_BITS_V32 (0xFFFF ^ NOP_OPCODE_V32) - -/* For the compatibility mode, let's use "MOVE R0,P0". Doesn't affect - registers or flags. Unfortunately shuts off interrupts for one cycle - for < v32, but there doesn't seem to be any alternative without that - effect. */ -#define NOP_OPCODE_COMMON (0x630) -#define NOP_OPCODE_ZBITS_COMMON (0xffff & ~NOP_OPCODE_COMMON) - -/* LAPC.D */ -#define LAPC_DWORD_OPCODE (0x0D7F) -#define LAPC_DWORD_Z_BITS (0x0fff & ~LAPC_DWORD_OPCODE) - -/* Structure of an opcode table entry. */ -enum cris_imm_oprnd_size_type -{ - /* No size is applicable. */ - SIZE_NONE, - - /* Always 32 bits. */ - SIZE_FIX_32, - - /* Indicated by size of special register. */ - SIZE_SPEC_REG, - - /* Indicated by size field, signed. */ - SIZE_FIELD_SIGNED, - - /* Indicated by size field, unsigned. */ - SIZE_FIELD_UNSIGNED, - - /* Indicated by size field, no sign implied. */ - SIZE_FIELD -}; - -/* For GDB. FIXME: Is this the best way to handle opcode - interpretation? */ -enum cris_op_type -{ - cris_not_implemented_op = 0, - cris_abs_op, - cris_addi_op, - cris_asr_op, - cris_asrq_op, - cris_ax_ei_setf_op, - cris_bdap_prefix, - cris_biap_prefix, - cris_break_op, - cris_btst_nop_op, - cris_clearf_di_op, - cris_dip_prefix, - cris_dstep_logshift_mstep_neg_not_op, - cris_eight_bit_offset_branch_op, - cris_move_mem_to_reg_movem_op, - cris_move_reg_to_mem_movem_op, - cris_move_to_preg_op, - cris_muls_op, - cris_mulu_op, - cris_none_reg_mode_add_sub_cmp_and_or_move_op, - cris_none_reg_mode_clear_test_op, - cris_none_reg_mode_jump_op, - cris_none_reg_mode_move_from_preg_op, - cris_quick_mode_add_sub_op, - cris_quick_mode_and_cmp_move_or_op, - cris_quick_mode_bdap_prefix, - cris_reg_mode_add_sub_cmp_and_or_move_op, - cris_reg_mode_clear_op, - cris_reg_mode_jump_op, - cris_reg_mode_move_from_preg_op, - cris_reg_mode_test_op, - cris_scc_op, - cris_sixteen_bit_offset_branch_op, - cris_three_operand_add_sub_cmp_and_or_op, - cris_three_operand_bound_op, - cris_two_operand_bound_op, - cris_xor_op -}; - -struct cris_opcode -{ - /* The name of the insn. */ - const char *name; - - /* Bits that must be 1 for a match. */ - unsigned int match; - - /* Bits that must be 0 for a match. */ - unsigned int lose; - - /* See the table in "opcodes/cris-opc.c". */ - const char *args; - - /* Nonzero if this is a delayed branch instruction. */ - char delayed; - - /* Size of immediate operands. */ - enum cris_imm_oprnd_size_type imm_oprnd_size; - - /* Indicates which version this insn was first implemented in. */ - enum cris_insn_version_usage applicable_version; - - /* What kind of operation this is. */ - enum cris_op_type op; -}; -extern const struct cris_opcode cris_opcodes[]; - - -/* These macros are for the target-specific flags in disassemble_info - used at disassembly. */ - -/* This insn accesses memory. This flag is more trustworthy than - checking insn_type for "dis_dref" which does not work for - e.g. "JSR [foo]". */ -#define CRIS_DIS_FLAG_MEMREF (1 << 0) - -/* The "target" field holds a register number. */ -#define CRIS_DIS_FLAG_MEM_TARGET_IS_REG (1 << 1) - -/* The "target2" field holds a register number; add it to "target". */ -#define CRIS_DIS_FLAG_MEM_TARGET2_IS_REG (1 << 2) - -/* Yet another add-on: the register in "target2" must be multiplied - by 2 before adding to "target". */ -#define CRIS_DIS_FLAG_MEM_TARGET2_MULT2 (1 << 3) - -/* Yet another add-on: the register in "target2" must be multiplied - by 4 (mutually exclusive with .._MULT2). */ -#define CRIS_DIS_FLAG_MEM_TARGET2_MULT4 (1 << 4) - -/* The register in "target2" is an indirect memory reference (of the - register there), add to "target". Assumed size is dword (mutually - exclusive with .._MULT[24]). */ -#define CRIS_DIS_FLAG_MEM_TARGET2_MEM (1 << 5) - -/* Add-on to CRIS_DIS_FLAG_MEM_TARGET2_MEM; the memory access is "byte"; - sign-extended before adding to "target". */ -#define CRIS_DIS_FLAG_MEM_TARGET2_MEM_BYTE (1 << 6) - -/* Add-on to CRIS_DIS_FLAG_MEM_TARGET2_MEM; the memory access is "word"; - sign-extended before adding to "target". */ -#define CRIS_DIS_FLAG_MEM_TARGET2_MEM_WORD (1 << 7) - -#endif /* __CRIS_H_INCLUDED_ */ - -/* - * Local variables: - * eval: (c-set-style "gnu") - * indent-tabs-mode: t - * End: - */ diff --git a/include/opcode/crx.h b/include/opcode/crx.h deleted file mode 100644 index 66def6b39b9..00000000000 --- a/include/opcode/crx.h +++ /dev/null @@ -1,418 +0,0 @@ -/* crx.h -- Header file for CRX opcode and register tables. - Copyright 2004 Free Software Foundation, Inc. - Contributed by Tomer Levi, NSC, Israel. - Originally written for GAS 2.12 by Tomer Levi, NSC, Israel. - Updates, BFDizing, GNUifying and ELF support by Tomer Levi. - - This file is part of GAS, GDB and the GNU binutils. - - GAS, GDB, and GNU binutils 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, or (at your - option) any later version. - - GAS, GDB, and GNU binutils are distributed in the hope that they 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _CRX_H_ -#define _CRX_H_ - -/* CRX core/debug Registers : - The enums are used as indices to CRX registers table (crx_regtab). - Therefore, order MUST be preserved. */ - -typedef enum - { - /* 32-bit general purpose registers. */ - r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, - r10, r11, r12, r13, r14, r15, ra, sp, - /* 32-bit user registers. */ - u0, u1, u2, u3, u4, u5, u6, u7, u8, u9, - u10, u11, u12, u13, u14, u15, ura, usp, - /* hi and lo registers. */ - hi, lo, - /* hi and lo user registers. */ - uhi, ulo, - /* Processor Status Register. */ - psr, - /* Interrupt Base Register. */ - intbase, - /* Interrupt Stack Pointer Register. */ - isp, - /* Configuration Register. */ - cfg, - /* Coprocessor Configuration Register. */ - cpcfg, - /* Coprocessor Enable Register. */ - cen, - /* Not a register. */ - nullregister, - MAX_REG - } -reg; - -/* CRX Coprocessor registers and special registers : - The enums are used as indices to CRX coprocessor registers table - (crx_copregtab). Therefore, order MUST be preserved. */ - -typedef enum - { - /* Coprocessor registers. */ - c0 = MAX_REG, c1, c2, c3, c4, c5, c6, c7, c8, - c9, c10, c11, c12, c13, c14, c15, - /* Coprocessor special registers. */ - cs0, cs1 ,cs2, cs3, cs4, cs5, cs6, cs7, cs8, - cs9, cs10, cs11, cs12, cs13, cs14, cs15, - /* Not a Coprocessor register. */ - nullcopregister, - MAX_COPREG - } -copreg; - -/* CRX Register types. */ - -typedef enum - { - CRX_R_REGTYPE, /* r */ - CRX_U_REGTYPE, /* u */ - CRX_C_REGTYPE, /* c */ - CRX_CS_REGTYPE, /* cs */ - CRX_CFG_REGTYPE /* configuration register */ - } -reg_type; - -/* CRX argument types : - The argument types correspond to instructions operands - - Argument types : - r - register - c - constant - i - immediate - idxr - index register - rbase - register base - s - star ('*') - copr - coprocessor register - copsr - coprocessor special register. */ - -typedef enum - { - arg_r, arg_c, arg_cr, arg_ic, arg_icr, arg_sc, - arg_idxr, arg_rbase, arg_copr, arg_copsr, - /* Not an argument. */ - nullargs - } -argtype; - -/* CRX operand types : - The operand types correspond to instructions operands. */ - -typedef enum - { - dummy, - /* 4-bit encoded constant. */ - cst4, - /* N-bit immediate. */ - i16, i32, - /* N-bit unsigned immediate. */ - ui3, ui4, ui5, ui16, - /* N-bit signed displacement. */ - disps9, disps17, disps25, disps32, - /* N-bit unsigned displacement. */ - dispu5, - /* N-bit escaped displacement. */ - dispe9, - /* N-bit absolute address. */ - abs16, abs32, - /* Register relative. */ - rbase, rbase_dispu4, - rbase_disps12, rbase_disps16, rbase_disps28, rbase_disps32, - /* Register index. */ - rindex_disps6, rindex_disps22, - /* 4-bit genaral-purpose register specifier. */ - regr, - /* 8-bit register address space. */ - regr8, - /* coprocessor register. */ - copregr, - /* coprocessor special register. */ - copsregr, - /* Not an operand. */ - nulloperand, - /* Maximum supported operand. */ - MAX_OPRD - } -operand_type; - -/* CRX instruction types. */ - -#define NO_TYPE_INS 0 -#define ARITH_INS 1 -#define LD_STOR_INS 2 -#define BRANCH_INS 3 -#define ARITH_BYTE_INS 4 -#define CMPBR_INS 5 -#define SHIFT_INS 6 -#define BRANCH_NEQ_INS 7 -#define LD_STOR_INS_INC 8 -#define STOR_IMM_INS 9 -#define CSTBIT_INS 10 -#define COP_BRANCH_INS 11 -#define COP_REG_INS 12 -#define COPS_REG_INS 13 -#define DCR_BRANCH_INS 14 - -/* Maximum value supported for instruction types. */ -#define CRX_INS_MAX (1 << 4) -/* Mask to record an instruction type. */ -#define CRX_INS_MASK (CRX_INS_MAX - 1) -/* Return instruction type, given instruction's attributes. */ -#define CRX_INS_TYPE(attr) ((attr) & CRX_INS_MASK) - -/* Indicates whether this instruction has a register list as parameter. */ -#define REG_LIST CRX_INS_MAX -/* The operands in binary and assembly are placed in reverse order. - load - (REVERSE_MATCH)/store - (! REVERSE_MATCH). */ -#define REVERSE_MATCH (1 << 5) - -/* Kind of displacement map used DISPU[BWD]4. */ -#define DISPUB4 (1 << 6) -#define DISPUW4 (1 << 7) -#define DISPUD4 (1 << 8) -#define DISPU4MAP (DISPUB4 | DISPUW4 | DISPUD4) - -/* Printing formats, where the instruction prefix isn't consecutive. */ -#define FMT_1 (1 << 9) /* 0xF0F00000 */ -#define FMT_2 (1 << 10) /* 0xFFF0FF00 */ -#define FMT_3 (1 << 11) /* 0xFFF00F00 */ -#define FMT_4 (1 << 12) /* 0xFFF0F000 */ -#define FMT_5 (1 << 13) /* 0xFFF0FFF0 */ -#define FMT_CRX (FMT_1 | FMT_2 | FMT_3 | FMT_4 | FMT_5) - -/* Indicates whether this instruction can be relaxed. */ -#define RELAXABLE (1 << 14) - -/* Indicates that instruction uses user registers (and not - general-purpose registers) as operands. */ -#define USER_REG (1 << 15) - -/* Indicates that instruction can perfom a cst4 mapping. */ -#define CST4MAP (1 << 16) - -/* Instruction shouldn't allow 'sp' usage. */ -#define NO_SP (1 << 17) - -/* Instruction shouldn't allow to push a register which is used as a rptr. */ -#define NO_RPTR (1 << 18) - -/* Maximum operands per instruction. */ -#define MAX_OPERANDS 5 -/* Maximum register name length. */ -#define MAX_REGNAME_LEN 10 -/* Maximum instruction length. */ -#define MAX_INST_LEN 256 - - -/* Values defined for the flags field of a struct operand_entry. */ - -/* Operand must be an unsigned number. */ -#define OP_UNSIGNED (1 << 0) -/* Operand must be a signed number. */ -#define OP_SIGNED (1 << 1) -/* A special arithmetic 4-bit constant operand. */ -#define OP_CST4 (1 << 2) -/* A special load/stor 4-bit unsigned displacement operand. */ -#define OP_DISPU4 (1 << 3) -/* Operand must be an even number. */ -#define OP_EVEN (1 << 4) -/* Operand is shifted right. */ -#define OP_SHIFT (1 << 5) -/* Operand is shifted right and decremented. */ -#define OP_SHIFT_DEC (1 << 6) -/* Operand has reserved escape sequences. */ -#define OP_ESC (1 << 7) -/* Operand is used only for the upper 64 KB (FFFF0000 to FFFFFFFF). */ -#define OP_UPPER_64KB (1 << 8) - -/* Single operand description. */ - -typedef struct - { - /* Operand type. */ - operand_type op_type; - /* Operand location within the opcode. */ - unsigned int shift; - } -operand_desc; - -/* Instruction data structure used in instruction table. */ - -typedef struct - { - /* Name. */ - const char *mnemonic; - /* Size (in words). */ - unsigned int size; - /* Constant prefix (matched by the disassembler). */ - unsigned long match; - /* Match size (in bits). */ - int match_bits; - /* Attributes. */ - unsigned int flags; - /* Operands (always last, so unreferenced operands are initialized). */ - operand_desc operands[MAX_OPERANDS]; - } -inst; - -/* Data structure for a single instruction's arguments (Operands). */ - -typedef struct - { - /* Register or base register. */ - reg r; - /* Index register. */ - reg i_r; - /* Coprocessor register. */ - copreg cr; - /* Constant/immediate/absolute value. */ - long constant; - /* Scaled index mode. */ - unsigned int scale; - /* Argument type. */ - argtype type; - /* Size of the argument (in bits) required to represent. */ - int size; - /* The type of the expression. */ - unsigned char X_op; - } -argument; - -/* Internal structure to hold the various entities - corresponding to the current assembling instruction. */ - -typedef struct - { - /* Number of arguments. */ - int nargs; - /* The argument data structure for storing args (operands). */ - argument arg[MAX_OPERANDS]; -/* The following fields are required only by CRX-assembler. */ -#ifdef TC_CRX - /* Expression used for setting the fixups (if any). */ - expressionS exp; - bfd_reloc_code_real_type rtype; -#endif /* TC_CRX */ - /* Instruction size (in bytes). */ - int size; - } -ins; - -/* Structure to hold information about predefined operands. */ - -typedef struct - { - /* Size (in bits). */ - unsigned int bit_size; - /* Argument type. */ - argtype arg_type; - /* One bit syntax flags. */ - int flags; - } -operand_entry; - -/* Structure to hold trap handler information. */ - -typedef struct - { - /* Trap name. */ - char *name; - /* Index in dispatch table. */ - unsigned int entry; - } -trap_entry; - -/* Structure to hold information about predefined registers. */ - -typedef struct - { - /* Name (string representation). */ - char *name; - /* Value (enum representation). */ - union - { - /* Register. */ - reg reg_val; - /* Coprocessor register. */ - copreg copreg_val; - } value; - /* Register image. */ - int image; - /* Register type. */ - reg_type type; - } -reg_entry; - -/* Structure to hold a cst4 operand mapping. */ - -/* CRX opcode table. */ -extern const inst crx_instruction[]; -extern const int crx_num_opcodes; -#define NUMOPCODES crx_num_opcodes - -/* CRX operands table. */ -extern const operand_entry crx_optab[]; - -/* CRX registers table. */ -extern const reg_entry crx_regtab[]; -extern const int crx_num_regs; -#define NUMREGS crx_num_regs - -/* CRX coprocessor registers table. */ -extern const reg_entry crx_copregtab[]; -extern const int crx_num_copregs; -#define NUMCOPREGS crx_num_copregs - -/* CRX trap/interrupt table. */ -extern const trap_entry crx_traps[]; -extern const int crx_num_traps; -#define NUMTRAPS crx_num_traps - -/* cst4 operand mapping. */ -extern const long cst4_map[]; -extern const int cst4_maps; - -/* Table of instructions with no operands. */ -extern const char* no_op_insn[]; - -/* Current instruction we're assembling. */ -extern const inst *instruction; - -/* A macro for representing the instruction "constant" opcode, that is, - the FIXED part of the instruction. The "constant" opcode is represented - as a 32-bit unsigned long, where OPC is expanded (by a left SHIFT) - over that range. */ -#define BIN(OPC,SHIFT) (OPC << SHIFT) - -/* Is the current instruction type is TYPE ? */ -#define IS_INSN_TYPE(TYPE) \ - (CRX_INS_TYPE(instruction->flags) == TYPE) - -/* Is the current instruction mnemonic is MNEMONIC ? */ -#define IS_INSN_MNEMONIC(MNEMONIC) \ - (strcmp(instruction->mnemonic,MNEMONIC) == 0) - -/* Does the current instruction has register list ? */ -#define INST_HAS_REG_LIST \ - (instruction->flags & REG_LIST) - -/* Long long type handling. */ -/* Replace all appearances of 'long long int' with LONGLONG. */ -typedef long long int LONGLONG; -typedef unsigned long long ULONGLONG; - -#endif /* _CRX_H_ */ diff --git a/include/opcode/d10v.h b/include/opcode/d10v.h deleted file mode 100644 index c96ddebf18b..00000000000 --- a/include/opcode/d10v.h +++ /dev/null @@ -1,208 +0,0 @@ -/* d10v.h -- Header file for D10V opcode table - Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003 - Free Software Foundation, Inc. - Written by Martin Hunt (hunt@cygnus.com), Cygnus Support - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef D10V_H -#define D10V_H - -/* Format Specifier */ -#define FM00 0 -#define FM01 0x40000000 -#define FM10 0x80000000 -#define FM11 0xC0000000 - -#define NOP 0x5e00 -#define OPCODE_DIVS 0x14002800 - -/* The opcode table is an array of struct d10v_opcode. */ - -struct d10v_opcode -{ - /* The opcode name. */ - const char *name; - - /* the opcode format */ - int format; - - /* These numbers were picked so we can do if( i & SHORT_OPCODE) */ -#define SHORT_OPCODE 1 -#define LONG_OPCODE 8 -#define SHORT_2 1 /* short with 2 operands */ -#define SHORT_B 3 /* short with 8-bit branch */ -#define LONG_B 8 /* long with 16-bit branch */ -#define LONG_L 10 /* long with 3 operands */ -#define LONG_R 12 /* reserved */ - - /* just a placeholder for variable-length instructions */ - /* for example, "bra" will be a fake for "bra.s" and bra.l" */ - /* which will immediately follow in the opcode table. */ -#define OPCODE_FAKE 32 - - /* the number of cycles */ - int cycles; - - /* the execution unit(s) used */ - int unit; -#define EITHER 0 -#define IU 1 -#define MU 2 -#define BOTH 3 - - /* execution type; parallel or sequential */ - /* this field is used to decide if two instructions */ - /* can be executed in parallel */ - int exec_type; -#define PARONLY 1 /* parallel only */ -#define SEQ 2 /* must be sequential */ -#define PAR 4 /* may be parallel */ -#define BRANCH_LINK 8 /* subroutine call. must be aligned */ -#define RMEM 16 /* reads memory */ -#define WMEM 32 /* writes memory */ -#define RF0 64 /* reads f0 */ -#define WF0 128 /* modifies f0 */ -#define WCAR 256 /* write Carry */ -#define BRANCH 512 /* branch, no link */ -#define ALONE 1024 /* short but pack with a NOP if on asm line alone */ - - /* the opcode */ - long opcode; - - /* mask. if( (i & mask) == opcode ) then match */ - long mask; - - /* An array of operand codes. Each code is an index into the - operand table. They appear in the order which the operands must - appear in assembly code, and are terminated by a zero. */ - unsigned char operands[6]; -}; - -/* The table itself is sorted by major opcode number, and is otherwise - in the order in which the disassembler should consider - instructions. */ -extern const struct d10v_opcode d10v_opcodes[]; -extern const int d10v_num_opcodes; - -/* The operands table is an array of struct d10v_operand. */ -struct d10v_operand -{ - /* The number of bits in the operand. */ - int bits; - - /* How far the operand is left shifted in the instruction. */ - int shift; - - /* One bit syntax flags. */ - int flags; -}; - -/* Elements in the table are retrieved by indexing with values from - the operands field of the d10v_opcodes table. */ - -extern const struct d10v_operand d10v_operands[]; - -/* Values defined for the flags field of a struct d10v_operand. */ - -/* the operand must be an even number */ -#define OPERAND_EVEN (1) - -/* the operand must be an odd number */ -#define OPERAND_ODD (2) - -/* this is the destination register; it will be modified */ -/* this is used by the optimizer */ -#define OPERAND_DEST (4) - -/* number or symbol */ -#define OPERAND_NUM (8) - -/* address or label */ -#define OPERAND_ADDR (0x10) - -/* register */ -#define OPERAND_REG (0x20) - -/* postincrement + */ -#define OPERAND_PLUS (0x40) - -/* postdecrement - */ -#define OPERAND_MINUS (0x80) - -/* @ */ -#define OPERAND_ATSIGN (0x100) - -/* @( */ -#define OPERAND_ATPAR (0x200) - -/* accumulator 0 */ -#define OPERAND_ACC0 (0x400) - -/* accumulator 1 */ -#define OPERAND_ACC1 (0x800) - -/* f0 / f1 flag register */ -#define OPERAND_FFLAG (0x1000) - -/* c flag register */ -#define OPERAND_CFLAG (0x2000) - -/* control register */ -#define OPERAND_CONTROL (0x4000) - -/* predecrement mode '@-sp' */ -#define OPERAND_ATMINUS (0x8000) - -/* signed number */ -#define OPERAND_SIGNED (0x10000) - -/* special accumulator shifts need a 4-bit number */ -/* 1 <= x <= 16 */ -#define OPERAND_SHIFT (0x20000) - -/* general purpose register */ -#define OPERAND_GPR (0x40000) - -/* special imm3 values with range restricted to -2 <= imm3 <= 3 */ -/* needed for rac/rachi */ -#define RESTRICTED_NUM3 (0x80000) - -/* Pre-decrement is only supported for SP. */ -#define OPERAND_SP (0x100000) - -/* Post-decrement is not supported for SP. Like OPERAND_EVEN, and - unlike OPERAND_SP, this flag doesn't prevent the instruction from - matching, it only fails validation later on. */ -#define OPERAND_NOSP (0x200000) - -/* Structure to hold information about predefined registers. */ -struct pd_reg -{ - char *name; /* name to recognize */ - char *pname; /* name to print for this register */ - int value; -}; - -extern const struct pd_reg d10v_predefined_registers[]; -int d10v_reg_name_cnt (void); - -/* an expressionS only has one register type, so we fake it */ -/* by setting high bits to indicate type */ -#define REGISTER_MASK 0xFF - -#endif /* D10V_H */ diff --git a/include/opcode/d30v.h b/include/opcode/d30v.h deleted file mode 100644 index 7aa5bb6feff..00000000000 --- a/include/opcode/d30v.h +++ /dev/null @@ -1,286 +0,0 @@ -/* d30v.h -- Header file for D30V opcode table - Copyright 1997, 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. - Written by Martin Hunt (hunt@cygnus.com), Cygnus Solutions - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef D30V_H -#define D30V_H - -#define NOP 0x00F00000 - -/* Structure to hold information about predefined registers. */ -struct pd_reg -{ - char *name; /* name to recognize */ - char *pname; /* name to print for this register */ - int value; -}; - -extern const struct pd_reg pre_defined_registers[]; -int reg_name_cnt (void); - -/* the number of control registers */ -#define MAX_CONTROL_REG 64 - -/* define the format specifiers */ -#define FM00 0 -#define FM01 0x80000000 -#define FM10 0x8000000000000000LL -#define FM11 0x8000000080000000LL - -/* define the opcode classes */ -#define BRA 0 -#define LOGIC 1 -#define IMEM 2 -#define IALU1 4 -#define IALU2 5 - -/* define the execution condition codes */ -#define ECC_AL 0 /* ALways (default) */ -#define ECC_TX 1 /* F0=True, F1=Don't care */ -#define ECC_FX 2 /* F0=False, F1=Don't care */ -#define ECC_XT 3 /* F0=Don't care, F1=True */ -#define ECC_XF 4 /* F0=Don't care, F1=False */ -#define ECC_TT 5 /* F0=True, F1=True */ -#define ECC_TF 6 /* F0=True, F1=False */ -#define ECC_RESERVED 7 /* reserved */ -#define ECC_MAX ECC_RESERVED - -extern const char *d30v_ecc_names[]; - -/* condition code table for CMP and CMPU */ -extern const char *d30v_cc_names[]; - -/* The opcode table is an array of struct d30v_opcode. */ -struct d30v_opcode -{ - /* The opcode name. */ - const char *name; - - /* the opcode */ - int op1; /* first part, "IALU1" for example */ - int op2; /* the rest of the opcode */ - - /* opcode format(s). These numbers correspond to entries */ - /* in the d30v_format_table */ - unsigned char format[4]; - -#define SHORT_M 1 -#define SHORT_M2 5 /* for ld2w and st2w */ -#define SHORT_A 9 -#define SHORT_B1 11 -#define SHORT_B2 12 -#define SHORT_B2r 13 -#define SHORT_B3 14 -#define SHORT_B3r 16 -#define SHORT_B3b 18 -#define SHORT_B3br 20 -#define SHORT_D1r 22 -#define SHORT_D2 24 -#define SHORT_D2r 26 -#define SHORT_D2Br 28 -#define SHORT_U 30 /* unary SHORT_A. ABS for example */ -#define SHORT_F 31 /* SHORT_A with flag registers */ -#define SHORT_AF 33 /* SHORT_A with only the first register a flag register */ -#define SHORT_T 35 /* for trap instruction */ -#define SHORT_A5 36 /* SHORT_A with a 5-bit immediate instead of 6 */ -#define SHORT_CMP 38 /* special form for CMPcc */ -#define SHORT_CMPU 40 /* special form for CMPUcc */ -#define SHORT_A1 42 /* special form of SHORT_A for MACa opcodes where a=1 */ -#define SHORT_AA 44 /* SHORT_A with the first register an accumulator */ -#define SHORT_RA 46 /* SHORT_A with the second register an accumulator */ -#define SHORT_MODINC 48 -#define SHORT_MODDEC 49 -#define SHORT_C1 50 -#define SHORT_C2 51 -#define SHORT_UF 52 -#define SHORT_A2 53 -#define SHORT_NONE 55 /* no operands */ -#define SHORT_AR 56 /* like SHORT_AA but only accept register as third parameter */ -#define LONG 57 -#define LONG_U 58 /* unary LONG */ -#define LONG_Ur 59 /* LONG pc-relative */ -#define LONG_CMP 60 /* special form for CMPcc and CMPUcc */ -#define LONG_M 61 /* Memory long for ldb, stb */ -#define LONG_M2 62 /* Memory long for ld2w, st2w */ -#define LONG_2 63 /* LONG with 2 operands; jmptnz */ -#define LONG_2r 64 /* LONG with 2 operands; bratnz */ -#define LONG_2b 65 /* LONG_2 with modifier of 3 */ -#define LONG_2br 66 /* LONG_2r with modifier of 3 */ -#define LONG_D 67 /* for DJMPI */ -#define LONG_Dr 68 /* for DBRAI */ -#define LONG_Dbr 69 /* for repeati */ - - /* the execution unit(s) used */ - int unit; -#define EITHER 0 -#define IU 1 -#define MU 2 -#define EITHER_BUT_PREFER_MU 3 - - /* this field is used to decide if two instructions */ - /* can be executed in parallel */ - long flags_used; - long flags_set; -#define FLAG_0 (1L<<0) -#define FLAG_1 (1L<<1) -#define FLAG_2 (1L<<2) -#define FLAG_3 (1L<<3) -#define FLAG_4 (1L<<4) /* S (saturation) */ -#define FLAG_5 (1L<<5) /* V (overflow) */ -#define FLAG_6 (1L<<6) /* VA (accumulated overflow) */ -#define FLAG_7 (1L<<7) /* C (carry/borrow) */ -#define FLAG_SM (1L<<8) /* SM (stack mode) */ -#define FLAG_RP (1L<<9) /* RP (repeat enable) */ -#define FLAG_CONTROL (1L<<10) /* control registers */ -#define FLAG_A0 (1L<<11) /* A0 */ -#define FLAG_A1 (1L<<12) /* A1 */ -#define FLAG_JMP (1L<<13) /* instruction is a branch */ -#define FLAG_JSR (1L<<14) /* subroutine call. must be aligned */ -#define FLAG_MEM (1L<<15) /* reads/writes memory */ -#define FLAG_NOT_WITH_ADDSUBppp (1L<<16) /* Old meaning: a 2 word 4 byter operation - New meaning: operation cannot be - combined in parallel with ADD/SUBppp. */ -#define FLAG_MUL16 (1L<<17) /* 16 bit multiply */ -#define FLAG_MUL32 (1L<<18) /* 32 bit multiply */ -#define FLAG_ADDSUBppp (1L<<19) /* ADDppp or SUBppp */ -#define FLAG_DELAY (1L<<20) /* This is a delayed branch or jump */ -#define FLAG_LKR (1L<<21) /* insn in left slot kills right slot */ -#define FLAG_CVVA (FLAG_5|FLAG_6|FLAG_7) -#define FLAG_C FLAG_7 -#define FLAG_ALL (FLAG_0 | \ - FLAG_1 | \ - FLAG_2 | \ - FLAG_3 | \ - FLAG_4 | \ - FLAG_5 | \ - FLAG_6 | \ - FLAG_7 | \ - FLAG_SM | \ - FLAG_RP | \ - FLAG_CONTROL) - - int reloc_flag; -#define RELOC_PCREL 1 -#define RELOC_ABS 2 -}; - -extern const struct d30v_opcode d30v_opcode_table[]; -extern const int d30v_num_opcodes; - -/* The operands table is an array of struct d30v_operand. */ -struct d30v_operand -{ - /* the length of the field */ - int length; - - /* The number of significant bits in the operand. */ - int bits; - - /* position relative to Ra */ - int position; - - /* syntax flags. */ - long flags; -}; -extern const struct d30v_operand d30v_operand_table[]; - -/* Values defined for the flags field of a struct d30v_operand. */ - -/* this is the destination register; it will be modified */ -/* this is used by the optimizer */ -#define OPERAND_DEST (1) - -/* number or symbol */ -#define OPERAND_NUM (2) - -/* address or label */ -#define OPERAND_ADDR (4) - -/* register */ -#define OPERAND_REG (8) - -/* postincrement + */ -#define OPERAND_PLUS (0x10) - -/* postdecrement - */ -#define OPERAND_MINUS (0x20) - -/* signed number */ -#define OPERAND_SIGNED (0x40) - -/* this operand must be shifted left by 3 */ -#define OPERAND_SHIFT (0x80) - -/* flag register */ -#define OPERAND_FLAG (0x100) - -/* control register */ -#define OPERAND_CONTROL (0x200) - -/* accumulator */ -#define OPERAND_ACC (0x400) - -/* @ */ -#define OPERAND_ATSIGN (0x800) - -/* @( */ -#define OPERAND_ATPAR (0x1000) - -/* predecrement mode '@-sp' */ -#define OPERAND_ATMINUS (0x2000) - -/* this operand changes the instruction name */ -/* for example, CPMcc, CMPUcc */ -#define OPERAND_NAME (0x4000) - -/* fake operand for mvtsys and mvfsys */ -#define OPERAND_SPECIAL (0x8000) - -/* let the optimizer know that two registers are affected */ -#define OPERAND_2REG (0x10000) - -/* This operand is pc-relative. Note that repeati can have two immediate - operands, one of which is pcrel, the other (the IMM6U one) is not. */ -#define OPERAND_PCREL (0x20000) - -/* The format table is an array of struct d30v_format. */ -struct d30v_format -{ - int form; /* SHORT_A, LONG, etc */ - int modifier; /* two bit modifier following opcode */ - unsigned char operands[5]; -}; -extern const struct d30v_format d30v_format_table[]; - - -/* an instruction is defined by an opcode and a format */ -/* for example, "add" has one opcode, but three different */ -/* formats, 2 SHORT_A forms and a LONG form. */ -struct d30v_insn -{ - struct d30v_opcode *op; /* pointer to an entry in the opcode table */ - struct d30v_format *form; /* pointer to an entry in the format table */ - int ecc; /* execution condition code */ -}; - -/* an expressionS only has one register type, so we fake it */ -/* by setting high bits to indicate type */ -#define REGISTER_MASK 0xFF - -#endif /* D30V_H */ diff --git a/include/opcode/dlx.h b/include/opcode/dlx.h deleted file mode 100644 index 278e936cdf9..00000000000 --- a/include/opcode/dlx.h +++ /dev/null @@ -1,282 +0,0 @@ -/* Table of opcodes for the DLX microprocess. - Copyright 2002 Free Software Foundation, Inc. - - This file is part of GDB and GAS. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - - Initially created by Kuang Hwa Lin, 2002. */ - -/* Following are the function codes for the Special OP (ALU). */ -#define ALUOP 0x00000000 -#define SPECIALOP 0x00000000 - -#define NOPF 0x00000000 -#define SLLF 0x00000004 -#define SRLF 0x00000006 -#define SRAF 0x00000007 - -#define SEQUF 0x00000010 -#define SNEUF 0x00000011 -#define SLTUF 0x00000012 -#define SGTUF 0x00000013 -#define SLEUF 0x00000014 -#define SGEUF 0x00000015 - -#define ADDF 0x00000020 -#define ADDUF 0x00000021 -#define SUBF 0x00000022 -#define SUBUF 0x00000023 -#define ANDF 0x00000024 -#define ORF 0x00000025 -#define XORF 0x00000026 - -#define SEQF 0x00000028 -#define SNEF 0x00000029 -#define SLTF 0x0000002A -#define SGTF 0x0000002B -#define SLEF 0x0000002C -#define SGEF 0x0000002D - /* Following special functions was not mentioned in the - Hennessy's book but was implemented in the RTL. */ -#define MVTSF 0x00000030 -#define MVFSF 0x00000031 -#define BSWAPF 0x00000032 -#define LUTF 0x00000033 -/* Following special functions was mentioned in the - Hennessy's book but was not implemented in the RTL. */ -#define MULTF 0x00000005 -#define MULTUF 0x00000006 -#define DIVF 0x00000007 -#define DIVUF 0x00000008 - - -/* Following are the rest of the OPcodes: - JOP = (0x002 << 26), JALOP = (0x003 << 26), BEQOP = (0x004 << 26), BNEOP = (0x005 << 26) - ADDIOP = (0x008 << 26), ADDUIOP= (0x009 << 26), SUBIOP = (0x00A << 26), SUBUIOP= (0x00B << 26) - ANDIOP = (0x00C << 26), ORIOP = (0x00D << 26), XORIOP = (0x00E << 26), LHIOP = (0x00F << 26) - RFEOP = (0x010 << 26), TRAPOP = (0x011 << 26), JROP = (0x012 << 26), JALROP = (0x013 << 26) - BREAKOP= (0x014 << 26) - SEQIOP = (0x018 << 26), SNEIOP = (0x019 << 26), SLTIOP = (0x01A << 26), SGTIOP = (0x01B << 26) - SLEIOP = (0x01C << 26), SGEIOP = (0x01D << 26) - LBOP = (0x020 << 26), LHOP = (0x021 << 26), LWOP = (0x023 << 26), LBUOP = (0x024 << 26) - LHUOP = (0x025 << 26), SBOP = (0x028 << 26), SHOP = (0x029 << 26), SWOP = (0x02B << 26) - LSBUOP = (0x026 << 26), LSHU = (0x027 << 26), LSW = (0x02C << 26), - SEQUIOP= (0x030 << 26), SNEUIOP= (0x031 << 26), SLTUIOP= (0x032 << 26), SGTUIOP= (0x033 << 26) - SLEUIOP= (0x034 << 26), SGEUIOP= (0x035 << 26) - SLLIOP = (0x036 << 26), SRLIOP = (0x037 << 26), SRAIOP = (0x038 << 26). */ -#define JOP 0x08000000 -#define JALOP 0x0c000000 -#define BEQOP 0x10000000 -#define BNEOP 0x14000000 - -#define ADDIOP 0x20000000 -#define ADDUIOP 0x24000000 -#define SUBIOP 0x28000000 -#define SUBUIOP 0x2c000000 -#define ANDIOP 0x30000000 -#define ORIOP 0x34000000 -#define XORIOP 0x38000000 -#define LHIOP 0x3c000000 -#define RFEOP 0x40000000 -#define TRAPOP 0x44000000 -#define JROP 0x48000000 -#define JALROP 0x4c000000 -#define BREAKOP 0x50000000 - -#define SEQIOP 0x60000000 -#define SNEIOP 0x64000000 -#define SLTIOP 0x68000000 -#define SGTIOP 0x6c000000 -#define SLEIOP 0x70000000 -#define SGEIOP 0x74000000 - -#define LBOP 0x80000000 -#define LHOP 0x84000000 -#define LWOP 0x8c000000 -#define LBUOP 0x90000000 -#define LHUOP 0x94000000 -#define LDSTBU -#define LDSTHU -#define SBOP 0xa0000000 -#define SHOP 0xa4000000 -#define SWOP 0xac000000 -#define LDST - -#define SEQUIOP 0xc0000000 -#define SNEUIOP 0xc4000000 -#define SLTUIOP 0xc8000000 -#define SGTUIOP 0xcc000000 -#define SLEUIOP 0xd0000000 -#define SGEUIOP 0xd4000000 - -#define SLLIOP 0xd8000000 -#define SRLIOP 0xdc000000 -#define SRAIOP 0xe0000000 - -/* Following 3 ops was added to provide the MP atonmic operation. */ -#define LSBUOP 0x98000000 -#define LSHUOP 0x9c000000 -#define LSWOP 0xb0000000 - -/* Following opcode was defined in the Hennessy's book as - "normal" opcode but was implemented in the RTL as special - functions. */ -#if 0 -#define MVTSOP 0x50000000 -#define MVFSOP 0x54000000 -#endif - -struct dlx_opcode -{ - /* Name of the instruction. */ - char *name; - - /* Opcode word. */ - unsigned long opcode; - - /* A string of characters which describe the operands. - Valid characters are: - , Itself. The character appears in the assembly code. - a rs1 The register number is in bits 21-25 of the instruction. - b rs2/rd The register number is in bits 16-20 of the instruction. - c rd. The register number is in bits 11-15 of the instruction. - f FUNC bits 0-10 of the instruction. - i An immediate operand is in bits 0-16 of the instruction. 0 extended - I An immediate operand is in bits 0-16 of the instruction. sign extended - d An 16 bit PC relative displacement. - D An immediate operand is in bits 0-25 of the instruction. - N No opperands needed, for nops. - P it can be a register or a 16 bit operand. */ - char *args; -}; - -static const struct dlx_opcode dlx_opcodes[] = - { - /* Arithmetic and Logic R-TYPE instructions. */ - { "nop", (ALUOP|NOPF), "N" }, /* NOP */ - { "add", (ALUOP|ADDF), "c,a,b" }, /* Add */ - { "addu", (ALUOP|ADDUF), "c,a,b" }, /* Add Unsigned */ - { "sub", (ALUOP|SUBF), "c,a,b" }, /* SUB */ - { "subu", (ALUOP|SUBUF), "c,a,b" }, /* Sub Unsigned */ - { "mult", (ALUOP|MULTF), "c,a,b" }, /* MULTIPLY */ - { "multu", (ALUOP|MULTUF), "c,a,b" }, /* MULTIPLY Unsigned */ - { "div", (ALUOP|DIVF), "c,a,b" }, /* DIVIDE */ - { "divu", (ALUOP|DIVUF), "c,a,b" }, /* DIVIDE Unsigned */ - { "and", (ALUOP|ANDF), "c,a,b" }, /* AND */ - { "or", (ALUOP|ORF), "c,a,b" }, /* OR */ - { "xor", (ALUOP|XORF), "c,a,b" }, /* Exclusive OR */ - { "sll", (ALUOP|SLLF), "c,a,b" }, /* SHIFT LEFT LOGICAL */ - { "sra", (ALUOP|SRAF), "c,a,b" }, /* SHIFT RIGHT ARITHMETIC */ - { "srl", (ALUOP|SRLF), "c,a,b" }, /* SHIFT RIGHT LOGICAL */ - { "seq", (ALUOP|SEQF), "c,a,b" }, /* Set if equal */ - { "sne", (ALUOP|SNEF), "c,a,b" }, /* Set if not equal */ - { "slt", (ALUOP|SLTF), "c,a,b" }, /* Set if less */ - { "sgt", (ALUOP|SGTF), "c,a,b" }, /* Set if greater */ - { "sle", (ALUOP|SLEF), "c,a,b" }, /* Set if less or equal */ - { "sge", (ALUOP|SGEF), "c,a,b" }, /* Set if greater or equal */ - { "sequ", (ALUOP|SEQUF), "c,a,b" }, /* Set if equal unsigned */ - { "sneu", (ALUOP|SNEUF), "c,a,b" }, /* Set if not equal unsigned */ - { "sltu", (ALUOP|SLTUF), "c,a,b" }, /* Set if less unsigned */ - { "sgtu", (ALUOP|SGTUF), "c,a,b" }, /* Set if greater unsigned */ - { "sleu", (ALUOP|SLEUF), "c,a,b" }, /* Set if less or equal unsigned*/ - { "sgeu", (ALUOP|SGEUF), "c,a,b" }, /* Set if greater or equal */ - { "mvts", (ALUOP|MVTSF), "c,a" }, /* Move to special register */ - { "mvfs", (ALUOP|MVFSF), "c,a" }, /* Move from special register */ - { "bswap", (ALUOP|BSWAPF), "c,a,b" }, /* ??? Was not documented */ - { "lut", (ALUOP|LUTF), "c,a,b" }, /* ????? same as above */ - - /* Arithmetic and Logical Immediate I-TYPE instructions. */ - { "addi", ADDIOP, "b,a,I" }, /* Add Immediate */ - { "addui", ADDUIOP, "b,a,i" }, /* Add Usigned Immediate */ - { "subi", SUBIOP, "b,a,I" }, /* Sub Immediate */ - { "subui", SUBUIOP, "b,a,i" }, /* Sub Unsigned Immedated */ - { "andi", ANDIOP, "b,a,i" }, /* AND Immediate */ - { "ori", ORIOP, "b,a,i" }, /* OR Immediate */ - { "xori", XORIOP, "b,a,i" }, /* Exclusive OR Immediate */ - { "slli", SLLIOP, "b,a,i" }, /* SHIFT LEFT LOCICAL Immediate */ - { "srai", SRAIOP, "b,a,i" }, /* SHIFT RIGHT ARITH. Immediate */ - { "srli", SRLIOP, "b,a,i" }, /* SHIFT RIGHT LOGICAL Immediate*/ - { "seqi", SEQIOP, "b,a,i" }, /* Set if equal */ - { "snei", SNEIOP, "b,a,i" }, /* Set if not equal */ - { "slti", SLTIOP, "b,a,i" }, /* Set if less */ - { "sgti", SGTIOP, "b,a,i" }, /* Set if greater */ - { "slei", SLEIOP, "b,a,i" }, /* Set if less or equal */ - { "sgei", SGEIOP, "b,a,i" }, /* Set if greater or equal */ - { "sequi", SEQUIOP, "b,a,i" }, /* Set if equal */ - { "sneui", SNEUIOP, "b,a,i" }, /* Set if not equal */ - { "sltui", SLTUIOP, "b,a,i" }, /* Set if less */ - { "sgtui", SGTUIOP, "b,a,i" }, /* Set if greater */ - { "sleui", SLEUIOP, "b,a,i" }, /* Set if less or equal */ - { "sgeui", SGEUIOP, "b,a,i" }, /* Set if greater or equal */ - /* Macros for I type instructions. */ - { "mov", ADDIOP, "b,P" }, /* a move macro */ - { "movu", ADDUIOP, "b,P" }, /* a move macro, unsigned */ - -#if 0 - /* Move special. */ - { "mvts", MVTSOP, "b,a" }, /* Move From Integer to Special */ - { "mvfs", MVFSOP, "b,a" }, /* Move From Special to Integer */ -#endif - - /* Load high Immediate I-TYPE instruction. */ - { "lhi", LHIOP, "b,i" }, /* Load High Immediate */ - { "lui", LHIOP, "b,i" }, /* Load High Immediate */ - { "sethi", LHIOP, "b,i" }, /* Load High Immediate */ - - /* LOAD/STORE BYTE 8 bits I-TYPE. */ - { "lb", LBOP, "b,a,I" }, /* Load Byte */ - { "lbu", LBUOP, "b,a,I" }, /* Load Byte Unsigned */ - { "ldstbu", LSBUOP, "b,a,I" }, /* Load store Byte Unsigned */ - { "sb", SBOP, "b,a,I" }, /* Store Byte */ - - /* LOAD/STORE HALFWORD 16 bits. */ - { "lh", LHOP, "b,a,I" }, /* Load Halfword */ - { "lhu", LHUOP, "b,a,I" }, /* Load Halfword Unsigned */ - { "ldsthu", LSHUOP, "b,a,I" }, /* Load Store Halfword Unsigned */ - { "sh", SHOP, "b,a,I" }, /* Store Halfword */ - - /* LOAD/STORE WORD 32 bits. */ - { "lw", LWOP, "b,a,I" }, /* Load Word */ - { "sw", SWOP, "b,a,I" }, /* Store Word */ - { "ldstw", LSWOP, "b,a,I" }, /* Load Store Word */ - - /* Branch PC-relative, 16 bits offset. */ - { "beqz", BEQOP, "a,d" }, /* Branch if a == 0 */ - { "bnez", BNEOP, "a,d" }, /* Branch if a != 0 */ - { "beq", BEQOP, "a,d" }, /* Branch if a == 0 */ - { "bne", BNEOP, "a,d" }, /* Branch if a != 0 */ - - /* Jumps Trap and RFE J-TYPE. */ - { "j", JOP, "D" }, /* Jump, PC-relative 26 bits */ - { "jal", JALOP, "D" }, /* JAL, PC-relative 26 bits */ - { "break", BREAKOP, "D" }, /* break to OS */ - { "trap" , TRAPOP, "D" }, /* TRAP to OS */ - { "rfe", RFEOP, "N" }, /* Return From Exception */ - /* Macros. */ - { "call", JOP, "D" }, /* Jump, PC-relative 26 bits */ - - /* Jumps Trap and RFE I-TYPE. */ - { "jr", JROP, "a" }, /* Jump Register, Abs (32 bits) */ - { "jalr", JALROP, "a" }, /* JALR, Abs (32 bits) */ - /* Macros. */ - { "retr", JROP, "a" }, /* Jump Register, Abs (32 bits) */ - - { "", 0x0, "" } /* Dummy entry, not included in NUM_OPCODES. - This lets code examine entry i + 1 without - checking if we've run off the end of the table. */ - }; - -const unsigned int num_dlx_opcodes = (((sizeof dlx_opcodes) / (sizeof dlx_opcodes[0])) - 1); diff --git a/include/opcode/h8300.h b/include/opcode/h8300.h deleted file mode 100644 index 10fdf527ff2..00000000000 --- a/include/opcode/h8300.h +++ /dev/null @@ -1,1893 +0,0 @@ -/* Opcode table for the H8/300 - Copyright 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000, 2001, 2002, - 2003, 2004 - Free Software Foundation, Inc. - Written by Steve Chamberlain . - - This file is part of GDB, the GNU Debugger and GAS, the GNU Assembler. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA - 02110-1301, USA. */ - -/* Instructions are stored as a sequence of nibbles. - If the nibble has value 15 or less than the representation is complete. - Otherwise, we record what it contains with several flags. */ - -typedef int op_type; - -enum h8_flags -{ - L_2 = 0x10, - L_3 = 0x20, - /* 3 bit constant, zero not accepted. */ - L_3NZ = 0x30, - L_4 = 0x40, - L_5 = 0x50, - L_8 = 0x60, - L_8U = 0x70, - L_16 = 0x80, - L_16U = 0x90, - L_24 = 0xA0, - L_32 = 0xB0, - L_P = 0xC0, - - /* Mask to isolate the L_x size bits. */ - SIZE = 0xF0, - - REG = 0x0100, - ABS = 0x0200, - MEMIND = 0x0300, - IMM = 0x0400, - DISP = 0x0500, - IND = 0x0600, - POSTINC = 0x0700, - POSTDEC = 0x0800, - PREINC = 0x0900, - PREDEC = 0x0A00, - PCREL = 0x0B00, - KBIT = 0x0C00, - DBIT = 0x0D00, - CONST_2 = 0x0E00, - CONST_4 = 0x0F00, - CONST_8 = 0x1000, - CONST_16 = 0x1100, - INDEXB = 0x1200, - INDEXW = 0x1300, - INDEXL = 0x1400, - PCIDXB = 0x1500, - PCIDXW = 0x1600, - PCIDXL = 0x1700, - VECIND = 0x1800, - LOWREG = 0x1900, - DATA = 0x2000, - - /* Synonyms. */ - INC = POSTINC, - DEC = PREDEC, - /* Control Registers. */ - CCR = 0x4000, - EXR = 0x4100, - MACH = 0x4200, - MACL = 0x4300, - RESERV1 = 0x4400, - RESERV2 = 0x4500, - VBR = 0x4600, - SBR = 0x4700, - MACREG = 0x4800, - CCR_EXR = 0x4900, - VBR_SBR = 0x4A00, - CC_EX_VB_SB = 0x4B00, - RESERV3 = 0x4C00, - RESERV4 = 0x4D00, - RESERV5 = 0x4E00, - RESERV6 = 0x4F00, - - /* Mask to isolate the addressing mode bits (REG .. PREDEC). */ - MODE = 0x7F00, - - CTRL = 0x4000, - - NO_SYMBOLS = 0x8000, - SRC = 0x10000, - DST = 0x20000, - OP3 = 0x40000, - MEMRELAX = 0x80000, /* Move insn which may relax. */ - - DISPREG = 0x100000, - IGNORE = 0x200000, - ABSJMP = 0x400000, - - B00 = 0x800000, /* Bit 0 must be low. */ - B01 = 0x1000000, /* Bit 0 must be high. */ - B10 = 0x2000000, /* Bit 1 must be low. */ - B11 = 0x4000000, /* Bit 1 must be high. */ - B20 = 0x8000000, /* Bit 2 must be low. */ - B21 = 0x10000000, /* Bit 2 must be high. */ - B30 = 0x20000000, /* Bit 3 must be low. */ - B31 = 0x40000000, /* Bit 3 must be high. */ - E = 0x80000000, /* End of nibble sequence. */ - - /* Immediates smaller than 8 bits are always unsigned. */ - IMM3 = IMM | L_3, - IMM4 = IMM | L_4, - IMM5 = IMM | L_5, - IMM3NZ = IMM | L_3NZ, - IMM2 = IMM | L_2, - - IMM8 = IMM | SRC | L_8, - IMM8U = IMM | SRC | L_8U, - IMM16 = IMM | SRC | L_16, - IMM16U = IMM | SRC | L_16U, - IMM32 = IMM | SRC | L_32, - - IMM3NZ_NS = IMM3NZ | NO_SYMBOLS, - IMM4_NS = IMM4 | NO_SYMBOLS, - IMM8U_NS = IMM8U | NO_SYMBOLS, - IMM16U_NS = IMM16U | NO_SYMBOLS, - - RD8 = DST | L_8 | REG, - RD16 = DST | L_16 | REG, - RD32 = DST | L_32 | REG, - R3_8 = OP3 | L_8 | REG, - R3_16 = OP3 | L_16 | REG, - R3_32 = OP3 | L_32 | REG, - RS8 = SRC | L_8 | REG, - RS16 = SRC | L_16 | REG, - RS32 = SRC | L_32 | REG, - - RSP = SRC | L_P | REG, - RDP = DST | L_P | REG, - - PCREL8 = PCREL | L_8, - PCREL16 = PCREL | L_16, - - OP3PCREL8 = OP3 | PCREL | L_8, - OP3PCREL16 = OP3 | PCREL | L_16, - - INDEXB16 = INDEXB | L_16, - INDEXW16 = INDEXW | L_16, - INDEXL16 = INDEXL | L_16, - INDEXB16D = INDEXB | L_16 | DST, - INDEXW16D = INDEXW | L_16 | DST, - INDEXL16D = INDEXL | L_16 | DST, - - INDEXB32 = INDEXB | L_32, - INDEXW32 = INDEXW | L_32, - INDEXL32 = INDEXL | L_32, - INDEXB32D = INDEXB | L_32 | DST, - INDEXW32D = INDEXW | L_32 | DST, - INDEXL32D = INDEXL | L_32 | DST, - - DISP2SRC = DISP | L_2 | SRC, - DISP16SRC = DISP | L_16 | SRC, - DISP32SRC = DISP | L_32 | SRC, - - DISP2DST = DISP | L_2 | DST, - DISP16DST = DISP | L_16 | DST, - DISP32DST = DISP | L_32 | DST, - - DSTDISPREG = DST | DISPREG, - SRCDISPREG = SRC | DISPREG, - - ABS8SRC = SRC | ABS | L_8, - ABS16SRC = SRC | ABS | L_16U, - ABS24SRC = SRC | ABS | L_24, - ABS32SRC = SRC | ABS | L_32, - - ABS8DST = DST | ABS | L_8, - ABS16DST = DST | ABS | L_16U, - ABS24DST = DST | ABS | L_24, - ABS32DST = DST | ABS | L_32, - - ABS8OP3 = OP3 | ABS | L_8, - ABS16OP3 = OP3 | ABS | L_16U, - ABS24OP3 = OP3 | ABS | L_24, - ABS32OP3 = OP3 | ABS | L_32, - - RDDEC = DST | DEC, - RSINC = SRC | INC, - RDINC = DST | INC, - - RSPOSTINC = SRC | POSTINC, - RDPOSTINC = DST | POSTINC, - RSPREINC = SRC | PREINC, - RDPREINC = DST | PREINC, - RSPOSTDEC = SRC | POSTDEC, - RDPOSTDEC = DST | POSTDEC, - RSPREDEC = SRC | PREDEC, - RDPREDEC = DST | PREDEC, - - RSIND = SRC | IND, - RDIND = DST | IND, - R3_IND = OP3 | IND, - -#define MS32 (SRC | L_32 | MACREG) -#define MD32 (DST | L_32 | MACREG) - -#if 1 - OR8 = RS8, /* ??? OR as in One Register. */ - OR16 = RS16, - OR32 = RS32, -#else - OR8 = RD8, - OR16 = RD16, - OR32 = RD32 -#endif -}; - -enum ctrlreg -{ - C_CCR = 0, - C_EXR = 1, - C_MACH = 2, - C_MACL = 3, - C_VBR = 6, - C_SBR = 7 -}; - -enum {MAX_CODE_NIBBLES = 33}; - -struct code -{ - op_type nib[MAX_CODE_NIBBLES]; -}; - -struct arg -{ - op_type nib[3]; -}; - -/* Availability of instructions on processor models. */ -enum h8_model -{ - AV_H8, - AV_H8H, - AV_H8S, - AV_H8SX -}; - -struct h8_opcode -{ - int how; - enum h8_model available; - int time; - char *name; - struct arg args; - struct code data; -}; - -#ifdef DEFINE_TABLE - -#define DATA2 DATA, DATA -#define DATA3 DATA, DATA, DATA -#define DATA5 DATA, DATA, DATA, DATA, DATA -#define DATA7 DATA, DATA, DATA, DATA, DATA, DATA, DATA - -#define IMM8LIST IMM8, DATA -#define IMM16LIST IMM16, DATA3 -#define IMM16ULIST IMM16U, DATA3 -#define IMM24LIST IMM24, DATA5 -#define IMM32LIST IMM32, DATA7 - -#define DISP16LIST DISP | L_16, DATA3 -#define DISP24LIST DISP | L_24, DATA5 -#define DISP32LIST DISP | L_32, DATA7 - -#define ABS8LIST ABS | L_8, DATA -#define ABS16LIST ABS | L_16U, DATA3 -#define ABS24LIST ABS | L_24, DATA5 -#define ABS32LIST ABS | L_32, DATA7 - -#define DSTABS8LIST DST | ABS | L_8, DATA -#define DSTABS16LIST DST | ABS | L_16U, DATA3 -#define DSTABS24LIST DST | ABS | L_24, DATA5 -#define DSTABS32LIST DST | ABS | L_32, DATA7 - -#define OP3ABS8LIST OP3 | ABS | L_8, DATA -#define OP3ABS16LIST OP3 | ABS | L_16, DATA3 -#define OP3ABS24LIST OP3 | ABS | L_24, DATA5 -#define OP3ABS32LIST OP3 | ABS | L_32, DATA7 - -#define DSTDISP16LIST DST | DISP | L_16, DATA3 -#define DSTDISP24LIST DST | DISP | L_24, DATA5 -#define DSTDISP32LIST DST | DISP | L_32, DATA7 - -#define A16LIST L_16, DATA3 -#define A24LIST L_24, DATA5 -#define A32LIST L_32, DATA7 - -/* Extended Operand Prefixes: */ - -#define PREFIX_010 0x0, 0x1, 0x0 -#define PREFIX_015 0x0, 0x1, 0x5 -#define PREFIX_017 0x0, 0x1, 0x7 - -#define PREFIX_0100 0x0, 0x1, 0x0, 0x0 -#define PREFIX_010_D2 0x0, 0x1, 0x0, B30 | B21 | DISP2SRC -#define PREFIX_0101 0x0, 0x1, 0x0, 0x1 -#define PREFIX_0102 0x0, 0x1, 0x0, 0x2 -#define PREFIX_0103 0x0, 0x1, 0x0, 0x3 -#define PREFIX_0104 0x0, 0x1, 0x0, 0x4 -#define PREFIX_0105 0x0, 0x1, 0x0, 0x5 -#define PREFIX_0106 0x0, 0x1, 0x0, 0x6 -#define PREFIX_0107 0x0, 0x1, 0x0, 0x7 -#define PREFIX_0108 0x0, 0x1, 0x0, 0x8 -#define PREFIX_0109 0x0, 0x1, 0x0, 0x9 -#define PREFIX_010A 0x0, 0x1, 0x0, 0xa -#define PREFIX_010D 0x0, 0x1, 0x0, 0xd -#define PREFIX_010E 0x0, 0x1, 0x0, 0xe - -#define PREFIX_0150 0x0, 0x1, 0x5, 0x0 -#define PREFIX_015_D2 0x0, 0x1, 0x5, B30 | B21 | DISP2SRC -#define PREFIX_0151 0x0, 0x1, 0x5, 0x1 -#define PREFIX_0152 0x0, 0x1, 0x5, 0x2 -#define PREFIX_0153 0x0, 0x1, 0x5, 0x3 -#define PREFIX_0154 0x0, 0x1, 0x5, 0x4 -#define PREFIX_0155 0x0, 0x1, 0x5, 0x5 -#define PREFIX_0156 0x0, 0x1, 0x5, 0x6 -#define PREFIX_0157 0x0, 0x1, 0x5, 0x7 -#define PREFIX_0158 0x0, 0x1, 0x5, 0x8 -#define PREFIX_0159 0x0, 0x1, 0x5, 0x9 -#define PREFIX_015A 0x0, 0x1, 0x5, 0xa -#define PREFIX_015D 0x0, 0x1, 0x5, 0xd -#define PREFIX_015E 0x0, 0x1, 0x5, 0xe -#define PREFIX_015F 0x0, 0x1, 0x5, 0xf - -#define PREFIX_0170 0x0, 0x1, 0x7, 0x0 -#define PREFIX_017_D2S 0x0, 0x1, 0x7, B30 | B21 | DISP2SRC -#define PREFIX_017_D2D 0x0, 0x1, 0x7, B30 | B21 | DISP2DST -#define PREFIX_0171 0x0, 0x1, 0x7, 0x1 -#define PREFIX_0172 0x0, 0x1, 0x7, 0x2 -#define PREFIX_0173 0x0, 0x1, 0x7, 0x3 -#define PREFIX_0174 0x0, 0x1, 0x7, 0x4 -#define PREFIX_0175 0x0, 0x1, 0x7, 0x5 -#define PREFIX_0176 0x0, 0x1, 0x7, 0x6 -#define PREFIX_0177 0x0, 0x1, 0x7, 0x7 -#define PREFIX_0178 0x0, 0x1, 0x7, 0x8 -#define PREFIX_0179 0x0, 0x1, 0x7, 0x9 -#define PREFIX_017A 0x0, 0x1, 0x7, 0xa -#define PREFIX_017D 0x0, 0x1, 0x7, 0xd -#define PREFIX_017E 0x0, 0x1, 0x7, 0xe -#define PREFIX_017F 0x0, 0x1, 0x7, 0xf - -#define PREFIX_6A15 0x6, 0xa, 0x1, 0x5 -#define PREFIX_6A35 0x6, 0xa, 0x3, 0x5 -#define PREFIX_6B15 0x6, 0xb, 0x1, 0x5 -#define PREFIX_6B35 0x6, 0xb, 0x3, 0x5 - -#define PREFIX_78R4 0x7, 0x8, B31 | DISPREG, 0x4 -#define PREFIX_78R5 0x7, 0x8, B31 | DISPREG, 0x5 -#define PREFIX_78R6 0x7, 0x8, B31 | DISPREG, 0x6 -#define PREFIX_78R7 0x7, 0x8, B31 | DISPREG, 0x7 - -#define PREFIX_78R4W 0x7, 0x8, B30 | DISPREG, 0x4 -#define PREFIX_78R5W 0x7, 0x8, B30 | DISPREG, 0x5 -#define PREFIX_78R6W 0x7, 0x8, B30 | DISPREG, 0x6 -#define PREFIX_78R7W 0x7, 0x8, B30 | DISPREG, 0x7 - -#define PREFIX_78R4WD 0x7, 0x8, B30 | DSTDISPREG, 0x4 -#define PREFIX_78R5WD 0x7, 0x8, B30 | DSTDISPREG, 0x5 -#define PREFIX_78R6WD 0x7, 0x8, B30 | DSTDISPREG, 0x6 -#define PREFIX_78R7WD 0x7, 0x8, B30 | DSTDISPREG, 0x7 - -#define PREFIX_7974 0x7, 0x9, 0x7, 0x4 -#define PREFIX_7A74 0x7, 0xa, 0x7, 0x4 -#define PREFIX_7A7C 0x7, 0xa, 0x7, 0xc - - -/* Source standard fragment: */ -#define FROM_IND 0, RSIND -#define FROM_POSTINC 8, RSPOSTINC -#define FROM_POSTDEC 10, RSPOSTDEC -#define FROM_PREINC 9, RSPREINC -#define FROM_PREDEC 11, RSPREDEC -#define FROM_DISP2 B30 | B20 | DISP2SRC, DISPREG -#define FROM_DISP16 12, B30 | DISPREG -#define FROM_DISP32 12, B31 | DISPREG -#define FROM_DISP16B 13, B30 | DISPREG -#define FROM_DISP16W 14, B30 | DISPREG -#define FROM_DISP16L 15, B30 | DISPREG -#define FROM_DISP32B 13, B31 | DISPREG -#define FROM_DISP32W 14, B31 | DISPREG -#define FROM_DISP32L 15, B31 | DISPREG -#define FROM_ABS16 4, B30 | IGNORE -#define FROM_ABS32 4, B31 | IGNORE - -/* Destination standard fragment: */ -#define TO_IND 0, RDIND -#define TO_IND_MOV 0, RDIND | B30 -#define TO_POSTINC 8, RDPOSTINC -#define TO_POSTINC_MOV 8, RDPOSTINC | B30 -#define TO_POSTDEC 10, RDPOSTDEC -#define TO_POSTDEC_MOV 10, RDPOSTDEC | B30 -#define TO_PREINC 9, RDPREINC -#define TO_PREINC_MOV 9, RDPREINC | B30 -#define TO_PREDEC 11, RDPREDEC -#define TO_PREDEC_MOV 11, RDPREDEC | B30 -#define TO_DISP2 B30 | B20 | DISP2DST, DSTDISPREG -#define TO_DISP2_MOV B30 | B20 | DISP2DST, DSTDISPREG | B30 -#define TO_DISP16 12, B30 | DSTDISPREG -#define TO_DISP32 12, B31 | DSTDISPREG -#define TO_DISP16B 13, B30 | DSTDISPREG -#define TO_DISP16W 14, B30 | DSTDISPREG -#define TO_DISP16L 15, B30 | DSTDISPREG -#define TO_DISP32B 13, B31 | DSTDISPREG -#define TO_DISP32W 14, B31 | DSTDISPREG -#define TO_DISP32L 15, B31 | DSTDISPREG -#define TO_ABS16 4, B30 | IGNORE -#define TO_ABS32 4, B31 | IGNORE - -/* Source fragment for three-word instruction: */ -#define TFROM_IND 6, 9, B30 | RSIND, 12 -#define TFROM_DISP2 6, 9, B30 | DISPREG, 12 -#define TFROM_ABS16 6, 11, B30 | B20 | B10 | IGNORE, 12, ABS16LIST -#define TFROM_ABS32 6, 11, B30 | B20 | B11 | IGNORE, 12, ABS32LIST -#define TFROM_POSTINC 6, 13, B30 | RSPOSTINC, 12 -#define TFROM_PREINC 6, 13, B30 | RSPREINC, 12 -#define TFROM_POSTDEC 6, 13, B30 | RSPOSTDEC, 12 -#define TFROM_PREDEC 6, 13, B30 | RSPREDEC, 12 -#define TFROM_DISP16 6, 15, B30 | DISPREG, 12, DISP16LIST -#define TFROM_DISP32 6, 11, 2, 12, DISP32LIST -#define TFROM_DISP16B 6, 15, B30 | DISPREG, 12, DISP16LIST -#define TFROM_DISP16W 6, 15, B30 | DISPREG, 12, DISP16LIST -#define TFROM_DISP16L 6, 15, B30 | DISPREG, 12, DISP16LIST -#define TFROM_DISP32B 6, 11, 2, 12, DISP32LIST -#define TFROM_DISP32W 6, 11, 2, 12, DISP32LIST -#define TFROM_DISP32L 6, 11, 2, 12, DISP32LIST -#define TFROM_ABS16W 6, 11, 1, 12, ABS16LIST -#define TFROM_ABS32W 6, 11, 3, 12, ABS32LIST - -/* Source fragment for three-word instruction: */ -#define TFROM_IND_B 6, 8, B30 | RSIND, 12 -#define TFROM_ABS16_B 6, 10, B30 | B20 | B10 | IGNORE, 12, ABS16LIST -#define TFROM_ABS32_B 6, 10, B30 | B20 | B11 | IGNORE, 12, ABS32LIST - -#define TFROM_DISP2_B 6, 8, B30 | DISPREG, 12 -#define TFROM_POSTINC_B 6, 12, B30 | RSPOSTINC, 12 -#define TFROM_PREINC_B 6, 12, B30 | RSPREINC, 12 -#define TFROM_POSTDEC_B 6, 12, B30 | RSPOSTDEC, 12 -#define TFROM_PREDEC_B 6, 12, B30 | RSPREDEC, 12 -#define TFROM_DISP16_B 6, 14, B30 | DISPREG, 12, DISP16LIST -#define TFROM_DISP32_B 6, 10, 2, 12, DISP32LIST -#define TFROM_DISP16B_B 6, 14, B30 | DISPREG, 12, DISP16LIST -#define TFROM_DISP16W_B 6, 14, B30 | DISPREG, 12, DISP16LIST -#define TFROM_DISP16L_B 6, 14, B30 | DISPREG, 12, DISP16LIST -#define TFROM_DISP32B_B 6, 10, 2, 12, DISP32LIST -#define TFROM_DISP32W_B 6, 10, 2, 12, DISP32LIST -#define TFROM_DISP32L_B 6, 10, 2, 12, DISP32LIST - -#define TFROM_ABS16W_B 6, 10, 1, 12, ABS16LIST -#define TFROM_ABS32W_B 6, 10, 3, 12, ABS32LIST - -/* Extended Operand Class Expanders: */ - -#define MOVFROM_STD(CODE, PREFIX, NAME, SRC, SRC_INFIX) \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDIND, E}}, {{PREFIX, SRC_INFIX, TO_IND_MOV, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, SRC_INFIX, TO_POSTINC_MOV, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, SRC_INFIX, TO_POSTDEC_MOV, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, SRC_INFIX, TO_PREINC_MOV, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, SRC_INFIX, TO_PREDEC_MOV, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP2_MOV, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP16, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP32, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16B, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16W, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16L, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32B, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32W, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32L, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, ABS16DST, E}}, {{PREFIX, SRC_INFIX, TO_ABS16, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, ABS32DST, E}}, {{PREFIX, SRC_INFIX, TO_ABS32, DSTABS32LIST, E}}} - -#define MOVFROM_AD(CODE, PREFIX, NAME, SRC, SRC_INFIX, SRC_SUFFIX) \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDIND, E}}, {{PREFIX, SRC_INFIX, TO_IND_MOV, SRC_SUFFIX, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, SRC_INFIX, TO_POSTINC_MOV, SRC_SUFFIX, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, SRC_INFIX, TO_POSTDEC_MOV, SRC_SUFFIX, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, SRC_INFIX, TO_PREINC_MOV, SRC_SUFFIX, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, SRC_INFIX, TO_PREDEC_MOV, SRC_SUFFIX, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP2_MOV, SRC_SUFFIX, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP16, SRC_SUFFIX, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, SRC_INFIX, TO_DISP32, SRC_SUFFIX, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16B, SRC_SUFFIX, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16W, SRC_SUFFIX, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, SRC_INFIX, TO_DISP16L, SRC_SUFFIX, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32B, SRC_SUFFIX, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32W, SRC_SUFFIX, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, SRC_INFIX, TO_DISP32L, SRC_SUFFIX, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, ABS16DST, E}}, {{PREFIX, SRC_INFIX, TO_ABS16, SRC_SUFFIX, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, ABS32DST, E}}, {{PREFIX, SRC_INFIX, TO_ABS32, SRC_SUFFIX, DSTABS32LIST, E}}} - -#define MOVFROM_IMM8(CODE, PREFIX, NAME, SRC) \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDIND, E}}, {{PREFIX, 0, RDIND, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, 8, RDPOSTINC, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, 10, RDPOSTDEC, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, 9, RDPREINC, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, 11, RDPREDEC, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, B30 | B20 | DISP2DST, DSTDISPREG, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, 12, B30 | DSTDISPREG, IMM8LIST, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, 12, B31 | DSTDISPREG, IMM8LIST, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, 13, B30 | DSTDISPREG, IMM8LIST, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, 14, B30 | DSTDISPREG, IMM8LIST, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, 15, B30 | DSTDISPREG, IMM8LIST, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, 13, B31 | DSTDISPREG, IMM8LIST, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, 14, B31 | DSTDISPREG, IMM8LIST, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, 15, B31 | DSTDISPREG, IMM8LIST, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, ABS16DST, E}}, {{PREFIX, 4, B30 | IGNORE, IMM8LIST, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, ABS32DST, E}}, {{PREFIX, 4, B31 | IGNORE, IMM8LIST, DSTABS32LIST, E}}} - -#define MOVFROM_IMM(CODE, PREFIX, NAME, SRC, LIST) \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDIND, E}}, {{PREFIX, LIST, 0, RDIND, DATA2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, LIST, 8, RDPOSTINC, DATA2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, LIST, 10, RDPOSTDEC, DATA2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, LIST, 9, RDPREINC, DATA2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, LIST, 11, RDPREDEC, DATA2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, LIST, B30 | B20 | DISP2DST, DSTDISPREG, DATA2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, LIST, 12, B30 | DSTDISPREG, DATA2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, LIST, 12, B31 | DSTDISPREG, DATA2, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, LIST, 13, B30 | DSTDISPREG, DATA2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, LIST, 14, B30 | DSTDISPREG, DATA2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, LIST, 15, B30 | DSTDISPREG, DATA2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, LIST, 13, B31 | DSTDISPREG, DATA2, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, LIST, 14, B31 | DSTDISPREG, DATA2, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, LIST, 15, B31 | DSTDISPREG, DATA2, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, ABS16DST, E}}, {{PREFIX, LIST, 4, B30 | IGNORE, DATA2, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, ABS32DST, E}}, {{PREFIX, LIST, 4, B31 | IGNORE, DATA2, DSTABS32LIST, E}}} - -#define MOVFROM_REG_BW(CODE, NAME, SRC, PREFIX, OP1, OP2, OP3, OP4, RELAX16) \ - {CODE, AV_H8, 4, NAME, {{SRC, RDIND, E}}, {{ 6, OP1, B31 | RDIND, SRC, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, 3, 6, OP3, B31 | RDPOSTINC, SRC, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, 1, 6, OP3, B31 | RDPOSTDEC, SRC, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, 2, 6, OP3, B31 | RDPREINC, SRC, E}}}, \ - {CODE, AV_H8, 6, NAME, {{SRC, RDPREDEC, E}}, {{ 6, OP3, B31 | RDPREDEC, SRC, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, B30 | B20 | DISP2DST, 6, OP1, B31 | DSTDISPREG, SRC, E}}}, \ - {CODE, AV_H8, 6, NAME, {{SRC, DISP16DST, E}}, {{ 6, OP4, B31 | DSTDISPREG, SRC, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8, 6, NAME, {{SRC, DISP32DST, E}}, {{7, 8, B30 | DSTDISPREG, 0, 6, OP2, 10, SRC, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, 1, 6, OP4, B31 | DSTDISPREG, SRC, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, 2, 6, OP4, B31 | DSTDISPREG, SRC, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, 3, 6, OP4, B31 | DSTDISPREG, SRC, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{7, 8, B30 | DSTDISPREG, 1, 6, OP2, 10, SRC, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{7, 8, B30 | DSTDISPREG, 2, 6, OP2, 10, SRC, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{7, 8, B30 | DSTDISPREG, 3, 6, OP2, 10, SRC, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8, 4, NAME, {{SRC, ABS16DST, E}}, {{ 6, OP2, 8, SRC, RELAX16 | DSTABS16LIST, E}}}, \ - {CODE, AV_H8, 6, NAME, {{SRC, ABS32DST, E}}, {{ 6, OP2, 10, SRC, MEMRELAX | DSTABS32LIST, E}}} - -#define MOVTO_REG_BW(CODE, NAME, DST, PREFIX, OP1, OP2, OP3, OP4, RELAX16) \ - {CODE, AV_H8, 4, NAME, {{RSIND, DST, E}}, {{ 6, OP1, B30 | RSIND, DST, E}}}, \ - {CODE, AV_H8, 6, NAME, {{RSPOSTINC, DST, E}}, {{ 6, OP3, B30 | RSPOSTINC, DST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPOSTDEC, DST, E}}, {{PREFIX, 2, 6, OP3, B30 | RSPOSTDEC, DST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPREINC, DST, E}}, {{PREFIX, 1, 6, OP3, B30 | RSPREINC, DST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPREDEC, DST, E}}, {{PREFIX, 3, 6, OP3, B30 | RSPREDEC, DST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP2SRC, DST, E}}, {{PREFIX, B30 | B20 | DISP2SRC, 6, OP1, B30 | DISPREG, DST, E}}}, \ - {CODE, AV_H8, 6, NAME, {{DISP16SRC, DST, E}}, {{ 6, OP4, B30 | DISPREG, DST, DISP16LIST, E}}}, \ - {CODE, AV_H8, 6, NAME, {{DISP32SRC, DST, E}}, {{7, 8, B30 | DISPREG, 0, 6, OP2, 2, DST, DISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXB16, DST, E}}, {{PREFIX, 1, 6, OP4, B30 | DISPREG, DST, DISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXW16, DST, E}}, {{PREFIX, 2, 6, OP4, B30 | DISPREG, DST, DISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXL16, DST, E}}, {{PREFIX, 3, 6, OP4, B30 | DISPREG, DST, DISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXB32, DST, E}}, {{7, 8, B30 | DISPREG, 1, 6, OP2, 2, DST, DISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXW32, DST, E}}, {{7, 8, B30 | DISPREG, 2, 6, OP2, 2, DST, DISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXL32, DST, E}}, {{7, 8, B30 | DISPREG, 3, 6, OP2, 2, DST, DISP32LIST, E}}}, \ - {CODE, AV_H8, 4, NAME, {{ABS16SRC, DST, E}}, {{ 6, OP2, 0, DST, RELAX16 | ABS16LIST, E}}}, \ - {CODE, AV_H8, 6, NAME, {{ABS32SRC, DST, E}}, {{ 6, OP2, 2, DST, MEMRELAX | ABS32LIST, E}}} - -/* Expansion macros for two-word (plus data) instructions. */ - -/* Expansion from one source to "standard" destinations. */ -#define EXPAND2_STD_SRC(CODE, WEIGHT, NAME, SRC, PREFIX, NIB1, NIB2) \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, TO_POSTINC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, TO_POSTDEC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, TO_PREINC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, TO_PREDEC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, TO_DISP2, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, TO_DISP16, NIB1, NIB2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, TO_DISP32, NIB1, NIB2, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, TO_DISP16B, NIB1, NIB2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, TO_DISP16W, NIB1, NIB2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, TO_DISP16L, NIB1, NIB2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, TO_DISP32B, NIB1, NIB2, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, TO_DISP32W, NIB1, NIB2, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, TO_DISP32L, NIB1, NIB2, DSTDISP32LIST, E}}} - -/* Expansion from one destination to "standard" sources. */ -#define EXPAND2_STD_DST(CODE, WEIGHT, NAME, DST, PREFIX, NIB1, NIB2) \ - {CODE, AV_H8SX, 0, NAME, {{RSPOSTINC, DST, E}}, {{PREFIX, FROM_POSTINC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPOSTDEC, DST, E}}, {{PREFIX, FROM_POSTDEC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPREINC, DST, E}}, {{PREFIX, FROM_PREINC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPREDEC, DST, E}}, {{PREFIX, FROM_PREDEC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP2SRC, DST, E}}, {{PREFIX, FROM_DISP2, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP16SRC, DST, E}}, {{PREFIX, FROM_DISP16, NIB1, NIB2, DISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP32SRC, DST, E}}, {{PREFIX, FROM_DISP32, NIB1, NIB2, DISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXB16, DST, E}}, {{PREFIX, FROM_DISP16B, NIB1, NIB2, DISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXW16, DST, E}}, {{PREFIX, FROM_DISP16W, NIB1, NIB2, DISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXL16, DST, E}}, {{PREFIX, FROM_DISP16L, NIB1, NIB2, DISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXB32, DST, E}}, {{PREFIX, FROM_DISP32B, NIB1, NIB2, DISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXW32, DST, E}}, {{PREFIX, FROM_DISP32W, NIB1, NIB2, DISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXL32, DST, E}}, {{PREFIX, FROM_DISP32L, NIB1, NIB2, DISP32LIST, E}}} - -/* Expansion from immediate source to "standard" destinations. */ -#define EXPAND2_STD_IMM(CODE, WEIGHT, NAME, SRC, PREFIX, OPCODE, IGN, IMMLIST) \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, TO_POSTINC, OPCODE, IGN, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, TO_POSTDEC, OPCODE, IGN, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, TO_PREINC, OPCODE, IGN, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, TO_PREDEC, OPCODE, IGN, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, TO_DISP2, OPCODE, IGN, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, TO_DISP16, OPCODE, IGN, DSTDISP16LIST, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, TO_DISP32, OPCODE, IGN, DSTDISP32LIST, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, TO_DISP16B, OPCODE, IGN, DSTDISP16LIST, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, TO_DISP16W, OPCODE, IGN, DSTDISP16LIST, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, TO_DISP16L, OPCODE, IGN, DSTDISP16LIST, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, TO_DISP32B, OPCODE, IGN, DSTDISP32LIST, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, TO_DISP32W, OPCODE, IGN, DSTDISP32LIST, IMMLIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, TO_DISP32L, OPCODE, IGN, DSTDISP32LIST, IMMLIST, E}}} - -/* Expansion from abs/disp source to "standard" destinations. */ -#define EXPAND2_STD_ABSDISP(CODE, WEIGHT, NAME, SRC, PREFIX, DSTLIST, NIB1, NIB2) \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, DSTLIST, TO_POSTINC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, DSTLIST, TO_POSTDEC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, DSTLIST, TO_PREINC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, DSTLIST, TO_PREDEC, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, DSTLIST, TO_DISP2, NIB1, NIB2, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, DSTLIST, TO_DISP16, NIB1, NIB2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, DSTLIST, TO_DISP32, NIB1, NIB2, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, DSTLIST, TO_DISP16B, NIB1, NIB2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, DSTLIST, TO_DISP16W, NIB1, NIB2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, DSTLIST, TO_DISP16L, NIB1, NIB2, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, DSTLIST, TO_DISP32B, NIB1, NIB2, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, DSTLIST, TO_DISP32W, NIB1, NIB2, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, DSTLIST, TO_DISP32L, NIB1, NIB2, DSTDISP32LIST, E}}} - -/* Expansion from ind source to "standard" destinations. */ -#define EXPAND2_STD_IND(CODE, WEIGHT, NAME, OPCODE, BIT) \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, RDPOSTINC, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_POSTINC, OPCODE, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, RDPOSTDEC, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_POSTDEC, OPCODE, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, RDPREINC, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_PREINC, OPCODE, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, RDPREDEC, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_PREDEC, OPCODE, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, DISP2DST, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP2, OPCODE, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, DISP16DST, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP16, OPCODE, IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, DISP32DST, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP32, OPCODE, IGNORE, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXB16D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP16B, OPCODE, IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXW16D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP16W, OPCODE, IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXL16D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP16L, OPCODE, IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXB32D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP32B, OPCODE, IGNORE, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXW32D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP32W, OPCODE, IGNORE, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, INDEXL32D, E}}, {{0x7, 0xc, BIT | RSIND, 0x5, TO_DISP32L, OPCODE, IGNORE, DSTDISP32LIST, E}}} - -/* Expansion macros for three word (plus data) instructions. */ - -#define EXPAND3_STD_SRC(CODE, WEIGHT, NAME, SRC, PREFIX, INFIX, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, INFIX, 8, RDPOSTINC, OPCODE, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, INFIX, 10, RDPOSTDEC, OPCODE, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, INFIX, 9, RDPREINC, OPCODE, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, INFIX, 11, RDPREDEC, OPCODE, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, INFIX, B30 | B20 | DISP2DST, DSTDISPREG, OPCODE, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, INFIX, 12, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, INFIX, 12, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, INFIX, 13, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, INFIX, 14, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, INFIX, 15, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, INFIX, 13, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, INFIX, 14, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, INFIX, 15, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}} - -#define EXPAND3_L_SRC(CODE, WEIGHT, NAME, SRC, PREFIX, INFIX, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDIND, E}}, {{PREFIX, INFIX, 0, RDIND, OPCODE, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTINC, E}}, {{PREFIX, INFIX, 8, RDPOSTINC, OPCODE, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPOSTDEC, E}}, {{PREFIX, INFIX, 10, RDPOSTDEC, OPCODE, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREINC, E}}, {{PREFIX, INFIX, 9, RDPREINC, OPCODE, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, RDPREDEC, E}}, {{PREFIX, INFIX, 11, RDPREDEC, OPCODE, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP2DST, E}}, {{PREFIX, INFIX, B30 | B20 | DISP2DST, DSTDISPREG, OPCODE, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP16DST, E}}, {{PREFIX, INFIX, 12, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, DISP32DST, E}}, {{PREFIX, INFIX, 12, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB16D, E}}, {{PREFIX, INFIX, 13, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW16D, E}}, {{PREFIX, INFIX, 14, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL16D, E}}, {{PREFIX, INFIX, 15, B30 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXB32D, E}}, {{PREFIX, INFIX, 13, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXW32D, E}}, {{PREFIX, INFIX, 14, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, INDEXL32D, E}}, {{PREFIX, INFIX, 15, B31 | DSTDISPREG, OPCODE, B30 | IGNORE, DSTDISP32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, ABS16DST, E}}, {{PREFIX, INFIX, 4, B30 | IGNORE, OPCODE, B30 | IGNORE, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{SRC, ABS32DST, E}}, {{PREFIX, INFIX, 4, B31 | IGNORE, OPCODE, B30 | IGNORE, DSTABS32LIST, E}}} - - -#define EXPAND_STD_MATRIX_L(CODE, NAME, OPCODE) \ - EXPAND3_L_SRC (CODE, 6, NAME, RSIND, PREFIX_0104, TFROM_IND, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, RSPOSTINC, PREFIX_0104, TFROM_POSTINC, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, RSPOSTDEC, PREFIX_0106, TFROM_POSTDEC, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, RSPREINC, PREFIX_0105, TFROM_PREINC, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, RSPREDEC, PREFIX_0107, TFROM_PREDEC, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, DISP2SRC, PREFIX_010_D2, TFROM_DISP2, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, DISP16SRC, PREFIX_0104, TFROM_DISP16, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, DISP32SRC, PREFIX_78R4, TFROM_DISP32, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, INDEXB16, PREFIX_0105, TFROM_DISP16B, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, INDEXW16, PREFIX_0106, TFROM_DISP16W, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, INDEXL16, PREFIX_0107, TFROM_DISP16L, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, INDEXB32, PREFIX_78R5, TFROM_DISP32B, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, INDEXW32, PREFIX_78R6, TFROM_DISP32W, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, INDEXL32, PREFIX_78R7, TFROM_DISP32L, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, ABS16SRC, PREFIX_0104, TFROM_ABS16, OPCODE), \ - EXPAND3_L_SRC (CODE, 6, NAME, ABS32SRC, PREFIX_0104, TFROM_ABS32, OPCODE) - - -#define EXPAND_STD_MATRIX_W(CODE, NAME, OPCODE) \ - EXPAND3_L_SRC (CODE, 4, NAME, RSPOSTINC, PREFIX_0154, TFROM_POSTINC, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, RSPOSTDEC, PREFIX_0156, TFROM_POSTDEC, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, RSPREINC, PREFIX_0155, TFROM_PREINC, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, RSPREDEC, PREFIX_0157, TFROM_PREDEC, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, DISP2SRC, PREFIX_015_D2, TFROM_DISP2, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, DISP16SRC, PREFIX_0154, TFROM_DISP16, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, DISP32SRC, PREFIX_78R4W, TFROM_DISP32, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXB16, PREFIX_0155, TFROM_DISP16B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXW16, PREFIX_0156, TFROM_DISP16W, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXL16, PREFIX_0157, TFROM_DISP16L, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXB32, PREFIX_78R5W, TFROM_DISP32B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXW32, PREFIX_78R6W, TFROM_DISP32W, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXL32, PREFIX_78R7W, TFROM_DISP32L, OPCODE) - -#define EXPAND_STD_MATRIX_B(CODE, NAME, OPCODE) \ - EXPAND3_L_SRC (CODE, 4, NAME, RSPOSTINC, PREFIX_0174, TFROM_POSTINC_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, RSPOSTDEC, PREFIX_0176, TFROM_POSTDEC_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, RSPREINC, PREFIX_0175, TFROM_PREINC_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, RSPREDEC, PREFIX_0177, TFROM_PREDEC_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, DISP2SRC, PREFIX_017_D2S, TFROM_DISP2_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, DISP16SRC, PREFIX_0174, TFROM_DISP16_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, DISP32SRC, PREFIX_78R4W, TFROM_DISP32_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXB16, PREFIX_0175, TFROM_DISP16B_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXW16, PREFIX_0176, TFROM_DISP16W_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXL16, PREFIX_0177, TFROM_DISP16L_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXB32, PREFIX_78R5W, TFROM_DISP32B_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXW32, PREFIX_78R6W, TFROM_DISP32W_B, OPCODE), \ - EXPAND3_L_SRC (CODE, 4, NAME, INDEXL32, PREFIX_78R7W, TFROM_DISP32L_B, OPCODE) - - -/* Use the expansion macros to fill out the opcode table. */ - -#define EXPAND_FROM_REG8(CODE, NAME, OP1, OP2, OP3) \ - {CODE, AV_H8SX, 0, NAME, {{RS8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, OP1, OP2, RS8, IGNORE, E}}}, \ - EXPAND2_STD_SRC (CODE, 2, NAME, RS8, PREFIX_0179, OP3, RS8), \ - {CODE, AV_H8SX, 0, NAME, {{RS8, ABS8DST, E}}, {{0x7, 0xf, DSTABS8LIST, OP1, OP2, RS8, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RS8, ABS16DST, E}}, {{0x6, 0xa, 0x1, B31 | IGNORE, DSTABS16LIST, OP1, OP2, RS8, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RS8, ABS32DST, E}}, {{0x6, 0xa, 0x3, B31 | IGNORE, DSTABS32LIST, OP1, OP2, RS8, IGNORE, E}}} - -#define EXPAND_TO_REG8(CODE, NAME, OP1, OP2, OP3) \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, RD8, E}}, {{0x7, 0xc, B30 | RSIND, IGNORE, OP1, OP2, IGNORE, RD8, E}}}, \ - EXPAND2_STD_DST (CODE, 2, NAME, RD8, PREFIX_017A, OP3, RD8), \ - {CODE, AV_H8SX, 0, NAME, {{ABS8SRC, RD8, E}}, {{0x7, 0xe, ABS8LIST, OP1, OP2, IGNORE, RD8, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, RD8, E}}, {{0x6, 0xa, 0x1, B30 | IGNORE, ABS16LIST, OP1, OP2, IGNORE, RD8, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, RD8, E}}, {{0x6, 0xa, 0x3, B30 | IGNORE, ABS32LIST, OP1, OP2, IGNORE, RD8, E}}} - -#define EXPAND_FROM_IND8(CODE, NAME, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, RDIND, E}}, {{0x7, 0xc, B30 | RSIND, 0x5, TO_IND, OPCODE, IGNORE, E}}}, \ - EXPAND2_STD_IND (CODE, 2, NAME, OPCODE, B30), \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, ABS16DST, E}}, {{0x7, 0xc, B30 | RSIND, 0x5, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, ABS32DST, E}}, {{0x7, 0xc, B30 | RSIND, 0x5, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}} - -#define EXPAND_FROM_ABS16_B(CODE, NAME, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, RDIND, E}}, {{PREFIX_6A15, ABS16LIST, TO_IND, OPCODE, IGNORE, E}}}, \ - EXPAND2_STD_ABSDISP (CODE, 2, NAME, ABS16SRC, PREFIX_6A15, ABS16LIST, OPCODE, IGNORE), \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, ABS16DST, E}}, {{PREFIX_6A15, ABS16LIST, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, ABS32DST, E}}, {{PREFIX_6A15, ABS16LIST, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}} - -#define EXPAND_FROM_ABS32_B(CODE, NAME, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, RDIND, E}}, {{PREFIX_6A35, ABS32LIST, TO_IND, OPCODE, IGNORE, E}}}, \ - EXPAND2_STD_ABSDISP (CODE, 2, NAME, ABS32SRC, PREFIX_6A35, ABS32LIST, OPCODE, IGNORE), \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, ABS16DST, E}}, {{PREFIX_6A35, ABS32LIST, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, ABS32DST, E}}, {{PREFIX_6A35, ABS32LIST, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}} - -#define EXPAND_FROM_IMM16_W(CODE, NAME, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{IMM16, RDIND, E}}, {{PREFIX_015E, TO_IND, OPCODE, IGNORE, IMM16LIST, E}}}, \ - EXPAND2_STD_IMM (CODE, 2, NAME, IMM16, PREFIX_015E, OPCODE, IGNORE, IMM16LIST), \ - {CODE, AV_H8SX, 0, NAME, {{IMM16, ABS16DST, E}}, {{PREFIX_015E, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, IMM16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM16, ABS32DST, E}}, {{PREFIX_015E, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, IMM16LIST, E}}} - -#define EXPAND_FROM_REG16(CODE, NAME, OP1, OP2, OP3) \ - {CODE, AV_H8, 2, NAME, {{RS16, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, IGNORE, OP1, OP2, RS16, IGNORE, E}}}, \ - EXPAND2_STD_SRC (CODE, 2, NAME, RS16, PREFIX_0159, OP3, RS16), \ - {CODE, AV_H8SX, 0, NAME, {{RS16, ABS16DST, E}}, {{0x6, 0xb, 0x1, B31 | IGNORE, DSTABS16LIST, OP1, OP2, RS16, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RS16, ABS32DST, E}}, {{0x6, 0xb, 0x3, B31 | IGNORE, DSTABS32LIST, OP1, OP2, RS16, IGNORE, E}}} - -#define EXPAND_TO_REG16(CODE, NAME, OP1, OP2, OP3) \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, RD16, E}}, {{0x7, 0xc, B31 | RSIND, IGNORE, OP1, OP2, IGNORE, RD16, E}}}, \ - EXPAND2_STD_DST (CODE, 2, NAME, RD16, PREFIX_015A, OP3, RD16), \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, RD16, E}}, {{0x6, 0xb, 0x1, B30 | IGNORE, ABS16LIST, OP1, OP2, IGNORE, RD16, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, RD16, E}}, {{0x6, 0xb, 0x3, B30 | IGNORE, ABS32LIST, OP1, OP2, IGNORE, RD16, E}}} - -#define EXPAND_FROM_IND16(CODE, NAME, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, RDIND, E}}, {{0x7, 0xc, B31 | RSIND, 0x5, TO_IND, OPCODE, IGNORE, E}}}, \ - EXPAND2_STD_IND (CODE, 2, NAME, OPCODE, B31), \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, ABS16DST, E}}, {{0x7, 0xc, B31 | RSIND, 0x5, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, ABS32DST, E}}, {{0x7, 0xc, B31 | RSIND, 0x5, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}} - -#define EXPAND_FROM_ABS16_W(CODE, NAME, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, RDIND, E}}, {{PREFIX_6B15, ABS16LIST, TO_IND, OPCODE, IGNORE, E}}}, \ - EXPAND2_STD_ABSDISP (CODE, 2, NAME, ABS16SRC, PREFIX_6B15, ABS16LIST, OPCODE, IGNORE), \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, ABS16DST, E}}, {{PREFIX_6B15, ABS16LIST, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, ABS32DST, E}}, {{PREFIX_6B15, ABS16LIST, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}} - -#define EXPAND_FROM_ABS32_W(CODE, NAME, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, RDIND, E}}, {{PREFIX_6B35, ABS32LIST, TO_IND, OPCODE, IGNORE, E}}}, \ - EXPAND2_STD_ABSDISP (CODE, 2, NAME, ABS32SRC, PREFIX_6B35, ABS32LIST, OPCODE, IGNORE), \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, ABS16DST, E}}, {{PREFIX_6B35, ABS32LIST, TO_ABS16, OPCODE, IGNORE, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, ABS32DST, E}}, {{PREFIX_6B35, ABS32LIST, TO_ABS32, OPCODE, IGNORE, DSTABS32LIST, E}}} - -#define EXPAND_FROM_IMM16_L(CODE, NAME, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{IMM16U_NS, RDIND, E}}, {{PREFIX_010E, TO_IND, OPCODE, B30 | IGNORE, IMM16ULIST, E}}}, \ - EXPAND2_STD_IMM (CODE, 2, NAME, IMM16U_NS, PREFIX_010E, OPCODE, B30 | IGNORE, IMM16ULIST), \ - {CODE, AV_H8SX, 0, NAME, {{IMM16U_NS, ABS16DST, E}}, {{PREFIX_010E, TO_ABS16, OPCODE, B30 | IGNORE, DSTABS16LIST, IMM16ULIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM16U_NS, ABS32DST, E}}, {{PREFIX_010E, TO_ABS32, OPCODE, B30 | IGNORE, DSTABS32LIST, IMM16ULIST, E}}} - -#define EXPAND_FROM_IMM32_L(CODE, NAME, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{IMM32, RDIND, E}}, {{PREFIX_010E, TO_IND, OPCODE, B31 | IGNORE, IMM32LIST, E}}}, \ - EXPAND2_STD_IMM (CODE, 2, NAME, IMM32, PREFIX_010E, OPCODE, B31 | IGNORE, IMM32LIST), \ - {CODE, AV_H8SX, 0, NAME, {{IMM32, ABS16DST, E}}, {{PREFIX_010E, TO_ABS16, OPCODE, B31 | IGNORE, DSTABS16LIST, IMM32LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM32, ABS32DST, E}}, {{PREFIX_010E, TO_ABS32, OPCODE, B31 | IGNORE, DSTABS32LIST, IMM32LIST, E}}} - -#define EXPAND_FROM_REG32(CODE, NAME, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{RS32, RDIND, E}}, {{PREFIX_0109, TO_IND, OPCODE, B30 | RS32, E}}}, \ - EXPAND2_STD_SRC (CODE, 2, NAME, RS32, PREFIX_0109, OPCODE, B30 | RS32), \ - {CODE, AV_H8SX, 0, NAME, {{RS32, ABS16DST, E}}, {{PREFIX_0109, TO_ABS16, OPCODE, B30 | RS32, DSTABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RS32, ABS32DST, E}}, {{PREFIX_0109, TO_ABS32, OPCODE, B30 | RS32, DSTABS32LIST, E}}} - -#define EXPAND_TO_REG32(CODE, NAME, OPCODE) \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, RD32, E}}, {{PREFIX_010A, FROM_IND, OPCODE, B30 | RD32, E}}}, \ - EXPAND2_STD_DST (CODE, 2, NAME, RD32, PREFIX_010A, OPCODE, B30 | RD32), \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, RD32, E}}, {{PREFIX_010A, FROM_ABS16, OPCODE, B30 | RD32, ABS16LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, RD32, E}}, {{PREFIX_010A, FROM_ABS32, OPCODE, B30 | RD32, ABS32LIST, E}}} - - -#define EXPAND_TWOOP_B(CODE, NAME, OP1, OP2, OP3, OP4, BIT) \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, RDPOSTINC, E}}, {{PREFIX_0174, 0x6, 0xc, B30 | RDPOSTINC, B31 | B20 | IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RDPOSTDEC, B31 | B20 | IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, RDPREINC, E}}, {{PREFIX_0175, 0x6, 0xc, B30 | RDPREINC, B31 | B20 | IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, RDPREDEC, E}}, {{PREFIX_0177, 0x6, 0xc, B30 | RDPREDEC, B31 | B20 | IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, DISP2DST, E}}, {{PREFIX_017_D2D, 0x6, 0x8, B30 | DSTDISPREG, B31 | B20 | IGNORE, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, DISP16DST, E}}, {{PREFIX_0174, 0x6, 0xe, B30 | DSTDISPREG, B31 | B20 | IGNORE, DSTDISP16LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, DISP32DST, E}}, {{PREFIX_78R4WD, 0x6, 0xa, 2, B31 | B20 | IGNORE, DSTDISP32LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXB16D, E}}, {{PREFIX_0175, 0x6, 0xe, B30 | DSTDISPREG, B31 | B20 | IGNORE, DSTDISP16LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXW16D, E}}, {{PREFIX_0176, 0x6, 0xe, B30 | DSTDISPREG, B31 | B20 | IGNORE, DSTDISP16LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXL16D, E}}, {{PREFIX_0177, 0x6, 0xe, B30 | DSTDISPREG, B31 | B20 | IGNORE, DSTDISP16LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXB32D, E}}, {{PREFIX_78R5WD, 0x6, 0xa, 2, B31 | B20 | IGNORE, DSTDISP32LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXW32D, E}}, {{PREFIX_78R6WD, 0x6, 0xa, 2, B31 | B20 | IGNORE, DSTDISP32LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, INDEXL32D, E}}, {{PREFIX_78R7WD, 0x6, 0xa, 2, B31 | B20 | IGNORE, DSTDISP32LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, ABS8DST, E}}, {{0x7, 0xf, DSTABS8LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, ABS16DST, E}}, {{0x6, 0xa, 0x1, B31 | B20 | IGNORE, DSTABS16LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{IMM8, ABS32DST, E}}, {{0x6, 0xa, 0x3, B31 | B20 | IGNORE, DSTABS32LIST, OP1, BIT | IGNORE, IMM8LIST, E}}}, \ - {CODE, AV_H8, 2, NAME, {{RS8, RD8, E}}, {{OP2, OP3, RS8, RD8, E}}}, \ - EXPAND_FROM_REG8 (CODE, NAME, OP2, OP3, OP4), \ - EXPAND_TO_REG8 (CODE, NAME, OP2, OP3, OP4), \ - EXPAND_FROM_IND8 (CODE, NAME, OP4), \ - EXPAND_STD_MATRIX_B (CODE, NAME, OP4), \ - EXPAND_FROM_ABS16_B (CODE, NAME, OP4), \ - EXPAND_FROM_ABS32_B (CODE, NAME, OP4) - -#define EXPAND_TWOOP_W(CODE, NAME, OP1, OP2, OP3) \ - {CODE, AV_H8H, 6, NAME, {{IMM16, RD16, E}}, {{0x7, 0x9, OP3, RD16, IMM16LIST, E}}}, \ - EXPAND_FROM_IMM16_W (CODE, NAME, OP3), \ - EXPAND_FROM_REG16 (CODE, NAME, OP1, OP2, OP3), \ - EXPAND_TO_REG16 (CODE, NAME, OP1, OP2, OP3), \ - EXPAND_FROM_IND16 (CODE, NAME, OP3), \ - EXPAND_STD_MATRIX_W (CODE, NAME, OP3), \ - EXPAND_FROM_ABS16_W (CODE, NAME, OP3), \ - EXPAND_FROM_ABS32_W (CODE, NAME, OP3) - -#define EXPAND_TWOOP_L(CODE, NAME, OP1) \ - {CODE, AV_H8SX, 0, NAME, {{IMM16U_NS, RD32, E}}, {{0x7, 0xa, OP1, B31 | RD32, IMM16ULIST, E}}}, \ - {CODE, AV_H8H, 6, NAME, {{IMM32, RD32, E}}, {{0x7, 0xa, OP1, B30 | RD32, IMM32LIST, E}}}, \ - EXPAND_FROM_IMM16_L (CODE, NAME, OP1), \ - EXPAND_FROM_IMM32_L (CODE, NAME, OP1), \ - EXPAND_FROM_REG32 (CODE, NAME, OP1), \ - EXPAND_TO_REG32 (CODE, NAME, OP1), \ - EXPAND_STD_MATRIX_L (CODE, NAME, OP1) - - -/* Old expanders: */ - -#define BITOP(code, imm, name, op00, op01, op10, op11, op20, op21, op30, op4) \ - {code, AV_H8, 2, name, {{imm, RD8, E}}, {{op00, op01, imm, RD8, E}}}, \ - {code, AV_H8, 6, name, {{imm, RDIND, E}}, {{op10, op11, B30 | RDIND, 0, op00, op01, imm, 0, E}}}, \ - {code, AV_H8, 6, name, {{imm, ABS8DST, E}}, {{op20, op21, DSTABS8LIST, op00, op01, imm, 0, E}}}, \ - {code, AV_H8S, 6, name, {{imm, ABS16DST, E}}, {{0x6, 0xa, 0x1, op30, DST | MEMRELAX | ABS16LIST , op00, op01, imm, op4, E}}}, \ - {code, AV_H8S, 6, name, {{imm, ABS32DST, E}}, {{0x6, 0xa, 0x3, op30, DST | MEMRELAX | ABS32LIST , op00, op01, imm, op4, E}}} - -#define BITOP_B(code, imm, name, op00, op01, op10, op11, op20, op21, op30, op4) \ - {code, AV_H8SX, 0, name, {{imm, RDIND, E}}, {{op10, op11, B30 | RDIND, 0, op00, op01, imm, op4, E}}}, \ - {code, AV_H8SX, 0, name, {{imm, ABS8DST, E}}, {{op20, op21, DSTABS8LIST, op00, op01, imm, op4, E}}}, \ - {code, AV_H8SX, 0, name, {{imm, ABS16DST, E}}, {{0x6, 0xa, 0x1, op30, DST | ABS16LIST, op00, op01, imm, op4, E}}}, \ - {code, AV_H8SX, 0, name, {{imm, ABS32DST, E}}, {{0x6, 0xa, 0x3, op30, DST | ABS32LIST, op00, op01, imm, op4, E}}} - -#define EBITOP(code, imm, name, op00, op01, op10, op11, op20, op21, op30, op4) \ - BITOP(code, imm, name, op00+1, op01, op10, op11, op20, op21, op30, op4), \ - BITOP(code, RS8, name, op00, op01, op10, op11, op20, op21, op30, op4) - -#define EBITOP_B(code, imm, name, op00, op01, op10, op11, op20, op21, op30, op4) \ - BITOP_B(code, imm, name, op00+1, op01, op10, op11, op20, op21, op30, op4), \ - BITOP_B(code, RS8, name, op00, op01, op10, op11, op20, op21, op30, op4) - -#define WTWOP(code, name, op1, op2) \ - {code, AV_H8, 2, name, {{RS16, RD16, E}}, {{op1, op2, RS16, RD16, E}}} - -#define BRANCH(code, name, op) \ - {code, AV_H8H, 6, name, {{PCREL16, E}}, {{0x5, 0x8, op, 0x0, PCREL16, DATA3 | B00, E}}}, \ - {code, AV_H8, 4, name, {{PCREL8, E}}, {{0x4, op, PCREL8, DATA | B00, E}}} - - -#define UNOP(code, name, op1, op2) \ - {code, AV_H8, 2, name, {{OR8, E}}, {{op1, op2, 0, OR8, E}}} - -#define EXPAND_UNOP_STD_B(CODE, NAME, PREFIX, OP1, OP2, OP3) \ - {CODE, AV_H8, 2, NAME, {{OR8, E}}, {{ OP1, OP2, OP3, OR8, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, E}}, {{ 7, 13, B30 | RSIND, IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPOSTINC, E}}, {{PREFIX, 4, 6, 12, B30 | RSPOSTINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPOSTDEC, E}}, {{PREFIX, 6, 6, 12, B30 | RSPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPREINC, E}}, {{PREFIX, 5, 6, 12, B30 | RSPREINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPREDEC, E}}, {{PREFIX, 7, 6, 12, B30 | RSPREDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP2SRC, E}}, {{PREFIX, B30 | B21 | DISP2SRC, 6, 8, B30 | DISPREG, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP16SRC, E}}, {{PREFIX, 4, 6, 14, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP32SRC, E}}, {{7, 8, B30 | DISPREG, 4, 6, 10, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXB16, E}}, {{PREFIX, 5, 6, 14, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXW16, E}}, {{PREFIX, 6, 6, 14, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXL16, E}}, {{PREFIX, 7, 6, 14, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXB32, E}}, {{7, 8, B30 | DISPREG, 5, 6, 10, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXW32, E}}, {{7, 8, B30 | DISPREG, 6, 6, 10, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXL32, E}}, {{7, 8, B30 | DISPREG, 7, 6, 10, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS8SRC, E}}, {{ 7, 15, ABS8LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, E}}, {{ 6, 10, 1, B31 | IGNORE, ABS16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, E}}, {{ 6, 10, 3, B31 | IGNORE, ABS32LIST, OP1, OP2, OP3, IGNORE, E}}} - -#define EXPAND_UNOP_STD_W(CODE, NAME, PREFIX, OP1, OP2, OP3) \ - {CODE, AV_H8H, 2, NAME, {{OR16, E}}, {{ OP1, OP2, OP3, OR16, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, E}}, {{ 7, 13, B31 | RSIND, IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPOSTINC, E}}, {{PREFIX, 4, 6, 13, B30 | RSPOSTINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPOSTDEC, E}}, {{PREFIX, 6, 6, 13, B30 | RSPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPREINC, E}}, {{PREFIX, 5, 6, 13, B30 | RSPREINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPREDEC, E}}, {{PREFIX, 7, 6, 13, B30 | RSPREDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP2SRC, E}}, {{PREFIX, B30 | B21 | DISP2SRC, 6, 9, B30 | DISPREG, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP16SRC, E}}, {{PREFIX, 4, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP32SRC, E}}, {{7, 8, B30 | DISPREG, 4, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXB16, E}}, {{PREFIX, 5, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXW16, E}}, {{PREFIX, 6, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXL16, E}}, {{PREFIX, 7, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXB32, E}}, {{7, 8, B30 | DISPREG, 5, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXW32, E}}, {{7, 8, B30 | DISPREG, 6, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXL32, E}}, {{7, 8, B30 | DISPREG, 7, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, E}}, {{ 6, 11, 1, B31 | IGNORE, ABS16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, E}}, {{ 6, 11, 3, B31 | IGNORE, ABS32LIST, OP1, OP2, OP3, IGNORE, E}}} - -#define EXPAND_UNOP_STD_L(CODE, NAME, PREFIX, OP1, OP2, OP3) \ - {CODE, AV_H8H, 2, NAME, {{OR32, E}}, {{ OP1, OP2, OP3, B30 | OR32, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSIND, E}}, {{PREFIX, 4, 6, 9, B30 | RSIND, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPOSTINC, E}}, {{PREFIX, 4, 6, 13, B30 | RSPOSTINC, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPOSTDEC, E}}, {{PREFIX, 6, 6, 13, B30 | RSPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPREINC, E}}, {{PREFIX, 5, 6, 13, B30 | RSPREINC, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{RSPREDEC, E}}, {{PREFIX, 7, 6, 13, B30 | RSPREDEC, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP2SRC, E}}, {{PREFIX, B30 | B21 | DISP2SRC, 6, 9, B30 | DISPREG, B31 | IGNORE, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP16SRC, E}}, {{PREFIX, 4, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{DISP32SRC, E}}, {{7, 8, B31 | DISPREG, 4, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXB16, E}}, {{PREFIX, 5, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXW16, E}}, {{PREFIX, 6, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXL16, E}}, {{PREFIX, 7, 6, 15, B30 | DISPREG, B31 | IGNORE, DISP16LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXB32, E}}, {{7, 8, B31 | DISPREG, 5, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXW32, E}}, {{7, 8, B31 | DISPREG, 6, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{INDEXL32, E}}, {{7, 8, B31 | DISPREG, 7, 6, 11, 2, B31 | IGNORE, DISP32LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS16SRC, E}}, {{PREFIX, 4, 6, 11, 0, B31 | IGNORE, ABS16LIST, OP1, OP2, OP3, B30 | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{ABS32SRC, E}}, {{PREFIX, 4, 6, 11, 2, B31 | IGNORE, ABS32LIST, OP1, OP2, OP3, B30 | IGNORE, E}}} - -#define EXPAND_UNOP_EXTENDED_B(CODE, NAME, CONST, PREFIX, OP1, OP2, OP3) \ - {CODE, AV_H8, 2, NAME, {{CONST, RD8, E}}, {{ OP1, OP2, OP3, RD8, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDIND, E}}, {{ 7, 13, B30 | RDIND, IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTINC, E}}, {{PREFIX, 4, 6, 12, B30 | RDPOSTINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTDEC, E}}, {{PREFIX, 6, 6, 12, B30 | RDPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREINC, E}}, {{PREFIX, 5, 6, 12, B30 | RDPREINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREDEC, E}}, {{PREFIX, 7, 6, 12, B30 | RDPREDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, DISP2DST, E}}, {{PREFIX, B30 | B21 | DISP2DST, 6, 8, B30 | DSTDISPREG, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, DISP16DST, E}}, {{PREFIX, 4, 6, 14, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, DISP32DST, E}}, {{7, 8, B30 | DSTDISPREG, 4, 6, 10, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB16D, E}}, {{PREFIX, 5, 6, 14, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW16D, E}}, {{PREFIX, 6, 6, 14, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL16D, E}}, {{PREFIX, 7, 6, 14, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB32D, E}}, {{7, 8, B30 | DSTDISPREG, 5, 6, 10, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW32D, E}}, {{7, 8, B30 | DSTDISPREG, 6, 6, 10, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL32D, E}}, {{7, 8, B30 | DSTDISPREG, 7, 6, 10, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, ABS8DST, E}}, {{ 7, 15, DSTABS8LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, ABS16DST, E}}, {{ 6, 10, 1, B31 | IGNORE, DSTABS16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, ABS32DST, E}}, {{ 6, 10, 3, B31 | IGNORE, DSTABS32LIST, OP1, OP2, OP3, IGNORE, E}}} - -#define EXPAND_UNOP_EXTENDED_W(CODE, NAME, CONST, PREFIX, OP1, OP2, OP3) \ - {CODE, AV_H8, 2, NAME, {{CONST, RD16, E}}, {{ OP1, OP2, OP3, RD16, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDIND, E}}, {{ 7, 13, B31 | RDIND, IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTINC, E}}, {{PREFIX, 4, 6, 13, B30 | RDPOSTINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTDEC, E}}, {{PREFIX, 6, 6, 13, B30 | RDPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREINC, E}}, {{PREFIX, 5, 6, 13, B30 | RDPREINC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREDEC, E}}, {{PREFIX, 7, 6, 13, B30 | RDPREDEC, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, DISP2DST, E}}, {{PREFIX, B30 | B21 | DISP2DST, 6, 9, B30 | DSTDISPREG, B31 | IGNORE, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, DISP16DST, E}}, {{PREFIX, 4, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, DISP32DST, E}}, {{7, 8, B30 | DSTDISPREG, 4, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB16D, E}}, {{PREFIX, 5, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW16D, E}}, {{PREFIX, 6, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL16D, E}}, {{PREFIX, 7, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB32D, E}}, {{7, 8, B30 | DSTDISPREG, 5, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW32D, E}}, {{7, 8, B30 | DSTDISPREG, 6, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL32D, E}}, {{7, 8, B30 | DSTDISPREG, 7, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, ABS16DST, E}}, {{ 6, 11, 1, B31 | IGNORE, DSTABS16LIST, OP1, OP2, OP3, IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, ABS32DST, E}}, {{ 6, 11, 3, B31 | IGNORE, DSTABS32LIST, OP1, OP2, OP3, IGNORE, E}}} - -#define EXPAND_UNOP_EXTENDED_L(CODE, NAME, CONST, PREFIX, OP1, OP2, OP3, BIT) \ - {CODE, AV_H8, 2, NAME, {{CONST, RD32, E}}, {{ OP1, OP2, OP3, BIT | RD32, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDIND, E}}, {{PREFIX, 4, 6, 9, B30 | RDIND, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTINC, E}}, {{PREFIX, 4, 6, 13, B30 | RDPOSTINC, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPOSTDEC, E}}, {{PREFIX, 6, 6, 13, B30 | RDPOSTDEC, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREINC, E}}, {{PREFIX, 5, 6, 13, B30 | RDPREINC, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, RDPREDEC, E}}, {{PREFIX, 7, 6, 13, B30 | RDPREDEC, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, DISP2DST, E}}, {{PREFIX, B30 | B21 | DISP2DST, 6, 9, B30 | DSTDISPREG, B31 | IGNORE, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, DISP16DST, E}}, {{PREFIX, 4, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, DISP32DST, E}}, {{7, 8, B31 | DSTDISPREG, 4, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB16D, E}}, {{PREFIX, 5, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW16D, E}}, {{PREFIX, 6, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL16D, E}}, {{PREFIX, 7, 6, 15, B30 | DSTDISPREG, B31 | IGNORE, DSTDISP16LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXB32D, E}}, {{7, 8, B31 | DSTDISPREG, 5, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXW32D, E}}, {{7, 8, B31 | DSTDISPREG, 6, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, INDEXL32D, E}}, {{7, 8, B31 | DSTDISPREG, 7, 6, 11, 2, B31 | IGNORE, DSTDISP32LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, ABS16DST, E}}, {{PREFIX, 4, 6, 11, 0, B31 | IGNORE, DSTABS16LIST, OP1, OP2, OP3, BIT | IGNORE, E}}}, \ - {CODE, AV_H8SX, 0, NAME, {{CONST, ABS32DST, E}}, {{PREFIX, 4, 6, 11, 2, B31 | IGNORE, DSTABS32LIST, OP1, OP2, OP3, BIT | IGNORE, E}}} - -#define PREFIXLDC 0x0, 0x1, 0x4, B30 | CCR_EXR | DST -#define PREFIXSTC 0x0, 0x1, 0x4, B30 | CCR_EXR | SRC - -#define O(op, size) (op * 4 + size) -#define OP_SIZE(HOW) (HOW % 4) -#define OP_KIND(HOW) (HOW / 4) - -enum h8_asm_codes -{ - O_RECOMPILE = 0, - O_ADD, - O_ADDX, - O_AND, - O_BAND, - O_BRA, - O_BRAB, - O_BRAW, - O_BRAL, - O_BRAS, - O_BRABC, - O_BRABS, - O_BSRBC, - O_BSRBS, - O_BRN, - O_BHI, - O_BLS, - O_BCC, - O_BCS, - O_BNE, - O_BVC, - O_BVS, - O_BPL, - O_BMI, - O_BGE, - O_BLT, - O_BGT, - O_BLE, - O_ANDC, - O_BEQ, - O_BCLR, - O_BCLREQ, - O_BCLRNE, - O_BSETEQ, - O_BSETNE, - O_BFLD, - O_BFST, - O_BIAND, - O_BILD, - O_BIOR, - O_BIXOR, - O_BIST, - O_BISTZ, - O_BLD, - O_BNOT, - O_BOR, - O_BSET, - O_BSR, - O_BXOR, - O_CMP, - O_DAA, - O_DAS, - O_DEC, - O_DIVU, - O_DIVS, - O_DIVXU, - O_DIVXS, - O_INC, - O_LDC, - O_MOV, - O_MOVAB, - O_MOVAW, - O_MOVAL, - O_MOVMD, - O_MOVSD, - O_OR, - O_ROTL, - O_ROTR, - O_ROTXL, - O_ROTXR, - O_BPT, - O_SHAL, - O_SHAR, - O_SHLL, - O_SHLR, - O_SUB, - O_SUBS, - O_TRAPA, - O_XOR, - O_XORC, - O_BST, - O_BSTZ, - O_BTST, - O_EEPMOV, - O_EXTS, - O_EXTU, - O_JMP, - O_JSR, - O_MULU, - O_MULUU, - O_MULS, - O_MULSU, - O_MULXU, - O_MULXS, - O_NOP, - O_NOT, - O_ORC, - O_RTE, - O_RTEL, - O_STC, - O_SUBX, - O_NEG, - O_RTS, - O_RTSL, - O_SLEEP, - O_ILL, - O_ADDS, - O_SYSCALL, - O_TAS, - O_CLRMAC, - O_LDMAC, - O_MAC, - O_LDM, - O_STM, - O_STMAC, - O_LAST, - /* Change made for System Call processing. */ - O_SYS_CREAT, - O_SYS_OPEN, - O_SYS_READ, - O_SYS_WRITE, - O_SYS_LSEEK, - O_SYS_CLOSE, - O_SYS_STAT, - O_SYS_FSTAT, -/* Space reserved for future file I/O system calls. */ - O_SYS_CMDLINE - /* End of System Call specific Changes. */ -}; - -enum h8_size -{ - SB = 0, - SW = 1, - SL = 2, - SN = 3 -}; - - -/* FIXME: Lots of insns have "E, 0, 0, 0, 0" in the nibble code sequences. - Methinks the zeroes aren't necessary. Once confirmed, nuke 'em. */ - -struct h8_opcode h8_opcodes[] = -{ - {O (O_ADD, SB), AV_H8, 2, "add.b", {{IMM8, RD8, E}}, {{0x8, RD8, IMM8LIST, E}}}, - EXPAND_TWOOP_B (O (O_ADD, SB), "add.b", 0x8, 0x0, 0x8, 0x1, 0), - - {O (O_ADD, SW), AV_H8, 6, "add.w", {{RS16, RD16, E}}, {{0x0, 0x9, RS16, RD16, E}}}, - {O (O_ADD, SW), AV_H8SX, 0, "add.w", {{IMM3NZ_NS, RD16, E}}, {{0x0, 0xa, B30 | IMM3NZ, RD16, E}}}, - {O (O_ADD, SW), AV_H8SX, 0, "add.w", {{IMM3NZ_NS, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, IGNORE, 0x0, 0xa, B30 | IMM3NZ, IGNORE, E}}}, - {O (O_ADD, SW), AV_H8SX, 0, "add.w", {{IMM3NZ_NS, ABS16DST, E}}, {{0x6, 0xb, 0x1, B31 | IGNORE, DSTABS16LIST, 0x0, 0xa, B30 | IMM3NZ, IGNORE, E}}}, - {O (O_ADD, SW), AV_H8SX, 0, "add.w", {{IMM3NZ_NS, ABS32DST, E}}, {{0x6, 0xb, 0x3, B31 | IGNORE, DSTABS32LIST, 0x0, 0xa, B30 | IMM3NZ, IGNORE, E}}}, - EXPAND_TWOOP_W (O (O_ADD, SW), "add.w", 0x0, 0x9, 0x1), - - {O (O_ADD, SL), AV_H8H, 6, "add.l", {{RS32, RD32, E}}, {{0x0, 0xa, B31 | RS32, B30 | RD32, E}}}, - {O (O_ADD, SL), AV_H8SX, 0, "add.l", {{IMM3NZ_NS, RD32, E}}, {{0x0, 0xa, B31 | IMM3NZ, B31 | RD32, E}}}, - EXPAND_TWOOP_L (O (O_ADD, SL), "add.l", 0x1), - - {O (O_ADDS, SL), AV_H8, 2, "adds", {{KBIT, RDP, E}}, {{0x0, 0xB,KBIT, RDP, E}}}, - - {O (O_ADDX, SB), AV_H8, 2, "addx", {{IMM8, RD8, E}}, {{0x9, RD8, IMM8LIST, E}}}, - {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{IMM8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, 0x9, IGNORE, IMM8LIST, E}}}, - {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{IMM8, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RDPOSTDEC, B31 | IGNORE, 0x9, IGNORE, IMM8LIST, E}}}, - {O (O_ADDX, SB), AV_H8, 2, "addx", {{RS8, RD8, E}}, {{0x0, 0xe, RS8, RD8, E}}}, - {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RS8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, 0x0, 0xe, RS8, IGNORE, E}}}, - {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RS8, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RDPOSTDEC, B31 | IGNORE, 0x0, 0xe, RS8, IGNORE, E}}}, - {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RSIND, RD8, E}}, {{0x7, 0xc, B30 | RSIND, IGNORE, 0x0, 0xe, IGNORE, RD8, E}}}, - {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RSPOSTDEC, RD8, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RSPOSTDEC, B30 | B20 | IGNORE, 0x0, 0xe, IGNORE, RD8, E}}}, - {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RSIND, RDIND, E}}, {{PREFIX_0174, 0x6, 0x8, B30 | RSIND, 0xd, 0x0, RDIND, 0x1, IGNORE, E}}}, - {O (O_ADDX, SB), AV_H8SX, 0, "addx.b", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x1, IGNORE, E}}}, - - {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{IMM16, RD16, E}}, {{PREFIX_0151, 0x7, 0x9, 0x1, RD16, IMM16LIST, E}}}, - {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{IMM16, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, B01 | IGNORE, 0x7, 0x9, 0x1, IGNORE, IMM16LIST, E}}}, - {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{IMM16, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x7, 0x9, 0x1, IGNORE, IMM16LIST, E}}}, - {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RS16, RD16, E}}, {{PREFIX_0151, 0x0, 0x9, RS16, RD16, E}}}, - {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RS16, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, B01 | IGNORE, 0x0, 0x9, RS16, IGNORE, E}}}, - {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RS16, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x0, 0x9, RS16, IGNORE, E}}}, - {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RSIND, RD16, E}}, {{0x7, 0xc, B31 | RSIND, B01 | IGNORE, 0x0, 0x9, IGNORE, RD16, E}}}, - {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RSPOSTDEC, RD16, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RSPOSTDEC, B30 | B20 | B01 | IGNORE, 0x0, 0x9, IGNORE, RD16, E}}}, - {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RSIND, RDIND, E}}, {{PREFIX_0154, 0x6, 0x9, B30 | RSIND, 0xd, 0x0, RDIND, 0x1, IGNORE, E}}}, - {O (O_ADDX, SW), AV_H8SX, 0, "addx.w", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x1, IGNORE, E}}}, - - {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{IMM32, RD32, E}}, {{PREFIX_0101, 0x7, 0xa, 0x1, RD32, IMM32LIST, E}}}, - {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{IMM32, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RDIND, B31 | B20 | B01 | IGNORE, 0x7, 0xa, 0x1, IGNORE, IMM32LIST, E}}}, - {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{IMM32, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x7, 0xa, 0x1, IGNORE, IMM32LIST, E}}}, - {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RS32, RD32, E}}, {{PREFIX_0101, 0x0, 0xa, B31 | RS32, B30 | RD32, E}}}, - {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RS32, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RDIND, B31 | B20 | B01 | IGNORE, 0x0, 0xa, B31 | RS32, B30 | IGNORE, E}}}, - {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RS32, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x0, 0xa, B31 | RS32, B30 | IGNORE, E}}}, - {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RSIND, RD32, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RSIND, B30 | B20 | B01 | IGNORE, 0x0, 0xa, B31 | IGNORE, B30 | RD32, E}}}, - {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RSPOSTDEC, RD32, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RSPOSTDEC, B30 | B20 | B01 | IGNORE, 0x0, 0xa, B31 | IGNORE, B30 | RD32, E}}}, - {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RSIND, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RSIND, 0xd, 0x0, RDIND, 0x1, IGNORE, E}}}, - {O (O_ADDX, SL), AV_H8SX, 0, "addx.l", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x1, IGNORE, E}}}, - - {O (O_AND, SB), AV_H8, 2, "and.b", {{IMM8, RD8, E}}, {{0xe, RD8, IMM8LIST, E}}}, - EXPAND_TWOOP_B (O (O_AND, SB), "and.b", 0xe, 0x1, 0x6, 0x6, 0), - - {O (O_AND, SW), AV_H8, 2, "and.w", {{RS16, RD16, E}}, {{0x6, 0x6, RS16, RD16, E}}}, - EXPAND_TWOOP_W (O (O_AND, SW), "and.w", 0x6, 0x6, 0x6), - - {O (O_AND, SL), AV_H8H, 2, "and.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xF, 0x0, 0x6, 0x6, B30 | RS32, B30 | RD32, E}}}, - EXPAND_TWOOP_L (O (O_AND, SL), "and.l", 0x6), - - {O (O_ANDC, SB), AV_H8, 2, "andc", {{IMM8, CCR | DST, E}}, {{0x0, 0x6, IMM8LIST, E}}}, - {O (O_ANDC, SB), AV_H8S, 2, "andc", {{IMM8, EXR | DST, E}}, {{0x0, 0x1, 0x4, EXR | DST, 0x0, 0x6, IMM8LIST, E}}}, - - BRANCH (O (O_BRA, SB), "bra", 0x0), - - {O (O_BRAB, SB), AV_H8SX, 0, "bra", {{LOWREG | L_8, E}}, {{0x5, 0x9, LOWREG | L_8 | B30, 0x5, E}}}, - {O (O_BRAW, SW), AV_H8SX, 0, "bra", {{LOWREG | L_16, E}}, {{0x5, 0x9, LOWREG | L_16 | B30, 0x6, E}}}, - {O (O_BRAL, SL), AV_H8SX, 0, "bra", {{RS32, E}}, {{0x5, 0x9, RS32 | B30, 0x7, E}}}, - - {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, RDIND, OP3PCREL8}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x4, B30 | IMM3, OP3PCREL8, DATA, E}}}, - {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS8DST, OP3PCREL8}}, {{0x7, 0xE, DSTABS8LIST, 0x4, B30 | IMM3, OP3PCREL8, DATA, E}}}, - {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS16DST, OP3PCREL8}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x4, B30 | IMM3, OP3PCREL8, DATA, E}}}, - {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS32DST, OP3PCREL8}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x4, B30 | IMM3, OP3PCREL8, DATA, E}}}, - {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, RDIND, OP3PCREL8}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x4, B31 | IMM3, OP3PCREL8, DATA, E}}}, - {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS8DST, OP3PCREL8}}, {{0x7, 0xE, DSTABS8LIST, 0x4, B31 | IMM3, OP3PCREL8, DATA, E}}}, - {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS16DST, OP3PCREL8}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x4, B31 | IMM3, OP3PCREL8, DATA, E}}}, - {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS32DST, OP3PCREL8}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x4, B31 | IMM3, OP3PCREL8, DATA, E}}}, - {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, RDIND, OP3PCREL16}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x5, 0x8, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS8DST, OP3PCREL16}}, {{0x7, 0xE, DSTABS8LIST, 0x5, 0x8, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS16DST, OP3PCREL16}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x5, 0x8, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BRABC, SB), AV_H8SX, 0, "bra/bc", {{IMM3, ABS32DST, OP3PCREL16}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x5, 0x8, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, RDIND, OP3PCREL16}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x5, 0x8, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS8DST, OP3PCREL16}}, {{0x7, 0xE, DSTABS8LIST, 0x5, 0x8, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS16DST, OP3PCREL16}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x5, 0x8, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BRABS, SB), AV_H8SX, 0, "bra/bs", {{IMM3, ABS32DST, OP3PCREL16}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x5, 0x8, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - - {O (O_BRAS, SB), AV_H8SX, 0, "bra/s", {{PCREL8, E}}, {{0x4, 0x0, PCREL8, DATA | B01, E}}}, - - {O (O_BSRBC, SB), AV_H8SX, 0, "bsr/bc", {{IMM3, RDIND, OP3PCREL16}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x5, 0xC, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BSRBC, SB), AV_H8SX, 0, "bsr/bc", {{IMM3, ABS8DST, OP3PCREL16}}, {{0x7, 0xE, DSTABS8LIST, 0x5, 0xC, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BSRBC, SB), AV_H8SX, 0, "bsr/bc", {{IMM3, ABS16DST, OP3PCREL16}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x5, 0xC, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BSRBC, SB), AV_H8SX, 0, "bsr/bc", {{IMM3, ABS32DST, OP3PCREL16}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x5, 0xC, B30 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BSRBS, SB), AV_H8SX, 0, "bsr/bs", {{IMM3, RDIND, OP3PCREL16}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0x5, 0xC, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BSRBS, SB), AV_H8SX, 0, "bsr/bs", {{IMM3, ABS8DST, OP3PCREL16}}, {{0x7, 0xE, DSTABS8LIST, 0x5, 0xC, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BSRBS, SB), AV_H8SX, 0, "bsr/bs", {{IMM3, ABS16DST, OP3PCREL16}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0x5, 0xC, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - {O (O_BSRBS, SB), AV_H8SX, 0, "bsr/bs", {{IMM3, ABS32DST, OP3PCREL16}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0x5, 0xC, B31 | IMM3, 0x0, OP3PCREL16, DATA3, E}}}, - - BRANCH (O (O_BRA, SB), "bt", 0x0), - BRANCH (O (O_BRN, SB), "brn", 0x1), - BRANCH (O (O_BRN, SB), "bf", 0x1), - BRANCH (O (O_BHI, SB), "bhi", 0x2), - BRANCH (O (O_BLS, SB), "bls", 0x3), - BRANCH (O (O_BCC, SB), "bcc", 0x4), - BRANCH (O (O_BCC, SB), "bhs", 0x4), - BRANCH (O (O_BCS, SB), "bcs", 0x5), - BRANCH (O (O_BCS, SB), "blo", 0x5), - BRANCH (O (O_BNE, SB), "bne", 0x6), - BRANCH (O (O_BEQ, SB), "beq", 0x7), - BRANCH (O (O_BVC, SB), "bvc", 0x8), - BRANCH (O (O_BVS, SB), "bvs", 0x9), - BRANCH (O (O_BPL, SB), "bpl", 0xA), - BRANCH (O (O_BMI, SB), "bmi", 0xB), - BRANCH (O (O_BGE, SB), "bge", 0xC), - BRANCH (O (O_BLT, SB), "blt", 0xD), - BRANCH (O (O_BGT, SB), "bgt", 0xE), - BRANCH (O (O_BLE, SB), "ble", 0xF), - - EBITOP (O (O_BCLR, SB), IMM3 | B30, "bclr", 0x6, 0x2, 0x7, 0xD, 0x7, 0xF, 0x8, 0), - BITOP (O (O_BAND, SB), IMM3 | B30, "band", 0x7, 0x6, 0x7, 0xC, 0x7, 0xE, 0x0, 0), - BITOP (O (O_BIAND, SB), IMM3 | B31, "biand", 0x7, 0x6, 0x7, 0xC, 0x7, 0xE, 0x0, 0), - BITOP (O (O_BILD, SB), IMM3 | B31, "bild", 0x7, 0x7, 0x7, 0xC, 0x7, 0xE, 0x0, 0), - BITOP (O (O_BIOR, SB), IMM3 | B31, "bior", 0x7, 0x4, 0x7, 0xC, 0x7, 0xE, 0x0, 0), - BITOP (O (O_BIST, SB), IMM3 | B31, "bist", 0x6, 0x7, 0x7, 0xD, 0x7, 0xF, 0x8, 0), - BITOP (O (O_BIXOR, SB), IMM3 | B31, "bixor", 0x7, 0x5, 0x7, 0xC, 0x7, 0xE, 0x0, 0), - BITOP (O (O_BLD, SB), IMM3 | B30, "bld", 0x7, 0x7, 0x7, 0xC, 0x7, 0xE, 0x0, 0), - EBITOP (O (O_BNOT, SB), IMM3 | B30, "bnot", 0x6, 0x1, 0x7, 0xD, 0x7, 0xF, 0x8, 0), - BITOP (O (O_BOR, SB), IMM3 | B30, "bor", 0x7, 0x4, 0x7, 0xC, 0x7, 0xE, 0x0, 0), - EBITOP (O (O_BSET, SB), IMM3 | B30, "bset", 0x6, 0x0, 0x7, 0xD, 0x7, 0xF, 0x8, 0), - BITOP (O (O_BST, SB), IMM3 | B30, "bst", 0x6, 0x7, 0x7, 0xD, 0x7, 0xF, 0x8, 0), - EBITOP (O (O_BTST, SB), IMM3 | B30, "btst", 0x6, 0x3, 0x7, 0xC, 0x7, 0xE, 0x0, 0), - BITOP (O (O_BXOR, SB), IMM3 | B30, "bxor", 0x7, 0x5, 0x7, 0xC, 0x7, 0xE, 0x0, 0), - - EBITOP_B (O (O_BCLREQ, SB), IMM3 | B30, "bclr/eq", 0x6, 0x2, 0x7, 0xD, 0x7, 0xF, 0x8, 0x7), - EBITOP_B (O (O_BCLRNE, SB), IMM3 | B30, "bclr/ne", 0x6, 0x2, 0x7, 0xD, 0x7, 0xF, 0x8, 0x6), - EBITOP_B (O (O_BSETEQ, SB), IMM3 | B30, "bset/eq", 0x6, 0x0, 0x7, 0xD, 0x7, 0xF, 0x8, 0x7), - EBITOP_B (O (O_BSETNE, SB), IMM3 | B30, "bset/ne", 0x6, 0x0, 0x7, 0xD, 0x7, 0xF, 0x8, 0x6), - BITOP_B (O (O_BISTZ, SB), IMM3 | B31, "bistz", 0x6, 0x7, 0x7, 0xD, 0x7, 0xF, 0x8, 0x7), - BITOP_B (O (O_BSTZ, SB), IMM3 | B30, "bstz", 0x6, 0x7, 0x7, 0xD, 0x7, 0xF, 0x8, 0x7), - - {O (O_BFLD, SB), AV_H8SX, 0, "bfld", {{IMM8, RDIND, R3_8}}, {{0x7, 0xC, B30 | RDIND, 0x0, 0xF, R3_8, IMM8LIST, E}}}, - {O (O_BFLD, SB), AV_H8SX, 0, "bfld", {{IMM8, ABS8DST, R3_8}}, {{0x7, 0xE, DSTABS8LIST, 0xF, R3_8, IMM8LIST, E}}}, - {O (O_BFLD, SB), AV_H8SX, 0, "bfld", {{IMM8, ABS16DST, R3_8}}, {{0x6, 0xA, 0x1, 0x0, DSTABS16LIST, 0xF, R3_8, IMM8LIST, E}}}, - {O (O_BFLD, SB), AV_H8SX, 0, "bfld", {{IMM8, ABS32DST, R3_8}}, {{0x6, 0xA, 0x3, 0x0, DSTABS32LIST, 0xF, R3_8, IMM8LIST, E}}}, - - /* Because the assembler treats SRC, DST and OP3 as ordinals, - I must designate the second argument, an immediate value, as DST. - May God have mercy on my soul. */ - {O (O_BFST, SB), AV_H8SX, 0, "bfst", {{RS8, DST | IMM8, R3_IND}}, {{0x7, 0xD, B30 | R3_IND, 0x0, 0xF, RS8, DST | IMM8LIST, E}}}, - {O (O_BFST, SB), AV_H8SX, 0, "bfst", {{RS8, DST | IMM8, ABS8OP3}}, {{0x7, 0xF, OP3ABS8LIST, 0xF, RS8, DST | IMM8LIST, E}}}, - {O (O_BFST, SB), AV_H8SX, 0, "bfst", {{RS8, DST | IMM8, ABS16OP3}}, {{0x6, 0xA, 0x1, 0x8, OP3ABS16LIST, 0xF, RS8, DST | IMM8LIST, E}}}, - {O (O_BFST, SB), AV_H8SX, 0, "bfst", {{RS8, DST | IMM8, ABS32OP3}}, {{0x6, 0xA, 0x3, 0x8, OP3ABS32LIST, 0xF, RS8, DST | IMM8LIST, E}}}, - - {O (O_BSR, SB), AV_H8, 6, "bsr", {{PCREL8, E}}, {{0x5, 0x5, PCREL8, DATA, E}}}, - {O (O_BSR, SB), AV_H8, 6, "bsr", {{PCREL16, E}}, {{0x5, 0xC, 0x0, 0x0, PCREL16, DATA3, E}}}, - {O (O_BSR, SB), AV_H8SX, 0, "bsr", {{LOWREG | L_8, E}}, {{0x5, 0xd, B30 | LOWREG | L_8, 0x5, E}}}, - {O (O_BSR, SW), AV_H8SX, 0, "bsr", {{LOWREG | L_16, E}}, {{0x5, 0xd, B30 | LOWREG | L_16, 0x6, E}}}, - {O (O_BSR, SL), AV_H8SX, 0, "bsr", {{OR32, E}}, {{0x5, 0xd, B30 | OR32, 0x7, E}}}, - - {O (O_CMP, SB), AV_H8, 2, "cmp.b", {{IMM8, RD8, E}}, {{0xa, RD8, IMM8LIST, E}}}, - EXPAND_TWOOP_B (O (O_CMP, SB), "cmp.b", 0xa, 0x1, 0xc, 0x2, B00), - - {O (O_CMP, SW), AV_H8, 2, "cmp.w", {{RS16, RD16, E}}, {{0x1, 0xd, RS16, RD16, E}}}, - {O (O_CMP, SW), AV_H8SX, 0, "cmp.w", {{IMM3NZ_NS, RD16, E}}, {{0x1, 0xf, B30 | IMM3NZ, RD16, E}}}, - {O (O_CMP, SW), AV_H8SX, 0, "cmp.w", {{IMM3NZ_NS, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, IGNORE, 0x1, 0xf, B30 | IMM3NZ, IGNORE, E}}}, - {O (O_CMP, SW), AV_H8SX, 0, "cmp.w", {{IMM3NZ_NS, ABS16DST, E}}, {{0x6, 0xb, 0x1, B31 | IGNORE, DSTABS16LIST, 0x1, 0xf, B30 | IMM3NZ, IGNORE, E}}}, - {O (O_CMP, SW), AV_H8SX, 0, "cmp.w", {{IMM3NZ_NS, ABS32DST, E}}, {{0x6, 0xb, 0x3, B31 | IGNORE, DSTABS32LIST, 0x1, 0xf, B30 | IMM3NZ, IGNORE, E}}}, - EXPAND_TWOOP_W (O (O_CMP, SW), "cmp.w", 0x1, 0xd, 0x2), - - {O (O_CMP, SL), AV_H8H, 6, "cmp.l", {{RS32, RD32, E}}, {{0x1, 0xf, B31 | RS32, B30 | RD32, E}}}, - {O (O_CMP, SL), AV_H8SX, 0, "cmp.l", {{IMM3NZ_NS, RD32, E}}, {{0x1, 0xf, B31 | IMM3NZ, B31 | RD32, E}}}, - EXPAND_TWOOP_L (O (O_CMP, SL), "cmp.l", 0x2), - - UNOP (O (O_DAA, SB), "daa", 0x0, 0xF), - UNOP (O (O_DAS, SB), "das", 0x1, 0xF), - UNOP (O (O_DEC, SB), "dec.b", 0x1, 0xA), - - {O (O_DEC, SW), AV_H8H, 2, "dec.w", {{DBIT, RD16, E}}, {{0x1, 0xB, 0x5 | DBIT, RD16, E}}}, - {O (O_DEC, SL), AV_H8H, 2, "dec.l", {{DBIT, RD32, E}}, {{0x1, 0xB, 0x7 | DBIT, RD32 | B30, E}}}, - - {O (O_DIVS, SW), AV_H8SX, 0, "divs.w", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xd, 0x6, 0x5, 0x1, IMM4, RD16, E}}}, - {O (O_DIVS, SW), AV_H8SX, 0, "divs.w", {{RS16, RD16, E}}, {{0x0, 0x1, 0xd, 0x2, 0x5, 0x1, RS16, RD16, E}}}, - {O (O_DIVS, SL), AV_H8SX, 0, "divs.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xd, 0x6, 0x5, 0x3, IMM4, B30 | RD32, E}}}, - {O (O_DIVS, SL), AV_H8SX, 0, "divs.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xd, 0x2, 0x5, 0x3, B30 | RS32, B30 | RD32, E}}}, - - {O (O_DIVU, SW), AV_H8SX, 0, "divu.w", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xd, 0xe, 0x5, 0x1, IMM4, RD16, E}}}, - {O (O_DIVU, SW), AV_H8SX, 0, "divu.w", {{RS16, RD16, E}}, {{0x0, 0x1, 0xd, 0xa, 0x5, 0x1, RS16, RD16, E}}}, - {O (O_DIVU, SL), AV_H8SX, 0, "divu.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xd, 0xe, 0x5, 0x3, IMM4, B30 | RD32, E}}}, - {O (O_DIVU, SL), AV_H8SX, 0, "divu.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xd, 0xa, 0x5, 0x3, B30 | RS32, B30 | RD32, E}}}, - - {O (O_DIVXS, SB), AV_H8SX, 0, "divxs.b", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xD, 0x4, 0x5, 0x1, IMM4, RD16, E}}}, - {O (O_DIVXS, SB), AV_H8H, 13, "divxs.b", {{RS8, RD16, E}}, {{0x0, 0x1, 0xD, 0x0, 0x5, 0x1, RS8, RD16, E}}}, - {O (O_DIVXS, SW), AV_H8SX, 0, "divxs.w", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xD, 0x4, 0x5, 0x3, IMM4, B30 | RD32, E}}}, - {O (O_DIVXS, SW), AV_H8H, 21, "divxs.w", {{RS16, RD32, E}}, {{0x0, 0x1, 0xD, 0x0, 0x5, 0x3, RS16, B30 | RD32, E}}}, - - {O (O_DIVXU, SB), AV_H8SX, 0, "divxu.b", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xD, 0xC, 0x5, 0x1, IMM4, RD16, E}}}, - {O (O_DIVXU, SB), AV_H8, 13, "divxu.b", {{RS8, RD16, E}}, {{0x5, 0x1, RS8, RD16, E}}}, - {O (O_DIVXU, SW), AV_H8SX, 0, "divxu.w", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xD, 0xC, 0x5, 0x3, IMM4, B30 | RD32, E}}}, - {O (O_DIVXU, SW), AV_H8H, 21, "divxu.w", {{RS16, RD32, E}}, {{0x5, 0x3, RS16, B30 | RD32, E}}}, - - {O (O_EEPMOV, SB), AV_H8, 4, "eepmov.b", {{E}}, {{0x7, 0xB, 0x5, 0xC, 0x5, 0x9, 0x8, 0xF, E}}}, - {O (O_EEPMOV, SW), AV_H8H, 4, "eepmov.w", {{E}}, {{0x7, 0xB, 0xD, 0x4, 0x5, 0x9, 0x8, 0xF, E}}}, - - EXPAND_UNOP_STD_W (O (O_EXTS, SW), "exts.w", PREFIX_015, 0x1, 0x7, 0xd), - EXPAND_UNOP_STD_L (O (O_EXTS, SL), "exts.l", PREFIX_010, 0x1, 0x7, 0xf), - EXPAND_UNOP_EXTENDED_L (O (O_EXTS, SL), "exts.l", CONST_2, PREFIX_010, 0x1, 0x7, 0xe, 0), - EXPAND_UNOP_STD_W (O (O_EXTU, SW), "extu.w", PREFIX_015, 0x1, 0x7, 0x5), - EXPAND_UNOP_STD_L (O (O_EXTU, SL), "extu.l", PREFIX_010, 0x1, 0x7, 0x7), - EXPAND_UNOP_EXTENDED_L (O (O_EXTU, SL), "extu.l", CONST_2, PREFIX_010, 0x1, 0x7, 0x6, 0), - - UNOP (O (O_INC, SB), "inc", 0x0, 0xA), - - {O (O_INC, SW), AV_H8H, 2, "inc.w", {{DBIT, RD16, E}}, {{0x0, 0xB, 0x5 | DBIT, RD16, E}}}, - {O (O_INC, SL), AV_H8H, 2, "inc.l", {{DBIT, RD32, E}}, {{0x0, 0xB, 0x7 | DBIT, RD32 | B30, E}}}, - - {O (O_JMP, SN), AV_H8, 4, "jmp", {{RSIND, E}}, {{0x5, 0x9, B30 | RSIND, 0x0, E}}}, - {O (O_JMP, SN), AV_H8, 6, "jmp", {{ABSJMP | L_24, E}}, {{0x5, 0xA, SRC | ABSJMP | L_24, DATA5, E}}}, - - {O (O_JMP, SN), AV_H8SX, 0, "jmp", {{ABSJMP | L_32, E}}, {{0x5, 0x9, 0x0, 0x8, ABSJMP | L_32, DATA7, E}}}, - - {O (O_JMP, SN), AV_H8, 8, "jmp", {{MEMIND, E}}, {{0x5, 0xB, SRC | MEMIND, DATA, E}}}, - {O (O_JMP, SN), AV_H8SX, 0, "jmp", {{VECIND, E}}, {{0x5, 0x9, B31 | SRC | VECIND, DATA, E}}}, - - {O (O_JSR, SN), AV_H8, 6, "jsr", {{RSIND, E}}, {{0x5, 0xD, B30 | RSIND, 0x0, E}}}, - {O (O_JSR, SN), AV_H8, 8, "jsr", {{ABSJMP | L_24, E}}, {{0x5, 0xE, SRC | ABSJMP | L_24, DATA5, E}}}, - - {O (O_JSR, SN), AV_H8SX, 0, "jsr", {{ABSJMP | L_32, E}}, {{0x5, 0xD, 0x0, 0x8, ABSJMP | L_32, DATA7, E}}}, - - {O (O_JSR, SN), AV_H8, 8, "jsr", {{MEMIND, E}}, {{0x5, 0xF, SRC | MEMIND, DATA, E}}}, - {O (O_JSR, SN), AV_H8SX, 8, "jsr", {{VECIND, E}}, {{0x5, 0xD, SRC | VECIND, DATA, E}}}, - - {O (O_LDC, SB), AV_H8, 2, "ldc", {{IMM8, CCR | DST, E}}, {{ 0x0, 0x7, IMM8LIST, E}}}, - {O (O_LDC, SB), AV_H8S, 2, "ldc", {{IMM8, EXR | DST, E}}, {{0x0, 0x1, 0x4, EXR | DST, 0x0, 0x7, IMM8LIST, E}}}, - {O (O_LDC, SB), AV_H8, 2, "ldc", {{RS8, CCR | DST, E}}, {{0x0, 0x3, B30 | CCR | DST, RS8, E}}}, - {O (O_LDC, SB), AV_H8S, 2, "ldc", {{RS8, EXR | DST, E}}, {{0x0, 0x3, B30 | EXR | DST, RS8, E}}}, - {O (O_LDC, SW), AV_H8H, 2, "ldc", {{RSIND, CCR | DST, E}}, {{PREFIXLDC, 0x6, 0x9, B30 | RSIND, IGNORE, E}}}, - {O (O_LDC, SW), AV_H8S, 2, "ldc", {{RSIND, EXR | DST, E}}, {{PREFIXLDC, 0x6, 0x9, B30 | RSIND, IGNORE, E}}}, - {O (O_LDC, SW), AV_H8H, 2, "ldc", {{RSPOSTINC, CCR | DST, E}}, {{PREFIXLDC, 0x6, 0xD, B30 | RSPOSTINC, IGNORE, E}}}, - {O (O_LDC, SW), AV_H8S, 2, "ldc", {{RSPOSTINC, EXR | DST, E}}, {{PREFIXLDC, 0x6, 0xD, B30 | RSPOSTINC, IGNORE, E}}}, - {O (O_LDC, SW), AV_H8H, 2, "ldc", {{DISP16SRC, CCR | DST, E}}, {{PREFIXLDC, 0x6, 0xF, B30 | DISPREG, IGNORE, SRC | DISP16LIST, E}}}, - {O (O_LDC, SW), AV_H8S, 2, "ldc", {{DISP16SRC, EXR | DST, E}}, {{PREFIXLDC, 0x6, 0xF, B30 | DISPREG, IGNORE, SRC | DISP16LIST, E}}}, - {O (O_LDC, SW), AV_H8H, 2, "ldc", {{DISP32SRC, CCR | DST, E}}, {{PREFIXLDC, 0x7, 0x8, B30 | DISPREG, 0x0, 0x6, 0xB, 0x2, IGNORE, SRC | DISP32LIST, E}}}, - {O (O_LDC, SW), AV_H8S, 2, "ldc", {{DISP32SRC, EXR | DST, E}}, {{PREFIXLDC, 0x7, 0x8, B30 | DISPREG, 0x0, 0x6, 0xB, 0x2, IGNORE, SRC | DISP32LIST, E}}}, - {O (O_LDC, SW), AV_H8H, 2, "ldc", {{ABS16SRC, CCR | DST, E}}, {{PREFIXLDC, 0x6, 0xB, 0x0, IGNORE, SRC | ABS16LIST, E}}}, - {O (O_LDC, SW), AV_H8S, 2, "ldc", {{ABS16SRC, EXR | DST, E}}, {{PREFIXLDC, 0x6, 0xB, 0x0, IGNORE, SRC | ABS16LIST, E}}}, - {O (O_LDC, SW), AV_H8H, 2, "ldc", {{ABS32SRC, CCR | DST, E}}, {{PREFIXLDC, 0x6, 0xB, 0x2, IGNORE, SRC | MEMRELAX | ABS32LIST, E}}}, - {O (O_LDC, SW), AV_H8S, 2, "ldc", {{ABS32SRC, EXR | DST, E}}, {{PREFIXLDC, 0x6, 0xB, 0x2, IGNORE, SRC | MEMRELAX | ABS32LIST, E}}}, - - {O (O_LDC, SL), AV_H8SX, 0, "ldc", {{RS32, B30 | VBR_SBR | DST, E}}, {{0x0, 0x3, B30 | VBR_SBR | DST, RS32, E}}}, - - - {O (O_MOV, SB), AV_H8, 2, "mov.b", {{IMM8, RD8, E}}, {{0xF, RD8, IMM8LIST, E}}}, - {O (O_MOV, SB), AV_H8SX, 0, "mov.b", {{IMM4_NS, ABS16DST, E}}, {{0x6, 0xa, 0xd, IMM4, DSTABS16LIST, E}}}, - {O (O_MOV, SB), AV_H8SX, 0, "mov.b", {{IMM4_NS, ABS32DST, E}}, {{0x6, 0xa, 0xf, IMM4, DSTABS32LIST, E}}}, - MOVFROM_IMM8 (O (O_MOV, SB), PREFIX_017D, "mov.b", IMM8), - - {O (O_MOV, SB), AV_H8, 2, "mov.b", {{RS8, RD8, E}}, {{0x0, 0xC, RS8, RD8, E}}}, - MOVFROM_REG_BW (O (O_MOV, SB), "mov.b", RS8, PREFIX_017, 8, 10, 12, 14, MEMRELAX), - {O (O_MOV, SB), AV_H8, 4, "mov.b", {{RS8, ABS8DST, E}}, {{0x3, RS8, DSTABS8LIST, E}}}, - MOVTO_REG_BW (O (O_MOV, SB), "mov.b", RD8, PREFIX_017, 8, 10, 12, 14, MEMRELAX), - {O (O_MOV, SB), AV_H8, 4, "mov.b", {{ABS8SRC, RD8, E}}, {{0x2, RD8, ABS8LIST, E}}}, - - MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", RSIND, FROM_IND), - MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", RSPOSTINC, FROM_POSTINC), - MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", RSPOSTDEC, FROM_POSTDEC), - MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", RSPREINC, FROM_PREINC), - MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", RSPREDEC, FROM_PREDEC), - MOVFROM_STD (O (O_MOV, SB), PREFIX_0178, "mov.b", DISP2SRC, FROM_DISP2), - MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", DISP16SRC, FROM_DISP16, DISP16LIST), - MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", DISP32SRC, FROM_DISP32, DISP32LIST), - MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXB16, FROM_DISP16B, DISP16LIST), - MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXW16, FROM_DISP16W, DISP16LIST), - MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXL16, FROM_DISP16L, DISP16LIST), - MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXB32, FROM_DISP32B, DISP32LIST), - MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXW32, FROM_DISP32W, DISP32LIST), - MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", INDEXL32, FROM_DISP32L, DISP32LIST), - MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", ABS16SRC, FROM_ABS16, ABS16LIST), - MOVFROM_AD (O (O_MOV, SB), PREFIX_0178, "mov.b", ABS32SRC, FROM_ABS32, ABS32LIST), - - {O (O_MOV, SW), AV_H8SX, 0, "mov.w", {{IMM3NZ_NS, RD16, E}}, {{0x0, 0xf, B30 | IMM3NZ, RD16, E}}}, - {O (O_MOV, SW), AV_H8, 4, "mov.w", {{IMM16, RD16, E}}, {{0x7, 0x9, 0x0, RD16, IMM16LIST, E}}}, - {O (O_MOV, SW), AV_H8SX, 0, "mov.w", {{IMM4_NS, ABS16DST, E}}, {{0x6, 0xb, 0xd, IMM4, DSTABS16LIST, E}}}, - {O (O_MOV, SW), AV_H8SX, 0, "mov.w", {{IMM4_NS, ABS32DST, E}}, {{0x6, 0xb, 0xf, IMM4, DSTABS32LIST, E}}}, - - MOVFROM_IMM8 (O (O_MOV, SW), PREFIX_015D, "mov.w", IMM8U_NS), - MOVFROM_IMM (O (O_MOV, SW), PREFIX_7974, "mov.w", IMM16, IMM16LIST), - - {O (O_MOV, SW), AV_H8, 2, "mov.w", {{RS16, RD16, E}}, {{0x0, 0xD, RS16, RD16, E}}}, - MOVFROM_REG_BW (O (O_MOV, SW), "mov.w", RS16, PREFIX_015, 9, 11, 13, 15, 0), - MOVTO_REG_BW (O (O_MOV, SW), "mov.w", RD16, PREFIX_015, 9, 11, 13, 15, 0), - - MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", RSIND, FROM_IND), - MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", RSPOSTINC, FROM_POSTINC), - MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", RSPOSTDEC, FROM_POSTDEC), - MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", RSPREINC, FROM_PREINC), - MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", RSPREDEC, FROM_PREDEC), - MOVFROM_STD (O (O_MOV, SW), PREFIX_0158, "mov.w", DISP2SRC, FROM_DISP2), - MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", DISP16SRC, FROM_DISP16, DISP16LIST), - MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", DISP32SRC, FROM_DISP32, DISP32LIST), - MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXB16, FROM_DISP16B, DISP16LIST), - MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXW16, FROM_DISP16W, DISP16LIST), - MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXL16, FROM_DISP16L, DISP16LIST), - MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXB32, FROM_DISP32B, DISP32LIST), - MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXW32, FROM_DISP32W, DISP32LIST), - MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", INDEXL32, FROM_DISP32L, DISP32LIST), - MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", ABS16SRC, FROM_ABS16, ABS16LIST), - MOVFROM_AD (O (O_MOV, SW), PREFIX_0158, "mov.w", ABS32SRC, FROM_ABS32, ABS32LIST), - - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{IMM3NZ_NS, RD32, E}}, {{0x0, 0xf, B31 | IMM3NZ, B31 | RD32, E}}}, - - MOVFROM_IMM8 (O (O_MOV, SL), PREFIX_010D, "mov.l", IMM8U_NS), - MOVFROM_IMM (O (O_MOV, SL), PREFIX_7A7C, "mov.l", IMM16U_NS, IMM16ULIST), - - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{IMM16U_NS, RD32, E}}, {{0x7, 0xa, 0x0, B31 | RD32, IMM16ULIST, E}}}, - {O (O_MOV, SL), AV_H8H, 4, "mov.l", {{IMM32, RD32, E}}, {{0x7, 0xa, 0x0, B30 | RD32, IMM32LIST, E}}}, - - MOVFROM_IMM (O (O_MOV, SL), PREFIX_7A74, "mov.l", IMM32, IMM32LIST), - - {O (O_MOV, SL), AV_H8H, 2, "mov.l", {{RS32, RD32, E}}, {{0x0, 0xf, B31 | RS32, B30 | RD32, E}}}, - - {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, RDIND, E}}, {{PREFIX_0100, 0x6, 0x9, B31 | RDIND, B30 | RS32, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, RDPOSTINC, E}}, {{PREFIX_0103, 0x6, 0xd, B31 | RDPOSTINC, RS32, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, RDPOSTDEC, E}}, {{PREFIX_0101, 0x6, 0xd, B31 | RDPOSTDEC, RS32, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, RDPREINC, E}}, {{PREFIX_0102, 0x6, 0xd, B31 | RDPREINC, RS32, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, RDPREDEC, E}}, {{PREFIX_0100, 0x6, 0xd, B31 | RDPREDEC, RS32, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, DISP2DST, E}}, {{PREFIX_010, B30 | B20 | DISP2DST, 0x6, 0x9, B31 | DSTDISPREG, RS32, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, DISP16DST, E}}, {{PREFIX_0100, 0x6, 0xf, B31 | DSTDISPREG, RS32, DSTDISP16LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 6, "mov.l", {{RS32, DISP32DST, E}}, {{0x7, 0x8, B31 | DSTDISPREG, 0x0, 0x6, 0xb, 0xa, RS32, DSTDISP32LIST, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, DISP32DST, E}}, {{PREFIX_0100, 0x7, 0x8, B31 | DSTDISPREG, 0x0, 0x6, 0xb, 0xa, RS32, DSTDISP32LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXB16D, E}}, {{PREFIX_0101, 0x6, 0xf, B31 | DSTDISPREG, RS32, DSTDISP16LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXW16D, E}}, {{PREFIX_0102, 0x6, 0xf, B31 | DSTDISPREG, RS32, DSTDISP16LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXL16D, E}}, {{PREFIX_0103, 0x6, 0xf, B31 | DSTDISPREG, RS32, DSTDISP16LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXB32D, E}}, {{0x7, 0x8, B31 | DSTDISPREG, 0x1, 0x6, 0xb, 0xa, RS32, DSTDISP32LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXW32D, E}}, {{0x7, 0x8, B31 | DSTDISPREG, 0x2, 0x6, 0xb, 0xa, RS32, DSTDISP32LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RS32, INDEXL32D, E}}, {{0x7, 0x8, B31 | DSTDISPREG, 0x3, 0x6, 0xb, 0xa, RS32, DSTDISP32LIST, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, ABS16DST, E}}, {{PREFIX_0100, 0x6, 0xb, 0x8, RS32, DSTABS16LIST, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RS32, ABS32DST, E}}, {{PREFIX_0100, 0x6, 0xb, 0xa, RS32, MEMRELAX | DSTABS32LIST, E}}}, - - {O (O_MOV, SL), AV_H8H, 4, "mov.l", {{RSIND, RD32, E}}, {{PREFIX_0100, 0x6, 0x9, B30 | RSIND, RD32, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{RSPOSTINC, RD32, E}}, {{PREFIX_0100, 0x6, 0xd, B30 | RSPOSTINC, RD32, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RSPOSTDEC, RD32, E}}, {{PREFIX_0102, 0x6, 0xd, B30 | RSPOSTDEC, RD32, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RSPREINC, RD32, E}}, {{PREFIX_0101, 0x6, 0xd, B30 | RSPREINC, RD32, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{RSPREDEC, RD32, E}}, {{PREFIX_0103, 0x6, 0xd, B30 | RSPREDEC, RD32, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{DISP2SRC, RD32, E}}, {{PREFIX_010, B30 | B20 | DISP2SRC, 0x6, 0x9, B30 | DISPREG, RD32, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{DISP16SRC, RD32, E}}, {{PREFIX_0100, 0x6, 0xf, B30 | DISPREG, RD32, SRC | DISP16LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 6, "mov.l", {{DISP32SRC, RD32, E}}, {{0x7, 0x8, B31 | DISPREG, 0x0, 0x6, 0xb, 0x2, RD32, SRC | DISP32LIST, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{DISP32SRC, RD32, E}}, {{PREFIX_0100, 0x7, 0x8, B30 | DISPREG, 0x0, 0x6, 0xb, 0x2, RD32, SRC | DISP32LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXB16, RD32, E}}, {{PREFIX_0101, 0x6, 0xf, B30 | DISPREG, RD32, SRC | DISP16LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXW16, RD32, E}}, {{PREFIX_0102, 0x6, 0xf, B30 | DISPREG, RD32, SRC | DISP16LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXL16, RD32, E}}, {{PREFIX_0103, 0x6, 0xf, B30 | DISPREG, RD32, SRC | DISP16LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXB32, RD32, E}}, {{0x7, 0x8, B31 | DISPREG, 0x1, 0x6, 0xb, 0x2, RD32, SRC | DISP32LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXW32, RD32, E}}, {{0x7, 0x8, B31 | DISPREG, 0x2, 0x6, 0xb, 0x2, RD32, SRC | DISP32LIST, E}}}, - {O (O_MOV, SL), AV_H8SX, 0, "mov.l", {{INDEXL32, RD32, E}}, {{0x7, 0x8, B31 | DISPREG, 0x3, 0x6, 0xb, 0x2, RD32, SRC | DISP32LIST, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{ABS16SRC, RD32, E}}, {{PREFIX_0100, 0x6, 0xb, 0x0, RD32, SRC | ABS16LIST, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "mov.l", {{ABS32SRC, RD32, E}}, {{PREFIX_0100, 0x6, 0xb, 0x2, RD32, SRC | MEMRELAX | ABS32LIST, E}}}, - - MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", RSIND, FROM_IND), - MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", RSPOSTINC, FROM_POSTINC), - MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", RSPOSTDEC, FROM_POSTDEC), - MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", RSPREINC, FROM_PREINC), - MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", RSPREDEC, FROM_PREDEC), - MOVFROM_STD (O (O_MOV, SL), PREFIX_0108, "mov.l", DISP2SRC, FROM_DISP2), - MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", DISP16SRC, FROM_DISP16, DISP16LIST), - MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", DISP32SRC, FROM_DISP32, DISP32LIST), - MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXB16, FROM_DISP16B, DISP16LIST), - MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXW16, FROM_DISP16W, DISP16LIST), - MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXL16, FROM_DISP16L, DISP16LIST), - MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXB32, FROM_DISP32B, DISP32LIST), - MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXW32, FROM_DISP32W, DISP32LIST), - MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", INDEXL32, FROM_DISP32L, DISP32LIST), - MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", ABS16SRC, FROM_ABS16, ABS16LIST), - MOVFROM_AD (O (O_MOV, SL), PREFIX_0108, "mov.l", ABS32SRC, FROM_ABS32, ABS32LIST), - -#define DO_MOVA1(TYPE, OP0, OP1) \ - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0x8, B30 | R3_32, DISP16LIST, E}}}, \ - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0x9, B30 | R3_32, DISP16LIST, E}}}, \ - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xA, B30 | R3_32, DISP16LIST, E}}}, \ - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xB, B30 | R3_32, DISP16LIST, E}}}, \ - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xC, B30 | R3_32, DISP16LIST, E}}}, \ - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xD, B30 | R3_32, DISP16LIST, E}}}, \ -\ - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0x8, B31 | R3_32, DISP32LIST, E}}}, \ - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0x9, B31 | R3_32, DISP32LIST, E}}}, \ - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xA, B31 | R3_32, DISP32LIST, E}}}, \ - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xB, B31 | R3_32, DISP32LIST, E}}}, \ - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xC, B31 | R3_32, DISP32LIST, E}}}, \ - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xD, B31 | R3_32, DISP32LIST, E}}} - -#define DO_MOVA2(TYPE, OP0, OP1, OP2) \ - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0x8, B30 | R3_32, OP2, DISP16LIST, E}}}, \ - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0x9, B30 | R3_32, OP2, DISP16LIST, E}}}, \ - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xA, B30 | R3_32, OP2, DISP16LIST, E}}}, \ - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xB, B30 | R3_32, OP2, DISP16LIST, E}}}, \ - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB16, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xC, B30 | R3_32, OP2, DISP16LIST, E}}}, \ - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW16, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xD, B30 | R3_32, OP2, DISP16LIST, E}}}, \ -\ - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0x8, B31 | R3_32, OP2, DISP32LIST, E}}}, \ - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0x9, B31 | R3_32, OP2, DISP32LIST, E}}}, \ - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xA, B31 | R3_32, OP2, DISP32LIST, E}}}, \ - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xB, B31 | R3_32, OP2, DISP32LIST, E}}}, \ - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB32, TYPE, R3_32}}, {{PREFIX_017F, OP0, OP1, 0xC, B31 | R3_32, OP2, DISP32LIST, E}}}, \ - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW32, TYPE, R3_32}}, {{PREFIX_015F, OP0, OP1, 0xD, B31 | R3_32, OP2, DISP32LIST, E}}} - - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB16, E}}, {{0x7, 0xA, 0x8, B31 | DISPREG, DISP16LIST, E}}}, - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW16, E}}, {{0x7, 0xA, 0x9, B31 | DISPREG, DISP16LIST, E}}}, - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB16, E}}, {{0x7, 0xA, 0xA, B31 | DISPREG, DISP16LIST, E}}}, - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW16, E}}, {{0x7, 0xA, 0xB, B31 | DISPREG, DISP16LIST, E}}}, - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB16, E}}, {{0x7, 0xA, 0xC, B31 | DISPREG, DISP16LIST, E}}}, - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW16, E}}, {{0x7, 0xA, 0xD, B31 | DISPREG, DISP16LIST, E}}}, - - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB32, E}}, {{0x7, 0xA, 0x8, B30 | DISPREG, DISP32LIST, E}}}, - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW32, E}}, {{0x7, 0xA, 0x9, B30 | DISPREG, DISP32LIST, E}}}, - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB32, E}}, {{0x7, 0xA, 0xA, B30 | DISPREG, DISP32LIST, E}}}, - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW32, E}}, {{0x7, 0xA, 0xB, B30 | DISPREG, DISP32LIST, E}}}, - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB32, E}}, {{0x7, 0xA, 0xC, B30 | DISPREG, DISP32LIST, E}}}, - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW32, E}}, {{0x7, 0xA, 0xD, B30 | DISPREG, DISP32LIST, E}}}, - - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB16, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0x8, B31 | R3_32, DISP16LIST, E}}}, - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW16, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0x9, B31 | R3_32, DISP16LIST, E}}}, - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB16, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0xA, B31 | R3_32, DISP16LIST, E}}}, - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW16, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0xB, B31 | R3_32, DISP16LIST, E}}}, - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB16, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0xC, B31 | R3_32, DISP16LIST, E}}}, - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW16, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0xD, B31 | R3_32, DISP16LIST, E}}}, - - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXB32, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0x8, B30 | R3_32, DISP32LIST, E}}}, - {O (O_MOVAB, SL), AV_H8SX, 0, "mova/b.l", {{INDEXW32, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0x9, B30 | R3_32, DISP32LIST, E}}}, - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXB32, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0xA, B30 | R3_32, DISP32LIST, E}}}, - {O (O_MOVAW, SL), AV_H8SX, 0, "mova/w.l", {{INDEXW32, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0xB, B30 | R3_32, DISP32LIST, E}}}, - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXB32, RD8, R3_32}}, {{0x7, 0x8, RD8, 0x8, 0x7, 0xA, 0xC, B30 | R3_32, DISP32LIST, E}}}, - {O (O_MOVAL, SL), AV_H8SX, 0, "mova/l.l", {{INDEXW32, RD16, R3_32}}, {{0x7, 0x8, RD16, 0x9, 0x7, 0xA, 0xD, B30 | R3_32, DISP32LIST, E}}}, - - DO_MOVA1 (RDIND, 0x0, B30 | RDIND), - DO_MOVA1 (RDPOSTINC, 0x8, B30 | RDPOSTINC), - DO_MOVA1 (RDPOSTDEC, 0xA, B30 | RDPOSTDEC), - DO_MOVA1 (RDPREINC, 0x9, B30 | RDPREINC), - DO_MOVA1 (RDPREDEC, 0xB, B30 | RDPREDEC), - DO_MOVA1 (DISP2DST, B30 | B20 | DISP2DST, B30 | DSTDISPREG), - DO_MOVA2 (DISP16DST, 0xC, B30 | DSTDISPREG, DSTDISP16LIST), - DO_MOVA2 (DISP32DST, 0xC, B31 | DSTDISPREG, DSTDISP32LIST), - DO_MOVA2 (INDEXB16D, 0xD, B30 | DSTDISPREG, DSTDISP16LIST), - DO_MOVA2 (INDEXW16D, 0xE, B30 | DSTDISPREG, DSTDISP16LIST), - DO_MOVA2 (INDEXL16D, 0xF, B30 | DSTDISPREG, DSTDISP16LIST), - DO_MOVA2 (INDEXB32D, 0xD, B31 | DSTDISPREG, DSTDISP32LIST), - DO_MOVA2 (INDEXW32D, 0xE, B31 | DSTDISPREG, DSTDISP32LIST), - DO_MOVA2 (INDEXL32D, 0xF, B31 | DSTDISPREG, DSTDISP32LIST), - DO_MOVA2 (ABS16DST, 0x4, 0x0, DSTABS16LIST), - DO_MOVA2 (ABS32DST, 0x4, 0x8, DSTABS32LIST), - - {O (O_MOV, SB), AV_H8, 10, "movfpe", {{ABS16SRC, RD8, E}}, {{0x6, 0xA, 0x4, RD8, ABS16SRC, DATA3, E}}}, - {O (O_MOV, SB), AV_H8, 10, "movtpe", {{RS8, ABS16DST, E}}, {{0x6, 0xA, 0xC, RS8, ABS16DST, DATA3, E}}}, - - {O (O_MOVMD, SB), AV_H8SX, 0, "movmd.b", {{E}}, {{0x7, 0xb, 0x9, 0x4, E}}}, - {O (O_MOVMD, SW), AV_H8SX, 0, "movmd.w", {{E}}, {{0x7, 0xb, 0xa, 0x4, E}}}, - {O (O_MOVMD, SL), AV_H8SX, 0, "movmd.l", {{E}}, {{0x7, 0xb, 0xb, 0x4, E}}}, - {O (O_MOVSD, SB), AV_H8SX, 0, "movsd.b", {{PCREL16, E}}, {{0x7, 0xb, 0x8, 0x4, PCREL16, DATA3, E}}}, - - {O (O_MULS, SW), AV_H8SX, 0, "muls.w", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xc, 0x6, 0x5, 0x0, IMM4, RD16, E}}}, - {O (O_MULS, SW), AV_H8SX, 0, "muls.w", {{RS16, RD16, E}}, {{0x0, 0x1, 0xc, 0x2, 0x5, 0x0, RS16, RD16, E}}}, - {O (O_MULS, SL), AV_H8SX, 0, "muls.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0x6, 0x5, 0x2, IMM4, B30 | RD32, E}}}, - {O (O_MULS, SL), AV_H8SX, 0, "muls.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xc, 0x2, 0x5, 0x2, B30 | RS32, B30 | RD32, E}}}, - - {O (O_MULU, SW), AV_H8SX, 0, "mulu.w", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xc, 0xe, 0x5, 0x0, IMM4, RD16, E}}}, - {O (O_MULU, SW), AV_H8SX, 0, "mulu.w", {{RS16, RD16, E}}, {{0x0, 0x1, 0xc, 0xa, 0x5, 0x0, RS16, RD16, E}}}, - {O (O_MULU, SL), AV_H8SX, 0, "mulu.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0xe, 0x5, 0x2, IMM4, B30 | RD32, E}}}, - {O (O_MULU, SL), AV_H8SX, 0, "mulu.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xc, 0xa, 0x5, 0x2, B30 | RS32, B30 | RD32, E}}}, - - {O (O_MULSU, SL), AV_H8SX, 0, "muls/u.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0x7, 0x5, 0x2, IMM4, B30 | RD32, E}}}, - {O (O_MULSU, SL), AV_H8SX, 0, "muls/u.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xc, 0x3, 0x5, 0x2, B30 | RS32, B30 | RD32, E}}}, - {O (O_MULUU, SL), AV_H8SX, 0, "mulu/u.l", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0xf, 0x5, 0x2, IMM4, B30 | RD32, E}}}, - {O (O_MULUU, SL), AV_H8SX, 0, "mulu/u.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xc, 0xb, 0x5, 0x2, B30 | RS32, B30 | RD32, E}}}, - - {O (O_MULXS, SB), AV_H8SX, 0, "mulxs.b", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xc, 0x4, 0x5, 0x0, IMM4, RD16, E}}}, - {O (O_MULXS, SB), AV_H8H, 20, "mulxs.b", {{RS8, RD16, E}}, {{0x0, 0x1, 0xc, 0x0, 0x5, 0x0, RS8, RD16, E}}}, - {O (O_MULXS, SW), AV_H8SX, 0, "mulxs.w", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0x4, 0x5, 0x2, IMM4, B30 | RD32, E}}}, - {O (O_MULXS, SW), AV_H8H, 20, "mulxs.w", {{RS16, RD32, E}}, {{0x0, 0x1, 0xc, 0x0, 0x5, 0x2, RS16, B30 | RD32, E}}}, - - {O (O_MULXU, SB), AV_H8SX, 0, "mulxu.b", {{IMM4, RD16, E}}, {{0x0, 0x1, 0xc, 0xc, 0x5, 0x0, IMM4, RD16, E}}}, - {O (O_MULXU, SB), AV_H8, 14, "mulxu.b", {{RS8, RD16, E}}, {{0x5, 0x0, RS8, RD16, E}}}, - {O (O_MULXU, SW), AV_H8SX, 0, "mulxu.w", {{IMM4, RD32, E}}, {{0x0, 0x1, 0xc, 0xc, 0x5, 0x2, IMM4, B30 | RD32, E}}}, - {O (O_MULXU, SW), AV_H8H, 14, "mulxu.w", {{RS16, RD32, E}}, {{0x5, 0x2, RS16, B30 | RD32, E}}}, - - EXPAND_UNOP_STD_B (O (O_NEG, SB), "neg.b", PREFIX_017, 0x1, 0x7, 0x8), - EXPAND_UNOP_STD_W (O (O_NEG, SW), "neg.w", PREFIX_015, 0x1, 0x7, 0x9), - EXPAND_UNOP_STD_L (O (O_NEG, SL), "neg.l", PREFIX_010, 0x1, 0x7, 0xb), - - {O (O_NOP, SN), AV_H8, 2, "nop", {{E}}, {{0x0, 0x0, 0x0, 0x0, E}}}, - - EXPAND_UNOP_STD_B (O (O_NOT, SB), "not.b", PREFIX_017, 0x1, 0x7, 0x0), - EXPAND_UNOP_STD_W (O (O_NOT, SW), "not.w", PREFIX_015, 0x1, 0x7, 0x1), - EXPAND_UNOP_STD_L (O (O_NOT, SL), "not.l", PREFIX_010, 0x1, 0x7, 0x3), - - {O (O_OR, SB), AV_H8, 2, "or.b", {{IMM8, RD8, E}}, {{0xc, RD8, IMM8LIST, E}}}, - EXPAND_TWOOP_B (O (O_OR, SB), "or.b", 0xc, 0x1, 0x4, 0x4, 0), - - {O (O_OR, SW), AV_H8, 2, "or.w", {{RS16, RD16, E}}, {{0x6, 0x4, RS16, RD16, E}}}, - EXPAND_TWOOP_W (O (O_OR, SW), "or.w", 0x6, 0x4, 0x4), - - {O (O_OR, SL), AV_H8H, 2, "or.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xF, 0x0, 0x6, 0x4, B30 | RS32, B30 | RD32, E}}}, - EXPAND_TWOOP_L (O (O_OR, SL), "or.l", 0x4), - - {O (O_ORC, SB), AV_H8, 2, "orc", {{IMM8, CCR | DST, E}}, {{0x0, 0x4, IMM8LIST, E}}}, - {O (O_ORC, SB), AV_H8S, 2, "orc", {{IMM8, EXR | DST, E}}, {{0x0, 0x1, 0x4, EXR | DST, 0x0, 0x4, IMM8LIST, E}}}, - - {O (O_MOV, SW), AV_H8, 6, "pop.w", {{OR16, E}}, {{0x6, 0xD, 0x7, OR16, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "pop.l", {{OR32, E}}, {{PREFIX_0100, 0x6, 0xD, 0x7, OR32 | B30, E}}}, - {O (O_MOV, SW), AV_H8, 6, "push.w", {{OR16, E}}, {{0x6, 0xD, 0xF, OR16, E}}}, - {O (O_MOV, SL), AV_H8H, 6, "push.l", {{OR32, E}}, {{PREFIX_0100, 0x6, 0xD, 0xF, OR32 | B30, E}}}, - - EXPAND_UNOP_STD_B (O (O_ROTL, SB), "rotl.b", PREFIX_017, 0x1, 0x2, 0x8), - EXPAND_UNOP_EXTENDED_B (O (O_ROTL, SB), "rotl.b", CONST_2, PREFIX_017, 0x1, 0x2, 0xc), - EXPAND_UNOP_STD_W (O (O_ROTL, SW), "rotl.w", PREFIX_015, 0x1, 0x2, 0x9), - EXPAND_UNOP_EXTENDED_W (O (O_ROTL, SW), "rotl.w", CONST_2, PREFIX_015, 0x1, 0x2, 0xd), - EXPAND_UNOP_STD_L (O (O_ROTL, SL), "rotl.l", PREFIX_010, 0x1, 0x2, 0xb), - EXPAND_UNOP_EXTENDED_L (O (O_ROTL, SL), "rotl.l", CONST_2, PREFIX_010, 0x1, 0x2, 0xf, B30), - EXPAND_UNOP_STD_B (O (O_ROTR, SB), "rotr.b", PREFIX_017, 0x1, 0x3, 0x8), - EXPAND_UNOP_EXTENDED_B (O (O_ROTR, SB), "rotr.b", CONST_2, PREFIX_017, 0x1, 0x3, 0xc), - EXPAND_UNOP_STD_W (O (O_ROTR, SW), "rotr.w", PREFIX_015, 0x1, 0x3, 0x9), - EXPAND_UNOP_EXTENDED_W (O (O_ROTR, SW), "rotr.w", CONST_2, PREFIX_015, 0x1, 0x3, 0xd), - EXPAND_UNOP_STD_L (O (O_ROTR, SL), "rotr.l", PREFIX_010, 0x1, 0x3, 0xb), - EXPAND_UNOP_EXTENDED_L (O (O_ROTR, SL), "rotr.l", CONST_2, PREFIX_010, 0x1, 0x3, 0xf, B30), - EXPAND_UNOP_STD_B (O (O_ROTXL, SB), "rotxl.b", PREFIX_017, 0x1, 0x2, 0x0), - EXPAND_UNOP_EXTENDED_B (O (O_ROTXL, SB), "rotxl.b", CONST_2, PREFIX_017, 0x1, 0x2, 0x4), - EXPAND_UNOP_STD_W (O (O_ROTXL, SW), "rotxl.w", PREFIX_015, 0x1, 0x2, 0x1), - EXPAND_UNOP_EXTENDED_W (O (O_ROTXL, SW), "rotxl.w", CONST_2, PREFIX_015, 0x1, 0x2, 0x5), - EXPAND_UNOP_STD_L (O (O_ROTXL, SL), "rotxl.l", PREFIX_010, 0x1, 0x2, 0x3), - EXPAND_UNOP_EXTENDED_L (O (O_ROTXL, SL), "rotxl.l", CONST_2, PREFIX_010, 0x1, 0x2, 0x7, B30), - EXPAND_UNOP_STD_B (O (O_ROTXR, SB), "rotxr.b", PREFIX_017, 0x1, 0x3, 0x0), - EXPAND_UNOP_EXTENDED_B (O (O_ROTXR, SB), "rotxr.b", CONST_2, PREFIX_017, 0x1, 0x3, 0x4), - EXPAND_UNOP_STD_W (O (O_ROTXR, SW), "rotxr.w", PREFIX_015, 0x1, 0x3, 0x1), - EXPAND_UNOP_EXTENDED_W (O (O_ROTXR, SW), "rotxr.w", CONST_2, PREFIX_015, 0x1, 0x3, 0x5), - EXPAND_UNOP_STD_L (O (O_ROTXR, SL), "rotxr.l", PREFIX_010, 0x1, 0x3, 0x3), - EXPAND_UNOP_EXTENDED_L (O (O_ROTXR, SL), "rotxr.l", CONST_2, PREFIX_010, 0x1, 0x3, 0x7, B30), - - - {O (O_BPT, SN), AV_H8, 10, "bpt", {{E}}, {{0x7, 0xA, 0xF, 0xF, E}}}, - {O (O_RTE, SN), AV_H8, 10, "rte", {{E}}, {{0x5, 0x6, 0x7, 0x0, E}}}, - {O (O_RTS, SN), AV_H8, 8, "rts", {{E}}, {{0x5, 0x4, 0x7, 0x0, E}}}, - {O (O_RTEL, SN), AV_H8SX, 0, "rte/l", {{RS32, RD32, E}}, {{0x5, 0x6, RS32 | B30, RD32 | B30, E}}}, - {O (O_RTSL, SN), AV_H8SX, 0, "rts/l", {{RS32, RD32, E}}, {{0x5, 0x4, RS32 | B30, RD32 | B30, E}}}, - - EXPAND_UNOP_STD_B (O (O_SHAL, SB), "shal.b", PREFIX_017, 0x1, 0x0, 0x8), - EXPAND_UNOP_EXTENDED_B (O (O_SHAL, SB), "shal.b", CONST_2, PREFIX_017, 0x1, 0x0, 0xc), - EXPAND_UNOP_STD_W (O (O_SHAL, SW), "shal.w", PREFIX_015, 0x1, 0x0, 0x9), - EXPAND_UNOP_EXTENDED_W (O (O_SHAL, SW), "shal.w", CONST_2, PREFIX_015, 0x1, 0x0, 0xd), - EXPAND_UNOP_STD_L (O (O_SHAL, SL), "shal.l", PREFIX_010, 0x1, 0x0, 0xb), - EXPAND_UNOP_EXTENDED_L (O (O_SHAL, SL), "shal.l", CONST_2, PREFIX_010, 0x1, 0x0, 0xf, B30), - EXPAND_UNOP_STD_B (O (O_SHAR, SB), "shar.b", PREFIX_017, 0x1, 0x1, 0x8), - EXPAND_UNOP_EXTENDED_B (O (O_SHAR, SB), "shar.b", CONST_2, PREFIX_017, 0x1, 0x1, 0xc), - EXPAND_UNOP_STD_W (O (O_SHAR, SW), "shar.w", PREFIX_015, 0x1, 0x1, 0x9), - EXPAND_UNOP_EXTENDED_W (O (O_SHAR, SW), "shar.w", CONST_2, PREFIX_015, 0x1, 0x1, 0xd), - EXPAND_UNOP_STD_L (O (O_SHAR, SL), "shar.l", PREFIX_010, 0x1, 0x1, 0xb), - EXPAND_UNOP_EXTENDED_L (O (O_SHAR, SL), "shar.l", CONST_2, PREFIX_010, 0x1, 0x1, 0xf, B30), - - EXPAND_UNOP_STD_B (O (O_SHLL, SB), "shll.b", PREFIX_017, 0x1, 0x0, 0x0), - - {O (O_SHLL, SB), AV_H8SX, 0, "shll.b", {{RS8, RD8, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x0, 0x0, RD8, E}}}, - - EXPAND_UNOP_EXTENDED_B (O (O_SHLL, SB), "shll.b", CONST_2, PREFIX_017, 0x1, 0x0, 0x4), - EXPAND_UNOP_EXTENDED_B (O (O_SHLL, SB), "shll.b", CONST_4, PREFIX_017, 0x1, 0x0, 0xa), - {O (O_SHLL, SB), AV_H8SX, 0, "shll.b", {{IMM5, RD8, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x0, 0x0, RD8, E}}}, - - EXPAND_UNOP_STD_W (O (O_SHLL, SW), "shll.w", PREFIX_015, 0x1, 0x0, 0x1), - - {O (O_SHLL, SW), AV_H8SX, 0, "shll.w", {{RS8, RD16, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x0, 0x1, RD16, E}}}, - - EXPAND_UNOP_EXTENDED_W (O (O_SHLL, SW), "shll.w", CONST_2, PREFIX_015, 0x1, 0x0, 0x5), - EXPAND_UNOP_EXTENDED_W (O (O_SHLL, SW), "shll.w", CONST_4, PREFIX_015, 0x1, 0x0, 0x2), - EXPAND_UNOP_EXTENDED_W (O (O_SHLL, SW), "shll.w", CONST_8, PREFIX_015, 0x1, 0x0, 0x6), - {O (O_SHLL, SW), AV_H8SX, 0, "shll.w", {{IMM5, RD16, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x0, 0x1, RD16, E}}}, - - EXPAND_UNOP_STD_L (O (O_SHLL, SL), "shll.l", PREFIX_010, 0x1, 0x0, 0x3), - - {O (O_SHLL, SL), AV_H8SX, 0, "shll.l", {{RS8, RD32, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x0, 0x3, B30 | RD32, E}}}, - - EXPAND_UNOP_EXTENDED_L (O (O_SHLL, SL), "shll.l", CONST_2, PREFIX_010, 0x1, 0x0, 0x7, B30), - EXPAND_UNOP_EXTENDED_L (O (O_SHLL, SL), "shll.l", CONST_4, PREFIX_010, 0x1, 0x0, 0x3, B31), - EXPAND_UNOP_EXTENDED_L (O (O_SHLL, SL), "shll.l", CONST_8, PREFIX_010, 0x1, 0x0, 0x7, B31), - EXPAND_UNOP_EXTENDED_L (O (O_SHLL, SL), "shll.l", CONST_16, PREFIX_010, 0x1, 0x0, 0xf, B31), - {O (O_SHLL, SL), AV_H8SX, 0, "shll.l", {{IMM5, RD32, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x0, 0x3, B30 | RD32, E}}}, - - EXPAND_UNOP_STD_B (O (O_SHLR, SB), "shlr.b", PREFIX_017, 0x1, 0x1, 0x0), - - {O (O_SHLR, SB), AV_H8SX, 0, "shlr.b", {{RS8, RD8, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x1, 0x0, RD8, E}}}, - - EXPAND_UNOP_EXTENDED_B (O (O_SHLR, SB), "shlr.b", CONST_2, PREFIX_017, 0x1, 0x1, 0x4), - EXPAND_UNOP_EXTENDED_B (O (O_SHLR, SB), "shlr.b", CONST_4, PREFIX_017, 0x1, 0x1, 0xa), - {O (O_SHLR, SB), AV_H8SX, 0, "shlr.b", {{IMM5, RD8, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x1, 0x0, RD8, E}}}, - - EXPAND_UNOP_STD_W (O (O_SHLR, SW), "shlr.w", PREFIX_015, 0x1, 0x1, 0x1), - - {O (O_SHLR, SW), AV_H8SX, 0, "shlr.w", {{RS8, RD16, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x1, 0x1, RD16, E}}}, - - EXPAND_UNOP_EXTENDED_W (O (O_SHLR, SW), "shlr.w", CONST_2, PREFIX_015, 0x1, 0x1, 0x5), - EXPAND_UNOP_EXTENDED_W (O (O_SHLR, SW), "shlr.w", CONST_4, PREFIX_015, 0x1, 0x1, 0x2), - EXPAND_UNOP_EXTENDED_W (O (O_SHLR, SW), "shlr.w", CONST_8, PREFIX_015, 0x1, 0x1, 0x6), - {O (O_SHLR, SW), AV_H8SX, 0, "shlr.w", {{IMM5, RD16, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x1, 0x1, RD16, E}}}, - - EXPAND_UNOP_STD_L (O (O_SHLR, SL), "shlr.l", PREFIX_010, 0x1, 0x1, 0x3), - - {O (O_SHLR, SL), AV_H8SX, 0, "shlr.l", {{RS8, RD32, E}}, {{0x7, 0x8, RS8, 0x8, 0x1, 0x1, 0x3, B30 | RD32, E}}}, - - EXPAND_UNOP_EXTENDED_L (O (O_SHLR, SL), "shlr.l", CONST_2, PREFIX_010, 0x1, 0x1, 0x7, B30), - EXPAND_UNOP_EXTENDED_L (O (O_SHLR, SL), "shlr.l", CONST_4, PREFIX_010, 0x1, 0x1, 0x3, B31), - EXPAND_UNOP_EXTENDED_L (O (O_SHLR, SL), "shlr.l", CONST_8, PREFIX_010, 0x1, 0x1, 0x7, B31), - EXPAND_UNOP_EXTENDED_L (O (O_SHLR, SL), "shlr.l", CONST_16, PREFIX_010, 0x1, 0x1, 0xf, B31), - {O (O_SHLR, SL), AV_H8SX, 0, "shlr.l", {{IMM5, RD32, E}}, {{0x0, 0x3, B31 | IMM5, DATA, 0x1, 0x1, 0x3, B30 | RD32, E}}}, - - {O (O_SLEEP, SN), AV_H8, 2, "sleep", {{E}}, {{0x0, 0x1, 0x8, 0x0, E}}}, - - {O (O_STC, SB), AV_H8, 2, "stc", {{CCR | SRC, RD8, E}}, {{0x0, 0x2, B30 | CCR | SRC, RD8, E}}}, - {O (O_STC, SB), AV_H8S, 2, "stc", {{EXR | SRC, RD8, E}}, {{0x0, 0x2, B30 | EXR | SRC, RD8, E}}}, - {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, RDIND, E}}, {{PREFIXSTC, 0x6, 0x9, B31 | RDIND, IGNORE, E}}}, - {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, RDIND, E}}, {{PREFIXSTC, 0x6, 0x9, B31 | RDIND, IGNORE, E}}}, - {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, RDPREDEC, E}}, {{PREFIXSTC, 0x6, 0xD, B31 | RDPREDEC, IGNORE, E}}}, - {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, RDPREDEC, E}}, {{PREFIXSTC, 0x6, 0xD, B31 | RDPREDEC, IGNORE, E}}}, - {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, DISP16DST, E}}, {{PREFIXSTC, 0x6, 0xF, B31 | DSTDISPREG, IGNORE, DSTDISP16LIST, E}}}, - {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, DISP16DST, E}}, {{PREFIXSTC, 0x6, 0xF, B31 | DSTDISPREG, IGNORE, DSTDISP16LIST, E}}}, - {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, DISP32DST, E}}, {{PREFIXSTC, 0x7, 0x8, B30 | DSTDISPREG, 0, 0x6, 0xB, 0xA, IGNORE, DSTDISP32LIST, E}}}, - {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, DISP32DST, E}}, {{PREFIXSTC, 0x7, 0x8, B30 | DSTDISPREG, 0, 0x6, 0xB, 0xA, IGNORE, DSTDISP32LIST, E}}}, - {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, ABS16DST, E}}, {{PREFIXSTC, 0x6, 0xB, 0x8, IGNORE, DST | ABS16LIST, E}}}, - {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, ABS16DST, E}}, {{PREFIXSTC, 0x6, 0xB, 0x8, IGNORE, DST | ABS16LIST, E}}}, - {O (O_STC, SW), AV_H8H, 2, "stc", {{CCR | SRC, ABS32DST, E}}, {{PREFIXSTC, 0x6, 0xB, 0xA, IGNORE, DST | MEMRELAX | ABS32LIST, E}}}, - {O (O_STC, SW), AV_H8S, 2, "stc", {{EXR | SRC, ABS32DST, E}}, {{PREFIXSTC, 0x6, 0xB, 0xA, IGNORE, DST | MEMRELAX | ABS32LIST, E}}}, - {O (O_STC, SL), AV_H8SX, 0, "stc", {{B30 | VBR_SBR | SRC, RD32, E}}, {{0x0, 0x2, B30 | VBR_SBR | SRC, RD32, E}}}, - - - EXPAND_TWOOP_B (O (O_SUB, SB), "sub.b", 0xa, 0x1, 0x8, 0x3, B01), - - {O (O_SUB, SW), AV_H8, 2, "sub.w", {{RS16, RD16, E}}, {{0x1, 0x9, RS16, RD16, E}}}, - {O (O_SUB, SW), AV_H8SX, 0, "sub.w", {{IMM3NZ_NS, RD16, E}}, {{0x1, 0xa, B30 | IMM3NZ, RD16, E}}}, - {O (O_SUB, SW), AV_H8SX, 0, "sub.w", {{IMM3NZ_NS, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, IGNORE, 0x1, 0xa, B30 | IMM3NZ, IGNORE, E}}}, - {O (O_SUB, SW), AV_H8SX, 0, "sub.w", {{IMM3NZ_NS, ABS16DST, E}}, {{0x6, 0xb, 0x1, B31 | IGNORE, DSTABS16LIST, 0x1, 0xa, B30 | IMM3NZ, IGNORE, E}}}, - {O (O_SUB, SW), AV_H8SX, 0, "sub.w", {{IMM3NZ_NS, ABS32DST, E}}, {{0x6, 0xb, 0x3, B31 | IGNORE, DSTABS32LIST, 0x1, 0xa, B30 | IMM3NZ, IGNORE, E}}}, - EXPAND_TWOOP_W (O (O_SUB, SW), "sub.w", 0x1, 0x9, 0x3), - - {O (O_SUB, SL), AV_H8H, 6, "sub.l", {{RS32, RD32, E}}, {{0x1, 0xa, B31 | RS32, B30 | RD32, E}}}, - {O (O_SUB, SL), AV_H8SX, 0, "sub.l", {{IMM3NZ_NS, RD32, E}}, {{0x1, 0xa, B31 | IMM3NZ, B31 | RD32, E}}}, - EXPAND_TWOOP_L (O (O_SUB, SL), "sub.l", 0x3), - - {O (O_SUBS, SL), AV_H8, 2, "subs", {{KBIT, RDP, E}}, {{0x1, 0xB,KBIT, RDP, E}}}, - - {O (O_SUBX, SB), AV_H8, 2, "subx", {{IMM8, RD8, E}}, {{0xb, RD8, IMM8LIST, E}}}, - {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{IMM8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, 0xb, IGNORE, IMM8LIST, E}}}, - {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{IMM8, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RDPOSTDEC, B31 | IGNORE, 0xb, IGNORE, IMM8LIST, E}}}, - {O (O_SUBX, SB), AV_H8, 2, "subx", {{RS8, RD8, E}}, {{0x1, 0xe, RS8, RD8, E}}}, - {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RS8, RDIND, E}}, {{0x7, 0xd, B30 | RDIND, IGNORE, 0x1, 0xe, RS8, IGNORE, E}}}, - {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RS8, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RDPOSTDEC, B31 | IGNORE, 0x1, 0xe, RS8, IGNORE, E}}}, - {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RSIND, RD8, E}}, {{0x7, 0xc, B30 | RSIND, IGNORE, 0x1, 0xe, IGNORE, RD8, E}}}, - {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RSPOSTDEC, RD8, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RSPOSTDEC, B30 | B20 | IGNORE, 0x1, 0xe, IGNORE, RD8, E}}}, - {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RSIND, RDIND, E}}, {{PREFIX_0174, 0x6, 0x8, B30 | RSIND, 0xd, 0x0, RDIND, 0x3, IGNORE, E}}}, - {O (O_SUBX, SB), AV_H8SX, 0, "subx.b", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0176, 0x6, 0xc, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x3, IGNORE, E}}}, - - {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{IMM16, RD16, E}}, {{PREFIX_0151, 0x7, 0x9, 0x3, RD16, IMM16LIST, E}}}, - {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{IMM16, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, B01 | IGNORE, 0x7, 0x9, 0x3, IGNORE, IMM16LIST, E}}}, - {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{IMM16, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x7, 0x9, 0x3, IGNORE, IMM16LIST, E}}}, - {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RS16, RD16, E}}, {{PREFIX_0151, 0x1, 0x9, RS16, RD16, E}}}, - {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RS16, RDIND, E}}, {{0x7, 0xd, B31 | RDIND, B01 | IGNORE, 0x1, 0x9, RS16, IGNORE, E}}}, - {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RS16, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x1, 0x9, RS16, IGNORE, E}}}, - {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RSIND, RD16, E}}, {{0x7, 0xc, B31 | RSIND, B01 | IGNORE, 0x1, 0x9, IGNORE, RD16, E}}}, - {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RSPOSTDEC, RD16, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RSPOSTDEC, B30 | B20 | B01 | IGNORE, 0x1, 0x9, IGNORE, RD16, E}}}, - {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RSIND, RDIND, E}}, {{PREFIX_0154, 0x6, 0x9, B30 | RSIND, 0xd, 0x0, RDIND, 0x3, IGNORE, E}}}, - {O (O_SUBX, SW), AV_H8SX, 0, "subx.w", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0156, 0x6, 0xd, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x3, IGNORE, E}}}, - - {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{IMM32, RD32, E}}, {{PREFIX_0101, 0x7, 0xa, 0x3, RD32, IMM32LIST, E}}}, - {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{IMM32, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RDIND, B31 | B20 | B01 | IGNORE, 0x7, 0xa, 0x3, IGNORE, IMM32LIST, E}}}, - {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{IMM32, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x7, 0xa, 0x3, IGNORE, IMM32LIST, E}}}, - {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RS32, RD32, E}}, {{PREFIX_0101, 0x1, 0xa, B31 | RS32, B30 | RD32, E}}}, - {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RS32, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RDIND, B31 | B20 | B01 | IGNORE, 0x1, 0xa, B31 | RS32, B30 | IGNORE, E}}}, - {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RS32, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RDPOSTDEC, B31 | B20 | B01 | IGNORE, 0x1, 0xa, B31 | RS32, B30 | IGNORE, E}}}, - {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RSIND, RD32, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RSIND, B30 | B20 | B01 | IGNORE, 0x1, 0xa, B31 | IGNORE, B30 | RD32, E}}}, - {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RSPOSTDEC, RD32, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RSPOSTDEC, B30 | B20 | B01 | IGNORE, 0x1, 0xa, B31 | IGNORE, B30 | RD32, E}}}, - {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RSIND, RDIND, E}}, {{PREFIX_0104, 0x6, 0x9, B30 | RSIND, 0xd, 0x0, RDIND, 0x3, IGNORE, E}}}, - {O (O_SUBX, SL), AV_H8SX, 0, "subx.l", {{RSPOSTDEC, RDPOSTDEC, E}}, {{PREFIX_0106, 0x6, 0xd, B30 | RSPOSTDEC, 0xd, 0xa, RDPOSTDEC, 0x3, IGNORE, E}}}, - - {O (O_TRAPA, SB), AV_H8H, 2, "trapa", {{IMM2, E}}, {{0x5, 0x7, IMM2, IGNORE, E}}}, - {O (O_TAS, SB), AV_H8H, 2, "tas", {{RSIND, E}}, {{0x0, 0x1, 0xe, 0x0, 0x7, 0xb, B30 | RSIND, 0xc, E}}}, - - {O (O_XOR, SB), AV_H8, 2, "xor.b", {{IMM8, RD8, E}}, {{0xd, RD8, IMM8LIST, E}}}, - EXPAND_TWOOP_B (O (O_XOR, SB), "xor.b", 0xd, 0x1, 0x5, 0x5, 0), - - {O (O_XOR, SW), AV_H8, 2, "xor.w", {{RS16, RD16, E}}, {{0x6, 0x5, RS16, RD16, E}}}, - EXPAND_TWOOP_W (O (O_XOR, SW), "xor.w", 0x6, 0x5, 0x5), - - {O (O_XOR, SL), AV_H8H, 2, "xor.l", {{RS32, RD32, E}}, {{0x0, 0x1, 0xF, 0x0, 0x6, 0x5, B30 | RS32, B30 | RD32, E}}}, - EXPAND_TWOOP_L (O (O_XOR, SL), "xor.l", 0x5), - - {O (O_XORC, SB), AV_H8, 2, "xorc", {{IMM8, CCR | DST, E}}, {{0x0, 0x5, IMM8LIST, E}}}, - {O (O_XORC, SB), AV_H8S, 2, "xorc", {{IMM8, EXR | DST, E}}, {{0x0, 0x1, 0x4, EXR | DST, 0x0, 0x5, IMM8LIST, E}}}, - - {O (O_CLRMAC, SN), AV_H8S, 2, "clrmac", {{E}}, {{0x0, 0x1, 0xa, 0x0, E}}}, - {O (O_MAC, SW), AV_H8S, 2, "mac", {{RSPOSTINC, RDPOSTINC, E}}, {{0x0, 0x1, 0x6, 0x0, 0x6, 0xd, B30 | RSPOSTINC, B30 | RDPOSTINC, E}}}, - {O (O_LDMAC, SL), AV_H8S, 2, "ldmac", {{RS32, MD32, E}}, {{0x0, 0x3, MD32, RS32, E}}}, - {O (O_STMAC, SL), AV_H8S, 2, "stmac", {{MS32, RD32, E}}, {{0x0, 0x2, MS32, RD32, E}}}, - {O (O_LDM, SL), AV_H8H, 6, "ldm.l", {{RSPOSTINC, RD32, E}}, {{0x0, 0x1, DATA, 0x0, 0x6, 0xD, 0x7, B30 | RD32, E}}}, - {O (O_STM, SL), AV_H8H, 6, "stm.l", {{RS32, RDPREDEC, E}}, {{0x0, 0x1, DATA, 0x0, 0x6, 0xD, 0xF, B30 | RS32, E}}}, - {0, 0, 0, NULL, {{0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}} -}; -#else -extern const struct h8_opcode h8_opcodes[]; -#endif - diff --git a/include/opcode/hppa.h b/include/opcode/hppa.h deleted file mode 100644 index d1c0e83952b..00000000000 --- a/include/opcode/hppa.h +++ /dev/null @@ -1,1090 +0,0 @@ -/* Table of opcodes for the PA-RISC. - Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005 - Free Software Foundation, Inc. - - Contributed by the Center for Software Science at the - University of Utah (pa-gdb-bugs@cs.utah.edu). - -This file is part of GAS, the GNU Assembler, and GDB, the GNU disassembler. - -GAS/GDB 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 1, or (at your option) -any later version. - -GAS/GDB 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 GAS or GDB; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#if !defined(__STDC__) && !defined(const) -#define const -#endif - -/* - * Structure of an opcode table entry. - */ - -/* There are two kinds of delay slot nullification: normal which is - * controled by the nullification bit, and conditional, which depends - * on the direction of the branch and its success or failure. - * - * NONE is unfortunately #defined in the hiux system include files. - * #undef it away. - */ -#undef NONE -struct pa_opcode -{ - const char *name; - unsigned long int match; /* Bits that must be set... */ - unsigned long int mask; /* ... in these bits. */ - char *args; - enum pa_arch arch; - char flags; -}; - -/* Enables strict matching. Opcodes with match errors are skipped - when this bit is set. */ -#define FLAG_STRICT 0x1 - -/* - All hppa opcodes are 32 bits. - - The match component is a mask saying which bits must match a - particular opcode in order for an instruction to be an instance - of that opcode. - - The args component is a string containing one character for each operand of - the instruction. Characters used as a prefix allow any second character to - be used without conflicting with the main operand characters. - - Bit positions in this description follow HP usage of lsb = 31, - "at" is lsb of field. - - In the args field, the following characters must match exactly: - - '+,() ' - - In the args field, the following characters are unused: - - ' " - / 34 6789:; ' - '@ C M [\] ' - '` e g } ' - - Here are all the characters: - - ' !"#$%&'()*+-,./0123456789:;<=>?' - '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_' - '`abcdefghijklmnopqrstuvwxyz{|}~ ' - -Kinds of operands: - x integer register field at 15. - b integer register field at 10. - t integer register field at 31. - a integer register field at 10 and 15 (for PERMH) - 5 5 bit immediate at 15. - s 2 bit space specifier at 17. - S 3 bit space specifier at 18. - V 5 bit immediate value at 31 - i 11 bit immediate value at 31 - j 14 bit immediate value at 31 - k 21 bit immediate value at 31 - l 16 bit immediate value at 31 (wide mode only, unusual encoding). - n nullification for branch instructions - N nullification for spop and copr instructions - w 12 bit branch displacement - W 17 bit branch displacement (PC relative) - X 22 bit branch displacement (PC relative) - z 17 bit branch displacement (just a number, not an address) - -Also these: - - . 2 bit shift amount at 25 - * 4 bit shift amount at 25 - p 5 bit shift count at 26 (to support the SHD instruction) encoded as - 31-p - ~ 6 bit shift count at 20,22:26 encoded as 63-~. - P 5 bit bit position at 26 - q 6 bit bit position at 20,22:26 - T 5 bit field length at 31 (encoded as 32-T) - % 6 bit field length at 23,27:31 (variable extract/deposit) - | 6 bit field length at 19,27:31 (fixed extract/deposit) - A 13 bit immediate at 18 (to support the BREAK instruction) - ^ like b, but describes a control register - ! sar (cr11) register - D 26 bit immediate at 31 (to support the DIAG instruction) - $ 9 bit immediate at 28 (to support POPBTS) - - v 3 bit Special Function Unit identifier at 25 - O 20 bit Special Function Unit operation split between 15 bits at 20 - and 5 bits at 31 - o 15 bit Special Function Unit operation at 20 - 2 22 bit Special Function Unit operation split between 17 bits at 20 - and 5 bits at 31 - 1 15 bit Special Function Unit operation split between 10 bits at 20 - and 5 bits at 31 - 0 10 bit Special Function Unit operation split between 5 bits at 20 - and 5 bits at 31 - u 3 bit coprocessor unit identifier at 25 - F Source Floating Point Operand Format Completer encoded 2 bits at 20 - I Source Floating Point Operand Format Completer encoded 1 bits at 20 - (for 0xe format FP instructions) - G Destination Floating Point Operand Format Completer encoded 2 bits at 18 - H Floating Point Operand Format at 26 for 'fmpyadd' and 'fmpysub' - (very similar to 'F') - - r 5 bit immediate value at 31 (for the break instruction) - (very similar to V above, except the value is unsigned instead of - low_sign_ext) - R 5 bit immediate value at 15 (for the ssm, rsm, probei instructions) - (same as r above, except the value is in a different location) - U 10 bit immediate value at 15 (for SSM, RSM on pa2.0) - Q 5 bit immediate value at 10 (a bit position specified in - the bb instruction. It's the same as r above, except the - value is in a different location) - B 5 bit immediate value at 10 (a bit position specified in - the bb instruction. Similar to Q, but 64 bit handling is - different. - Z %r1 -- implicit target of addil instruction. - L ,%r2 completer for new syntax branch - { Source format completer for fcnv - _ Destination format completer for fcnv - h cbit for fcmp - = gfx tests for ftest - d 14 bit offset for single precision FP long load/store. - # 14 bit offset for double precision FP load long/store. - J Yet another 14 bit offset for load/store with ma,mb completers. - K Yet another 14 bit offset for load/store with ma,mb completers. - y 16 bit offset for word aligned load/store (PA2.0 wide). - & 16 bit offset for dword aligned load/store (PA2.0 wide). - < 16 bit offset for load/store with ma,mb completers (PA2.0 wide). - > 16 bit offset for load/store with ma,mb completers (PA2.0 wide). - Y %sr0,%r31 -- implicit target of be,l instruction. - @ implicit immediate value of 0 - -Completer operands all have 'c' as the prefix: - - cx indexed load and store completer. - cX indexed load and store completer. Like cx, but emits a space - after in disassembler. - cm short load and store completer. - cM short load and store completer. Like cm, but emits a space - after in disassembler. - cq long load and store completer (like cm, but inserted into a - different location in the target instruction). - cs store bytes short completer. - cA store bytes short completer. Like cs, but emits a space - after in disassembler. - ce long load/store completer for LDW/STW with a different encoding - than the others - cc load cache control hint - cd load and clear cache control hint - cC store cache control hint - co ordered access - - cp branch link and push completer - cP branch pop completer - cl branch link completer - cg branch gate completer - - cw read/write completer for PROBE - cW wide completer for MFCTL - cL local processor completer for cache control - cZ System Control Completer (to support LPA, LHA, etc.) - - ci correction completer for DCOR - ca add completer - cy 32 bit add carry completer - cY 64 bit add carry completer - cv signed overflow trap completer - ct trap on condition completer for ADDI, SUB - cT trap on condition completer for UADDCM - cb 32 bit borrow completer for SUB - cB 64 bit borrow completer for SUB - - ch left/right half completer - cH signed/unsigned saturation completer - cS signed/unsigned completer at 21 - cz zero/sign extension completer. - c* permutation completer - -Condition operands all have '?' as the prefix: - - ?f Floating point compare conditions (encoded as 5 bits at 31) - - ?a add conditions - ?A 64 bit add conditions - ?@ add branch conditions followed by nullify - ?d non-negated add branch conditions - ?D negated add branch conditions - ?w wide mode non-negated add branch conditions - ?W wide mode negated add branch conditions - - ?s compare/subtract conditions - ?S 64 bit compare/subtract conditions - ?t non-negated compare and branch conditions - ?n 32 bit compare and branch conditions followed by nullify - ?N 64 bit compare and branch conditions followed by nullify - ?Q 64 bit compare and branch conditions for CMPIB instruction - - ?l logical conditions - ?L 64 bit logical conditions - - ?b branch on bit conditions - ?B 64 bit branch on bit conditions - - ?x shift/extract/deposit conditions - ?X 64 bit shift/extract/deposit conditions - ?y shift/extract/deposit conditions followed by nullify for conditional - branches - - ?u unit conditions - ?U 64 bit unit conditions - -Floating point registers all have 'f' as a prefix: - - ft target register at 31 - fT target register with L/R halves at 31 - fa operand 1 register at 10 - fA operand 1 register with L/R halves at 10 - fX Same as fA, except prints a space before register during disasm - fb operand 2 register at 15 - fB operand 2 register with L/R halves at 15 - fC operand 3 register with L/R halves at 16:18,21:23 - fe Like fT, but encoding is different. - fE Same as fe, except prints a space before register during disasm. - fx target register at 15 (only for PA 2.0 long format FLDD/FSTD). - -Float registers for fmpyadd and fmpysub: - - fi mult operand 1 register at 10 - fj mult operand 2 register at 15 - fk mult target register at 20 - fl add/sub operand register at 25 - fm add/sub target register at 31 - -*/ - - -#if 0 -/* List of characters not to put a space after. Note that - "," is included, as the "spopN" operations use literal - commas in their completer sections. */ -static const char *const completer_chars = ",CcY<>?!@+&U~FfGHINnOoZMadu|/=0123%e$m}"; -#endif - -/* The order of the opcodes in this table is significant: - - * The assembler requires that all instances of the same mnemonic be - consecutive. If they aren't, the assembler will bomb at runtime. - - * Immediate fields use pa_get_absolute_expression to parse the - string. It will generate a "bad expression" error if passed - a register name. Thus, register index variants of an opcode - need to precede immediate variants. - - * The disassembler does not care about the order of the opcodes - except in cases where implicit addressing is used. - - Here are the rules for ordering the opcodes of a mnemonic: - - 1) Opcodes with FLAG_STRICT should precede opcodes without - FLAG_STRICT. - - 2) Opcodes with FLAG_STRICT should be ordered as follows: - register index opcodes, short immediate opcodes, and finally - long immediate opcodes. When both pa10 and pa11 variants - of the same opcode are available, the pa10 opcode should - come first for correct architectural promotion. - - 3) When implicit addressing is available for an opcode, the - implicit opcode should precede the explicit opcode. - - 4) Opcodes without FLAG_STRICT should be ordered as follows: - register index opcodes, long immediate opcodes, and finally - short immediate opcodes. */ - -static const struct pa_opcode pa_opcodes[] = -{ - -/* Pseudo-instructions. */ - -{ "ldi", 0x34000000, 0xffe00000, "l,x", pa20w, 0},/* ldo val(r0),r */ -{ "ldi", 0x34000000, 0xffe0c000, "j,x", pa10, 0},/* ldo val(r0),r */ - -{ "cmpib", 0xec000000, 0xfc000000, "?Qn5,b,w", pa20, FLAG_STRICT}, -{ "cmpib", 0x84000000, 0xf4000000, "?nn5,b,w", pa10, FLAG_STRICT}, -{ "comib", 0x84000000, 0xfc000000, "?nn5,b,w", pa10, 0}, /* comib{tf}*/ -/* This entry is for the disassembler only. It will never be used by - assembler. */ -{ "comib", 0x8c000000, 0xfc000000, "?nn5,b,w", pa10, 0}, /* comib{tf}*/ -{ "cmpb", 0x9c000000, 0xdc000000, "?Nnx,b,w", pa20, FLAG_STRICT}, -{ "cmpb", 0x80000000, 0xf4000000, "?nnx,b,w", pa10, FLAG_STRICT}, -{ "comb", 0x80000000, 0xfc000000, "?nnx,b,w", pa10, 0}, /* comb{tf} */ -/* This entry is for the disassembler only. It will never be used by - assembler. */ -{ "comb", 0x88000000, 0xfc000000, "?nnx,b,w", pa10, 0}, /* comb{tf} */ -{ "addb", 0xa0000000, 0xf4000000, "?Wnx,b,w", pa20w, FLAG_STRICT}, -{ "addb", 0xa0000000, 0xfc000000, "?@nx,b,w", pa10, 0}, /* addb{tf} */ -/* This entry is for the disassembler only. It will never be used by - assembler. */ -{ "addb", 0xa8000000, 0xfc000000, "?@nx,b,w", pa10, 0}, -{ "addib", 0xa4000000, 0xf4000000, "?Wn5,b,w", pa20w, FLAG_STRICT}, -{ "addib", 0xa4000000, 0xfc000000, "?@n5,b,w", pa10, 0}, /* addib{tf}*/ -/* This entry is for the disassembler only. It will never be used by - assembler. */ -{ "addib", 0xac000000, 0xfc000000, "?@n5,b,w", pa10, 0}, /* addib{tf}*/ -{ "nop", 0x08000240, 0xffffffff, "", pa10, 0}, /* or 0,0,0 */ -{ "copy", 0x08000240, 0xffe0ffe0, "x,t", pa10, 0}, /* or r,0,t */ -{ "mtsar", 0x01601840, 0xffe0ffff, "x", pa10, 0}, /* mtctl r,cr11 */ - -/* Loads and Stores for integer registers. */ - -{ "ldd", 0x0c0000c0, 0xfc00d3c0, "cxccx(b),t", pa20, FLAG_STRICT}, -{ "ldd", 0x0c0000c0, 0xfc0013c0, "cxccx(s,b),t", pa20, FLAG_STRICT}, -{ "ldd", 0x0c0010e0, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT}, -{ "ldd", 0x0c0010e0, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT}, -{ "ldd", 0x0c0010c0, 0xfc00d3c0, "cmcc5(b),t", pa20, FLAG_STRICT}, -{ "ldd", 0x0c0010c0, 0xfc0013c0, "cmcc5(s,b),t", pa20, FLAG_STRICT}, -{ "ldd", 0x50000000, 0xfc000002, "cq&(b),x", pa20w, FLAG_STRICT}, -{ "ldd", 0x50000000, 0xfc00c002, "cq#(b),x", pa20, FLAG_STRICT}, -{ "ldd", 0x50000000, 0xfc000002, "cq#(s,b),x", pa20, FLAG_STRICT}, -{ "ldw", 0x0c000080, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT}, -{ "ldw", 0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT}, -{ "ldw", 0x0c000080, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT}, -{ "ldw", 0x0c000080, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT}, -{ "ldw", 0x0c0010a0, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT}, -{ "ldw", 0x0c0010a0, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT}, -{ "ldw", 0x0c001080, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT}, -{ "ldw", 0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT}, -{ "ldw", 0x0c001080, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT}, -{ "ldw", 0x0c001080, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT}, -{ "ldw", 0x4c000000, 0xfc000000, "ce<(b),x", pa20w, FLAG_STRICT}, -{ "ldw", 0x5c000004, 0xfc000006, "ce>(b),x", pa20w, FLAG_STRICT}, -{ "ldw", 0x48000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT}, -{ "ldw", 0x5c000004, 0xfc00c006, "ceK(b),x", pa20, FLAG_STRICT}, -{ "ldw", 0x5c000004, 0xfc000006, "ceK(s,b),x", pa20, FLAG_STRICT}, -{ "ldw", 0x4c000000, 0xfc00c000, "ceJ(b),x", pa10, FLAG_STRICT}, -{ "ldw", 0x4c000000, 0xfc000000, "ceJ(s,b),x", pa10, FLAG_STRICT}, -{ "ldw", 0x48000000, 0xfc00c000, "j(b),x", pa10, 0}, -{ "ldw", 0x48000000, 0xfc000000, "j(s,b),x", pa10, 0}, -{ "ldh", 0x0c000040, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT}, -{ "ldh", 0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT}, -{ "ldh", 0x0c000040, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT}, -{ "ldh", 0x0c000040, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT}, -{ "ldh", 0x0c001060, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT}, -{ "ldh", 0x0c001060, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT}, -{ "ldh", 0x0c001040, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT}, -{ "ldh", 0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT}, -{ "ldh", 0x0c001040, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT}, -{ "ldh", 0x0c001040, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT}, -{ "ldh", 0x44000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT}, -{ "ldh", 0x44000000, 0xfc00c000, "j(b),x", pa10, 0}, -{ "ldh", 0x44000000, 0xfc000000, "j(s,b),x", pa10, 0}, -{ "ldb", 0x0c000000, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT}, -{ "ldb", 0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT}, -{ "ldb", 0x0c000000, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT}, -{ "ldb", 0x0c000000, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT}, -{ "ldb", 0x0c001020, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT}, -{ "ldb", 0x0c001020, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT}, -{ "ldb", 0x0c001000, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT}, -{ "ldb", 0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT}, -{ "ldb", 0x0c001000, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT}, -{ "ldb", 0x0c001000, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT}, -{ "ldb", 0x40000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT}, -{ "ldb", 0x40000000, 0xfc00c000, "j(b),x", pa10, 0}, -{ "ldb", 0x40000000, 0xfc000000, "j(s,b),x", pa10, 0}, -{ "std", 0x0c0012e0, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT}, -{ "std", 0x0c0012e0, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT}, -{ "std", 0x0c0012c0, 0xfc00d3c0, "cmcCx,V(b)", pa20, FLAG_STRICT}, -{ "std", 0x0c0012c0, 0xfc0013c0, "cmcCx,V(s,b)", pa20, FLAG_STRICT}, -{ "std", 0x70000000, 0xfc000002, "cqx,&(b)", pa20w, FLAG_STRICT}, -{ "std", 0x70000000, 0xfc00c002, "cqx,#(b)", pa20, FLAG_STRICT}, -{ "std", 0x70000000, 0xfc000002, "cqx,#(s,b)", pa20, FLAG_STRICT}, -{ "stw", 0x0c0012a0, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT}, -{ "stw", 0x0c0012a0, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT}, -{ "stw", 0x0c001280, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT}, -{ "stw", 0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT}, -{ "stw", 0x0c001280, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT}, -{ "stw", 0x0c001280, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT}, -{ "stw", 0x6c000000, 0xfc000000, "cex,<(b)", pa20w, FLAG_STRICT}, -{ "stw", 0x7c000004, 0xfc000006, "cex,>(b)", pa20w, FLAG_STRICT}, -{ "stw", 0x68000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT}, -{ "stw", 0x7c000004, 0xfc00c006, "cex,K(b)", pa20, FLAG_STRICT}, -{ "stw", 0x7c000004, 0xfc000006, "cex,K(s,b)", pa20, FLAG_STRICT}, -{ "stw", 0x6c000000, 0xfc00c000, "cex,J(b)", pa10, FLAG_STRICT}, -{ "stw", 0x6c000000, 0xfc000000, "cex,J(s,b)", pa10, FLAG_STRICT}, -{ "stw", 0x68000000, 0xfc00c000, "x,j(b)", pa10, 0}, -{ "stw", 0x68000000, 0xfc000000, "x,j(s,b)", pa10, 0}, -{ "sth", 0x0c001260, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT}, -{ "sth", 0x0c001260, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT}, -{ "sth", 0x0c001240, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT}, -{ "sth", 0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT}, -{ "sth", 0x0c001240, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT}, -{ "sth", 0x0c001240, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT}, -{ "sth", 0x64000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT}, -{ "sth", 0x64000000, 0xfc00c000, "x,j(b)", pa10, 0}, -{ "sth", 0x64000000, 0xfc000000, "x,j(s,b)", pa10, 0}, -{ "stb", 0x0c001220, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT}, -{ "stb", 0x0c001220, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT}, -{ "stb", 0x0c001200, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT}, -{ "stb", 0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT}, -{ "stb", 0x0c001200, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT}, -{ "stb", 0x0c001200, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT}, -{ "stb", 0x60000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT}, -{ "stb", 0x60000000, 0xfc00c000, "x,j(b)", pa10, 0}, -{ "stb", 0x60000000, 0xfc000000, "x,j(s,b)", pa10, 0}, -{ "ldwm", 0x4c000000, 0xfc00c000, "j(b),x", pa10, 0}, -{ "ldwm", 0x4c000000, 0xfc000000, "j(s,b),x", pa10, 0}, -{ "stwm", 0x6c000000, 0xfc00c000, "x,j(b)", pa10, 0}, -{ "stwm", 0x6c000000, 0xfc000000, "x,j(s,b)", pa10, 0}, -{ "ldwx", 0x0c000080, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT}, -{ "ldwx", 0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT}, -{ "ldwx", 0x0c000080, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT}, -{ "ldwx", 0x0c000080, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT}, -{ "ldwx", 0x0c000080, 0xfc00dfc0, "cXx(b),t", pa10, 0}, -{ "ldwx", 0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, 0}, -{ "ldhx", 0x0c000040, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT}, -{ "ldhx", 0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT}, -{ "ldhx", 0x0c000040, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT}, -{ "ldhx", 0x0c000040, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT}, -{ "ldhx", 0x0c000040, 0xfc00dfc0, "cXx(b),t", pa10, 0}, -{ "ldhx", 0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, 0}, -{ "ldbx", 0x0c000000, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT}, -{ "ldbx", 0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT}, -{ "ldbx", 0x0c000000, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT}, -{ "ldbx", 0x0c000000, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT}, -{ "ldbx", 0x0c000000, 0xfc00dfc0, "cXx(b),t", pa10, 0}, -{ "ldbx", 0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, 0}, -{ "ldwa", 0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT}, -{ "ldwa", 0x0c000180, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT}, -{ "ldwa", 0x0c0011a0, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT}, -{ "ldwa", 0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT}, -{ "ldwa", 0x0c001180, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT}, -{ "ldcw", 0x0c0001c0, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT}, -{ "ldcw", 0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT}, -{ "ldcw", 0x0c0001c0, 0xfc00d3c0, "cxcdx(b),t", pa11, FLAG_STRICT}, -{ "ldcw", 0x0c0001c0, 0xfc0013c0, "cxcdx(s,b),t", pa11, FLAG_STRICT}, -{ "ldcw", 0x0c0011c0, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT}, -{ "ldcw", 0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT}, -{ "ldcw", 0x0c0011c0, 0xfc00d3c0, "cmcd5(b),t", pa11, FLAG_STRICT}, -{ "ldcw", 0x0c0011c0, 0xfc0013c0, "cmcd5(s,b),t", pa11, FLAG_STRICT}, -{ "stwa", 0x0c0013a0, 0xfc00d3ff, "cocCx,@(b)", pa20, FLAG_STRICT}, -{ "stwa", 0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT}, -{ "stwa", 0x0c001380, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT}, -{ "stby", 0x0c001300, 0xfc00dfc0, "cAx,V(b)", pa10, FLAG_STRICT}, -{ "stby", 0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, FLAG_STRICT}, -{ "stby", 0x0c001300, 0xfc00d3c0, "cscCx,V(b)", pa11, FLAG_STRICT}, -{ "stby", 0x0c001300, 0xfc0013c0, "cscCx,V(s,b)", pa11, FLAG_STRICT}, -{ "ldda", 0x0c000100, 0xfc00d3c0, "cxccx(b),t", pa20, FLAG_STRICT}, -{ "ldda", 0x0c001120, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT}, -{ "ldda", 0x0c001100, 0xfc00d3c0, "cmcc5(b),t", pa20, FLAG_STRICT}, -{ "ldcd", 0x0c000140, 0xfc00d3c0, "cxcdx(b),t", pa20, FLAG_STRICT}, -{ "ldcd", 0x0c000140, 0xfc0013c0, "cxcdx(s,b),t", pa20, FLAG_STRICT}, -{ "ldcd", 0x0c001140, 0xfc00d3c0, "cmcd5(b),t", pa20, FLAG_STRICT}, -{ "ldcd", 0x0c001140, 0xfc0013c0, "cmcd5(s,b),t", pa20, FLAG_STRICT}, -{ "stda", 0x0c0013e0, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT}, -{ "stda", 0x0c0013c0, 0xfc00d3c0, "cmcCx,V(b)", pa20, FLAG_STRICT}, -{ "ldwax", 0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT}, -{ "ldwax", 0x0c000180, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT}, -{ "ldwax", 0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, 0}, -{ "ldcwx", 0x0c0001c0, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT}, -{ "ldcwx", 0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT}, -{ "ldcwx", 0x0c0001c0, 0xfc00d3c0, "cxcdx(b),t", pa11, FLAG_STRICT}, -{ "ldcwx", 0x0c0001c0, 0xfc0013c0, "cxcdx(s,b),t", pa11, FLAG_STRICT}, -{ "ldcwx", 0x0c0001c0, 0xfc00dfc0, "cXx(b),t", pa10, 0}, -{ "ldcwx", 0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, 0}, -{ "ldws", 0x0c001080, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT}, -{ "ldws", 0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT}, -{ "ldws", 0x0c001080, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT}, -{ "ldws", 0x0c001080, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT}, -{ "ldws", 0x0c001080, 0xfc00dfc0, "cM5(b),t", pa10, 0}, -{ "ldws", 0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, 0}, -{ "ldhs", 0x0c001040, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT}, -{ "ldhs", 0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT}, -{ "ldhs", 0x0c001040, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT}, -{ "ldhs", 0x0c001040, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT}, -{ "ldhs", 0x0c001040, 0xfc00dfc0, "cM5(b),t", pa10, 0}, -{ "ldhs", 0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, 0}, -{ "ldbs", 0x0c001000, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT}, -{ "ldbs", 0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT}, -{ "ldbs", 0x0c001000, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT}, -{ "ldbs", 0x0c001000, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT}, -{ "ldbs", 0x0c001000, 0xfc00dfc0, "cM5(b),t", pa10, 0}, -{ "ldbs", 0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, 0}, -{ "ldwas", 0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT}, -{ "ldwas", 0x0c001180, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT}, -{ "ldwas", 0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, 0}, -{ "ldcws", 0x0c0011c0, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT}, -{ "ldcws", 0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT}, -{ "ldcws", 0x0c0011c0, 0xfc00d3c0, "cmcd5(b),t", pa11, FLAG_STRICT}, -{ "ldcws", 0x0c0011c0, 0xfc0013c0, "cmcd5(s,b),t", pa11, FLAG_STRICT}, -{ "ldcws", 0x0c0011c0, 0xfc00dfc0, "cM5(b),t", pa10, 0}, -{ "ldcws", 0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, 0}, -{ "stws", 0x0c001280, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT}, -{ "stws", 0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT}, -{ "stws", 0x0c001280, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT}, -{ "stws", 0x0c001280, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT}, -{ "stws", 0x0c001280, 0xfc00dfc0, "cMx,V(b)", pa10, 0}, -{ "stws", 0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, 0}, -{ "sths", 0x0c001240, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT}, -{ "sths", 0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT}, -{ "sths", 0x0c001240, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT}, -{ "sths", 0x0c001240, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT}, -{ "sths", 0x0c001240, 0xfc00dfc0, "cMx,V(b)", pa10, 0}, -{ "sths", 0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, 0}, -{ "stbs", 0x0c001200, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT}, -{ "stbs", 0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT}, -{ "stbs", 0x0c001200, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT}, -{ "stbs", 0x0c001200, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT}, -{ "stbs", 0x0c001200, 0xfc00dfc0, "cMx,V(b)", pa10, 0}, -{ "stbs", 0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, 0}, -{ "stwas", 0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT}, -{ "stwas", 0x0c001380, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT}, -{ "stwas", 0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, 0}, -{ "stdby", 0x0c001340, 0xfc00d3c0, "cscCx,V(b)", pa20, FLAG_STRICT}, -{ "stdby", 0x0c001340, 0xfc0013c0, "cscCx,V(s,b)", pa20, FLAG_STRICT}, -{ "stbys", 0x0c001300, 0xfc00dfc0, "cAx,V(b)", pa10, FLAG_STRICT}, -{ "stbys", 0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, FLAG_STRICT}, -{ "stbys", 0x0c001300, 0xfc00d3c0, "cscCx,V(b)", pa11, FLAG_STRICT}, -{ "stbys", 0x0c001300, 0xfc0013c0, "cscCx,V(s,b)", pa11, FLAG_STRICT}, -{ "stbys", 0x0c001300, 0xfc00dfc0, "cAx,V(b)", pa10, 0}, -{ "stbys", 0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, 0}, - -/* Immediate instructions. */ -{ "ldo", 0x34000000, 0xfc000000, "l(b),x", pa20w, 0}, -{ "ldo", 0x34000000, 0xfc00c000, "j(b),x", pa10, 0}, -{ "ldil", 0x20000000, 0xfc000000, "k,b", pa10, 0}, -{ "addil", 0x28000000, 0xfc000000, "k,b,Z", pa10, 0}, -{ "addil", 0x28000000, 0xfc000000, "k,b", pa10, 0}, - -/* Branching instructions. */ -{ "b", 0xe8008000, 0xfc00e000, "cpnXL", pa20, FLAG_STRICT}, -{ "b", 0xe800a000, 0xfc00e000, "clnXL", pa20, FLAG_STRICT}, -{ "b", 0xe8000000, 0xfc00e000, "clnW,b", pa10, FLAG_STRICT}, -{ "b", 0xe8002000, 0xfc00e000, "cgnW,b", pa10, FLAG_STRICT}, -{ "b", 0xe8000000, 0xffe0e000, "nW", pa10, 0}, /* b,l foo,r0 */ -{ "bl", 0xe8000000, 0xfc00e000, "nW,b", pa10, 0}, -{ "gate", 0xe8002000, 0xfc00e000, "nW,b", pa10, 0}, -{ "blr", 0xe8004000, 0xfc00e001, "nx,b", pa10, 0}, -{ "bv", 0xe800c000, 0xfc00fffd, "nx(b)", pa10, 0}, -{ "bv", 0xe800c000, 0xfc00fffd, "n(b)", pa10, 0}, -{ "bve", 0xe800f001, 0xfc1ffffd, "cpn(b)L", pa20, FLAG_STRICT}, -{ "bve", 0xe800f000, 0xfc1ffffd, "cln(b)L", pa20, FLAG_STRICT}, -{ "bve", 0xe800d001, 0xfc1ffffd, "cPn(b)", pa20, FLAG_STRICT}, -{ "bve", 0xe800d000, 0xfc1ffffd, "n(b)", pa20, FLAG_STRICT}, -{ "be", 0xe4000000, 0xfc000000, "clnz(S,b),Y", pa10, FLAG_STRICT}, -{ "be", 0xe4000000, 0xfc000000, "clnz(b),Y", pa10, FLAG_STRICT}, -{ "be", 0xe0000000, 0xfc000000, "nz(S,b)", pa10, 0}, -{ "be", 0xe0000000, 0xfc000000, "nz(b)", pa10, 0}, -{ "ble", 0xe4000000, 0xfc000000, "nz(S,b)", pa10, 0}, -{ "movb", 0xc8000000, 0xfc000000, "?ynx,b,w", pa10, 0}, -{ "movib", 0xcc000000, 0xfc000000, "?yn5,b,w", pa10, 0}, -{ "combt", 0x80000000, 0xfc000000, "?tnx,b,w", pa10, 0}, -{ "combf", 0x88000000, 0xfc000000, "?tnx,b,w", pa10, 0}, -{ "comibt", 0x84000000, 0xfc000000, "?tn5,b,w", pa10, 0}, -{ "comibf", 0x8c000000, 0xfc000000, "?tn5,b,w", pa10, 0}, -{ "addbt", 0xa0000000, 0xfc000000, "?dnx,b,w", pa10, 0}, -{ "addbf", 0xa8000000, 0xfc000000, "?dnx,b,w", pa10, 0}, -{ "addibt", 0xa4000000, 0xfc000000, "?dn5,b,w", pa10, 0}, -{ "addibf", 0xac000000, 0xfc000000, "?dn5,b,w", pa10, 0}, -{ "bb", 0xc0004000, 0xffe06000, "?bnx,!,w", pa10, FLAG_STRICT}, -{ "bb", 0xc0006000, 0xffe06000, "?Bnx,!,w", pa20, FLAG_STRICT}, -{ "bb", 0xc4004000, 0xfc006000, "?bnx,Q,w", pa10, FLAG_STRICT}, -{ "bb", 0xc4004000, 0xfc004000, "?Bnx,B,w", pa20, FLAG_STRICT}, -{ "bvb", 0xc0004000, 0xffe04000, "?bnx,w", pa10, 0}, -{ "clrbts", 0xe8004005, 0xffffffff, "", pa20, FLAG_STRICT}, -{ "popbts", 0xe8004005, 0xfffff007, "$", pa20, FLAG_STRICT}, -{ "pushnom", 0xe8004001, 0xffffffff, "", pa20, FLAG_STRICT}, -{ "pushbts", 0xe8004001, 0xffe0ffff, "x", pa20, FLAG_STRICT}, - -/* Computation Instructions. */ - -{ "cmpclr", 0x080008a0, 0xfc000fe0, "?Sx,b,t", pa20, FLAG_STRICT}, -{ "cmpclr", 0x08000880, 0xfc000fe0, "?sx,b,t", pa10, FLAG_STRICT}, -{ "comclr", 0x08000880, 0xfc000fe0, "?sx,b,t", pa10, 0}, -{ "or", 0x08000260, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT}, -{ "or", 0x08000240, 0xfc000fe0, "?lx,b,t", pa10, 0}, -{ "xor", 0x080002a0, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT}, -{ "xor", 0x08000280, 0xfc000fe0, "?lx,b,t", pa10, 0}, -{ "and", 0x08000220, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT}, -{ "and", 0x08000200, 0xfc000fe0, "?lx,b,t", pa10, 0}, -{ "andcm", 0x08000020, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT}, -{ "andcm", 0x08000000, 0xfc000fe0, "?lx,b,t", pa10, 0}, -{ "uxor", 0x080003a0, 0xfc000fe0, "?Ux,b,t", pa20, FLAG_STRICT}, -{ "uxor", 0x08000380, 0xfc000fe0, "?ux,b,t", pa10, 0}, -{ "uaddcm", 0x080009a0, 0xfc000fa0, "cT?Ux,b,t", pa20, FLAG_STRICT}, -{ "uaddcm", 0x08000980, 0xfc000fa0, "cT?ux,b,t", pa10, FLAG_STRICT}, -{ "uaddcm", 0x08000980, 0xfc000fe0, "?ux,b,t", pa10, 0}, -{ "uaddcmt", 0x080009c0, 0xfc000fe0, "?ux,b,t", pa10, 0}, -{ "dcor", 0x08000ba0, 0xfc1f0fa0, "ci?Ub,t", pa20, FLAG_STRICT}, -{ "dcor", 0x08000b80, 0xfc1f0fa0, "ci?ub,t", pa10, FLAG_STRICT}, -{ "dcor", 0x08000b80, 0xfc1f0fe0, "?ub,t", pa10, 0}, -{ "idcor", 0x08000bc0, 0xfc1f0fe0, "?ub,t", pa10, 0}, -{ "addi", 0xb0000000, 0xfc000000, "ct?ai,b,x", pa10, FLAG_STRICT}, -{ "addi", 0xb4000000, 0xfc000000, "cv?ai,b,x", pa10, FLAG_STRICT}, -{ "addi", 0xb4000000, 0xfc000800, "?ai,b,x", pa10, 0}, -{ "addio", 0xb4000800, 0xfc000800, "?ai,b,x", pa10, 0}, -{ "addit", 0xb0000000, 0xfc000800, "?ai,b,x", pa10, 0}, -{ "addito", 0xb0000800, 0xfc000800, "?ai,b,x", pa10, 0}, -{ "add", 0x08000720, 0xfc0007e0, "cY?Ax,b,t", pa20, FLAG_STRICT}, -{ "add", 0x08000700, 0xfc0007e0, "cy?ax,b,t", pa10, FLAG_STRICT}, -{ "add", 0x08000220, 0xfc0003e0, "ca?Ax,b,t", pa20, FLAG_STRICT}, -{ "add", 0x08000200, 0xfc0003e0, "ca?ax,b,t", pa10, FLAG_STRICT}, -{ "add", 0x08000600, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "addl", 0x08000a00, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "addo", 0x08000e00, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "addc", 0x08000700, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "addco", 0x08000f00, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "sub", 0x080004e0, 0xfc0007e0, "ct?Sx,b,t", pa20, FLAG_STRICT}, -{ "sub", 0x080004c0, 0xfc0007e0, "ct?sx,b,t", pa10, FLAG_STRICT}, -{ "sub", 0x08000520, 0xfc0007e0, "cB?Sx,b,t", pa20, FLAG_STRICT}, -{ "sub", 0x08000500, 0xfc0007e0, "cb?sx,b,t", pa10, FLAG_STRICT}, -{ "sub", 0x08000420, 0xfc0007e0, "cv?Sx,b,t", pa20, FLAG_STRICT}, -{ "sub", 0x08000400, 0xfc0007e0, "cv?sx,b,t", pa10, FLAG_STRICT}, -{ "sub", 0x08000400, 0xfc000fe0, "?sx,b,t", pa10, 0}, -{ "subo", 0x08000c00, 0xfc000fe0, "?sx,b,t", pa10, 0}, -{ "subb", 0x08000500, 0xfc000fe0, "?sx,b,t", pa10, 0}, -{ "subbo", 0x08000d00, 0xfc000fe0, "?sx,b,t", pa10, 0}, -{ "subt", 0x080004c0, 0xfc000fe0, "?sx,b,t", pa10, 0}, -{ "subto", 0x08000cc0, 0xfc000fe0, "?sx,b,t", pa10, 0}, -{ "ds", 0x08000440, 0xfc000fe0, "?sx,b,t", pa10, 0}, -{ "subi", 0x94000000, 0xfc000000, "cv?si,b,x", pa10, FLAG_STRICT}, -{ "subi", 0x94000000, 0xfc000800, "?si,b,x", pa10, 0}, -{ "subio", 0x94000800, 0xfc000800, "?si,b,x", pa10, 0}, -{ "cmpiclr", 0x90000800, 0xfc000800, "?Si,b,x", pa20, FLAG_STRICT}, -{ "cmpiclr", 0x90000000, 0xfc000800, "?si,b,x", pa10, FLAG_STRICT}, -{ "comiclr", 0x90000000, 0xfc000800, "?si,b,x", pa10, 0}, -{ "shladd", 0x08000220, 0xfc000320, "ca?Ax,.,b,t", pa20, FLAG_STRICT}, -{ "shladd", 0x08000200, 0xfc000320, "ca?ax,.,b,t", pa10, FLAG_STRICT}, -{ "sh1add", 0x08000640, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "sh1addl", 0x08000a40, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "sh1addo", 0x08000e40, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "sh2add", 0x08000680, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "sh2addl", 0x08000a80, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "sh2addo", 0x08000e80, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "sh3add", 0x080006c0, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "sh3addl", 0x08000ac0, 0xfc000fe0, "?ax,b,t", pa10, 0}, -{ "sh3addo", 0x08000ec0, 0xfc000fe0, "?ax,b,t", pa10, 0}, - -/* Subword Operation Instructions. */ - -{ "hadd", 0x08000300, 0xfc00ff20, "cHx,b,t", pa20, FLAG_STRICT}, -{ "havg", 0x080002c0, 0xfc00ffe0, "x,b,t", pa20, FLAG_STRICT}, -{ "hshl", 0xf8008800, 0xffe0fc20, "x,*,t", pa20, FLAG_STRICT}, -{ "hshladd", 0x08000700, 0xfc00ff20, "x,.,b,t", pa20, FLAG_STRICT}, -{ "hshr", 0xf800c800, 0xfc1ff820, "cSb,*,t", pa20, FLAG_STRICT}, -{ "hshradd", 0x08000500, 0xfc00ff20, "x,.,b,t", pa20, FLAG_STRICT}, -{ "hsub", 0x08000100, 0xfc00ff20, "cHx,b,t", pa20, FLAG_STRICT}, -{ "mixh", 0xf8008400, 0xfc009fe0, "chx,b,t", pa20, FLAG_STRICT}, -{ "mixw", 0xf8008000, 0xfc009fe0, "chx,b,t", pa20, FLAG_STRICT}, -{ "permh", 0xf8000000, 0xfc009020, "c*a,t", pa20, FLAG_STRICT}, - - -/* Extract and Deposit Instructions. */ - -{ "shrpd", 0xd0000200, 0xfc001fe0, "?Xx,b,!,t", pa20, FLAG_STRICT}, -{ "shrpd", 0xd0000400, 0xfc001400, "?Xx,b,~,t", pa20, FLAG_STRICT}, -{ "shrpw", 0xd0000000, 0xfc001fe0, "?xx,b,!,t", pa10, FLAG_STRICT}, -{ "shrpw", 0xd0000800, 0xfc001c00, "?xx,b,p,t", pa10, FLAG_STRICT}, -{ "vshd", 0xd0000000, 0xfc001fe0, "?xx,b,t", pa10, 0}, -{ "shd", 0xd0000800, 0xfc001c00, "?xx,b,p,t", pa10, 0}, -{ "extrd", 0xd0001200, 0xfc001ae0, "cS?Xb,!,%,x", pa20, FLAG_STRICT}, -{ "extrd", 0xd8000000, 0xfc000000, "cS?Xb,q,|,x", pa20, FLAG_STRICT}, -{ "extrw", 0xd0001000, 0xfc001be0, "cS?xb,!,T,x", pa10, FLAG_STRICT}, -{ "extrw", 0xd0001800, 0xfc001800, "cS?xb,P,T,x", pa10, FLAG_STRICT}, -{ "vextru", 0xd0001000, 0xfc001fe0, "?xb,T,x", pa10, 0}, -{ "vextrs", 0xd0001400, 0xfc001fe0, "?xb,T,x", pa10, 0}, -{ "extru", 0xd0001800, 0xfc001c00, "?xb,P,T,x", pa10, 0}, -{ "extrs", 0xd0001c00, 0xfc001c00, "?xb,P,T,x", pa10, 0}, -{ "depd", 0xd4000200, 0xfc001ae0, "cz?Xx,!,%,b", pa20, FLAG_STRICT}, -{ "depd", 0xf0000000, 0xfc000000, "cz?Xx,~,|,b", pa20, FLAG_STRICT}, -{ "depdi", 0xd4001200, 0xfc001ae0, "cz?X5,!,%,b", pa20, FLAG_STRICT}, -{ "depdi", 0xf4000000, 0xfc000000, "cz?X5,~,|,b", pa20, FLAG_STRICT}, -{ "depw", 0xd4000000, 0xfc001be0, "cz?xx,!,T,b", pa10, FLAG_STRICT}, -{ "depw", 0xd4000800, 0xfc001800, "cz?xx,p,T,b", pa10, FLAG_STRICT}, -{ "depwi", 0xd4001000, 0xfc001be0, "cz?x5,!,T,b", pa10, FLAG_STRICT}, -{ "depwi", 0xd4001800, 0xfc001800, "cz?x5,p,T,b", pa10, FLAG_STRICT}, -{ "zvdep", 0xd4000000, 0xfc001fe0, "?xx,T,b", pa10, 0}, -{ "vdep", 0xd4000400, 0xfc001fe0, "?xx,T,b", pa10, 0}, -{ "zdep", 0xd4000800, 0xfc001c00, "?xx,p,T,b", pa10, 0}, -{ "dep", 0xd4000c00, 0xfc001c00, "?xx,p,T,b", pa10, 0}, -{ "zvdepi", 0xd4001000, 0xfc001fe0, "?x5,T,b", pa10, 0}, -{ "vdepi", 0xd4001400, 0xfc001fe0, "?x5,T,b", pa10, 0}, -{ "zdepi", 0xd4001800, 0xfc001c00, "?x5,p,T,b", pa10, 0}, -{ "depi", 0xd4001c00, 0xfc001c00, "?x5,p,T,b", pa10, 0}, - -/* System Control Instructions. */ - -{ "break", 0x00000000, 0xfc001fe0, "r,A", pa10, 0}, -{ "rfi", 0x00000c00, 0xffffff1f, "cr", pa10, FLAG_STRICT}, -{ "rfi", 0x00000c00, 0xffffffff, "", pa10, 0}, -{ "rfir", 0x00000ca0, 0xffffffff, "", pa11, 0}, -{ "ssm", 0x00000d60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT}, -{ "ssm", 0x00000d60, 0xffe0ffe0, "R,t", pa10, 0}, -{ "rsm", 0x00000e60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT}, -{ "rsm", 0x00000e60, 0xffe0ffe0, "R,t", pa10, 0}, -{ "mtsm", 0x00001860, 0xffe0ffff, "x", pa10, 0}, -{ "ldsid", 0x000010a0, 0xfc1fffe0, "(b),t", pa10, 0}, -{ "ldsid", 0x000010a0, 0xfc1f3fe0, "(s,b),t", pa10, 0}, -{ "mtsp", 0x00001820, 0xffe01fff, "x,S", pa10, 0}, -{ "mtctl", 0x00001840, 0xfc00ffff, "x,^", pa10, 0}, -{ "mtsarcm", 0x016018C0, 0xffe0ffff, "x", pa20, FLAG_STRICT}, -{ "mfia", 0x000014A0, 0xffffffe0, "t", pa20, FLAG_STRICT}, -{ "mfsp", 0x000004a0, 0xffff1fe0, "S,t", pa10, 0}, -{ "mfctl", 0x016048a0, 0xffffffe0, "cW!,t", pa20, FLAG_STRICT}, -{ "mfctl", 0x000008a0, 0xfc1fffe0, "^,t", pa10, 0}, -{ "sync", 0x00000400, 0xffffffff, "", pa10, 0}, -{ "syncdma", 0x00100400, 0xffffffff, "", pa10, 0}, -{ "probe", 0x04001180, 0xfc00ffa0, "cw(b),x,t", pa10, FLAG_STRICT}, -{ "probe", 0x04001180, 0xfc003fa0, "cw(s,b),x,t", pa10, FLAG_STRICT}, -{ "probei", 0x04003180, 0xfc00ffa0, "cw(b),R,t", pa10, FLAG_STRICT}, -{ "probei", 0x04003180, 0xfc003fa0, "cw(s,b),R,t", pa10, FLAG_STRICT}, -{ "prober", 0x04001180, 0xfc00ffe0, "(b),x,t", pa10, 0}, -{ "prober", 0x04001180, 0xfc003fe0, "(s,b),x,t", pa10, 0}, -{ "proberi", 0x04003180, 0xfc00ffe0, "(b),R,t", pa10, 0}, -{ "proberi", 0x04003180, 0xfc003fe0, "(s,b),R,t", pa10, 0}, -{ "probew", 0x040011c0, 0xfc00ffe0, "(b),x,t", pa10, 0}, -{ "probew", 0x040011c0, 0xfc003fe0, "(s,b),x,t", pa10, 0}, -{ "probewi", 0x040031c0, 0xfc00ffe0, "(b),R,t", pa10, 0}, -{ "probewi", 0x040031c0, 0xfc003fe0, "(s,b),R,t", pa10, 0}, -{ "lpa", 0x04001340, 0xfc00ffc0, "cZx(b),t", pa10, 0}, -{ "lpa", 0x04001340, 0xfc003fc0, "cZx(s,b),t", pa10, 0}, -{ "lci", 0x04001300, 0xfc00ffe0, "x(b),t", pa11, 0}, -{ "lci", 0x04001300, 0xfc003fe0, "x(s,b),t", pa11, 0}, -{ "pdtlb", 0x04001600, 0xfc00ffdf, "cLcZx(b)", pa20, FLAG_STRICT}, -{ "pdtlb", 0x04001600, 0xfc003fdf, "cLcZx(s,b)", pa20, FLAG_STRICT}, -{ "pdtlb", 0x04001600, 0xfc1fffdf, "cLcZ@(b)", pa20, FLAG_STRICT}, -{ "pdtlb", 0x04001600, 0xfc1f3fdf, "cLcZ@(s,b)", pa20, FLAG_STRICT}, -{ "pdtlb", 0x04001200, 0xfc00ffdf, "cZx(b)", pa10, 0}, -{ "pdtlb", 0x04001200, 0xfc003fdf, "cZx(s,b)", pa10, 0}, -{ "pitlb", 0x04000600, 0xfc001fdf, "cLcZx(S,b)", pa20, FLAG_STRICT}, -{ "pitlb", 0x04000600, 0xfc1f1fdf, "cLcZ@(S,b)", pa20, FLAG_STRICT}, -{ "pitlb", 0x04000200, 0xfc001fdf, "cZx(S,b)", pa10, 0}, -{ "pdtlbe", 0x04001240, 0xfc00ffdf, "cZx(b)", pa10, 0}, -{ "pdtlbe", 0x04001240, 0xfc003fdf, "cZx(s,b)", pa10, 0}, -{ "pitlbe", 0x04000240, 0xfc001fdf, "cZx(S,b)", pa10, 0}, -{ "idtlba", 0x04001040, 0xfc00ffff, "x,(b)", pa10, 0}, -{ "idtlba", 0x04001040, 0xfc003fff, "x,(s,b)", pa10, 0}, -{ "iitlba", 0x04000040, 0xfc001fff, "x,(S,b)", pa10, 0}, -{ "idtlbp", 0x04001000, 0xfc00ffff, "x,(b)", pa10, 0}, -{ "idtlbp", 0x04001000, 0xfc003fff, "x,(s,b)", pa10, 0}, -{ "iitlbp", 0x04000000, 0xfc001fff, "x,(S,b)", pa10, 0}, -{ "pdc", 0x04001380, 0xfc00ffdf, "cZx(b)", pa10, 0}, -{ "pdc", 0x04001380, 0xfc003fdf, "cZx(s,b)", pa10, 0}, -{ "fdc", 0x04001280, 0xfc00ffdf, "cZx(b)", pa10, FLAG_STRICT}, -{ "fdc", 0x04001280, 0xfc003fdf, "cZx(s,b)", pa10, FLAG_STRICT}, -{ "fdc", 0x04003280, 0xfc00ffff, "5(b)", pa20, FLAG_STRICT}, -{ "fdc", 0x04003280, 0xfc003fff, "5(s,b)", pa20, FLAG_STRICT}, -{ "fdc", 0x04001280, 0xfc00ffdf, "cZx(b)", pa10, 0}, -{ "fdc", 0x04001280, 0xfc003fdf, "cZx(s,b)", pa10, 0}, -{ "fic", 0x040013c0, 0xfc00dfdf, "cZx(b)", pa20, FLAG_STRICT}, -{ "fic", 0x04000280, 0xfc001fdf, "cZx(S,b)", pa10, 0}, -{ "fdce", 0x040012c0, 0xfc00ffdf, "cZx(b)", pa10, 0}, -{ "fdce", 0x040012c0, 0xfc003fdf, "cZx(s,b)", pa10, 0}, -{ "fice", 0x040002c0, 0xfc001fdf, "cZx(S,b)", pa10, 0}, -{ "diag", 0x14000000, 0xfc000000, "D", pa10, 0}, -{ "idtlbt", 0x04001800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT}, -{ "iitlbt", 0x04000800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT}, - -/* These may be specific to certain versions of the PA. Joel claimed - they were 72000 (7200?) specific. However, I'm almost certain the - mtcpu/mfcpu were undocumented, but available in the older 700 machines. */ -{ "mtcpu", 0x14001600, 0xfc00ffff, "x,^", pa10, 0}, -{ "mfcpu", 0x14001A00, 0xfc00ffff, "^,x", pa10, 0}, -{ "tocen", 0x14403600, 0xffffffff, "", pa10, 0}, -{ "tocdis", 0x14401620, 0xffffffff, "", pa10, 0}, -{ "shdwgr", 0x14402600, 0xffffffff, "", pa10, 0}, -{ "grshdw", 0x14400620, 0xffffffff, "", pa10, 0}, - -/* gfw and gfr are not in the HP PA 1.1 manual, but they are in either - the Timex FPU or the Mustang ERS (not sure which) manual. */ -{ "gfw", 0x04001680, 0xfc00ffdf, "cZx(b)", pa11, 0}, -{ "gfw", 0x04001680, 0xfc003fdf, "cZx(s,b)", pa11, 0}, -{ "gfr", 0x04001a80, 0xfc00ffdf, "cZx(b)", pa11, 0}, -{ "gfr", 0x04001a80, 0xfc003fdf, "cZx(s,b)", pa11, 0}, - -/* Floating Point Coprocessor Instructions. */ - -{ "fldw", 0x24000000, 0xfc00df80, "cXx(b),fT", pa10, FLAG_STRICT}, -{ "fldw", 0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, FLAG_STRICT}, -{ "fldw", 0x24000000, 0xfc00d380, "cxccx(b),fT", pa11, FLAG_STRICT}, -{ "fldw", 0x24000000, 0xfc001380, "cxccx(s,b),fT", pa11, FLAG_STRICT}, -{ "fldw", 0x24001020, 0xfc1ff3a0, "cocc@(b),fT", pa20, FLAG_STRICT}, -{ "fldw", 0x24001020, 0xfc1f33a0, "cocc@(s,b),fT", pa20, FLAG_STRICT}, -{ "fldw", 0x24001000, 0xfc00df80, "cM5(b),fT", pa10, FLAG_STRICT}, -{ "fldw", 0x24001000, 0xfc001f80, "cM5(s,b),fT", pa10, FLAG_STRICT}, -{ "fldw", 0x24001000, 0xfc00d380, "cmcc5(b),fT", pa11, FLAG_STRICT}, -{ "fldw", 0x24001000, 0xfc001380, "cmcc5(s,b),fT", pa11, FLAG_STRICT}, -{ "fldw", 0x5c000000, 0xfc000004, "y(b),fe", pa20w, FLAG_STRICT}, -{ "fldw", 0x58000000, 0xfc000000, "cJy(b),fe", pa20w, FLAG_STRICT}, -{ "fldw", 0x5c000000, 0xfc00c004, "d(b),fe", pa20, FLAG_STRICT}, -{ "fldw", 0x5c000000, 0xfc000004, "d(s,b),fe", pa20, FLAG_STRICT}, -{ "fldw", 0x58000000, 0xfc00c000, "cJd(b),fe", pa20, FLAG_STRICT}, -{ "fldw", 0x58000000, 0xfc000000, "cJd(s,b),fe", pa20, FLAG_STRICT}, -{ "fldd", 0x2c000000, 0xfc00dfc0, "cXx(b),ft", pa10, FLAG_STRICT}, -{ "fldd", 0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, FLAG_STRICT}, -{ "fldd", 0x2c000000, 0xfc00d3c0, "cxccx(b),ft", pa11, FLAG_STRICT}, -{ "fldd", 0x2c000000, 0xfc0013c0, "cxccx(s,b),ft", pa11, FLAG_STRICT}, -{ "fldd", 0x2c001020, 0xfc1ff3e0, "cocc@(b),ft", pa20, FLAG_STRICT}, -{ "fldd", 0x2c001020, 0xfc1f33e0, "cocc@(s,b),ft", pa20, FLAG_STRICT}, -{ "fldd", 0x2c001000, 0xfc00dfc0, "cM5(b),ft", pa10, FLAG_STRICT}, -{ "fldd", 0x2c001000, 0xfc001fc0, "cM5(s,b),ft", pa10, FLAG_STRICT}, -{ "fldd", 0x2c001000, 0xfc00d3c0, "cmcc5(b),ft", pa11, FLAG_STRICT}, -{ "fldd", 0x2c001000, 0xfc0013c0, "cmcc5(s,b),ft", pa11, FLAG_STRICT}, -{ "fldd", 0x50000002, 0xfc000002, "cq&(b),fx", pa20w, FLAG_STRICT}, -{ "fldd", 0x50000002, 0xfc00c002, "cq#(b),fx", pa20, FLAG_STRICT}, -{ "fldd", 0x50000002, 0xfc000002, "cq#(s,b),fx", pa20, FLAG_STRICT}, -{ "fstw", 0x24000200, 0xfc00df80, "cXfT,x(b)", pa10, FLAG_STRICT}, -{ "fstw", 0x24000200, 0xfc001f80, "cXfT,x(s,b)", pa10, FLAG_STRICT}, -{ "fstw", 0x24000200, 0xfc00d380, "cxcCfT,x(b)", pa11, FLAG_STRICT}, -{ "fstw", 0x24000200, 0xfc001380, "cxcCfT,x(s,b)", pa11, FLAG_STRICT}, -{ "fstw", 0x24001220, 0xfc1ff3a0, "cocCfT,@(b)", pa20, FLAG_STRICT}, -{ "fstw", 0x24001220, 0xfc1f33a0, "cocCfT,@(s,b)", pa20, FLAG_STRICT}, -{ "fstw", 0x24001200, 0xfc00df80, "cMfT,5(b)", pa10, FLAG_STRICT}, -{ "fstw", 0x24001200, 0xfc001f80, "cMfT,5(s,b)", pa10, FLAG_STRICT}, -{ "fstw", 0x24001200, 0xfc00df80, "cMfT,5(b)", pa10, FLAG_STRICT}, -{ "fstw", 0x24001200, 0xfc001f80, "cMfT,5(s,b)", pa10, FLAG_STRICT}, -{ "fstw", 0x7c000000, 0xfc000004, "fE,y(b)", pa20w, FLAG_STRICT}, -{ "fstw", 0x78000000, 0xfc000000, "cJfE,y(b)", pa20w, FLAG_STRICT}, -{ "fstw", 0x7c000000, 0xfc00c004, "fE,d(b)", pa20, FLAG_STRICT}, -{ "fstw", 0x7c000000, 0xfc000004, "fE,d(s,b)", pa20, FLAG_STRICT}, -{ "fstw", 0x78000000, 0xfc00c000, "cJfE,d(b)", pa20, FLAG_STRICT}, -{ "fstw", 0x78000000, 0xfc000000, "cJfE,d(s,b)", pa20, FLAG_STRICT}, -{ "fstd", 0x2c000200, 0xfc00dfc0, "cXft,x(b)", pa10, FLAG_STRICT}, -{ "fstd", 0x2c000200, 0xfc001fc0, "cXft,x(s,b)", pa10, FLAG_STRICT}, -{ "fstd", 0x2c000200, 0xfc00d3c0, "cxcCft,x(b)", pa11, FLAG_STRICT}, -{ "fstd", 0x2c000200, 0xfc0013c0, "cxcCft,x(s,b)", pa11, FLAG_STRICT}, -{ "fstd", 0x2c001220, 0xfc1ff3e0, "cocCft,@(b)", pa20, FLAG_STRICT}, -{ "fstd", 0x2c001220, 0xfc1f33e0, "cocCft,@(s,b)", pa20, FLAG_STRICT}, -{ "fstd", 0x2c001200, 0xfc00dfc0, "cMft,5(b)", pa10, FLAG_STRICT}, -{ "fstd", 0x2c001200, 0xfc001fc0, "cMft,5(s,b)", pa10, FLAG_STRICT}, -{ "fstd", 0x2c001200, 0xfc00d3c0, "cmcCft,5(b)", pa11, FLAG_STRICT}, -{ "fstd", 0x2c001200, 0xfc0013c0, "cmcCft,5(s,b)", pa11, FLAG_STRICT}, -{ "fstd", 0x70000002, 0xfc000002, "cqfx,&(b)", pa20w, FLAG_STRICT}, -{ "fstd", 0x70000002, 0xfc00c002, "cqfx,#(b)", pa20, FLAG_STRICT}, -{ "fstd", 0x70000002, 0xfc000002, "cqfx,#(s,b)", pa20, FLAG_STRICT}, -{ "fldwx", 0x24000000, 0xfc00df80, "cXx(b),fT", pa10, FLAG_STRICT}, -{ "fldwx", 0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, FLAG_STRICT}, -{ "fldwx", 0x24000000, 0xfc00d380, "cxccx(b),fT", pa11, FLAG_STRICT}, -{ "fldwx", 0x24000000, 0xfc001380, "cxccx(s,b),fT", pa11, FLAG_STRICT}, -{ "fldwx", 0x24000000, 0xfc00df80, "cXx(b),fT", pa10, 0}, -{ "fldwx", 0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, 0}, -{ "flddx", 0x2c000000, 0xfc00dfc0, "cXx(b),ft", pa10, FLAG_STRICT}, -{ "flddx", 0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, FLAG_STRICT}, -{ "flddx", 0x2c000000, 0xfc00d3c0, "cxccx(b),ft", pa11, FLAG_STRICT}, -{ "flddx", 0x2c000000, 0xfc0013c0, "cxccx(s,b),ft", pa11, FLAG_STRICT}, -{ "flddx", 0x2c000000, 0xfc00dfc0, "cXx(b),ft", pa10, 0}, -{ "flddx", 0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, 0}, -{ "fstwx", 0x24000200, 0xfc00df80, "cxfT,x(b)", pa10, FLAG_STRICT}, -{ "fstwx", 0x24000200, 0xfc001f80, "cxfT,x(s,b)", pa10, FLAG_STRICT}, -{ "fstwx", 0x24000200, 0xfc00d380, "cxcCfT,x(b)", pa11, FLAG_STRICT}, -{ "fstwx", 0x24000200, 0xfc001380, "cxcCfT,x(s,b)", pa11, FLAG_STRICT}, -{ "fstwx", 0x24000200, 0xfc00df80, "cxfT,x(b)", pa10, 0}, -{ "fstwx", 0x24000200, 0xfc001f80, "cxfT,x(s,b)", pa10, 0}, -{ "fstdx", 0x2c000200, 0xfc00dfc0, "cxft,x(b)", pa10, FLAG_STRICT}, -{ "fstdx", 0x2c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, FLAG_STRICT}, -{ "fstdx", 0x2c000200, 0xfc00d3c0, "cxcCft,x(b)", pa11, FLAG_STRICT}, -{ "fstdx", 0x2c000200, 0xfc0013c0, "cxcCft,x(s,b)", pa11, FLAG_STRICT}, -{ "fstdx", 0x2c000200, 0xfc00dfc0, "cxft,x(b)", pa10, 0}, -{ "fstdx", 0x2c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, 0}, -{ "fstqx", 0x3c000200, 0xfc00dfc0, "cxft,x(b)", pa10, 0}, -{ "fstqx", 0x3c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, 0}, -{ "fldws", 0x24001000, 0xfc00df80, "cm5(b),fT", pa10, FLAG_STRICT}, -{ "fldws", 0x24001000, 0xfc001f80, "cm5(s,b),fT", pa10, FLAG_STRICT}, -{ "fldws", 0x24001000, 0xfc00d380, "cmcc5(b),fT", pa11, FLAG_STRICT}, -{ "fldws", 0x24001000, 0xfc001380, "cmcc5(s,b),fT", pa11, FLAG_STRICT}, -{ "fldws", 0x24001000, 0xfc00df80, "cm5(b),fT", pa10, 0}, -{ "fldws", 0x24001000, 0xfc001f80, "cm5(s,b),fT", pa10, 0}, -{ "fldds", 0x2c001000, 0xfc00dfc0, "cm5(b),ft", pa10, FLAG_STRICT}, -{ "fldds", 0x2c001000, 0xfc001fc0, "cm5(s,b),ft", pa10, FLAG_STRICT}, -{ "fldds", 0x2c001000, 0xfc00d3c0, "cmcc5(b),ft", pa11, FLAG_STRICT}, -{ "fldds", 0x2c001000, 0xfc0013c0, "cmcc5(s,b),ft", pa11, FLAG_STRICT}, -{ "fldds", 0x2c001000, 0xfc00dfc0, "cm5(b),ft", pa10, 0}, -{ "fldds", 0x2c001000, 0xfc001fc0, "cm5(s,b),ft", pa10, 0}, -{ "fstws", 0x24001200, 0xfc00df80, "cmfT,5(b)", pa10, FLAG_STRICT}, -{ "fstws", 0x24001200, 0xfc001f80, "cmfT,5(s,b)", pa10, FLAG_STRICT}, -{ "fstws", 0x24001200, 0xfc00d380, "cmcCfT,5(b)", pa11, FLAG_STRICT}, -{ "fstws", 0x24001200, 0xfc001380, "cmcCfT,5(s,b)", pa11, FLAG_STRICT}, -{ "fstws", 0x24001200, 0xfc00df80, "cmfT,5(b)", pa10, 0}, -{ "fstws", 0x24001200, 0xfc001f80, "cmfT,5(s,b)", pa10, 0}, -{ "fstds", 0x2c001200, 0xfc00dfc0, "cmft,5(b)", pa10, FLAG_STRICT}, -{ "fstds", 0x2c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, FLAG_STRICT}, -{ "fstds", 0x2c001200, 0xfc00d3c0, "cmcCft,5(b)", pa11, FLAG_STRICT}, -{ "fstds", 0x2c001200, 0xfc0013c0, "cmcCft,5(s,b)", pa11, FLAG_STRICT}, -{ "fstds", 0x2c001200, 0xfc00dfc0, "cmft,5(b)", pa10, 0}, -{ "fstds", 0x2c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, 0}, -{ "fstqs", 0x3c001200, 0xfc00dfc0, "cmft,5(b)", pa10, 0}, -{ "fstqs", 0x3c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, 0}, -{ "fadd", 0x30000600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0}, -{ "fadd", 0x38000600, 0xfc00e720, "IfA,fB,fT", pa10, 0}, -{ "fsub", 0x30002600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0}, -{ "fsub", 0x38002600, 0xfc00e720, "IfA,fB,fT", pa10, 0}, -{ "fmpy", 0x30004600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0}, -{ "fmpy", 0x38004600, 0xfc00e720, "IfA,fB,fT", pa10, 0}, -{ "fdiv", 0x30006600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0}, -{ "fdiv", 0x38006600, 0xfc00e720, "IfA,fB,fT", pa10, 0}, -{ "fsqrt", 0x30008000, 0xfc1fe7e0, "Ffa,fT", pa10, 0}, -{ "fsqrt", 0x38008000, 0xfc1fe720, "FfA,fT", pa10, 0}, -{ "fabs", 0x30006000, 0xfc1fe7e0, "Ffa,fT", pa10, 0}, -{ "fabs", 0x38006000, 0xfc1fe720, "FfA,fT", pa10, 0}, -{ "frem", 0x30008600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0}, -{ "frem", 0x38008600, 0xfc00e720, "FfA,fB,fT", pa10, 0}, -{ "frnd", 0x3000a000, 0xfc1fe7e0, "Ffa,fT", pa10, 0}, -{ "frnd", 0x3800a000, 0xfc1fe720, "FfA,fT", pa10, 0}, -{ "fcpy", 0x30004000, 0xfc1fe7e0, "Ffa,fT", pa10, 0}, -{ "fcpy", 0x38004000, 0xfc1fe720, "FfA,fT", pa10, 0}, -{ "fcnvff", 0x30000200, 0xfc1f87e0, "FGfa,fT", pa10, 0}, -{ "fcnvff", 0x38000200, 0xfc1f8720, "FGfA,fT", pa10, 0}, -{ "fcnvxf", 0x30008200, 0xfc1f87e0, "FGfa,fT", pa10, 0}, -{ "fcnvxf", 0x38008200, 0xfc1f8720, "FGfA,fT", pa10, 0}, -{ "fcnvfx", 0x30010200, 0xfc1f87e0, "FGfa,fT", pa10, 0}, -{ "fcnvfx", 0x38010200, 0xfc1f8720, "FGfA,fT", pa10, 0}, -{ "fcnvfxt", 0x30018200, 0xfc1f87e0, "FGfa,fT", pa10, 0}, -{ "fcnvfxt", 0x38018200, 0xfc1f8720, "FGfA,fT", pa10, 0}, -{ "fmpyfadd", 0xb8000000, 0xfc000020, "IfA,fB,fC,fT", pa20, FLAG_STRICT}, -{ "fmpynfadd", 0xb8000020, 0xfc000020, "IfA,fB,fC,fT", pa20, FLAG_STRICT}, -{ "fneg", 0x3000c000, 0xfc1fe7e0, "Ffa,fT", pa20, FLAG_STRICT}, -{ "fneg", 0x3800c000, 0xfc1fe720, "IfA,fT", pa20, FLAG_STRICT}, -{ "fnegabs", 0x3000e000, 0xfc1fe7e0, "Ffa,fT", pa20, FLAG_STRICT}, -{ "fnegabs", 0x3800e000, 0xfc1fe720, "IfA,fT", pa20, FLAG_STRICT}, -{ "fcnv", 0x30000200, 0xfc1c0720, "{_fa,fT", pa20, FLAG_STRICT}, -{ "fcnv", 0x38000200, 0xfc1c0720, "FGfA,fT", pa20, FLAG_STRICT}, -{ "fcmp", 0x30000400, 0xfc00e7e0, "F?ffa,fb", pa10, FLAG_STRICT}, -{ "fcmp", 0x38000400, 0xfc00e720, "I?ffA,fB", pa10, FLAG_STRICT}, -{ "fcmp", 0x30000400, 0xfc0007e0, "F?ffa,fb,h", pa20, FLAG_STRICT}, -{ "fcmp", 0x38000400, 0xfc000720, "I?ffA,fB,h", pa20, FLAG_STRICT}, -{ "fcmp", 0x30000400, 0xfc00e7e0, "F?ffa,fb", pa10, 0}, -{ "fcmp", 0x38000400, 0xfc00e720, "I?ffA,fB", pa10, 0}, -{ "xmpyu", 0x38004700, 0xfc00e720, "fX,fB,fT", pa11, 0}, -{ "fmpyadd", 0x18000000, 0xfc000000, "Hfi,fj,fk,fl,fm", pa11, 0}, -{ "fmpysub", 0x98000000, 0xfc000000, "Hfi,fj,fk,fl,fm", pa11, 0}, -{ "ftest", 0x30002420, 0xffffffff, "", pa10, FLAG_STRICT}, -{ "ftest", 0x30002420, 0xffffffe0, ",=", pa20, FLAG_STRICT}, -{ "ftest", 0x30000420, 0xffff1fff, "m", pa20, FLAG_STRICT}, -{ "fid", 0x30000000, 0xffffffff, "", pa11, 0}, - -/* Performance Monitor Instructions. */ - -{ "pmdis", 0x30000280, 0xffffffdf, "N", pa20, FLAG_STRICT}, -{ "pmenb", 0x30000680, 0xffffffff, "", pa20, FLAG_STRICT}, - -/* Assist Instructions. */ - -{ "spop0", 0x10000000, 0xfc000600, "v,ON", pa10, 0}, -{ "spop1", 0x10000200, 0xfc000600, "v,oNt", pa10, 0}, -{ "spop2", 0x10000400, 0xfc000600, "v,1Nb", pa10, 0}, -{ "spop3", 0x10000600, 0xfc000600, "v,0Nx,b", pa10, 0}, -{ "copr", 0x30000000, 0xfc000000, "u,2N", pa10, 0}, -{ "cldw", 0x24000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT}, -{ "cldw", 0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT}, -{ "cldw", 0x24000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT}, -{ "cldw", 0x24000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT}, -{ "cldw", 0x24001000, 0xfc00d200, "ucocc@(b),t", pa20, FLAG_STRICT}, -{ "cldw", 0x24001000, 0xfc001200, "ucocc@(s,b),t", pa20, FLAG_STRICT}, -{ "cldw", 0x24001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT}, -{ "cldw", 0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT}, -{ "cldw", 0x24001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT}, -{ "cldw", 0x24001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT}, -{ "cldd", 0x2c000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT}, -{ "cldd", 0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT}, -{ "cldd", 0x2c000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT}, -{ "cldd", 0x2c000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT}, -{ "cldd", 0x2c001000, 0xfc00d200, "ucocc@(b),t", pa20, FLAG_STRICT}, -{ "cldd", 0x2c001000, 0xfc001200, "ucocc@(s,b),t", pa20, FLAG_STRICT}, -{ "cldd", 0x2c001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT}, -{ "cldd", 0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT}, -{ "cldd", 0x2c001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT}, -{ "cldd", 0x2c001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT}, -{ "cstw", 0x24000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT}, -{ "cstw", 0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT}, -{ "cstw", 0x24000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT}, -{ "cstw", 0x24000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT}, -{ "cstw", 0x24001200, 0xfc00d200, "ucocCt,@(b)", pa20, FLAG_STRICT}, -{ "cstw", 0x24001200, 0xfc001200, "ucocCt,@(s,b)", pa20, FLAG_STRICT}, -{ "cstw", 0x24001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT}, -{ "cstw", 0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT}, -{ "cstw", 0x24001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT}, -{ "cstw", 0x24001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT}, -{ "cstd", 0x2c000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT}, -{ "cstd", 0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT}, -{ "cstd", 0x2c000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT}, -{ "cstd", 0x2c000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT}, -{ "cstd", 0x2c001200, 0xfc00d200, "ucocCt,@(b)", pa20, FLAG_STRICT}, -{ "cstd", 0x2c001200, 0xfc001200, "ucocCt,@(s,b)", pa20, FLAG_STRICT}, -{ "cstd", 0x2c001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT}, -{ "cstd", 0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT}, -{ "cstd", 0x2c001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT}, -{ "cstd", 0x2c001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT}, -{ "cldwx", 0x24000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT}, -{ "cldwx", 0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT}, -{ "cldwx", 0x24000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT}, -{ "cldwx", 0x24000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT}, -{ "cldwx", 0x24000000, 0xfc00de00, "ucXx(b),t", pa10, 0}, -{ "cldwx", 0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, 0}, -{ "clddx", 0x2c000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT}, -{ "clddx", 0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT}, -{ "clddx", 0x2c000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT}, -{ "clddx", 0x2c000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT}, -{ "clddx", 0x2c000000, 0xfc00de00, "ucXx(b),t", pa10, 0}, -{ "clddx", 0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, 0}, -{ "cstwx", 0x24000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT}, -{ "cstwx", 0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT}, -{ "cstwx", 0x24000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT}, -{ "cstwx", 0x24000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT}, -{ "cstwx", 0x24000200, 0xfc00de00, "ucXt,x(b)", pa10, 0}, -{ "cstwx", 0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, 0}, -{ "cstdx", 0x2c000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT}, -{ "cstdx", 0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT}, -{ "cstdx", 0x2c000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT}, -{ "cstdx", 0x2c000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT}, -{ "cstdx", 0x2c000200, 0xfc00de00, "ucXt,x(b)", pa10, 0}, -{ "cstdx", 0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, 0}, -{ "cldws", 0x24001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT}, -{ "cldws", 0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT}, -{ "cldws", 0x24001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT}, -{ "cldws", 0x24001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT}, -{ "cldws", 0x24001000, 0xfc00de00, "ucM5(b),t", pa10, 0}, -{ "cldws", 0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, 0}, -{ "cldds", 0x2c001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT}, -{ "cldds", 0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT}, -{ "cldds", 0x2c001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT}, -{ "cldds", 0x2c001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT}, -{ "cldds", 0x2c001000, 0xfc00de00, "ucM5(b),t", pa10, 0}, -{ "cldds", 0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, 0}, -{ "cstws", 0x24001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT}, -{ "cstws", 0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT}, -{ "cstws", 0x24001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT}, -{ "cstws", 0x24001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT}, -{ "cstws", 0x24001200, 0xfc00de00, "ucMt,5(b)", pa10, 0}, -{ "cstws", 0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, 0}, -{ "cstds", 0x2c001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT}, -{ "cstds", 0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT}, -{ "cstds", 0x2c001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT}, -{ "cstds", 0x2c001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT}, -{ "cstds", 0x2c001200, 0xfc00de00, "ucMt,5(b)", pa10, 0}, -{ "cstds", 0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, 0}, - -/* More pseudo instructions which must follow the main table. */ -{ "call", 0xe800f000, 0xfc1ffffd, "n(b)", pa20, FLAG_STRICT}, -{ "call", 0xe800a000, 0xffe0e000, "nW", pa10, FLAG_STRICT}, -{ "ret", 0xe840d000, 0xfffffffd, "n", pa20, FLAG_STRICT}, - -}; - -#define NUMOPCODES ((sizeof pa_opcodes)/(sizeof pa_opcodes[0])) - -/* SKV 12/18/92. Added some denotations for various operands. */ - -#define PA_IMM11_AT_31 'i' -#define PA_IMM14_AT_31 'j' -#define PA_IMM21_AT_31 'k' -#define PA_DISP12 'w' -#define PA_DISP17 'W' - -#define N_HPPA_OPERAND_FORMATS 5 diff --git a/include/opcode/i370.h b/include/opcode/i370.h deleted file mode 100644 index bdbb2f42160..00000000000 --- a/include/opcode/i370.h +++ /dev/null @@ -1,265 +0,0 @@ -/* i370.h -- Header file for S/390 opcode table - Copyright 1994, 1995, 1998, 1999, 2000, 2003 Free Software Foundation, Inc. - PowerPC version written by Ian Lance Taylor, Cygnus Support - Rewritten for i370 ESA/390 support, Linas Vepstas - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef I370_H -#define I370_H - -/* The opcode table is an array of struct i370_opcode. */ -typedef union -{ - unsigned int i[2]; - unsigned short s[4]; - unsigned char b[8]; -} i370_insn_t; - -struct i370_opcode -{ - /* The opcode name. */ - const char *name; - - /* the length of the instruction */ - char len; - - /* The opcode itself. Those bits which will be filled in with - operands are zeroes. */ - i370_insn_t opcode; - - /* The opcode mask. This is used by the disassembler. This is a - mask containing ones indicating those bits which must match the - opcode field, and zeroes indicating those bits which need not - match (and are presumably filled in by operands). */ - i370_insn_t mask; - - /* One bit flags for the opcode. These are used to indicate which - specific processors support the instructions. The defined values - are listed below. */ - unsigned long flags; - - /* An array of operand codes. Each code is an index into the - operand table. They appear in the order which the operands must - appear in assembly code, and are terminated by a zero. */ - unsigned char operands[8]; -}; - -/* The table itself is sorted by major opcode number, and is otherwise - in the order in which the disassembler should consider - instructions. */ -extern const struct i370_opcode i370_opcodes[]; -extern const int i370_num_opcodes; - -/* Values defined for the flags field of a struct i370_opcode. */ - -/* Opcode is defined for the original 360 architecture. */ -#define I370_OPCODE_360 (0x01) - -/* Opcode is defined for the 370 architecture. */ -#define I370_OPCODE_370 (0x02) - -/* Opcode is defined for the 370-XA architecture. */ -#define I370_OPCODE_370_XA (0x04) - -/* Opcode is defined for the ESA/370 architecture. */ -#define I370_OPCODE_ESA370 (0x08) - -/* Opcode is defined for the ESA/390 architecture. */ -#define I370_OPCODE_ESA390 (0x10) - -/* Opcode is defined for the ESA/390 w/ BFP facility. */ -#define I370_OPCODE_ESA390_BF (0x20) - -/* Opcode is defined for the ESA/390 w/ branch & set authority facility. */ -#define I370_OPCODE_ESA390_BS (0x40) - -/* Opcode is defined for the ESA/390 w/ checksum facility. */ -#define I370_OPCODE_ESA390_CK (0x80) - -/* Opcode is defined for the ESA/390 w/ compare & move extended facility. */ -#define I370_OPCODE_ESA390_CM (0x100) - -/* Opcode is defined for the ESA/390 w/ flt.pt. support extensions facility. */ -#define I370_OPCODE_ESA390_FX (0x200) - -/* Opcode is defined for the ESA/390 w/ HFP facility. */ -#define I370_OPCODE_ESA390_HX (0x400) - -/* Opcode is defined for the ESA/390 w/ immediate & relative facility. */ -#define I370_OPCODE_ESA390_IR (0x800) - -/* Opcode is defined for the ESA/390 w/ move-inverse facility. */ -#define I370_OPCODE_ESA390_MI (0x1000) - -/* Opcode is defined for the ESA/390 w/ program-call-fast facility. */ -#define I370_OPCODE_ESA390_PC (0x2000) - -/* Opcode is defined for the ESA/390 w/ perform-locked-op facility. */ -#define I370_OPCODE_ESA390_PL (0x4000) - -/* Opcode is defined for the ESA/390 w/ square-root facility. */ -#define I370_OPCODE_ESA390_QR (0x8000) - -/* Opcode is defined for the ESA/390 w/ resume-program facility. */ -#define I370_OPCODE_ESA390_RP (0x10000) - -/* Opcode is defined for the ESA/390 w/ set-address-space-fast facility. */ -#define I370_OPCODE_ESA390_SA (0x20000) - -/* Opcode is defined for the ESA/390 w/ subspace group facility. */ -#define I370_OPCODE_ESA390_SG (0x40000) - -/* Opcode is defined for the ESA/390 w/ string facility. */ -#define I370_OPCODE_ESA390_SR (0x80000) - -/* Opcode is defined for the ESA/390 w/ trap facility. */ -#define I370_OPCODE_ESA390_TR (0x100000) - -#define I370_OPCODE_ESA390_SUPERSET (0x1fffff) - - -/* The operands table is an array of struct i370_operand. */ - -struct i370_operand -{ - /* The number of bits in the operand. */ - int bits; - - /* How far the operand is left shifted in the instruction. */ - int shift; - - /* Insertion function. This is used by the assembler. To insert an - operand value into an instruction, check this field. - - If it is NULL, execute - i |= (op & ((1 << o->bits) - 1)) << o->shift; - (i is the instruction which we are filling in, o is a pointer to - this structure, and op is the opcode value; this assumes twos - complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction and the operand value. It will return the new value - of the instruction. If the ERRMSG argument is not NULL, then if - the operand value is illegal, *ERRMSG will be set to a warning - string (the operand will be inserted in any case). If the - operand value is legal, *ERRMSG will be unchanged (most operands - can accept any value). */ - i370_insn_t (*insert) - (i370_insn_t instruction, long op, const char **errmsg); - - /* Extraction function. This is used by the disassembler. To - extract this operand type from an instruction, check this field. - - If it is NULL, compute - op = ((i) >> o->shift) & ((1 << o->bits) - 1); - if ((o->flags & I370_OPERAND_SIGNED) != 0 - && (op & (1 << (o->bits - 1))) != 0) - op -= 1 << o->bits; - (i is the instruction, o is a pointer to this structure, and op - is the result; this assumes twos complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction value. It will return the value of the operand. If - the INVALID argument is not NULL, *INVALID will be set to - non-zero if this operand type can not actually be extracted from - this operand (i.e., the instruction does not match). If the - operand is valid, *INVALID will not be changed. */ - long (*extract) (i370_insn_t instruction, int *invalid); - - /* One bit syntax flags. */ - unsigned long flags; - - /* name -- handy for debugging, otherwise pointless */ - char * name; -}; - -/* Elements in the table are retrieved by indexing with values from - the operands field of the i370_opcodes table. */ - -extern const struct i370_operand i370_operands[]; - -/* Values defined for the flags field of a struct i370_operand. */ - -/* This operand should be wrapped in parentheses rather than - separated from the previous by a comma. This is used for S, RS and - SS form instructions which want their operands to look like - reg,displacement(basereg) */ -#define I370_OPERAND_SBASE (0x01) - -/* This operand is a base register. It may or may not appear next - to an index register, i.e. either of the two forms - reg,displacement(basereg) - reg,displacement(index,basereg) */ -#define I370_OPERAND_BASE (0x02) - -/* This pair of operands should be wrapped in parentheses rather than - separated from the last by a comma. This is used for the RX form - instructions which want their operands to look like - reg,displacement(index,basereg) */ -#define I370_OPERAND_INDEX (0x04) - -/* This operand names a register. The disassembler uses this to print - register names with a leading 'r'. */ -#define I370_OPERAND_GPR (0x08) - -/* This operand names a floating point register. The disassembler - prints these with a leading 'f'. */ -#define I370_OPERAND_FPR (0x10) - -/* This operand is a displacement. */ -#define I370_OPERAND_RELATIVE (0x20) - -/* This operand is a length, such as that in SS form instructions. */ -#define I370_OPERAND_LENGTH (0x40) - -/* This operand is optional, and is zero if omitted. This is used for - the optional B2 field in the shift-left, shift-right instructions. The - assembler must count the number of operands remaining on the line, - and the number of operands remaining for the opcode, and decide - whether this operand is present or not. The disassembler should - print this operand out only if it is not zero. */ -#define I370_OPERAND_OPTIONAL (0x80) - - -/* Define some misc macros. We keep them with the operands table - for simplicity. The macro table is an array of struct i370_macro. */ - -struct i370_macro -{ - /* The macro name. */ - const char *name; - - /* The number of operands the macro takes. */ - unsigned int operands; - - /* One bit flags for the opcode. These are used to indicate which - specific processors support the instructions. The values are the - same as those for the struct i370_opcode flags field. */ - unsigned long flags; - - /* A format string to turn the macro into a normal instruction. - Each %N in the string is replaced with operand number N (zero - based). */ - const char *format; -}; - -extern const struct i370_macro i370_macros[]; -extern const int i370_num_macros; - - -#endif /* I370_H */ diff --git a/include/opcode/i386.h b/include/opcode/i386.h deleted file mode 100644 index c66ca3200d7..00000000000 --- a/include/opcode/i386.h +++ /dev/null @@ -1,1725 +0,0 @@ -/* opcode/i386.h -- Intel 80386 opcode table - Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005 - Free Software Foundation, Inc. - - This file is part of GAS, the GNU Assembler, and GDB, the GNU Debugger. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* The SystemV/386 SVR3.2 assembler, and probably all AT&T derived - ix86 Unix assemblers, generate floating point instructions with - reversed source and destination registers in certain cases. - Unfortunately, gcc and possibly many other programs use this - reversed syntax, so we're stuck with it. - - eg. `fsub %st(3),%st' results in st = st - st(3) as expected, but - `fsub %st,%st(3)' results in st(3) = st - st(3), rather than - the expected st(3) = st(3) - st - - This happens with all the non-commutative arithmetic floating point - operations with two register operands, where the source register is - %st, and destination register is %st(i). See FloatDR below. - - The affected opcode map is dceX, dcfX, deeX, defX. */ - -#ifndef SYSV386_COMPAT -/* Set non-zero for broken, compatible instructions. Set to zero for - non-broken opcodes at your peril. gcc generates SystemV/386 - compatible instructions. */ -#define SYSV386_COMPAT 1 -#endif -#ifndef OLDGCC_COMPAT -/* Set non-zero to cater for old (<= 2.8.1) versions of gcc that could - generate nonsense fsubp, fsubrp, fdivp and fdivrp with operands - reversed. */ -#define OLDGCC_COMPAT SYSV386_COMPAT -#endif - -static const template i386_optab[] = -{ - -#define X None -#define NoSuf (No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf) -#define b_Suf (No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf) -#define w_Suf (No_bSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf) -#define l_Suf (No_bSuf|No_wSuf|No_sSuf|No_xSuf|No_qSuf) -#define q_Suf (No_bSuf|No_wSuf|No_sSuf|No_lSuf|No_xSuf) -#define x_Suf (No_bSuf|No_wSuf|No_sSuf|No_lSuf|No_qSuf) -#define bw_Suf (No_lSuf|No_sSuf|No_xSuf|No_qSuf) -#define bl_Suf (No_wSuf|No_sSuf|No_xSuf|No_qSuf) -#define wl_Suf (No_bSuf|No_sSuf|No_xSuf|No_qSuf) -#define wlq_Suf (No_bSuf|No_sSuf|No_xSuf) -#define lq_Suf (No_bSuf|No_wSuf|No_sSuf|No_xSuf) -#define wq_Suf (No_bSuf|No_lSuf|No_sSuf|No_xSuf) -#define sl_Suf (No_bSuf|No_wSuf|No_xSuf|No_qSuf) -#define bwl_Suf (No_sSuf|No_xSuf|No_qSuf) -#define bwlq_Suf (No_sSuf|No_xSuf) -#define FP (NoSuf) -#define l_FP (l_Suf) -#define q_FP (q_Suf|NoRex64) -#define x_FP (x_Suf|FloatMF) -#define sl_FP (sl_Suf|FloatMF) -#if SYSV386_COMPAT -/* Someone forgot that the FloatR bit reverses the operation when not - equal to the FloatD bit. ie. Changing only FloatD results in the - destination being swapped *and* the direction being reversed. */ -#define FloatDR FloatD -#else -#define FloatDR (FloatD|FloatR) -#endif - -/* Move instructions. */ -#define MOV_AX_DISP32 0xa0 -/* We put the 64bit displacement first and we only mark constants - larger than 32bit as Disp64. */ -{ "mov", 2, 0xa0, X, Cpu64, bwlq_Suf|D|W, { Disp64, Acc, 0 } }, -{ "mov", 2, 0xa0, X, CpuNo64,bwl_Suf|D|W, { Disp16|Disp32, Acc, 0 } }, -{ "mov", 2, 0x88, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} }, -/* In the 64bit mode the short form mov immediate is redefined to have - 64bit value. */ -{ "mov", 2, 0xb0, X, 0, bwl_Suf|W|ShortForm, { EncImm, Reg8|Reg16|Reg32, 0 } }, -{ "mov", 2, 0xc6, 0, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0 } }, -{ "mov", 2, 0xb0, X, Cpu64, q_Suf|W|ShortForm, { Imm64, Reg64, 0 } }, -/* The segment register moves accept WordReg so that a segment register - can be copied to a 32 bit register, and vice versa, without using a - size prefix. When moving to a 32 bit register, the upper 16 bits - are set to an implementation defined value (on the Pentium Pro, - the implementation defined value is zero). */ -{ "mov", 2, 0x8c, X, 0, wl_Suf|Modrm, { SReg2, WordReg|InvMem, 0 } }, -{ "mov", 2, 0x8c, X, 0, w_Suf|Modrm|IgnoreSize, { SReg2, WordMem, 0 } }, -{ "mov", 2, 0x8c, X, Cpu386, wl_Suf|Modrm, { SReg3, WordReg|InvMem, 0 } }, -{ "mov", 2, 0x8c, X, Cpu386, w_Suf|Modrm|IgnoreSize, { SReg3, WordMem, 0 } }, -{ "mov", 2, 0x8e, X, 0, wl_Suf|Modrm|IgnoreSize, { WordReg, SReg2, 0 } }, -{ "mov", 2, 0x8e, X, 0, w_Suf|Modrm|IgnoreSize, { WordMem, SReg2, 0 } }, -{ "mov", 2, 0x8e, X, Cpu386, wl_Suf|Modrm|IgnoreSize, { WordReg, SReg3, 0 } }, -{ "mov", 2, 0x8e, X, Cpu386, w_Suf|Modrm|IgnoreSize, { WordMem, SReg3, 0 } }, -/* Move to/from control debug registers. In the 16 or 32bit modes they are 32bit. In the 64bit - mode they are 64bit.*/ -{ "mov", 2, 0x0f20, X, Cpu386|CpuNo64, l_Suf|D|Modrm|IgnoreSize,{ Control, Reg32|InvMem, 0} }, -{ "mov", 2, 0x0f20, X, Cpu64, q_Suf|D|Modrm|IgnoreSize|NoRex64,{ Control, Reg64|InvMem, 0} }, -{ "mov", 2, 0x0f21, X, Cpu386|CpuNo64, l_Suf|D|Modrm|IgnoreSize,{ Debug, Reg32|InvMem, 0} }, -{ "mov", 2, 0x0f21, X, Cpu64, q_Suf|D|Modrm|IgnoreSize|NoRex64,{ Debug, Reg64|InvMem, 0} }, -{ "mov", 2, 0x0f24, X, Cpu386|CpuNo64, l_Suf|D|Modrm|IgnoreSize, { Test, Reg32|InvMem, 0} }, -{ "movabs",2, 0xa0, X, Cpu64, bwlq_Suf|D|W, { Disp64, Acc, 0 } }, -{ "movabs",2, 0xb0, X, Cpu64, q_Suf|W|ShortForm, { Imm64, Reg64, 0 } }, - -/* Move with sign extend. */ -/* "movsbl" & "movsbw" must not be unified into "movsb" to avoid - conflict with the "movs" string move instruction. */ -{"movsbl", 2, 0x0fbe, X, Cpu386, NoSuf|Modrm, { Reg8|ByteMem, Reg32, 0} }, -{"movsbw", 2, 0x0fbe, X, Cpu386, NoSuf|Modrm, { Reg8|ByteMem, Reg16, 0} }, -{"movswl", 2, 0x0fbf, X, Cpu386, NoSuf|Modrm, { Reg16|ShortMem,Reg32, 0} }, -{"movsbq", 2, 0x0fbe, X, Cpu64, NoSuf|Modrm|Rex64, { Reg8|ByteMem, Reg64, 0} }, -{"movswq", 2, 0x0fbf, X, Cpu64, NoSuf|Modrm|Rex64, { Reg16|ShortMem,Reg64, 0} }, -{"movslq", 2, 0x63, X, Cpu64, NoSuf|Modrm|Rex64, { Reg32|WordMem, Reg64, 0} }, -/* Intel Syntax next 3 insns */ -{"movsx", 2, 0x0fbe, X, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, WordReg, 0} }, -{"movsx", 2, 0x0fbf, X, Cpu386, w_Suf|Modrm, { Reg16|ShortMem, Reg32|Reg64, 0} }, -{"movsx", 2, 0x63, X, Cpu64, l_Suf|Modrm|Rex64, { Reg32|WordMem, Reg64, 0} }, - -/* Move with zero extend. We can't remove "movzb" since existing - assembly codes may use it. */ -{"movzb", 2, 0x0fb6, X, Cpu386, wl_Suf|Modrm, { Reg8|ByteMem, WordReg, 0} }, -/* "movzbl" & "movzbw" should not be unified into "movzb" for - consistency with the sign extending moves above. */ -{"movzbl", 2, 0x0fb6, X, Cpu386, NoSuf|Modrm, { Reg8|ByteMem, Reg32, 0} }, -{"movzbw", 2, 0x0fb6, X, Cpu386, NoSuf|Modrm, { Reg8|ByteMem, Reg16, 0} }, -{"movzwl", 2, 0x0fb7, X, Cpu386, NoSuf|Modrm, { Reg16|ShortMem, Reg32, 0} }, -/* These instructions are not particulary useful, since the zero extend - 32->64 is implicit, but we can encode them. */ -{"movzbq", 2, 0x0fb6, X, Cpu64, NoSuf|Modrm|Rex64, { Reg8|ByteMem, Reg64, 0} }, -{"movzwq", 2, 0x0fb7, X, Cpu64, NoSuf|Modrm|Rex64, { Reg16|ShortMem, Reg64, 0} }, -/* Intel Syntax next 2 insns (the 64-bit variants are not particulary useful, - since the zero extend 32->64 is implicit, but we can encode them). */ -{"movzx", 2, 0x0fb6, X, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, WordReg, 0} }, -{"movzx", 2, 0x0fb7, X, Cpu386, w_Suf|Modrm, { Reg16|ShortMem, Reg32|Reg64, 0} }, - -/* Push instructions. */ -{"push", 1, 0x50, X, CpuNo64, wl_Suf|ShortForm|DefaultSize, { WordReg, 0, 0 } }, -{"push", 1, 0xff, 6, CpuNo64, wl_Suf|Modrm|DefaultSize, { WordReg|WordMem, 0, 0 } }, -{"push", 1, 0x6a, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { Imm8S, 0, 0} }, -{"push", 1, 0x68, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { Imm16|Imm32, 0, 0} }, -{"push", 1, 0x06, X, CpuNo64, wl_Suf|Seg2ShortForm|DefaultSize, { SReg2, 0, 0 } }, -{"push", 1, 0x0fa0, X, Cpu386|CpuNo64, wl_Suf|Seg3ShortForm|DefaultSize, { SReg3, 0, 0 } }, -/* In 64bit mode, the operand size is implicitly 64bit. */ -{"push", 1, 0x50, X, Cpu64, wq_Suf|ShortForm|DefaultSize|NoRex64, { Reg16|Reg64, 0, 0 } }, -{"push", 1, 0xff, 6, Cpu64, wq_Suf|Modrm|DefaultSize|NoRex64, { Reg16|Reg64|WordMem, 0, 0 } }, -{"push", 1, 0x6a, X, Cpu64, wq_Suf|DefaultSize|NoRex64, { Imm8S, 0, 0} }, -{"push", 1, 0x68, X, Cpu64, wq_Suf|DefaultSize|NoRex64, { Imm32S|Imm16, 0, 0} }, -{"push", 1, 0x0fa0, X, Cpu64, wq_Suf|Seg3ShortForm|DefaultSize|NoRex64, { SReg3, 0, 0 } }, - -{"pusha", 0, 0x60, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { 0, 0, 0 } }, - -/* Pop instructions. */ -{"pop", 1, 0x58, X, CpuNo64, wl_Suf|ShortForm|DefaultSize, { WordReg, 0, 0 } }, -{"pop", 1, 0x8f, 0, CpuNo64, wl_Suf|Modrm|DefaultSize, { WordReg|WordMem, 0, 0 } }, -#define POP_SEG_SHORT 0x07 -{"pop", 1, 0x07, X, CpuNo64, wl_Suf|Seg2ShortForm|DefaultSize, { SReg2, 0, 0 } }, -{"pop", 1, 0x0fa1, X, Cpu386|CpuNo64, wl_Suf|Seg3ShortForm|DefaultSize, { SReg3, 0, 0 } }, -/* In 64bit mode, the operand size is implicitly 64bit. */ -{"pop", 1, 0x58, X, Cpu64, wq_Suf|ShortForm|DefaultSize|NoRex64, { Reg16|Reg64, 0, 0 } }, -{"pop", 1, 0x8f, 0, Cpu64, wq_Suf|Modrm|DefaultSize|NoRex64, { Reg16|Reg64|WordMem, 0, 0 } }, -{"pop", 1, 0x0fa1, X, Cpu64, wq_Suf|Seg3ShortForm|DefaultSize|NoRex64, { SReg3, 0, 0 } }, - -{"popa", 0, 0x61, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { 0, 0, 0 } }, - -/* Exchange instructions. - xchg commutes: we allow both operand orders. - - In the 64bit code, xchg rax, rax is reused for new nop instruction. */ -{"xchg", 2, 0x90, X, CpuNo64, wl_Suf|ShortForm, { WordReg, Acc, 0 } }, -{"xchg", 2, 0x90, X, CpuNo64, wl_Suf|ShortForm, { Acc, WordReg, 0 } }, -{"xchg", 2, 0x90, X, Cpu64, wq_Suf|ShortForm, { Reg16|Reg64, Acc, 0 } }, -{"xchg", 2, 0x90, X, Cpu64, wq_Suf|ShortForm, { Acc, Reg16|Reg64, 0 } }, -{"xchg", 2, 0x86, X, 0, bwlq_Suf|W|Modrm, { Reg, Reg|AnyMem, 0 } }, -{"xchg", 2, 0x86, X, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, Reg, 0 } }, - -/* In/out from ports. */ -/* XXX should reject %rax */ -{"in", 2, 0xe4, X, 0, bwl_Suf|W, { Imm8, Acc, 0 } }, -{"in", 2, 0xec, X, 0, bwl_Suf|W, { InOutPortReg, Acc, 0 } }, -{"in", 1, 0xe4, X, 0, bwl_Suf|W, { Imm8, 0, 0 } }, -{"in", 1, 0xec, X, 0, bwl_Suf|W, { InOutPortReg, 0, 0 } }, -{"out", 2, 0xe6, X, 0, bwl_Suf|W, { Acc, Imm8, 0 } }, -{"out", 2, 0xee, X, 0, bwl_Suf|W, { Acc, InOutPortReg, 0 } }, -{"out", 1, 0xe6, X, 0, bwl_Suf|W, { Imm8, 0, 0 } }, -{"out", 1, 0xee, X, 0, bwl_Suf|W, { InOutPortReg, 0, 0 } }, - -/* Load effective address. */ -{"lea", 2, 0x8d, X, 0, wlq_Suf|Modrm, { WordMem, WordReg, 0 } }, - -/* Load segment registers from memory. */ -{"lds", 2, 0xc5, X, CpuNo64, wl_Suf|Modrm, { WordMem, WordReg, 0} }, -{"les", 2, 0xc4, X, CpuNo64, wl_Suf|Modrm, { WordMem, WordReg, 0} }, -{"lfs", 2, 0x0fb4, X, Cpu386, wl_Suf|Modrm, { WordMem, WordReg, 0} }, -{"lgs", 2, 0x0fb5, X, Cpu386, wl_Suf|Modrm, { WordMem, WordReg, 0} }, -{"lss", 2, 0x0fb2, X, Cpu386, wl_Suf|Modrm, { WordMem, WordReg, 0} }, - -/* Flags register instructions. */ -{"clc", 0, 0xf8, X, 0, NoSuf, { 0, 0, 0} }, -{"cld", 0, 0xfc, X, 0, NoSuf, { 0, 0, 0} }, -{"cli", 0, 0xfa, X, 0, NoSuf, { 0, 0, 0} }, -{"clts", 0, 0x0f06, X, Cpu286, NoSuf, { 0, 0, 0} }, -{"cmc", 0, 0xf5, X, 0, NoSuf, { 0, 0, 0} }, -{"lahf", 0, 0x9f, X, 0, NoSuf, { 0, 0, 0} }, -{"sahf", 0, 0x9e, X, 0, NoSuf, { 0, 0, 0} }, -{"pushf", 0, 0x9c, X, CpuNo64,wl_Suf|DefaultSize, { 0, 0, 0} }, -{"pushf", 0, 0x9c, X, Cpu64, wq_Suf|DefaultSize|NoRex64,{ 0, 0, 0} }, -{"popf", 0, 0x9d, X, CpuNo64,wl_Suf|DefaultSize, { 0, 0, 0} }, -{"popf", 0, 0x9d, X, Cpu64, wq_Suf|DefaultSize|NoRex64,{ 0, 0, 0} }, -{"stc", 0, 0xf9, X, 0, NoSuf, { 0, 0, 0} }, -{"std", 0, 0xfd, X, 0, NoSuf, { 0, 0, 0} }, -{"sti", 0, 0xfb, X, 0, NoSuf, { 0, 0, 0} }, - -/* Arithmetic. */ -{"add", 2, 0x00, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} }, -{"add", 2, 0x83, 0, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} }, -{"add", 2, 0x04, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} }, -{"add", 2, 0x80, 0, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} }, - -{"inc", 1, 0x40, X, CpuNo64,wl_Suf|ShortForm, { WordReg, 0, 0} }, -{"inc", 1, 0xfe, 0, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, - -{"sub", 2, 0x28, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} }, -{"sub", 2, 0x83, 5, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} }, -{"sub", 2, 0x2c, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} }, -{"sub", 2, 0x80, 5, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} }, - -{"dec", 1, 0x48, X, CpuNo64, wl_Suf|ShortForm, { WordReg, 0, 0} }, -{"dec", 1, 0xfe, 1, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, - -{"sbb", 2, 0x18, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} }, -{"sbb", 2, 0x83, 3, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} }, -{"sbb", 2, 0x1c, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} }, -{"sbb", 2, 0x80, 3, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} }, - -{"cmp", 2, 0x38, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} }, -{"cmp", 2, 0x83, 7, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} }, -{"cmp", 2, 0x3c, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} }, -{"cmp", 2, 0x80, 7, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} }, - -{"test", 2, 0x84, X, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, Reg, 0} }, -{"test", 2, 0x84, X, 0, bwlq_Suf|W|Modrm, { Reg, Reg|AnyMem, 0} }, -{"test", 2, 0xa8, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} }, -{"test", 2, 0xf6, 0, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} }, - -{"and", 2, 0x20, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} }, -{"and", 2, 0x83, 4, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} }, -{"and", 2, 0x24, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} }, -{"and", 2, 0x80, 4, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} }, - -{"or", 2, 0x08, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} }, -{"or", 2, 0x83, 1, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} }, -{"or", 2, 0x0c, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} }, -{"or", 2, 0x80, 1, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} }, - -{"xor", 2, 0x30, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} }, -{"xor", 2, 0x83, 6, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} }, -{"xor", 2, 0x34, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} }, -{"xor", 2, 0x80, 6, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} }, - -/* clr with 1 operand is really xor with 2 operands. */ -{"clr", 1, 0x30, X, 0, bwlq_Suf|W|Modrm|regKludge, { Reg, 0, 0 } }, - -{"adc", 2, 0x10, X, 0, bwlq_Suf|D|W|Modrm, { Reg, Reg|AnyMem, 0} }, -{"adc", 2, 0x83, 2, 0, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, 0} }, -{"adc", 2, 0x14, X, 0, bwlq_Suf|W, { EncImm, Acc, 0} }, -{"adc", 2, 0x80, 2, 0, bwlq_Suf|W|Modrm, { EncImm, Reg|AnyMem, 0} }, - -{"neg", 1, 0xf6, 3, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, -{"not", 1, 0xf6, 2, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, - -{"aaa", 0, 0x37, X, CpuNo64, NoSuf, { 0, 0, 0} }, -{"aas", 0, 0x3f, X, CpuNo64, NoSuf, { 0, 0, 0} }, -{"daa", 0, 0x27, X, CpuNo64, NoSuf, { 0, 0, 0} }, -{"das", 0, 0x2f, X, CpuNo64, NoSuf, { 0, 0, 0} }, -{"aad", 0, 0xd50a, X, CpuNo64, NoSuf, { 0, 0, 0} }, -{"aad", 1, 0xd5, X, CpuNo64, NoSuf, { Imm8, 0, 0} }, -{"aam", 0, 0xd40a, X, CpuNo64, NoSuf, { 0, 0, 0} }, -{"aam", 1, 0xd4, X, CpuNo64, NoSuf, { Imm8, 0, 0} }, - -/* Conversion insns. */ -/* Intel naming */ -{"cbw", 0, 0x98, X, 0, NoSuf|Size16, { 0, 0, 0} }, -{"cdqe", 0, 0x98, X, Cpu64, NoSuf|Size64, { 0, 0, 0} }, -{"cwde", 0, 0x98, X, 0, NoSuf|Size32, { 0, 0, 0} }, -{"cwd", 0, 0x99, X, 0, NoSuf|Size16, { 0, 0, 0} }, -{"cdq", 0, 0x99, X, 0, NoSuf|Size32, { 0, 0, 0} }, -{"cqo", 0, 0x99, X, Cpu64, NoSuf|Size64, { 0, 0, 0} }, -/* AT&T naming */ -{"cbtw", 0, 0x98, X, 0, NoSuf|Size16, { 0, 0, 0} }, -{"cltq", 0, 0x98, X, Cpu64, NoSuf|Size64, { 0, 0, 0} }, -{"cwtl", 0, 0x98, X, 0, NoSuf|Size32, { 0, 0, 0} }, -{"cwtd", 0, 0x99, X, 0, NoSuf|Size16, { 0, 0, 0} }, -{"cltd", 0, 0x99, X, 0, NoSuf|Size32, { 0, 0, 0} }, -{"cqto", 0, 0x99, X, Cpu64, NoSuf|Size64, { 0, 0, 0} }, - -/* Warning! the mul/imul (opcode 0xf6) must only have 1 operand! They are - expanding 64-bit multiplies, and *cannot* be selected to accomplish - 'imul %ebx, %eax' (opcode 0x0faf must be used in this case) - These multiplies can only be selected with single operand forms. */ -{"mul", 1, 0xf6, 4, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, -{"imul", 1, 0xf6, 5, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, -{"imul", 2, 0x0faf, X, Cpu386, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"imul", 3, 0x6b, X, Cpu186, wlq_Suf|Modrm, { Imm8S, WordReg|WordMem, WordReg} }, -{"imul", 3, 0x69, X, Cpu186, wlq_Suf|Modrm, { Imm16|Imm32S|Imm32, WordReg|WordMem, WordReg} }, -/* imul with 2 operands mimics imul with 3 by putting the register in - both i.rm.reg & i.rm.regmem fields. regKludge enables this - transformation. */ -{"imul", 2, 0x6b, X, Cpu186, wlq_Suf|Modrm|regKludge,{ Imm8S, WordReg, 0} }, -{"imul", 2, 0x69, X, Cpu186, wlq_Suf|Modrm|regKludge,{ Imm16|Imm32S|Imm32, WordReg, 0} }, - -{"div", 1, 0xf6, 6, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, -{"div", 2, 0xf6, 6, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, Acc, 0} }, -{"idiv", 1, 0xf6, 7, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, -{"idiv", 2, 0xf6, 7, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, Acc, 0} }, - -{"rol", 2, 0xd0, 0, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} }, -{"rol", 2, 0xc0, 0, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} }, -{"rol", 2, 0xd2, 0, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} }, -{"rol", 1, 0xd0, 0, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, - -{"ror", 2, 0xd0, 1, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} }, -{"ror", 2, 0xc0, 1, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} }, -{"ror", 2, 0xd2, 1, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} }, -{"ror", 1, 0xd0, 1, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, - -{"rcl", 2, 0xd0, 2, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} }, -{"rcl", 2, 0xc0, 2, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} }, -{"rcl", 2, 0xd2, 2, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} }, -{"rcl", 1, 0xd0, 2, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, - -{"rcr", 2, 0xd0, 3, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} }, -{"rcr", 2, 0xc0, 3, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} }, -{"rcr", 2, 0xd2, 3, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} }, -{"rcr", 1, 0xd0, 3, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, - -{"sal", 2, 0xd0, 4, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} }, -{"sal", 2, 0xc0, 4, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} }, -{"sal", 2, 0xd2, 4, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} }, -{"sal", 1, 0xd0, 4, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, - -{"shl", 2, 0xd0, 4, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} }, -{"shl", 2, 0xc0, 4, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} }, -{"shl", 2, 0xd2, 4, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} }, -{"shl", 1, 0xd0, 4, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, - -{"shr", 2, 0xd0, 5, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} }, -{"shr", 2, 0xc0, 5, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} }, -{"shr", 2, 0xd2, 5, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} }, -{"shr", 1, 0xd0, 5, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, - -{"sar", 2, 0xd0, 7, 0, bwlq_Suf|W|Modrm, { Imm1, Reg|AnyMem, 0} }, -{"sar", 2, 0xc0, 7, Cpu186, bwlq_Suf|W|Modrm, { Imm8, Reg|AnyMem, 0} }, -{"sar", 2, 0xd2, 7, 0, bwlq_Suf|W|Modrm, { ShiftCount, Reg|AnyMem, 0} }, -{"sar", 1, 0xd0, 7, 0, bwlq_Suf|W|Modrm, { Reg|AnyMem, 0, 0} }, - -{"shld", 3, 0x0fa4, X, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg, WordReg|WordMem} }, -{"shld", 3, 0x0fa5, X, Cpu386, wlq_Suf|Modrm, { ShiftCount, WordReg, WordReg|WordMem} }, -{"shld", 2, 0x0fa5, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} }, - -{"shrd", 3, 0x0fac, X, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg, WordReg|WordMem} }, -{"shrd", 3, 0x0fad, X, Cpu386, wlq_Suf|Modrm, { ShiftCount, WordReg, WordReg|WordMem} }, -{"shrd", 2, 0x0fad, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} }, - -/* Control transfer instructions. */ -{"call", 1, 0xe8, X, CpuNo64, wl_Suf|JumpDword|DefaultSize, { Disp16|Disp32, 0, 0} }, -{"call", 1, 0xe8, X, Cpu64, wq_Suf|JumpDword|DefaultSize|NoRex64, { Disp16|Disp32, 0, 0} }, -{"call", 1, 0xff, 2, CpuNo64, wl_Suf|Modrm|DefaultSize, { WordReg|WordMem|JumpAbsolute, 0, 0} }, -{"call", 1, 0xff, 2, Cpu64, wq_Suf|Modrm|DefaultSize|NoRex64, { Reg16|Reg64|WordMem|LLongMem|JumpAbsolute, 0, 0} }, -/* Intel Syntax */ -{"call", 2, 0x9a, X, CpuNo64, wl_Suf|JumpInterSegment|DefaultSize, { Imm16, Imm16|Imm32, 0} }, -/* Intel Syntax */ -{"call", 1, 0xff, 3, 0, x_Suf|Modrm|DefaultSize, {WordMem|JumpAbsolute, 0, 0} }, -{"lcall", 2, 0x9a, X, CpuNo64, wl_Suf|JumpInterSegment|DefaultSize, {Imm16, Imm16|Imm32, 0} }, -{"lcall", 1, 0xff, 3, 0, wl_Suf|Modrm|DefaultSize, {WordMem|JumpAbsolute, 0, 0} }, - -#define JUMP_PC_RELATIVE 0xeb -{"jmp", 1, 0xeb, X, 0, NoSuf|Jump, { Disp,0, 0} }, -{"jmp", 1, 0xff, 4, CpuNo64, wl_Suf|Modrm, { WordReg|WordMem|JumpAbsolute, 0, 0} }, -{"jmp", 1, 0xff, 4, Cpu64, wq_Suf|Modrm|NoRex64, { Reg16|Reg64|ShortMem|LLongMem|JumpAbsolute, 0, 0} }, -/* Intel Syntax. */ -{"jmp", 2, 0xea, X, CpuNo64,wl_Suf|JumpInterSegment, { Imm16, Imm16|Imm32, 0} }, -/* Intel Syntax. */ -{"jmp", 1, 0xff, 5, 0, x_Suf|Modrm, { WordMem|JumpAbsolute, 0, 0} }, -{"ljmp", 2, 0xea, X, CpuNo64, wl_Suf|JumpInterSegment, { Imm16, Imm16|Imm32, 0} }, -{"ljmp", 1, 0xff, 5, 0, wl_Suf|Modrm, { WordMem|JumpAbsolute, 0, 0} }, - -{"ret", 0, 0xc3, X, CpuNo64,wl_Suf|DefaultSize, { 0, 0, 0} }, -{"ret", 1, 0xc2, X, CpuNo64,wl_Suf|DefaultSize, { Imm16, 0, 0} }, -{"ret", 0, 0xc3, X, Cpu64, wq_Suf|DefaultSize|NoRex64,{ 0, 0, 0} }, -{"ret", 1, 0xc2, X, Cpu64, wq_Suf|DefaultSize|NoRex64,{ Imm16, 0, 0} }, -{"lret", 0, 0xcb, X, 0, wlq_Suf|DefaultSize, { 0, 0, 0} }, -{"lret", 1, 0xca, X, 0, wlq_Suf|DefaultSize, { Imm16, 0, 0} }, -{"enter", 2, 0xc8, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { Imm16, Imm8, 0} }, -{"enter", 2, 0xc8, X, Cpu64, wq_Suf|DefaultSize|NoRex64, { Imm16, Imm8, 0} }, -{"leave", 0, 0xc9, X, Cpu186|CpuNo64, wl_Suf|DefaultSize, { 0, 0, 0} }, -{"leave", 0, 0xc9, X, Cpu64, wq_Suf|DefaultSize|NoRex64, { 0, 0, 0} }, - -/* Conditional jumps. */ -{"jo", 1, 0x70, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jno", 1, 0x71, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jb", 1, 0x72, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jc", 1, 0x72, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jnae", 1, 0x72, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jnb", 1, 0x73, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jnc", 1, 0x73, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jae", 1, 0x73, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"je", 1, 0x74, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jz", 1, 0x74, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jne", 1, 0x75, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jnz", 1, 0x75, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jbe", 1, 0x76, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jna", 1, 0x76, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jnbe", 1, 0x77, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"ja", 1, 0x77, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"js", 1, 0x78, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jns", 1, 0x79, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jp", 1, 0x7a, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jpe", 1, 0x7a, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jnp", 1, 0x7b, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jpo", 1, 0x7b, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jl", 1, 0x7c, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jnge", 1, 0x7c, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jnl", 1, 0x7d, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jge", 1, 0x7d, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jle", 1, 0x7e, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jng", 1, 0x7e, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jnle", 1, 0x7f, X, 0, NoSuf|Jump, { Disp, 0, 0} }, -{"jg", 1, 0x7f, X, 0, NoSuf|Jump, { Disp, 0, 0} }, - -/* jcxz vs. jecxz is chosen on the basis of the address size prefix. */ -{"jcxz", 1, 0xe3, X, CpuNo64,NoSuf|JumpByte|Size16, { Disp, 0, 0} }, -{"jecxz", 1, 0xe3, X, CpuNo64,NoSuf|JumpByte|Size32, { Disp, 0, 0} }, -{"jecxz", 1, 0x67e3, X, Cpu64,NoSuf|JumpByte|Size32, { Disp, 0, 0} }, -{"jrcxz", 1, 0xe3, X, Cpu64, NoSuf|JumpByte|Size64|NoRex64, { Disp, 0, 0} }, - -/* The loop instructions also use the address size prefix to select - %cx rather than %ecx for the loop count, so the `w' form of these - instructions emit an address size prefix rather than a data size - prefix. */ -{"loop", 1, 0xe2, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} }, -{"loop", 1, 0xe2, X, Cpu64, lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} }, -{"loopz", 1, 0xe1, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} }, -{"loopz", 1, 0xe1, X, Cpu64, lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} }, -{"loope", 1, 0xe1, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} }, -{"loope", 1, 0xe1, X, Cpu64, lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} }, -{"loopnz", 1, 0xe0, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} }, -{"loopnz", 1, 0xe0, X, Cpu64, lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} }, -{"loopne", 1, 0xe0, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} }, -{"loopne", 1, 0xe0, X, Cpu64, lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} }, - -/* Set byte on flag instructions. */ -{"seto", 1, 0x0f90, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setno", 1, 0x0f91, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setb", 1, 0x0f92, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setc", 1, 0x0f92, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setnae", 1, 0x0f92, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setnb", 1, 0x0f93, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setnc", 1, 0x0f93, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setae", 1, 0x0f93, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"sete", 1, 0x0f94, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setz", 1, 0x0f94, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setne", 1, 0x0f95, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setnz", 1, 0x0f95, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setbe", 1, 0x0f96, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setna", 1, 0x0f96, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setnbe", 1, 0x0f97, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"seta", 1, 0x0f97, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"sets", 1, 0x0f98, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setns", 1, 0x0f99, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setp", 1, 0x0f9a, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setpe", 1, 0x0f9a, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setnp", 1, 0x0f9b, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setpo", 1, 0x0f9b, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setl", 1, 0x0f9c, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setnge", 1, 0x0f9c, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setnl", 1, 0x0f9d, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setge", 1, 0x0f9d, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setle", 1, 0x0f9e, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setng", 1, 0x0f9e, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setnle", 1, 0x0f9f, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, -{"setg", 1, 0x0f9f, 0, Cpu386, b_Suf|Modrm, { Reg8|ByteMem, 0, 0} }, - -/* String manipulation. */ -{"cmps", 0, 0xa6, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} }, -{"cmps", 2, 0xa6, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, AnyMem, 0} }, -{"scmp", 0, 0xa6, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} }, -{"scmp", 2, 0xa6, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, AnyMem, 0} }, -{"ins", 0, 0x6c, X, Cpu186, bwl_Suf|W|IsString, { 0, 0, 0} }, -{"ins", 2, 0x6c, X, Cpu186, bwl_Suf|W|IsString, { InOutPortReg, AnyMem|EsSeg, 0} }, -{"outs", 0, 0x6e, X, Cpu186, bwl_Suf|W|IsString, { 0, 0, 0} }, -{"outs", 2, 0x6e, X, Cpu186, bwl_Suf|W|IsString, { AnyMem, InOutPortReg, 0} }, -{"lods", 0, 0xac, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} }, -{"lods", 1, 0xac, X, 0, bwlq_Suf|W|IsString, { AnyMem, 0, 0} }, -{"lods", 2, 0xac, X, 0, bwlq_Suf|W|IsString, { AnyMem, Acc, 0} }, -{"slod", 0, 0xac, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} }, -{"slod", 1, 0xac, X, 0, bwlq_Suf|W|IsString, { AnyMem, 0, 0} }, -{"slod", 2, 0xac, X, 0, bwlq_Suf|W|IsString, { AnyMem, Acc, 0} }, -{"movs", 0, 0xa4, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} }, -{"movs", 2, 0xa4, X, 0, bwlq_Suf|W|IsString, { AnyMem, AnyMem|EsSeg, 0} }, -{"smov", 0, 0xa4, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} }, -{"smov", 2, 0xa4, X, 0, bwlq_Suf|W|IsString, { AnyMem, AnyMem|EsSeg, 0} }, -{"scas", 0, 0xae, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} }, -{"scas", 1, 0xae, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, 0, 0} }, -{"scas", 2, 0xae, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, Acc, 0} }, -{"ssca", 0, 0xae, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} }, -{"ssca", 1, 0xae, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, 0, 0} }, -{"ssca", 2, 0xae, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, Acc, 0} }, -{"stos", 0, 0xaa, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} }, -{"stos", 1, 0xaa, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, 0, 0} }, -{"stos", 2, 0xaa, X, 0, bwlq_Suf|W|IsString, { Acc, AnyMem|EsSeg, 0} }, -{"ssto", 0, 0xaa, X, 0, bwlq_Suf|W|IsString, { 0, 0, 0} }, -{"ssto", 1, 0xaa, X, 0, bwlq_Suf|W|IsString, { AnyMem|EsSeg, 0, 0} }, -{"ssto", 2, 0xaa, X, 0, bwlq_Suf|W|IsString, { Acc, AnyMem|EsSeg, 0} }, -{"xlat", 0, 0xd7, X, 0, b_Suf|IsString, { 0, 0, 0} }, -{"xlat", 1, 0xd7, X, 0, b_Suf|IsString, { AnyMem, 0, 0} }, - -/* Bit manipulation. */ -{"bsf", 2, 0x0fbc, X, Cpu386, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"bsr", 2, 0x0fbd, X, Cpu386, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"bt", 2, 0x0fa3, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} }, -{"bt", 2, 0x0fba, 4, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg|WordMem, 0} }, -{"btc", 2, 0x0fbb, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} }, -{"btc", 2, 0x0fba, 7, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg|WordMem, 0} }, -{"btr", 2, 0x0fb3, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} }, -{"btr", 2, 0x0fba, 6, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg|WordMem, 0} }, -{"bts", 2, 0x0fab, X, Cpu386, wlq_Suf|Modrm, { WordReg, WordReg|WordMem, 0} }, -{"bts", 2, 0x0fba, 5, Cpu386, wlq_Suf|Modrm, { Imm8, WordReg|WordMem, 0} }, - -/* Interrupts & op. sys insns. */ -/* See gas/config/tc-i386.c for conversion of 'int $3' into the special - int 3 insn. */ -#define INT_OPCODE 0xcd -#define INT3_OPCODE 0xcc -{"int", 1, 0xcd, X, 0, NoSuf, { Imm8, 0, 0} }, -{"int3", 0, 0xcc, X, 0, NoSuf, { 0, 0, 0} }, -{"into", 0, 0xce, X, CpuNo64, NoSuf, { 0, 0, 0} }, -{"iret", 0, 0xcf, X, 0, wlq_Suf|DefaultSize, { 0, 0, 0} }, -/* i386sl, i486sl, later 486, and Pentium. */ -{"rsm", 0, 0x0faa, X, Cpu386, NoSuf, { 0, 0, 0} }, - -{"bound", 2, 0x62, X, Cpu186|CpuNo64, wl_Suf|Modrm, { WordReg, WordMem, 0} }, - -{"hlt", 0, 0xf4, X, 0, NoSuf, { 0, 0, 0} }, - -{"nop", 1, 0x0f1f, X, Cpu686, wl_Suf|Modrm, { WordMem, 0, 0} }, - -/* nop is actually "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in - 32bit mode and "xchg %rax,%rax" in 64bit mode. */ -{"nop", 0, 0x90, X, 0, NoSuf, { 0, 0, 0} }, - -/* Protection control. */ -{"arpl", 2, 0x63, X, Cpu286|CpuNo64, w_Suf|Modrm|IgnoreSize,{ Reg16, Reg16|ShortMem, 0} }, -{"lar", 2, 0x0f02, X, Cpu286, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"lgdt", 1, 0x0f01, 2, Cpu286|CpuNo64, wl_Suf|Modrm, { WordMem, 0, 0} }, -{"lgdt", 1, 0x0f01, 2, Cpu64, q_Suf|Modrm|NoRex64, { LLongMem, 0, 0} }, -{"lidt", 1, 0x0f01, 3, Cpu286|CpuNo64, wl_Suf|Modrm, { WordMem, 0, 0} }, -{"lidt", 1, 0x0f01, 3, Cpu64, q_Suf|Modrm|NoRex64, { LLongMem, 0, 0} }, -{"lldt", 1, 0x0f00, 2, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} }, -{"lmsw", 1, 0x0f01, 6, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} }, -{"lsl", 2, 0x0f03, X, Cpu286, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"ltr", 1, 0x0f00, 3, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} }, - -{"sgdt", 1, 0x0f01, 0, Cpu286|CpuNo64, wl_Suf|Modrm, { WordMem, 0, 0} }, -{"sgdt", 1, 0x0f01, 0, Cpu64, q_Suf|Modrm|NoRex64, { LLongMem, 0, 0} }, -{"sidt", 1, 0x0f01, 1, Cpu286|CpuNo64, wl_Suf|Modrm, { WordMem, 0, 0} }, -{"sidt", 1, 0x0f01, 1, Cpu64, q_Suf|Modrm|NoRex64, { LLongMem, 0, 0} }, -{"sldt", 1, 0x0f00, 0, Cpu286, wlq_Suf|Modrm, { WordReg|InvMem, 0, 0} }, -{"sldt", 1, 0x0f00, 0, Cpu286, w_Suf|Modrm|IgnoreSize,{ ShortMem, 0, 0} }, -{"smsw", 1, 0x0f01, 4, Cpu286, wlq_Suf|Modrm, { WordReg|InvMem, 0, 0} }, -{"smsw", 1, 0x0f01, 4, Cpu286, w_Suf|Modrm|IgnoreSize,{ ShortMem, 0, 0} }, -{"str", 1, 0x0f00, 1, Cpu286, wlq_Suf|Modrm, { WordReg|InvMem, 0, 0} }, -{"str", 1, 0x0f00, 1, Cpu286, w_Suf|Modrm|IgnoreSize,{ ShortMem, 0, 0} }, - -{"verr", 1, 0x0f00, 4, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} }, -{"verw", 1, 0x0f00, 5, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} }, - -/* Floating point instructions. */ - -/* load */ -{"fld", 1, 0xd9c0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fld", 1, 0xd9, 0, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} }, -{"fld", 1, 0xd9c0, X, 0, l_FP|ShortForm|IgnoreSize|Ugh, { FloatReg, 0, 0} }, -/* Intel Syntax */ -{"fld", 1, 0xdb, 5, 0, x_FP|Modrm, { LLongMem, 0, 0} }, -{"fild", 1, 0xdf, 0, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, -{"fild", 1, 0xdf, 5, 0, q_FP|Modrm, { LLongMem, 0, 0} }, -{"fildll", 1, 0xdf, 5, 0, FP|Modrm, { LLongMem, 0, 0} }, -{"fldt", 1, 0xdb, 5, 0, FP|Modrm, { LLongMem, 0, 0} }, -{"fbld", 1, 0xdf, 4, 0, x_Suf|Modrm, { LLongMem, 0, 0} }, - -/* store (no pop) */ -{"fst", 1, 0xddd0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fst", 1, 0xd9, 2, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} }, -{"fst", 1, 0xddd0, X, 0, l_FP|ShortForm|IgnoreSize|Ugh, { FloatReg, 0, 0} }, -{"fist", 1, 0xdf, 2, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, - -/* store (with pop) */ -{"fstp", 1, 0xddd8, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fstp", 1, 0xd9, 3, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} }, -{"fstp", 1, 0xddd8, X, 0, l_FP|ShortForm|IgnoreSize|Ugh, { FloatReg, 0, 0} }, -/* Intel Syntax */ -{"fstp", 1, 0xdb, 7, 0, x_FP|Modrm, { LLongMem, 0, 0} }, -{"fistp", 1, 0xdf, 3, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, -{"fistp", 1, 0xdf, 7, 0, q_FP|Modrm, { LLongMem, 0, 0} }, -{"fistpll",1, 0xdf, 7, 0, FP|Modrm, { LLongMem, 0, 0} }, -{"fstpt", 1, 0xdb, 7, 0, FP|Modrm, { LLongMem, 0, 0} }, -{"fbstp", 1, 0xdf, 6, 0, x_Suf|Modrm, { LLongMem, 0, 0} }, - -/* exchange %st with %st0 */ -{"fxch", 1, 0xd9c8, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -/* alias for fxch %st(1) */ -{"fxch", 0, 0xd9c9, X, 0, FP, { 0, 0, 0} }, - -/* comparison (without pop) */ -{"fcom", 1, 0xd8d0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -/* alias for fcom %st(1) */ -{"fcom", 0, 0xd8d1, X, 0, FP, { 0, 0, 0} }, -{"fcom", 1, 0xd8, 2, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} }, -{"fcom", 1, 0xd8d0, X, 0, l_FP|ShortForm|IgnoreSize|Ugh, { FloatReg, 0, 0} }, -{"ficom", 1, 0xde, 2, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, - -/* comparison (with pop) */ -{"fcomp", 1, 0xd8d8, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -/* alias for fcomp %st(1) */ -{"fcomp", 0, 0xd8d9, X, 0, FP, { 0, 0, 0} }, -{"fcomp", 1, 0xd8, 3, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} }, -{"fcomp", 1, 0xd8d8, X, 0, l_FP|ShortForm|IgnoreSize|Ugh, { FloatReg, 0, 0} }, -{"ficomp", 1, 0xde, 3, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, -{"fcompp", 0, 0xded9, X, 0, FP, { 0, 0, 0} }, - -/* unordered comparison (with pop) */ -{"fucom", 1, 0xdde0, X, Cpu286, FP|ShortForm, { FloatReg, 0, 0} }, -/* alias for fucom %st(1) */ -{"fucom", 0, 0xdde1, X, Cpu286, FP, { 0, 0, 0} }, -{"fucomp", 1, 0xdde8, X, Cpu286, FP|ShortForm, { FloatReg, 0, 0} }, -/* alias for fucomp %st(1) */ -{"fucomp", 0, 0xdde9, X, Cpu286, FP, { 0, 0, 0} }, -{"fucompp",0, 0xdae9, X, Cpu286, FP, { 0, 0, 0} }, - -{"ftst", 0, 0xd9e4, X, 0, FP, { 0, 0, 0} }, -{"fxam", 0, 0xd9e5, X, 0, FP, { 0, 0, 0} }, - -/* load constants into %st0 */ -{"fld1", 0, 0xd9e8, X, 0, FP, { 0, 0, 0} }, -{"fldl2t", 0, 0xd9e9, X, 0, FP, { 0, 0, 0} }, -{"fldl2e", 0, 0xd9ea, X, 0, FP, { 0, 0, 0} }, -{"fldpi", 0, 0xd9eb, X, 0, FP, { 0, 0, 0} }, -{"fldlg2", 0, 0xd9ec, X, 0, FP, { 0, 0, 0} }, -{"fldln2", 0, 0xd9ed, X, 0, FP, { 0, 0, 0} }, -{"fldz", 0, 0xd9ee, X, 0, FP, { 0, 0, 0} }, - -/* Arithmetic. */ - -/* add */ -{"fadd", 2, 0xd8c0, X, 0, FP|ShortForm|FloatD, { FloatReg, FloatAcc, 0} }, -/* alias for fadd %st(i), %st */ -{"fadd", 1, 0xd8c0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -#if SYSV386_COMPAT -/* alias for faddp */ -{"fadd", 0, 0xdec1, X, 0, FP|Ugh, { 0, 0, 0} }, -#endif -{"fadd", 1, 0xd8, 0, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} }, -{"fiadd", 1, 0xde, 0, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, - -{"faddp", 2, 0xdec0, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} }, -{"faddp", 1, 0xdec0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -/* alias for faddp %st, %st(1) */ -{"faddp", 0, 0xdec1, X, 0, FP, { 0, 0, 0} }, -{"faddp", 2, 0xdec0, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} }, - -/* subtract */ -{"fsub", 2, 0xd8e0, X, 0, FP|ShortForm|FloatDR, { FloatReg, FloatAcc, 0} }, -{"fsub", 1, 0xd8e0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -#if SYSV386_COMPAT -/* alias for fsubp */ -{"fsub", 0, 0xdee1, X, 0, FP|Ugh, { 0, 0, 0} }, -#endif -{"fsub", 1, 0xd8, 4, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} }, -{"fisub", 1, 0xde, 4, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, - -#if SYSV386_COMPAT -{"fsubp", 2, 0xdee0, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} }, -{"fsubp", 1, 0xdee0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fsubp", 0, 0xdee1, X, 0, FP, { 0, 0, 0} }, -#if OLDGCC_COMPAT -{"fsubp", 2, 0xdee0, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} }, -#endif -#else -{"fsubp", 2, 0xdee8, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} }, -{"fsubp", 1, 0xdee8, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fsubp", 0, 0xdee9, X, 0, FP, { 0, 0, 0} }, -#endif - -/* subtract reverse */ -{"fsubr", 2, 0xd8e8, X, 0, FP|ShortForm|FloatDR, { FloatReg, FloatAcc, 0} }, -{"fsubr", 1, 0xd8e8, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -#if SYSV386_COMPAT -/* alias for fsubrp */ -{"fsubr", 0, 0xdee9, X, 0, FP|Ugh, { 0, 0, 0} }, -#endif -{"fsubr", 1, 0xd8, 5, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} }, -{"fisubr", 1, 0xde, 5, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, - -#if SYSV386_COMPAT -{"fsubrp", 2, 0xdee8, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} }, -{"fsubrp", 1, 0xdee8, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fsubrp", 0, 0xdee9, X, 0, FP, { 0, 0, 0} }, -#if OLDGCC_COMPAT -{"fsubrp", 2, 0xdee8, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} }, -#endif -#else -{"fsubrp", 2, 0xdee0, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} }, -{"fsubrp", 1, 0xdee0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fsubrp", 0, 0xdee1, X, 0, FP, { 0, 0, 0} }, -#endif - -/* multiply */ -{"fmul", 2, 0xd8c8, X, 0, FP|ShortForm|FloatD, { FloatReg, FloatAcc, 0} }, -{"fmul", 1, 0xd8c8, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -#if SYSV386_COMPAT -/* alias for fmulp */ -{"fmul", 0, 0xdec9, X, 0, FP|Ugh, { 0, 0, 0} }, -#endif -{"fmul", 1, 0xd8, 1, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} }, -{"fimul", 1, 0xde, 1, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, - -{"fmulp", 2, 0xdec8, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} }, -{"fmulp", 1, 0xdec8, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fmulp", 0, 0xdec9, X, 0, FP, { 0, 0, 0} }, -{"fmulp", 2, 0xdec8, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} }, - -/* divide */ -{"fdiv", 2, 0xd8f0, X, 0, FP|ShortForm|FloatDR, { FloatReg, FloatAcc, 0} }, -{"fdiv", 1, 0xd8f0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -#if SYSV386_COMPAT -/* alias for fdivp */ -{"fdiv", 0, 0xdef1, X, 0, FP|Ugh, { 0, 0, 0} }, -#endif -{"fdiv", 1, 0xd8, 6, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} }, -{"fidiv", 1, 0xde, 6, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, - -#if SYSV386_COMPAT -{"fdivp", 2, 0xdef0, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} }, -{"fdivp", 1, 0xdef0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fdivp", 0, 0xdef1, X, 0, FP, { 0, 0, 0} }, -#if OLDGCC_COMPAT -{"fdivp", 2, 0xdef0, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} }, -#endif -#else -{"fdivp", 2, 0xdef8, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} }, -{"fdivp", 1, 0xdef8, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fdivp", 0, 0xdef9, X, 0, FP, { 0, 0, 0} }, -#endif - -/* divide reverse */ -{"fdivr", 2, 0xd8f8, X, 0, FP|ShortForm|FloatDR, { FloatReg, FloatAcc, 0} }, -{"fdivr", 1, 0xd8f8, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -#if SYSV386_COMPAT -/* alias for fdivrp */ -{"fdivr", 0, 0xdef9, X, 0, FP|Ugh, { 0, 0, 0} }, -#endif -{"fdivr", 1, 0xd8, 7, 0, sl_FP|Modrm, { LongMem|LLongMem, 0, 0} }, -{"fidivr", 1, 0xde, 7, 0, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, - -#if SYSV386_COMPAT -{"fdivrp", 2, 0xdef8, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} }, -{"fdivrp", 1, 0xdef8, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fdivrp", 0, 0xdef9, X, 0, FP, { 0, 0, 0} }, -#if OLDGCC_COMPAT -{"fdivrp", 2, 0xdef8, X, 0, FP|ShortForm|Ugh, { FloatReg, FloatAcc, 0} }, -#endif -#else -{"fdivrp", 2, 0xdef0, X, 0, FP|ShortForm, { FloatAcc, FloatReg, 0} }, -{"fdivrp", 1, 0xdef0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -{"fdivrp", 0, 0xdef1, X, 0, FP, { 0, 0, 0} }, -#endif - -{"f2xm1", 0, 0xd9f0, X, 0, FP, { 0, 0, 0} }, -{"fyl2x", 0, 0xd9f1, X, 0, FP, { 0, 0, 0} }, -{"fptan", 0, 0xd9f2, X, 0, FP, { 0, 0, 0} }, -{"fpatan", 0, 0xd9f3, X, 0, FP, { 0, 0, 0} }, -{"fxtract",0, 0xd9f4, X, 0, FP, { 0, 0, 0} }, -{"fprem1", 0, 0xd9f5, X, Cpu286, FP, { 0, 0, 0} }, -{"fdecstp",0, 0xd9f6, X, 0, FP, { 0, 0, 0} }, -{"fincstp",0, 0xd9f7, X, 0, FP, { 0, 0, 0} }, -{"fprem", 0, 0xd9f8, X, 0, FP, { 0, 0, 0} }, -{"fyl2xp1",0, 0xd9f9, X, 0, FP, { 0, 0, 0} }, -{"fsqrt", 0, 0xd9fa, X, 0, FP, { 0, 0, 0} }, -{"fsincos",0, 0xd9fb, X, Cpu286, FP, { 0, 0, 0} }, -{"frndint",0, 0xd9fc, X, 0, FP, { 0, 0, 0} }, -{"fscale", 0, 0xd9fd, X, 0, FP, { 0, 0, 0} }, -{"fsin", 0, 0xd9fe, X, Cpu286, FP, { 0, 0, 0} }, -{"fcos", 0, 0xd9ff, X, Cpu286, FP, { 0, 0, 0} }, -{"fchs", 0, 0xd9e0, X, 0, FP, { 0, 0, 0} }, -{"fabs", 0, 0xd9e1, X, 0, FP, { 0, 0, 0} }, - -/* processor control */ -{"fninit", 0, 0xdbe3, X, 0, FP, { 0, 0, 0} }, -{"finit", 0, 0xdbe3, X, 0, FP|FWait, { 0, 0, 0} }, -{"fldcw", 1, 0xd9, 5, 0, w_Suf|FloatMF|Modrm, { ShortMem, 0, 0} }, -{"fnstcw", 1, 0xd9, 7, 0, w_Suf|FloatMF|Modrm, { ShortMem, 0, 0} }, -{"fstcw", 1, 0xd9, 7, 0, w_Suf|FloatMF|FWait|Modrm, { ShortMem, 0, 0} }, -/* XXX should reject %al, %eax, and %rax */ -{"fnstsw", 1, 0xdfe0, X, 0, FP|IgnoreSize, { Acc, 0, 0} }, -{"fnstsw", 1, 0xdd, 7, 0, w_Suf|FloatMF|Modrm, { ShortMem, 0, 0} }, -{"fnstsw", 0, 0xdfe0, X, 0, FP, { 0, 0, 0} }, -/* XXX should reject %al, %eax, and %rax */ -{"fstsw", 1, 0xdfe0, X, 0, FP|FWait|IgnoreSize, { Acc, 0, 0} }, -{"fstsw", 1, 0xdd, 7, 0, w_Suf|FloatMF|FWait|Modrm, { ShortMem, 0, 0} }, -{"fstsw", 0, 0xdfe0, X, 0, FP|FWait, { 0, 0, 0} }, -{"fnclex", 0, 0xdbe2, X, 0, FP, { 0, 0, 0} }, -{"fclex", 0, 0xdbe2, X, 0, FP|FWait, { 0, 0, 0} }, -/* Short forms of fldenv, fstenv use data size prefix. */ -{"fnstenv",1, 0xd9, 6, 0, sl_Suf|Modrm|DefaultSize, { LLongMem, 0, 0} }, -{"fstenv", 1, 0xd9, 6, 0, sl_Suf|FWait|Modrm|DefaultSize, { LLongMem, 0, 0} }, -{"fldenv", 1, 0xd9, 4, 0, sl_Suf|Modrm|DefaultSize, { LLongMem, 0, 0} }, -{"fnsave", 1, 0xdd, 6, 0, sl_Suf|Modrm|DefaultSize, { LLongMem, 0, 0} }, -{"fsave", 1, 0xdd, 6, 0, sl_Suf|FWait|Modrm|DefaultSize, { LLongMem, 0, 0} }, -{"frstor", 1, 0xdd, 4, 0, sl_Suf|Modrm|DefaultSize, { LLongMem, 0, 0} }, - -{"ffree", 1, 0xddc0, X, 0, FP|ShortForm, { FloatReg, 0, 0} }, -/* P6:free st(i), pop st */ -{"ffreep", 1, 0xdfc0, X, Cpu686, FP|ShortForm, { FloatReg, 0, 0} }, -{"fnop", 0, 0xd9d0, X, 0, FP, { 0, 0, 0} }, -#define FWAIT_OPCODE 0x9b -{"fwait", 0, 0x9b, X, 0, FP, { 0, 0, 0} }, - -/* Opcode prefixes; we allow them as separate insns too. */ - -#define ADDR_PREFIX_OPCODE 0x67 -{"addr16", 0, 0x67, X, Cpu386|CpuNo64, NoSuf|IsPrefix|Size16|IgnoreSize, { 0, 0, 0} }, -{"addr32", 0, 0x67, X, Cpu386,NoSuf|IsPrefix|Size32|IgnoreSize, { 0, 0, 0} }, -{"aword", 0, 0x67, X, Cpu386|CpuNo64,NoSuf|IsPrefix|Size16|IgnoreSize, { 0, 0, 0} }, -{"adword", 0, 0x67, X, Cpu386,NoSuf|IsPrefix|Size32|IgnoreSize, { 0, 0, 0} }, -#define DATA_PREFIX_OPCODE 0x66 -{"data16", 0, 0x66, X, Cpu386,NoSuf|IsPrefix|Size16|IgnoreSize, { 0, 0, 0} }, -{"data32", 0, 0x66, X, Cpu386|CpuNo64,NoSuf|IsPrefix|Size32|IgnoreSize, { 0, 0, 0} }, -{"word", 0, 0x66, X, Cpu386,NoSuf|IsPrefix|Size16|IgnoreSize, { 0, 0, 0} }, -{"dword", 0, 0x66, X, Cpu386|CpuNo64,NoSuf|IsPrefix|Size32|IgnoreSize, { 0, 0, 0} }, -#define LOCK_PREFIX_OPCODE 0xf0 -{"lock", 0, 0xf0, X, 0, NoSuf|IsPrefix, { 0, 0, 0} }, -{"wait", 0, 0x9b, X, 0, NoSuf|IsPrefix, { 0, 0, 0} }, -#define CS_PREFIX_OPCODE 0x2e -{"cs", 0, 0x2e, X, 0, NoSuf|IsPrefix, { 0, 0, 0} }, -#define DS_PREFIX_OPCODE 0x3e -{"ds", 0, 0x3e, X, 0, NoSuf|IsPrefix, { 0, 0, 0} }, -#define ES_PREFIX_OPCODE 0x26 -{"es", 0, 0x26, X, CpuNo64, NoSuf|IsPrefix, { 0, 0, 0} }, -#define FS_PREFIX_OPCODE 0x64 -{"fs", 0, 0x64, X, Cpu386, NoSuf|IsPrefix, { 0, 0, 0} }, -#define GS_PREFIX_OPCODE 0x65 -{"gs", 0, 0x65, X, Cpu386, NoSuf|IsPrefix, { 0, 0, 0} }, -#define SS_PREFIX_OPCODE 0x36 -{"ss", 0, 0x36, X, CpuNo64, NoSuf|IsPrefix, { 0, 0, 0} }, -#define REPNE_PREFIX_OPCODE 0xf2 -#define REPE_PREFIX_OPCODE 0xf3 -{"rep", 0, 0xf3, X, 0, NoSuf|IsPrefix, { 0, 0, 0} }, -{"repe", 0, 0xf3, X, 0, NoSuf|IsPrefix, { 0, 0, 0} }, -{"repz", 0, 0xf3, X, 0, NoSuf|IsPrefix, { 0, 0, 0} }, -{"repne", 0, 0xf2, X, 0, NoSuf|IsPrefix, { 0, 0, 0} }, -{"repnz", 0, 0xf2, X, 0, NoSuf|IsPrefix, { 0, 0, 0} }, -{"ht", 0, 0x3e, X, 0, NoSuf|IsPrefix, { 0, 0, 0} }, -{"hnt", 0, 0x2e, X, 0, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rex", 0, 0x40, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rexz", 0, 0x41, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rexy", 0, 0x42, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rexyz", 0, 0x43, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rexx", 0, 0x44, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rexxz", 0, 0x45, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rexxy", 0, 0x46, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rexxyz", 0, 0x47, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rex64", 0, 0x48, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rex64z", 0, 0x49, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rex64y", 0, 0x4a, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rex64yz",0, 0x4b, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rex64x", 0, 0x4c, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rex64xz",0, 0x4d, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rex64xy",0, 0x4e, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, -{"rex64xyz",0, 0x4f, X, Cpu64, NoSuf|IsPrefix, { 0, 0, 0} }, - -/* 486 extensions. */ - -{"bswap", 1, 0x0fc8, X, Cpu486, lq_Suf|ShortForm, { Reg32|Reg64, 0, 0 } }, -{"xadd", 2, 0x0fc0, X, Cpu486, bwlq_Suf|W|Modrm, { Reg, Reg|AnyMem, 0 } }, -{"cmpxchg", 2, 0x0fb0, X, Cpu486, bwlq_Suf|W|Modrm, { Reg, Reg|AnyMem, 0 } }, -{"invd", 0, 0x0f08, X, Cpu486, NoSuf, { 0, 0, 0} }, -{"wbinvd", 0, 0x0f09, X, Cpu486, NoSuf, { 0, 0, 0} }, -{"invlpg", 1, 0x0f01, 7, Cpu486, NoSuf|Modrm|IgnoreSize, { AnyMem, 0, 0} }, - -/* 586 and late 486 extensions. */ -{"cpuid", 0, 0x0fa2, X, Cpu486, NoSuf, { 0, 0, 0} }, - -/* Pentium extensions. */ -{"wrmsr", 0, 0x0f30, X, Cpu586, NoSuf, { 0, 0, 0} }, -{"rdtsc", 0, 0x0f31, X, Cpu586, NoSuf, { 0, 0, 0} }, -{"rdmsr", 0, 0x0f32, X, Cpu586, NoSuf, { 0, 0, 0} }, -{"cmpxchg8b",1,0x0fc7, 1, Cpu586, q_Suf|Modrm, { LLongMem, 0, 0} }, - -/* Pentium II/Pentium Pro extensions. */ -{"sysenter",0, 0x0f34, X, Cpu686, NoSuf, { 0, 0, 0} }, -{"sysexit", 0, 0x0f35, X, Cpu686, NoSuf, { 0, 0, 0} }, -{"fxsave", 1, 0x0fae, 0, Cpu686, q_Suf|Modrm, { LLongMem, 0, 0} }, -{"fxrstor", 1, 0x0fae, 1, Cpu686, q_Suf|Modrm, { LLongMem, 0, 0} }, -{"rdpmc", 0, 0x0f33, X, Cpu686, NoSuf, { 0, 0, 0} }, -/* official undefined instr. */ -{"ud2", 0, 0x0f0b, X, Cpu686, NoSuf, { 0, 0, 0} }, -/* alias for ud2 */ -{"ud2a", 0, 0x0f0b, X, Cpu686, NoSuf, { 0, 0, 0} }, -/* 2nd. official undefined instr. */ -{"ud2b", 0, 0x0fb9, X, Cpu686, NoSuf, { 0, 0, 0} }, - -{"cmovo", 2, 0x0f40, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovno", 2, 0x0f41, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovb", 2, 0x0f42, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovc", 2, 0x0f42, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovnae", 2, 0x0f42, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovae", 2, 0x0f43, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovnc", 2, 0x0f43, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovnb", 2, 0x0f43, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmove", 2, 0x0f44, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovz", 2, 0x0f44, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovne", 2, 0x0f45, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovnz", 2, 0x0f45, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovbe", 2, 0x0f46, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovna", 2, 0x0f46, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmova", 2, 0x0f47, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovnbe", 2, 0x0f47, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovs", 2, 0x0f48, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovns", 2, 0x0f49, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovp", 2, 0x0f4a, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovnp", 2, 0x0f4b, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovl", 2, 0x0f4c, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovnge", 2, 0x0f4c, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovge", 2, 0x0f4d, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovnl", 2, 0x0f4d, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovle", 2, 0x0f4e, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovng", 2, 0x0f4e, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovg", 2, 0x0f4f, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"cmovnle", 2, 0x0f4f, X, Cpu686, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, - -{"fcmovb", 2, 0xdac0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcmovnae",2, 0xdac0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcmove", 2, 0xdac8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcmovbe", 2, 0xdad0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcmovna", 2, 0xdad0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcmovu", 2, 0xdad8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcmovae", 2, 0xdbc0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcmovnb", 2, 0xdbc0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcmovne", 2, 0xdbc8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcmova", 2, 0xdbd0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcmovnbe",2, 0xdbd0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcmovnu", 2, 0xdbd8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, - -{"fcomi", 2, 0xdbf0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcomi", 0, 0xdbf1, X, Cpu686, FP|ShortForm, { 0, 0, 0} }, -{"fcomi", 1, 0xdbf0, X, Cpu686, FP|ShortForm, { FloatReg, 0, 0} }, -{"fucomi", 2, 0xdbe8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fucomi", 0, 0xdbe9, X, Cpu686, FP|ShortForm, { 0, 0, 0} }, -{"fucomi", 1, 0xdbe8, X, Cpu686, FP|ShortForm, { FloatReg, 0, 0} }, -{"fcomip", 2, 0xdff0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcompi", 2, 0xdff0, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fcompi", 0, 0xdff1, X, Cpu686, FP|ShortForm, { 0, 0, 0} }, -{"fcompi", 1, 0xdff0, X, Cpu686, FP|ShortForm, { FloatReg, 0, 0} }, -{"fucomip", 2, 0xdfe8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fucompi", 2, 0xdfe8, X, Cpu686, FP|ShortForm, { FloatReg, FloatAcc, 0} }, -{"fucompi", 0, 0xdfe9, X, Cpu686, FP|ShortForm, { 0, 0, 0} }, -{"fucompi", 1, 0xdfe8, X, Cpu686, FP|ShortForm, { FloatReg, 0, 0} }, - -/* Pentium4 extensions. */ - -{"movnti", 2, 0x0fc3, X, CpuP4, wlq_Suf|Modrm, { WordReg, WordMem, 0 } }, -{"clflush", 1, 0x0fae, 7, CpuP4, NoSuf|Modrm|IgnoreSize, { ByteMem, 0, 0 } }, -{"lfence", 0, 0x0fae, 0xe8, CpuP4, NoSuf|ImmExt, { 0, 0, 0 } }, -{"mfence", 0, 0x0fae, 0xf0, CpuP4, NoSuf|ImmExt, { 0, 0, 0 } }, -{"pause", 0, 0xf390, X, CpuP4, NoSuf, { 0, 0, 0 } }, - -/* MMX/SSE2 instructions. */ - -{"emms", 0, 0x0f77, X, CpuMMX, NoSuf, { 0, 0, 0 } }, -/* These really shouldn't allow for Reg64 (movq is the right mnemonic for - copying between Reg64/Mem64 and RegXMM/RegMMX, as is mandated by Intel's - spec). AMD's spec, having been in existence for much longer, failed to - recognize that and specified movd for 32- and 64-bit operations. */ -{"movd", 2, 0x0f6e, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { Reg32|Reg64|LongMem, RegMMX, 0 } }, -{"movd", 2, 0x0f7e, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX, Reg32|Reg64|LongMem, 0 } }, -{"movd", 2, 0x660f6e,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Reg32|Reg64|LongMem, RegXMM, 0 } }, -{"movd", 2, 0x660f7e,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM, Reg32|Reg64|LongMem, 0 } }, -/* In the 64bit mode the short form mov immediate is redefined to have - 64bit displacement value. */ -{"movq", 2, 0x0f6f, X, CpuMMX, NoSuf|IgnoreSize|Modrm|NoRex64, { RegMMX|LLongMem, RegMMX, 0 } }, -{"movq", 2, 0x0f7f, X, CpuMMX, NoSuf|IgnoreSize|Modrm|NoRex64, { RegMMX, RegMMX|LLongMem, 0 } }, -{"movq", 2, 0xf30f7e,X,CpuSSE2,NoSuf|IgnoreSize|Modrm|NoRex64, { RegXMM|LLongMem, RegXMM, 0 } }, -{"movq", 2, 0x660fd6,X,CpuSSE2,NoSuf|IgnoreSize|Modrm|NoRex64, { RegXMM, RegXMM|LLongMem, 0 } }, -{"movq", 2, 0x0f6e, X, Cpu64, NoSuf|IgnoreSize|Modrm, { Reg64|LLongMem, RegMMX, 0 } }, -{"movq", 2, 0x0f7e, X, Cpu64, NoSuf|IgnoreSize|Modrm, { RegMMX, Reg64|LLongMem, 0 } }, -{"movq", 2, 0x660f6e,X,Cpu64, NoSuf|IgnoreSize|Modrm, { Reg64|LLongMem, RegXMM, 0 } }, -{"movq", 2, 0x660f7e,X,Cpu64, NoSuf|IgnoreSize|Modrm, { RegXMM, Reg64|LLongMem, 0 } }, -/* We put the 64bit displacement first and we only mark constants - larger than 32bit as Disp64. */ -{"movq", 2, 0xa0, X, Cpu64, NoSuf|D|W|Size64, { Disp64, Acc, 0 } }, -{"movq", 2, 0x88, X, Cpu64, NoSuf|D|W|Modrm|Size64,{ Reg64, Reg64|AnyMem, 0 } }, -{"movq", 2, 0xc6, 0, Cpu64, NoSuf|W|Modrm|Size64, { Imm32S, Reg64|WordMem, 0 } }, -{"movq", 2, 0xb0, X, Cpu64, NoSuf|W|ShortForm|Size64,{ Imm64, Reg64, 0 } }, -/* The segment register moves accept Reg64 so that a segment register - can be copied to a 64 bit register, and vice versa. */ -{"movq", 2, 0x8c, X, Cpu64, NoSuf|Modrm|Size64, { SReg2|SReg3, Reg64|InvMem, 0 } }, -{"movq", 2, 0x8e, X, Cpu64, NoSuf|Modrm|Size64, { Reg64, SReg2|SReg3, 0 } }, -/* Move to/from control debug registers. In the 16 or 32bit modes they are 32bit. In the 64bit - mode they are 64bit.*/ -{"movq", 2, 0x0f20, X, Cpu64, NoSuf|D|Modrm|IgnoreSize|NoRex64|Size64,{ Control, Reg64|InvMem, 0} }, -{"movq", 2, 0x0f21, X, Cpu64, NoSuf|D|Modrm|IgnoreSize|NoRex64|Size64,{ Debug, Reg64|InvMem, 0} }, -/* Real MMX instructions. */ -{"packssdw", 2, 0x0f6b, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"packssdw", 2, 0x660f6b,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"packsswb", 2, 0x0f63, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"packsswb", 2, 0x660f63,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"packuswb", 2, 0x0f67, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"packuswb", 2, 0x660f67,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"paddb", 2, 0x0ffc, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"paddb", 2, 0x660ffc,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"paddw", 2, 0x0ffd, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"paddw", 2, 0x660ffd,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"paddd", 2, 0x0ffe, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"paddd", 2, 0x660ffe,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"paddq", 2, 0x0fd4, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } }, -{"paddq", 2, 0x660fd4,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"paddsb", 2, 0x0fec, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"paddsb", 2, 0x660fec,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"paddsw", 2, 0x0fed, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"paddsw", 2, 0x660fed,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"paddusb", 2, 0x0fdc, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"paddusb", 2, 0x660fdc,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"paddusw", 2, 0x0fdd, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"paddusw", 2, 0x660fdd,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pand", 2, 0x0fdb, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pand", 2, 0x660fdb,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pandn", 2, 0x0fdf, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pandn", 2, 0x660fdf,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pcmpeqb", 2, 0x0f74, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pcmpeqb", 2, 0x660f74,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pcmpeqw", 2, 0x0f75, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pcmpeqw", 2, 0x660f75,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pcmpeqd", 2, 0x0f76, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pcmpeqd", 2, 0x660f76,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pcmpgtb", 2, 0x0f64, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pcmpgtb", 2, 0x660f64,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pcmpgtw", 2, 0x0f65, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pcmpgtw", 2, 0x660f65,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pcmpgtd", 2, 0x0f66, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pcmpgtd", 2, 0x660f66,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pmaddwd", 2, 0x0ff5, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pmaddwd", 2, 0x660ff5,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pmulhw", 2, 0x0fe5, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pmulhw", 2, 0x660fe5,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pmullw", 2, 0x0fd5, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pmullw", 2, 0x660fd5,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"por", 2, 0x0feb, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"por", 2, 0x660feb,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psllw", 2, 0x0ff1, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psllw", 2, 0x660ff1,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psllw", 2, 0x0f71, 6, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } }, -{"psllw", 2, 0x660f71,6,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } }, -{"pslld", 2, 0x0ff2, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pslld", 2, 0x660ff2,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pslld", 2, 0x0f72, 6, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } }, -{"pslld", 2, 0x660f72,6,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } }, -{"psllq", 2, 0x0ff3, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psllq", 2, 0x660ff3,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psllq", 2, 0x0f73, 6, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } }, -{"psllq", 2, 0x660f73,6,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } }, -{"psraw", 2, 0x0fe1, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psraw", 2, 0x660fe1,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psraw", 2, 0x0f71, 4, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } }, -{"psraw", 2, 0x660f71,4,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } }, -{"psrad", 2, 0x0fe2, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psrad", 2, 0x660fe2,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psrad", 2, 0x0f72, 4, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } }, -{"psrad", 2, 0x660f72,4,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } }, -{"psrlw", 2, 0x0fd1, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psrlw", 2, 0x660fd1,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psrlw", 2, 0x0f71, 2, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } }, -{"psrlw", 2, 0x660f71,2,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } }, -{"psrld", 2, 0x0fd2, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psrld", 2, 0x660fd2,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psrld", 2, 0x0f72, 2, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } }, -{"psrld", 2, 0x660f72,2,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } }, -{"psrlq", 2, 0x0fd3, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psrlq", 2, 0x660fd3,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psrlq", 2, 0x0f73, 2, CpuMMX, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX, 0 } }, -{"psrlq", 2, 0x660f73,2,CpuSSE2,NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } }, -{"psubb", 2, 0x0ff8, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psubb", 2, 0x660ff8,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psubw", 2, 0x0ff9, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psubw", 2, 0x660ff9,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psubd", 2, 0x0ffa, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psubd", 2, 0x660ffa,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psubq", 2, 0x0ffb, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } }, -{"psubq", 2, 0x660ffb,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psubsb", 2, 0x0fe8, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psubsb", 2, 0x660fe8,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psubsw", 2, 0x0fe9, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psubsw", 2, 0x660fe9,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psubusb", 2, 0x0fd8, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psubusb", 2, 0x660fd8,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psubusw", 2, 0x0fd9, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psubusw", 2, 0x660fd9,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"punpckhbw",2, 0x0f68, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"punpckhbw",2, 0x660f68,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"punpckhwd",2, 0x0f69, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"punpckhwd",2, 0x660f69,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"punpckhdq",2, 0x0f6a, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"punpckhdq",2, 0x660f6a,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"punpcklbw",2, 0x0f60, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"punpcklbw",2, 0x660f60,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"punpcklwd",2, 0x0f61, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"punpcklwd",2, 0x660f61,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"punpckldq",2, 0x0f62, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"punpckldq",2, 0x660f62,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pxor", 2, 0x0fef, X, CpuMMX, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pxor", 2, 0x660fef,X,CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, - -/* PIII Katmai New Instructions / SIMD instructions. */ - -{"addps", 2, 0x0f58, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"addss", 2, 0xf30f58, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"andnps", 2, 0x0f55, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"andps", 2, 0x0f54, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"cmpeqps", 2, 0x0fc2, 0, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpeqss", 2, 0xf30fc2, 0, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } }, -{"cmpleps", 2, 0x0fc2, 2, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpless", 2, 0xf30fc2, 2, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } }, -{"cmpltps", 2, 0x0fc2, 1, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpltss", 2, 0xf30fc2, 1, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } }, -{"cmpneqps", 2, 0x0fc2, 4, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpneqss", 2, 0xf30fc2, 4, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } }, -{"cmpnleps", 2, 0x0fc2, 6, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpnless", 2, 0xf30fc2, 6, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } }, -{"cmpnltps", 2, 0x0fc2, 5, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpnltss", 2, 0xf30fc2, 5, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } }, -{"cmpordps", 2, 0x0fc2, 7, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpordss", 2, 0xf30fc2, 7, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } }, -{"cmpunordps",2, 0x0fc2, 3, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpunordss",2, 0xf30fc2, 3, CpuSSE, NoSuf|IgnoreSize|Modrm|ImmExt, { RegXMM|WordMem, RegXMM, 0 } }, -{"cmpps", 3, 0x0fc2, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } }, -{"cmpss", 3, 0xf30fc2, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|WordMem, RegXMM } }, -{"comiss", 2, 0x0f2f, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"cvtpi2ps", 2, 0x0f2a, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegXMM, 0 } }, -{"cvtps2pi", 2, 0x0f2d, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegMMX, 0 } }, -{"cvtsi2ss", 2, 0xf30f2a, X, CpuSSE, lq_Suf|IgnoreSize|Modrm,{ Reg32|Reg64|WordMem|LLongMem, RegXMM, 0 } }, -{"cvtss2si", 2, 0xf30f2d, X, CpuSSE, lq_Suf|IgnoreSize|Modrm,{ RegXMM|WordMem, Reg32|Reg64, 0 } }, -{"cvttps2pi", 2, 0x0f2c, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegMMX, 0 } }, -{"cvttss2si", 2, 0xf30f2c, X, CpuSSE, lq_Suf|IgnoreSize|Modrm, { RegXMM|WordMem, Reg32|Reg64, 0 } }, -{"divps", 2, 0x0f5e, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"divss", 2, 0xf30f5e, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"ldmxcsr", 1, 0x0fae, 2, CpuSSE, NoSuf|IgnoreSize|Modrm, { WordMem, 0, 0 } }, -{"maskmovq", 2, 0x0ff7, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX, RegMMX, 0 } }, -{"maxps", 2, 0x0f5f, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"maxss", 2, 0xf30f5f, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"minps", 2, 0x0f5d, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"minss", 2, 0xf30f5d, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"movaps", 2, 0x0f28, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"movaps", 2, 0x0f29, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } }, -{"movhlps", 2, 0x0f12, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM, 0 } }, -{"movhps", 2, 0x0f16, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { LLongMem, RegXMM, 0 } }, -{"movhps", 2, 0x0f17, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } }, -{"movlhps", 2, 0x0f16, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM, 0 } }, -{"movlps", 2, 0x0f12, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { LLongMem, RegXMM, 0 } }, -{"movlps", 2, 0x0f13, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } }, -{"movmskps", 2, 0x0f50, X, CpuSSE, lq_Suf|IgnoreSize|Modrm, { RegXMM, Reg32|Reg64, 0 } }, -{"movntps", 2, 0x0f2b, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } }, -{"movntq", 2, 0x0fe7, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX, LLongMem, 0 } }, -{"movntdq", 2, 0x660fe7, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } }, -{"movss", 2, 0xf30f10, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"movss", 2, 0xf30f11, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|WordMem, 0 } }, -{"movups", 2, 0x0f10, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"movups", 2, 0x0f11, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } }, -{"mulps", 2, 0x0f59, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"mulss", 2, 0xf30f59, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"orps", 2, 0x0f56, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pavgb", 2, 0x0fe0, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } }, -{"pavgb", 2, 0x660fe0, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pavgw", 2, 0x0fe3, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } }, -{"pavgw", 2, 0x660fe3, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pextrw", 3, 0x0fc5, X, CpuMMX2,lq_Suf|IgnoreSize|Modrm, { Imm8, RegMMX, Reg32|Reg64 } }, -{"pextrw", 3, 0x660fc5, X, CpuSSE2,lq_Suf|IgnoreSize|Modrm, { Imm8, RegXMM, Reg32|Reg64 } }, -{"pinsrw", 3, 0x0fc4, X, CpuMMX2,lq_Suf|IgnoreSize|Modrm, { Imm8, Reg32|Reg64|ShortMem, RegMMX } }, -{"pinsrw", 3, 0x660fc4, X, CpuSSE2,lq_Suf|IgnoreSize|Modrm, { Imm8, Reg32|Reg64|ShortMem, RegXMM } }, -{"pmaxsw", 2, 0x0fee, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } }, -{"pmaxsw", 2, 0x660fee, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pmaxub", 2, 0x0fde, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } }, -{"pmaxub", 2, 0x660fde, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pminsw", 2, 0x0fea, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } }, -{"pminsw", 2, 0x660fea, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pminub", 2, 0x0fda, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } }, -{"pminub", 2, 0x660fda, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pmovmskb", 2, 0x0fd7, X, CpuMMX2,lq_Suf|IgnoreSize|Modrm, { RegMMX, Reg32|Reg64, 0 } }, -{"pmovmskb", 2, 0x660fd7, X, CpuSSE2,lq_Suf|IgnoreSize|Modrm, { RegXMM, Reg32|Reg64, 0 } }, -{"pmulhuw", 2, 0x0fe4, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } }, -{"pmulhuw", 2, 0x660fe4, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"prefetchnta", 1, 0x0f18, 0, CpuMMX2,NoSuf|IgnoreSize|Modrm, { LLongMem, 0, 0 } }, -{"prefetcht0", 1, 0x0f18, 1, CpuMMX2,NoSuf|IgnoreSize|Modrm, { LLongMem, 0, 0 } }, -{"prefetcht1", 1, 0x0f18, 2, CpuMMX2,NoSuf|IgnoreSize|Modrm, { LLongMem, 0, 0 } }, -{"prefetcht2", 1, 0x0f18, 3, CpuMMX2,NoSuf|IgnoreSize|Modrm, { LLongMem, 0, 0 } }, -{"psadbw", 2, 0x0ff6, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegMMX, 0 } }, -{"psadbw", 2, 0x660ff6, X, CpuSSE2,NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pshufw", 3, 0x0f70, X, CpuMMX2,NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX|LLongMem, RegMMX } }, -{"rcpps", 2, 0x0f53, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"rcpss", 2, 0xf30f53, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"rsqrtps", 2, 0x0f52, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"rsqrtss", 2, 0xf30f52, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"sfence", 0, 0x0fae, 0xf8, CpuMMX2,NoSuf|IgnoreSize|ImmExt, { 0, 0, 0 } }, -{"shufps", 3, 0x0fc6, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } }, -{"sqrtps", 2, 0x0f51, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"sqrtss", 2, 0xf30f51, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"stmxcsr", 1, 0x0fae, 3, CpuSSE, NoSuf|IgnoreSize|Modrm, { WordMem, 0, 0 } }, -{"subps", 2, 0x0f5c, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"subss", 2, 0xf30f5c, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"ucomiss", 2, 0x0f2e, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"unpckhps", 2, 0x0f15, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"unpcklps", 2, 0x0f14, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"xorps", 2, 0x0f57, X, CpuSSE, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, - -/* SSE-2 instructions. */ - -{"addpd", 2, 0x660f58, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"addsd", 2, 0xf20f58, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } }, -{"andnpd", 2, 0x660f55, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"andpd", 2, 0x660f54, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|WordMem, RegXMM, 0 } }, -{"cmpeqpd", 2, 0x660fc2, 0, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpeqsd", 2, 0xf20fc2, 0, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } }, -{"cmplepd", 2, 0x660fc2, 2, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } }, -{"cmplesd", 2, 0xf20fc2, 2, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } }, -{"cmpltpd", 2, 0x660fc2, 1, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpltsd", 2, 0xf20fc2, 1, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } }, -{"cmpneqpd", 2, 0x660fc2, 4, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpneqsd", 2, 0xf20fc2, 4, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } }, -{"cmpnlepd", 2, 0x660fc2, 6, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpnlesd", 2, 0xf20fc2, 6, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } }, -{"cmpnltpd", 2, 0x660fc2, 5, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpnltsd", 2, 0xf20fc2, 5, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } }, -{"cmpordpd", 2, 0x660fc2, 7, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpordsd", 2, 0xf20fc2, 7, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } }, -{"cmpunordpd",2, 0x660fc2, 3, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpunordsd",2, 0xf20fc2, 3, CpuSSE2, NoSuf|IgnoreSize|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } }, -{"cmppd", 3, 0x660fc2, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } }, -/* Intel mode string compare. */ -{"cmpsd", 0, 0xa7, X, 0, NoSuf|Size32|IsString, { 0, 0, 0} }, -{"cmpsd", 2, 0xa7, X, 0, NoSuf|Size32|IsString, { AnyMem, AnyMem|EsSeg, 0} }, -{"cmpsd", 3, 0xf20fc2, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LongMem, RegXMM } }, -{"comisd", 2, 0x660f2f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } }, -{"cvtpi2pd", 2, 0x660f2a, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegMMX|LLongMem, RegXMM, 0 } }, -{"cvtsi2sd", 2, 0xf20f2a, X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ Reg32|Reg64|WordMem|LLongMem, RegXMM, 0 } }, -{"divpd", 2, 0x660f5e, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"divsd", 2, 0xf20f5e, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } }, -{"maxpd", 2, 0x660f5f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"maxsd", 2, 0xf20f5f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } }, -{"minpd", 2, 0x660f5d, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"minsd", 2, 0xf20f5d, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } }, -{"movapd", 2, 0x660f28, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"movapd", 2, 0x660f29, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } }, -{"movhpd", 2, 0x660f16, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { LLongMem, RegXMM, 0 } }, -{"movhpd", 2, 0x660f17, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } }, -{"movlpd", 2, 0x660f12, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { LLongMem, RegXMM, 0 } }, -{"movlpd", 2, 0x660f13, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } }, -{"movmskpd", 2, 0x660f50, X, CpuSSE2, lq_Suf|IgnoreSize|Modrm, { RegXMM, Reg32|Reg64, 0 } }, -{"movntpd", 2, 0x660f2b, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, LLongMem, 0 } }, -/* Intel mode string move. */ -{"movsd", 0, 0xa5, X, 0, NoSuf|Size32|IsString, { 0, 0, 0} }, -{"movsd", 2, 0xa5, X, 0, NoSuf|Size32|IsString, { AnyMem, AnyMem|EsSeg, 0} }, -{"movsd", 2, 0xf20f10, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } }, -{"movsd", 2, 0xf20f11, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LongMem, 0 } }, -{"movupd", 2, 0x660f10, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"movupd", 2, 0x660f11, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } }, -{"mulpd", 2, 0x660f59, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"mulsd", 2, 0xf20f59, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } }, -{"orpd", 2, 0x660f56, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"shufpd", 3, 0x660fc6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } }, -{"sqrtpd", 2, 0x660f51, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"sqrtsd", 2, 0xf20f51, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } }, -{"subpd", 2, 0x660f5c, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"subsd", 2, 0xf20f5c, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } }, -{"ucomisd", 2, 0x660f2e, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } }, -{"unpckhpd", 2, 0x660f15, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"unpcklpd", 2, 0x660f14, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"xorpd", 2, 0x660f57, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cvtdq2pd", 2, 0xf30fe6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cvtpd2dq", 2, 0xf20fe6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cvtdq2ps", 2, 0x0f5b, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cvtpd2pi", 2, 0x660f2d, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegMMX, 0 } }, -{"cvtpd2ps", 2, 0x660f5a, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cvtps2pd", 2, 0x0f5a, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cvtps2dq", 2, 0x660f5b, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cvtsd2si", 2, 0xf20f2d, X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ RegXMM|LLongMem, Reg32|Reg64, 0 } }, -{"cvtsd2ss", 2, 0xf20f5a, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cvtss2sd", 2, 0xf30f5a, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cvttpd2pi", 2, 0x660f2c, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegMMX, 0 } }, -{"cvttsd2si", 2, 0xf20f2c, X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ RegXMM|WordMem, Reg32|Reg64, 0 } }, -{"cvttpd2dq", 2, 0x660fe6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cvttps2dq", 2, 0xf30f5b, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"maskmovdqu",2, 0x660ff7, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM, 0 } }, -{"movdqa", 2, 0x660f6f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"movdqa", 2, 0x660f7f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } }, -{"movdqu", 2, 0xf30f6f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"movdqu", 2, 0xf30f7f, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM|LLongMem, 0 } }, -{"movdq2q", 2, 0xf20fd6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM, RegMMX, 0 } }, -{"movq2dq", 2, 0xf30fd6, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegMMX, RegXMM, 0 } }, -{"pmuludq", 2, 0x0ff4, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pmuludq", 2, 0x660ff4, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LongMem, RegXMM, 0 } }, -{"pshufd", 3, 0x660f70, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } }, -{"pshufhw", 3, 0xf30f70, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } }, -{"pshuflw", 3, 0xf20f70, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } }, -{"pslldq", 2, 0x660f73, 7, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } }, -{"psrldq", 2, 0x660f73, 3, CpuSSE2, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM, 0 } }, -{"punpckhqdq",2, 0x660f6d, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"punpcklqdq",2, 0x660f6c, X, CpuSSE2, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, - -/* Prescott New Instructions. */ - -{"addsubpd", 2, 0x660fd0, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"addsubps", 2, 0xf20fd0, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"cmpxchg16b",1, 0x0fc7, 1, CpuPNI|Cpu64, NoSuf|Modrm|Rex64, { LLongMem, 0, 0} }, -{"fisttp", 1, 0xdf, 1, CpuPNI, sl_FP|Modrm, { ShortMem|LongMem, 0, 0} }, -{"fisttp", 1, 0xdd, 1, CpuPNI, q_FP|Modrm, { LLongMem, 0, 0} }, -{"fisttpll", 1, 0xdd, 1, CpuPNI, FP|Modrm, { LLongMem, 0, 0} }, -{"haddpd", 2, 0x660f7c, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"haddps", 2, 0xf20f7c, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"hsubpd", 2, 0x660f7d, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"hsubps", 2, 0xf20f7d, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"lddqu", 2, 0xf20ff0, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { LLongMem, RegXMM, 0 } }, -{"monitor", 0, 0x0f01, 0xc8, CpuPNI, NoSuf|ImmExt, { 0, 0, 0} }, -/* monitor is very special. CX and DX are always 64bits with zero upper - 32bits in 64bit mode, and 32bits in 16bit and 32bit modes. The - address size override prefix can be used to overrride the AX size in - all modes. */ -/* Need to ensure only "monitor %eax/%ax,%ecx,%edx" is accepted. */ -{"monitor", 3, 0x0f01, 0xc8, CpuPNI|CpuNo64, NoSuf|ImmExt, { Reg16|Reg32, Reg32, Reg32 } }, -/* Need to ensure only "monitor %rax/%eax,%rcx,%rdx" is accepted. */ -{"monitor", 3, 0x0f01, 0xc8, CpuPNI|Cpu64, NoSuf|ImmExt|NoRex64, { Reg32|Reg64, Reg64, Reg64 } }, -{"movddup", 2, 0xf20f12, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"movshdup", 2, 0xf30f16, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"movsldup", 2, 0xf30f12, X, CpuPNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"mwait", 0, 0x0f01, 0xc9, CpuPNI, NoSuf|ImmExt, { 0, 0, 0} }, -/* mwait is very special. AX and CX are always 64bits with zero upper - 32bits in 64bit mode, and 32bits in 16bit and 32bit modes. */ -/* Need to ensure only "mwait %eax,%ecx" is accepted. */ -{"mwait", 2, 0x0f01, 0xc9, CpuPNI|CpuNo64, NoSuf|ImmExt, { Reg32, Reg32, 0} }, -/* Need to ensure only "mwait %rax,%rcx" is accepted. */ -{"mwait", 2, 0x0f01, 0xc9, CpuPNI|Cpu64, NoSuf|ImmExt|NoRex64, { Reg64, Reg64, 0} }, - -/* VMX instructions. */ -{"vmcall", 0, 0x0f01, 0xc1, CpuVMX, NoSuf|ImmExt, { 0, 0, 0} }, -{"vmclear", 1, 0x660fc7, 6, CpuVMX, NoSuf|IgnoreSize|Modrm|NoRex64, { LLongMem, 0, 0} }, -{"vmlaunch", 0, 0x0f01, 0xc2, CpuVMX, NoSuf|ImmExt, { 0, 0, 0} }, -{"vmresume", 0, 0x0f01, 0xc3, CpuVMX, NoSuf|ImmExt, { 0, 0, 0} }, -{"vmptrld", 1, 0x0fc7, 6, CpuVMX, NoSuf|IgnoreSize|Modrm|NoRex64, { LLongMem, 0, 0} }, -{"vmptrst", 1, 0x0fc7, 7, CpuVMX, NoSuf|IgnoreSize|Modrm|NoRex64, { LLongMem, 0, 0} }, -{"vmread", 2, 0x0f78, X, CpuVMX|CpuNo64, l_Suf|Modrm,{ Reg32, Reg32|LongMem, 0} }, -{"vmread", 2, 0x0f78, X, CpuVMX|Cpu64, q_Suf|Modrm|NoRex64,{ Reg64, Reg64|LLongMem, 0} }, -{"vmwrite", 2, 0x0f79, X, CpuVMX|CpuNo64, l_Suf|Modrm,{ Reg32|LongMem, Reg32, 0} }, -{"vmwrite", 2, 0x0f79, X, CpuVMX|Cpu64, q_Suf|Modrm|NoRex64,{ Reg64|LLongMem, Reg64, 0} }, -{"vmxoff", 0, 0x0f01, 0xc4, CpuVMX, NoSuf|ImmExt, { 0, 0, 0} }, -{"vmxon", 1, 0xf30fc7, 6, CpuVMX, NoSuf|IgnoreSize|Modrm|NoRex64, { LLongMem, 0, 0} }, - -/* Merom New Instructions. */ - -{"phaddw", 2, 0x0f3801,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"phaddw", 2, 0x660f3801,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"phaddd", 2, 0x0f3802,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"phaddd", 2, 0x660f3802,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"phaddsw", 2, 0x0f3803,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"phaddsw", 2, 0x660f3803,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"phsubw", 2, 0x0f3805,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"phsubw", 2, 0x660f3805,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"phsubd", 2, 0x0f3806,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"phsubd", 2, 0x660f3806,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"phsubsw", 2, 0x0f3807,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"phsubsw", 2, 0x660f3807,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pmaddubsw", 2, 0x0f3804,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pmaddubsw", 2, 0x660f3804,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pmulhrsw", 2, 0x0f380b,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pmulhrsw", 2, 0x660f380b,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pshufb", 2, 0x0f3800,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pshufb", 2, 0x660f3800,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psignb", 2, 0x0f3808,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psignb", 2, 0x660f3808,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psignw", 2, 0x0f3809,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psignw", 2, 0x660f3809,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"psignd", 2, 0x0f380a,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"psignd", 2, 0x660f380a,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"palignr", 3, 0x0f3a0f,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { Imm8, RegMMX|LongMem, RegMMX } }, -{"palignr", 3, 0x660f3a0f,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { Imm8, RegXMM|LLongMem, RegXMM } }, -{"pabsb", 2, 0x0f381c,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pabsb", 2, 0x660f381c,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pabsw", 2, 0x0f381d,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pabsw", 2, 0x660f381d,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, -{"pabsd", 2, 0x0f381e,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegMMX|LongMem, RegMMX, 0 } }, -{"pabsd", 2, 0x660f381e,X, CpuMNI, NoSuf|IgnoreSize|Modrm, { RegXMM|LLongMem, RegXMM, 0 } }, - -/* AMD 3DNow! instructions. */ - -{"prefetch", 1, 0x0f0d, 0, Cpu3dnow, NoSuf|IgnoreSize|Modrm, { ByteMem, 0, 0 } }, -{"prefetchw",1, 0x0f0d, 1, Cpu3dnow, NoSuf|IgnoreSize|Modrm, { ByteMem, 0, 0 } }, -{"femms", 0, 0x0f0e, X, Cpu3dnow, NoSuf, { 0, 0, 0 } }, -{"pavgusb", 2, 0x0f0f, 0xbf, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pf2id", 2, 0x0f0f, 0x1d, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pf2iw", 2, 0x0f0f, 0x1c, Cpu3dnowA,NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfacc", 2, 0x0f0f, 0xae, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfadd", 2, 0x0f0f, 0x9e, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfcmpeq", 2, 0x0f0f, 0xb0, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfcmpge", 2, 0x0f0f, 0x90, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfcmpgt", 2, 0x0f0f, 0xa0, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfmax", 2, 0x0f0f, 0xa4, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfmin", 2, 0x0f0f, 0x94, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfmul", 2, 0x0f0f, 0xb4, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfnacc", 2, 0x0f0f, 0x8a, Cpu3dnowA,NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfpnacc", 2, 0x0f0f, 0x8e, Cpu3dnowA,NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfrcp", 2, 0x0f0f, 0x96, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfrcpit1", 2, 0x0f0f, 0xa6, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfrcpit2", 2, 0x0f0f, 0xb6, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfrsqit1", 2, 0x0f0f, 0xa7, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfrsqrt", 2, 0x0f0f, 0x97, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfsub", 2, 0x0f0f, 0x9a, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pfsubr", 2, 0x0f0f, 0xaa, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pi2fd", 2, 0x0f0f, 0x0d, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pi2fw", 2, 0x0f0f, 0x0c, Cpu3dnowA,NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pmulhrw", 2, 0x0f0f, 0xb7, Cpu3dnow, NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, -{"pswapd", 2, 0x0f0f, 0xbb, Cpu3dnowA,NoSuf|IgnoreSize|Modrm|ImmExt, { RegMMX|LongMem, RegMMX, 0 } }, - -/* AMD extensions. */ -{"syscall", 0, 0x0f05, X, CpuK6, NoSuf, { 0, 0, 0} }, -{"sysret", 0, 0x0f07, X, CpuK6, lq_Suf|DefaultSize, { 0, 0, 0} }, -{"swapgs", 0, 0x0f01, 0xf8, Cpu64, NoSuf|ImmExt, { 0, 0, 0} }, -{"rdtscp", 0, 0x0f01, 0xf9, CpuSledgehammer,NoSuf|ImmExt, { 0, 0, 0} }, - -/* AMD Pacifica additions. */ -{"clgi", 0, 0x0f01, 0xdd, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } }, -{"invlpga", 0, 0x0f01, 0xdf, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } }, -/* Need to ensure only "invlpga ...,%ecx" is accepted. */ -{"invlpga", 2, 0x0f01, 0xdf, CpuSVME, NoSuf|ImmExt, { AnyMem, Reg32, 0 } }, -{"skinit", 0, 0x0f01, 0xde, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } }, -{"skinit", 1, 0x0f01, 0xde, CpuSVME, NoSuf|ImmExt, { AnyMem, 0, 0 } }, -{"stgi", 0, 0x0f01, 0xdc, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } }, -{"vmload", 0, 0x0f01, 0xda, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } }, -{"vmload", 1, 0x0f01, 0xda, CpuSVME, NoSuf|ImmExt, { AnyMem, 0, 0 } }, -{"vmmcall", 0, 0x0f01, 0xd9, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } }, -{"vmrun", 0, 0x0f01, 0xd8, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } }, -{"vmrun", 1, 0x0f01, 0xd8, CpuSVME, NoSuf|ImmExt, { AnyMem, 0, 0 } }, -{"vmsave", 0, 0x0f01, 0xdb, CpuSVME, NoSuf|ImmExt, { 0, 0, 0 } }, -{"vmsave", 1, 0x0f01, 0xdb, CpuSVME, NoSuf|ImmExt, { AnyMem, 0, 0 } }, - - -/* SSE4a instructions */ -{"movntsd", 2, 0xf20f2b, X, CpuSSE4a, NoSuf|IgnoreSize|Modrm, { RegXMM, LongMem, 0 } }, -{"movntss", 2, 0xf30f2b, X, CpuSSE4a, NoSuf|IgnoreSize|Modrm, { RegXMM, WordMem, 0 } }, -{"extrq", 3, 0x660f78, 0, CpuSSE4a, NoSuf|IgnoreSize|Modrm, { Imm8, Imm8, RegXMM } }, -{"extrq", 2, 0x660f79, X, CpuSSE4a, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM} }, -{"insertq", 2, 0xf20f79, X, CpuSSE4a, NoSuf|IgnoreSize|Modrm, { RegXMM, RegXMM} }, -{"insertq", 4, 0xf20f78, X, CpuSSE4a, NoSuf|IgnoreSize|Modrm, { Imm8, Imm8, RegXMM, RegXMM} }, - -/* ABM instructions */ -{"popcnt", 2, 0x0fb8, X, CpuABM, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, -{"lzcnt", 2, 0xf30fbd, X, CpuABM, wlq_Suf|Modrm, { WordReg|WordMem, WordReg, 0} }, - - -/* VIA PadLock extensions. */ -{"xstore-rng",0, 0x000fa7, 0xc0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xcrypt-ecb",0, 0xf30fa7, 0xc8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xcrypt-cbc",0, 0xf30fa7, 0xd0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xcrypt-ctr",0, 0xf30fa7, 0xd8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xcrypt-cfb",0, 0xf30fa7, 0xe0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xcrypt-ofb",0, 0xf30fa7, 0xe8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"montmul", 0, 0xf30fa6, 0xc0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xsha1", 0, 0xf30fa6, 0xc8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xsha256", 0, 0xf30fa6, 0xd0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -/* Aliases without hyphens. */ -{"xstorerng", 0, 0x000fa7, 0xc0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xcryptecb", 0, 0xf30fa7, 0xc8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xcryptcbc", 0, 0xf30fa7, 0xd0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xcryptctr", 0, 0xf30fa7, 0xd8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xcryptcfb", 0, 0xf30fa7, 0xe0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -{"xcryptofb", 0, 0xf30fa7, 0xe8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, -/* Alias for xstore-rng. */ -{"xstore", 0, 0x000fa7, 0xc0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} }, - -/* sentinel */ -{NULL, 0, 0, 0, 0, 0, { 0, 0, 0} } -}; -#undef X -#undef NoSuf -#undef b_Suf -#undef w_Suf -#undef l_Suf -#undef q_Suf -#undef x_Suf -#undef bw_Suf -#undef bl_Suf -#undef wl_Suf -#undef wlq_Suf -#undef sl_Suf -#undef bwl_Suf -#undef bwlq_Suf -#undef FP -#undef l_FP -#undef q_FP -#undef x_FP -#undef sl_FP - -#define MAX_MNEM_SIZE 16 /* For parsing insn mnemonics from input. */ - -/* 386 register table. */ - -static const reg_entry i386_regtab[] = -{ - /* Make %st first as we test for it. */ - {"st", FloatReg|FloatAcc, 0, 0}, - /* 8 bit regs */ -#define REGNAM_AL 1 /* Entry in i386_regtab. */ - {"al", Reg8|Acc, 0, 0}, - {"cl", Reg8|ShiftCount, 0, 1}, - {"dl", Reg8, 0, 2}, - {"bl", Reg8, 0, 3}, - {"ah", Reg8, 0, 4}, - {"ch", Reg8, 0, 5}, - {"dh", Reg8, 0, 6}, - {"bh", Reg8, 0, 7}, - {"axl", Reg8|Acc, RegRex64, 0}, /* Must be in the "al + 8" slot. */ - {"cxl", Reg8, RegRex64, 1}, - {"dxl", Reg8, RegRex64, 2}, - {"bxl", Reg8, RegRex64, 3}, - {"spl", Reg8, RegRex64, 4}, - {"bpl", Reg8, RegRex64, 5}, - {"sil", Reg8, RegRex64, 6}, - {"dil", Reg8, RegRex64, 7}, - {"r8b", Reg8, RegRex64|RegRex, 0}, - {"r9b", Reg8, RegRex64|RegRex, 1}, - {"r10b", Reg8, RegRex64|RegRex, 2}, - {"r11b", Reg8, RegRex64|RegRex, 3}, - {"r12b", Reg8, RegRex64|RegRex, 4}, - {"r13b", Reg8, RegRex64|RegRex, 5}, - {"r14b", Reg8, RegRex64|RegRex, 6}, - {"r15b", Reg8, RegRex64|RegRex, 7}, - /* 16 bit regs */ -#define REGNAM_AX 25 - {"ax", Reg16|Acc, 0, 0}, - {"cx", Reg16, 0, 1}, - {"dx", Reg16|InOutPortReg, 0, 2}, - {"bx", Reg16|BaseIndex, 0, 3}, - {"sp", Reg16, 0, 4}, - {"bp", Reg16|BaseIndex, 0, 5}, - {"si", Reg16|BaseIndex, 0, 6}, - {"di", Reg16|BaseIndex, 0, 7}, - {"r8w", Reg16, RegRex, 0}, - {"r9w", Reg16, RegRex, 1}, - {"r10w", Reg16, RegRex, 2}, - {"r11w", Reg16, RegRex, 3}, - {"r12w", Reg16, RegRex, 4}, - {"r13w", Reg16, RegRex, 5}, - {"r14w", Reg16, RegRex, 6}, - {"r15w", Reg16, RegRex, 7}, - /* 32 bit regs */ -#define REGNAM_EAX 41 - {"eax", Reg32|BaseIndex|Acc, 0, 0}, /* Must be in ax + 16 slot. */ - {"ecx", Reg32|BaseIndex, 0, 1}, - {"edx", Reg32|BaseIndex, 0, 2}, - {"ebx", Reg32|BaseIndex, 0, 3}, - {"esp", Reg32, 0, 4}, - {"ebp", Reg32|BaseIndex, 0, 5}, - {"esi", Reg32|BaseIndex, 0, 6}, - {"edi", Reg32|BaseIndex, 0, 7}, - {"r8d", Reg32|BaseIndex, RegRex, 0}, - {"r9d", Reg32|BaseIndex, RegRex, 1}, - {"r10d", Reg32|BaseIndex, RegRex, 2}, - {"r11d", Reg32|BaseIndex, RegRex, 3}, - {"r12d", Reg32|BaseIndex, RegRex, 4}, - {"r13d", Reg32|BaseIndex, RegRex, 5}, - {"r14d", Reg32|BaseIndex, RegRex, 6}, - {"r15d", Reg32|BaseIndex, RegRex, 7}, - {"rax", Reg64|BaseIndex|Acc, 0, 0}, - {"rcx", Reg64|BaseIndex, 0, 1}, - {"rdx", Reg64|BaseIndex, 0, 2}, - {"rbx", Reg64|BaseIndex, 0, 3}, - {"rsp", Reg64, 0, 4}, - {"rbp", Reg64|BaseIndex, 0, 5}, - {"rsi", Reg64|BaseIndex, 0, 6}, - {"rdi", Reg64|BaseIndex, 0, 7}, - {"r8", Reg64|BaseIndex, RegRex, 0}, - {"r9", Reg64|BaseIndex, RegRex, 1}, - {"r10", Reg64|BaseIndex, RegRex, 2}, - {"r11", Reg64|BaseIndex, RegRex, 3}, - {"r12", Reg64|BaseIndex, RegRex, 4}, - {"r13", Reg64|BaseIndex, RegRex, 5}, - {"r14", Reg64|BaseIndex, RegRex, 6}, - {"r15", Reg64|BaseIndex, RegRex, 7}, - /* Segment registers. */ - {"es", SReg2, 0, 0}, - {"cs", SReg2, 0, 1}, - {"ss", SReg2, 0, 2}, - {"ds", SReg2, 0, 3}, - {"fs", SReg3, 0, 4}, - {"gs", SReg3, 0, 5}, - /* Control registers. */ - {"cr0", Control, 0, 0}, - {"cr1", Control, 0, 1}, - {"cr2", Control, 0, 2}, - {"cr3", Control, 0, 3}, - {"cr4", Control, 0, 4}, - {"cr5", Control, 0, 5}, - {"cr6", Control, 0, 6}, - {"cr7", Control, 0, 7}, - {"cr8", Control, RegRex, 0}, - {"cr9", Control, RegRex, 1}, - {"cr10", Control, RegRex, 2}, - {"cr11", Control, RegRex, 3}, - {"cr12", Control, RegRex, 4}, - {"cr13", Control, RegRex, 5}, - {"cr14", Control, RegRex, 6}, - {"cr15", Control, RegRex, 7}, - /* Debug registers. */ - {"db0", Debug, 0, 0}, - {"db1", Debug, 0, 1}, - {"db2", Debug, 0, 2}, - {"db3", Debug, 0, 3}, - {"db4", Debug, 0, 4}, - {"db5", Debug, 0, 5}, - {"db6", Debug, 0, 6}, - {"db7", Debug, 0, 7}, - {"db8", Debug, RegRex, 0}, - {"db9", Debug, RegRex, 1}, - {"db10", Debug, RegRex, 2}, - {"db11", Debug, RegRex, 3}, - {"db12", Debug, RegRex, 4}, - {"db13", Debug, RegRex, 5}, - {"db14", Debug, RegRex, 6}, - {"db15", Debug, RegRex, 7}, - {"dr0", Debug, 0, 0}, - {"dr1", Debug, 0, 1}, - {"dr2", Debug, 0, 2}, - {"dr3", Debug, 0, 3}, - {"dr4", Debug, 0, 4}, - {"dr5", Debug, 0, 5}, - {"dr6", Debug, 0, 6}, - {"dr7", Debug, 0, 7}, - {"dr8", Debug, RegRex, 0}, - {"dr9", Debug, RegRex, 1}, - {"dr10", Debug, RegRex, 2}, - {"dr11", Debug, RegRex, 3}, - {"dr12", Debug, RegRex, 4}, - {"dr13", Debug, RegRex, 5}, - {"dr14", Debug, RegRex, 6}, - {"dr15", Debug, RegRex, 7}, - /* Test registers. */ - {"tr0", Test, 0, 0}, - {"tr1", Test, 0, 1}, - {"tr2", Test, 0, 2}, - {"tr3", Test, 0, 3}, - {"tr4", Test, 0, 4}, - {"tr5", Test, 0, 5}, - {"tr6", Test, 0, 6}, - {"tr7", Test, 0, 7}, - /* MMX and simd registers. */ - {"mm0", RegMMX, 0, 0}, - {"mm1", RegMMX, 0, 1}, - {"mm2", RegMMX, 0, 2}, - {"mm3", RegMMX, 0, 3}, - {"mm4", RegMMX, 0, 4}, - {"mm5", RegMMX, 0, 5}, - {"mm6", RegMMX, 0, 6}, - {"mm7", RegMMX, 0, 7}, - {"xmm0", RegXMM, 0, 0}, - {"xmm1", RegXMM, 0, 1}, - {"xmm2", RegXMM, 0, 2}, - {"xmm3", RegXMM, 0, 3}, - {"xmm4", RegXMM, 0, 4}, - {"xmm5", RegXMM, 0, 5}, - {"xmm6", RegXMM, 0, 6}, - {"xmm7", RegXMM, 0, 7}, - {"xmm8", RegXMM, RegRex, 0}, - {"xmm9", RegXMM, RegRex, 1}, - {"xmm10", RegXMM, RegRex, 2}, - {"xmm11", RegXMM, RegRex, 3}, - {"xmm12", RegXMM, RegRex, 4}, - {"xmm13", RegXMM, RegRex, 5}, - {"xmm14", RegXMM, RegRex, 6}, - {"xmm15", RegXMM, RegRex, 7}, - /* No type will make this register rejected for all purposes except - for addressing. This saves creating one extra type for RIP. */ - {"rip", BaseIndex, 0, 0} -}; - -static const reg_entry i386_float_regtab[] = -{ - {"st(0)", FloatReg|FloatAcc, 0, 0}, - {"st(1)", FloatReg, 0, 1}, - {"st(2)", FloatReg, 0, 2}, - {"st(3)", FloatReg, 0, 3}, - {"st(4)", FloatReg, 0, 4}, - {"st(5)", FloatReg, 0, 5}, - {"st(6)", FloatReg, 0, 6}, - {"st(7)", FloatReg, 0, 7} -}; - -#define MAX_REG_NAME_SIZE 8 /* For parsing register names from input. */ - -/* Segment stuff. */ -static const seg_entry cs = { "cs", 0x2e }; -static const seg_entry ds = { "ds", 0x3e }; -static const seg_entry ss = { "ss", 0x36 }; -static const seg_entry es = { "es", 0x26 }; -static const seg_entry fs = { "fs", 0x64 }; -static const seg_entry gs = { "gs", 0x65 }; - diff --git a/include/opcode/i860.h b/include/opcode/i860.h deleted file mode 100644 index 7836bff058d..00000000000 --- a/include/opcode/i860.h +++ /dev/null @@ -1,507 +0,0 @@ -/* Table of opcodes for the i860. - Copyright 1989, 1991, 2000, 2002, 2003 Free Software Foundation, Inc. - -This file is part of GAS, the GNU Assembler, and GDB, the GNU disassembler. - -GAS/GDB 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 1, or (at your option) -any later version. - -GAS/GDB 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 GAS or GDB; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - - -/* Structure of an opcode table entry. */ -struct i860_opcode -{ - /* The opcode name. */ - const char *name; - - /* Bits that must be set. */ - unsigned long match; - - /* Bits that must not be set. */ - unsigned long lose; - - const char *args; - - /* Nonzero if this is a possible expand-instruction. */ - char expand; -}; - - -enum expand_type -{ - E_MOV = 1, E_ADDR, E_U32, E_AND, E_S32, E_DELAY, XP_ONLY -}; - - -/* All i860 opcodes are 32 bits, except for the pseudo-instructions - and the operations utilizing a 32-bit address expression, an - unsigned 32-bit constant, or a signed 32-bit constant. - These opcodes are expanded into a two-instruction sequence for - any situation where the immediate operand does not fit in 32 bits. - In the case of the add and subtract operations the expansion is - to a three-instruction sequence (ex: orh, or, adds). In cases - where the address is to be relocated, the instruction is - expanded to handle the worse case, this could be optimized at - the final link if the actual address were known. - - The pseudoinstructions are: mov, fmov, pmov, nop, and fnop. - These instructions are implemented as a one or two instruction - sequence of other operations. - - The match component is a mask saying which bits must match a - particular opcode in order for an instruction to be an instance - of that opcode. - - The args component is a string containing one character - for each operand of the instruction. - -Kinds of operands: - # Number used by optimizer. It is ignored. - 1 src1 integer register. - 2 src2 integer register. - d dest register. - c ctrlreg control register. - i 16 bit immediate. - I 16 bit immediate, aligned 2^0. (ld.b) - J 16 bit immediate, aligned 2^1. (ld.s) - K 16 bit immediate, aligned 2^2. (ld.l, {p}fld.l, fst.l) - L 16 bit immediate, aligned 2^3. ({p}fld.d, fst.d) - M 16 bit immediate, aligned 2^4. ({p}fld.q, fst.q) - 5 5 bit immediate. - l lbroff 26 bit PC relative immediate. - r sbroff 16 bit PC relative immediate. - s split 16 bit immediate. - S split 16 bit immediate, aligned 2^0. (st.b) - T split 16 bit immediate, aligned 2^1. (st.s) - U split 16 bit immediate, aligned 2^2. (st.l) - e src1 floating point register. - f src2 floating point register. - g dest floating point register. */ - - -/* The order of the opcodes in this table is significant. The assembler - requires that all instances of the same mnemonic must be consecutive. - If they aren't, the assembler will not function properly. - - The order of opcodes does not affect the disassembler. */ - -static const struct i860_opcode i860_opcodes[] = -{ -/* REG-Format Instructions. */ -{ "ld.c", 0x30000000, 0xcc000000, "c,d", 0 }, /* ld.c csrc2,idest */ -{ "ld.b", 0x00000000, 0xfc000000, "1(2),d", 0 }, /* ld.b isrc1(isrc2),idest */ -{ "ld.b", 0x04000000, 0xf8000000, "I(2),d", E_ADDR }, /* ld.b #const(isrc2),idest */ -{ "ld.s", 0x10000000, 0xec000001, "1(2),d", 0 }, /* ld.s isrc1(isrc2),idest */ -{ "ld.s", 0x14000000, 0xe8000001, "J(2),d", E_ADDR }, /* ld.s #const(isrc2),idest */ -{ "ld.l", 0x10000001, 0xec000000, "1(2),d", 0 }, /* ld.l isrc1(isrc2),idest */ -{ "ld.l", 0x14000001, 0xe8000000, "K(2),d", E_ADDR }, /* ld.l #const(isrc2),idest */ - -{ "st.c", 0x38000000, 0xc4000000, "1,c", 0 }, /* st.c isrc1ni,csrc2 */ -{ "st.b", 0x0c000000, 0xf0000000, "1,S(2)", E_ADDR }, /* st.b isrc1ni,#const(isrc2) */ -{ "st.s", 0x1c000000, 0xe0000001, "1,T(2)", E_ADDR }, /* st.s isrc1ni,#const(isrc2) */ -{ "st.l", 0x1c000001, 0xe0000000, "1,U(2)", E_ADDR }, /* st.l isrc1ni,#const(isrc2) */ - -{ "ixfr", 0x08000000, 0xf4000000, "1,g", 0 }, /* ixfr isrc1ni,fdest */ - -{ "fld.l", 0x20000002, 0xdc000001, "1(2),g", 0 }, /* fld.l isrc1(isrc2),fdest */ -{ "fld.l", 0x24000002, 0xd8000001, "K(2),g", E_ADDR }, /* fld.l #const(isrc2),fdest */ -{ "fld.l", 0x20000003, 0xdc000000, "1(2)++,g", 0 }, /* fld.l isrc1(isrc2)++,fdest */ -{ "fld.l", 0x24000003, 0xd8000000, "K(2)++,g", E_ADDR }, /* fld.l #const(isrc2)++,fdest */ -{ "fld.d", 0x20000000, 0xdc000007, "1(2),g", 0 }, /* fld.d isrc1(isrc2),fdest */ -{ "fld.d", 0x24000000, 0xd8000007, "L(2),g", E_ADDR }, /* fld.d #const(isrc2),fdest */ -{ "fld.d", 0x20000001, 0xdc000006, "1(2)++,g", 0 }, /* fld.d isrc1(isrc2)++,fdest */ -{ "fld.d", 0x24000001, 0xd8000006, "L(2)++,g", E_ADDR }, /* fld.d #const(isrc2)++,fdest */ -{ "fld.q", 0x20000004, 0xdc000003, "1(2),g", 0 }, /* fld.q isrc1(isrc2),fdest */ -{ "fld.q", 0x24000004, 0xd8000003, "M(2),g", E_ADDR }, /* fld.q #const(isrc2),fdest */ -{ "fld.q", 0x20000005, 0xdc000002, "1(2)++,g", 0 }, /* fld.q isrc1(isrc2)++,fdest */ -{ "fld.q", 0x24000005, 0xd8000002, "M(2)++,g", E_ADDR }, /* fld.q #const(isrc2)++,fdest */ - -{ "pfld.l", 0x60000002, 0x9c000001, "1(2),g", 0 }, /* pfld.l isrc1(isrc2),fdest */ -{ "pfld.l", 0x64000002, 0x98000001, "K(2),g", E_ADDR }, /* pfld.l #const(isrc2),fdest */ -{ "pfld.l", 0x60000003, 0x9c000000, "1(2)++,g", 0 }, /* pfld.l isrc1(isrc2)++,fdest */ -{ "pfld.l", 0x64000003, 0x98000000, "K(2)++,g", E_ADDR }, /* pfld.l #const(isrc2)++,fdest */ -{ "pfld.d", 0x60000000, 0x9c000007, "1(2),g", 0 }, /* pfld.d isrc1(isrc2),fdest */ -{ "pfld.d", 0x64000000, 0x98000007, "L(2),g", E_ADDR }, /* pfld.d #const(isrc2),fdest */ -{ "pfld.d", 0x60000001, 0x9c000006, "1(2)++,g", 0 }, /* pfld.d isrc1(isrc2)++,fdest */ -{ "pfld.d", 0x64000001, 0x98000006, "L(2)++,g", E_ADDR }, /* pfld.d #const(isrc2)++,fdest */ -{ "pfld.q", 0x60000004, 0x9c000003, "1(2),g", XP_ONLY }, /* pfld.q isrc1(isrc2),fdest */ -{ "pfld.q", 0x64000004, 0x98000003, "L(2),g", XP_ONLY }, /* pfld.q #const(isrc2),fdest */ -{ "pfld.q", 0x60000005, 0x9c000002, "1(2)++,g", XP_ONLY }, /* pfld.q isrc1(isrc2)++,fdest */ -{ "pfld.q", 0x64000005, 0x98000002, "L(2)++,g", XP_ONLY }, /* pfld.q #const(isrc2)++,fdest */ - -{ "fst.l", 0x28000002, 0xd4000001, "g,1(2)", 0 }, /* fst.l fdest,isrc1(isrc2) */ -{ "fst.l", 0x2c000002, 0xd0000001, "g,K(2)", E_ADDR }, /* fst.l fdest,#const(isrc2) */ -{ "fst.l", 0x28000003, 0xd4000000, "g,1(2)++", 0 }, /* fst.l fdest,isrc1(isrc2)++ */ -{ "fst.l", 0x2c000003, 0xd0000000, "g,K(2)++", E_ADDR }, /* fst.l fdest,#const(isrc2)++ */ -{ "fst.d", 0x28000000, 0xd4000007, "g,1(2)", 0 }, /* fst.d fdest,isrc1(isrc2) */ -{ "fst.d", 0x2c000000, 0xd0000007, "g,L(2)", E_ADDR }, /* fst.d fdest,#const(isrc2) */ -{ "fst.d", 0x28000001, 0xd4000006, "g,1(2)++", 0 }, /* fst.d fdest,isrc1(isrc2)++ */ -{ "fst.d", 0x2c000001, 0xd0000006, "g,L(2)++", E_ADDR }, /* fst.d fdest,#const(isrc2)++ */ -{ "fst.q", 0x28000004, 0xd4000003, "g,1(2)", 0 }, /* fst.d fdest,isrc1(isrc2) */ -{ "fst.q", 0x2c000004, 0xd0000003, "g,M(2)", E_ADDR }, /* fst.d fdest,#const(isrc2) */ -{ "fst.q", 0x28000005, 0xd4000002, "g,1(2)++", 0 }, /* fst.d fdest,isrc1(isrc2)++ */ -{ "fst.q", 0x2c000005, 0xd0000002, "g,M(2)++", E_ADDR }, /* fst.d fdest,#const(isrc2)++ */ - -{ "pst.d", 0x3c000000, 0xc0000007, "g,L(2)", E_ADDR }, /* pst.d fdest,#const(isrc2) */ -{ "pst.d", 0x3c000001, 0xc0000006, "g,L(2)++", E_ADDR }, /* pst.d fdest,#const(isrc2)++ */ - -{ "addu", 0x80000000, 0x7c000000, "1,2,d", 0 }, /* addu isrc1,isrc2,idest */ -{ "addu", 0x84000000, 0x78000000, "i,2,d", E_S32 }, /* addu #const,isrc2,idest */ -{ "adds", 0x90000000, 0x6c000000, "1,2,d", 0 }, /* adds isrc1,isrc2,idest */ -{ "adds", 0x94000000, 0x68000000, "i,2,d", E_S32 }, /* adds #const,isrc2,idest */ -{ "subu", 0x88000000, 0x74000000, "1,2,d", 0 }, /* subu isrc1,isrc2,idest */ -{ "subu", 0x8c000000, 0x70000000, "i,2,d", E_S32 }, /* subu #const,isrc2,idest */ -{ "subs", 0x98000000, 0x64000000, "1,2,d", 0 }, /* subs isrc1,isrc2,idest */ -{ "subs", 0x9c000000, 0x60000000, "i,2,d", E_S32 }, /* subs #const,isrc2,idest */ - -{ "shl", 0xa0000000, 0x5c000000, "1,2,d", 0 }, /* shl isrc1,isrc2,idest */ -{ "shl", 0xa4000000, 0x58000000, "i,2,d", 0 }, /* shl #const,isrc2,idest */ -{ "shr", 0xa8000000, 0x54000000, "1,2,d", 0 }, /* shr isrc1,isrc2,idest */ -{ "shr", 0xac000000, 0x50000000, "i,2,d", 0 }, /* shr #const,isrc2,idest */ -{ "shrd", 0xb0000000, 0x4c000000, "1,2,d", 0 }, /* shrd isrc1,isrc2,idest */ -{ "shra", 0xb8000000, 0x44000000, "1,2,d", 0 }, /* shra isrc1,isrc2,idest */ -{ "shra", 0xbc000000, 0x40000000, "i,2,d", 0 }, /* shra #const,isrc2,idest */ - -{ "mov", 0xa0000000, 0x5c00f800, "2,d", 0 }, /* shl r0,isrc2,idest */ -{ "mov", 0x94000000, 0x69e00000, "i,d", E_MOV }, /* adds #const,r0,idest */ -{ "nop", 0xa0000000, 0x5ffff800, "", 0 }, /* shl r0,r0,r0 */ -{ "fnop", 0xb0000000, 0x4ffff800, "", 0 }, /* shrd r0,r0,r0 */ - -{ "trap", 0x44000000, 0xb8000000, "1,2,d", 0 }, /* trap isrc1ni,isrc2,idest */ - -{ "flush", 0x34000004, 0xc81f0003, "L(2)", E_ADDR }, /* flush #const(isrc2) */ -{ "flush", 0x34000005, 0xc81f0002, "L(2)++", E_ADDR }, /* flush #const(isrc2)++ */ - -{ "and", 0xc0000000, 0x3c000000, "1,2,d", 0 }, /* and isrc1,isrc2,idest */ -{ "and", 0xc4000000, 0x38000000, "i,2,d", E_AND }, /* and #const,isrc2,idest */ -{ "andh", 0xcc000000, 0x30000000, "i,2,d", 0 }, /* andh #const,isrc2,idest */ -{ "andnot", 0xd0000000, 0x2c000000, "1,2,d", 0 }, /* andnot isrc1,isrc2,idest */ -{ "andnot", 0xd4000000, 0x28000000, "i,2,d", E_U32 }, /* andnot #const,isrc2,idest */ -{ "andnoth", 0xdc000000, 0x20000000, "i,2,d", 0 }, /* andnoth #const,isrc2,idest */ -{ "or", 0xe0000000, 0x1c000000, "1,2,d", 0 }, /* or isrc1,isrc2,idest */ -{ "or", 0xe4000000, 0x18000000, "i,2,d", E_U32 }, /* or #const,isrc2,idest */ -{ "orh", 0xec000000, 0x10000000, "i,2,d", 0 }, /* orh #const,isrc2,idest */ -{ "xor", 0xf0000000, 0x0c000000, "1,2,d", 0 }, /* xor isrc1,isrc2,idest */ -{ "xor", 0xf4000000, 0x08000000, "i,2,d", E_U32 }, /* xor #const,isrc2,idest */ -{ "xorh", 0xfc000000, 0x00000000, "i,2,d", 0 }, /* xorh #const,isrc2,idest */ - -{ "bte", 0x58000000, 0xa4000000, "1,2,r", 0 }, /* bte isrc1s,isrc2,sbroff */ -{ "bte", 0x5c000000, 0xa0000000, "5,2,r", 0 }, /* bte #const5,isrc2,sbroff */ -{ "btne", 0x50000000, 0xac000000, "1,2,r", 0 }, /* btne isrc1s,isrc2,sbroff */ -{ "btne", 0x54000000, 0xa8000000, "5,2,r", 0 }, /* btne #const5,isrc2,sbroff */ -{ "bla", 0xb4000000, 0x48000000, "1,2,r", E_DELAY }, /* bla isrc1s,isrc2,sbroff */ -{ "bri", 0x40000000, 0xbc000000, "1", E_DELAY }, /* bri isrc1ni */ - -/* Core Escape Instruction Format */ -{ "lock", 0x4c000001, 0xb000001e, "", 0 }, /* lock set BL in dirbase */ -{ "calli", 0x4c000002, 0xb000001d, "1", E_DELAY }, /* calli isrc1ni */ -{ "intovr", 0x4c000004, 0xb000001b, "", 0 }, /* intovr trap on integer overflow */ -{ "unlock", 0x4c000007, 0xb0000018, "", 0 }, /* unlock clear BL in dirbase */ -{ "ldio.l", 0x4c000408, 0xb00003f7, "2,d", XP_ONLY }, /* ldio.l isrc2,idest */ -{ "ldio.s", 0x4c000208, 0xb00005f7, "2,d", XP_ONLY }, /* ldio.s isrc2,idest */ -{ "ldio.b", 0x4c000008, 0xb00007f7, "2,d", XP_ONLY }, /* ldio.b isrc2,idest */ -{ "stio.l", 0x4c000409, 0xb00003f6, "1,2", XP_ONLY }, /* stio.l isrc1ni,isrc2 */ -{ "stio.s", 0x4c000209, 0xb00005f6, "1,2", XP_ONLY }, /* stio.s isrc1ni,isrc2 */ -{ "stio.b", 0x4c000009, 0xb00007f6, "1,2", XP_ONLY }, /* stio.b isrc1ni,isrc2 */ -{ "ldint.l", 0x4c00040a, 0xb00003f5, "2,d", XP_ONLY }, /* ldint.l isrc2,idest */ -{ "ldint.s", 0x4c00020a, 0xb00005f5, "2,d", XP_ONLY }, /* ldint.s isrc2,idest */ -{ "ldint.b", 0x4c00000a, 0xb00007f5, "2,d", XP_ONLY }, /* ldint.b isrc2,idest */ -{ "scyc.b", 0x4c00000b, 0xb00007f4, "2", XP_ONLY }, /* scyc.b isrc2 */ - -/* CTRL-Format Instructions */ -{ "br", 0x68000000, 0x94000000, "l", E_DELAY }, /* br lbroff */ -{ "call", 0x6c000000, 0x90000000, "l", E_DELAY }, /* call lbroff */ -{ "bc", 0x70000000, 0x8c000000, "l", 0 }, /* bc lbroff */ -{ "bc.t", 0x74000000, 0x88000000, "l", E_DELAY }, /* bc.t lbroff */ -{ "bnc", 0x78000000, 0x84000000, "l", 0 }, /* bnc lbroff */ -{ "bnc.t", 0x7c000000, 0x80000000, "l", E_DELAY }, /* bnc.t lbroff */ - -/* Floating Point Escape Instruction Format - pfam.p fsrc1,fsrc2,fdest. */ -{ "r2p1.ss", 0x48000400, 0xb40001ff, "e,f,g", 0 }, -{ "r2p1.sd", 0x48000480, 0xb400017f, "e,f,g", 0 }, -{ "r2p1.dd", 0x48000580, 0xb400007f, "e,f,g", 0 }, -{ "r2pt.ss", 0x48000401, 0xb40001fe, "e,f,g", 0 }, -{ "r2pt.sd", 0x48000481, 0xb400017e, "e,f,g", 0 }, -{ "r2pt.dd", 0x48000581, 0xb400007e, "e,f,g", 0 }, -{ "r2ap1.ss", 0x48000402, 0xb40001fd, "e,f,g", 0 }, -{ "r2ap1.sd", 0x48000482, 0xb400017d, "e,f,g", 0 }, -{ "r2ap1.dd", 0x48000582, 0xb400007d, "e,f,g", 0 }, -{ "r2apt.ss", 0x48000403, 0xb40001fc, "e,f,g", 0 }, -{ "r2apt.sd", 0x48000483, 0xb400017c, "e,f,g", 0 }, -{ "r2apt.dd", 0x48000583, 0xb400007c, "e,f,g", 0 }, -{ "i2p1.ss", 0x48000404, 0xb40001fb, "e,f,g", 0 }, -{ "i2p1.sd", 0x48000484, 0xb400017b, "e,f,g", 0 }, -{ "i2p1.dd", 0x48000584, 0xb400007b, "e,f,g", 0 }, -{ "i2pt.ss", 0x48000405, 0xb40001fa, "e,f,g", 0 }, -{ "i2pt.sd", 0x48000485, 0xb400017a, "e,f,g", 0 }, -{ "i2pt.dd", 0x48000585, 0xb400007a, "e,f,g", 0 }, -{ "i2ap1.ss", 0x48000406, 0xb40001f9, "e,f,g", 0 }, -{ "i2ap1.sd", 0x48000486, 0xb4000179, "e,f,g", 0 }, -{ "i2ap1.dd", 0x48000586, 0xb4000079, "e,f,g", 0 }, -{ "i2apt.ss", 0x48000407, 0xb40001f8, "e,f,g", 0 }, -{ "i2apt.sd", 0x48000487, 0xb4000178, "e,f,g", 0 }, -{ "i2apt.dd", 0x48000587, 0xb4000078, "e,f,g", 0 }, -{ "rat1p2.ss", 0x48000408, 0xb40001f7, "e,f,g", 0 }, -{ "rat1p2.sd", 0x48000488, 0xb4000177, "e,f,g", 0 }, -{ "rat1p2.dd", 0x48000588, 0xb4000077, "e,f,g", 0 }, -{ "m12apm.ss", 0x48000409, 0xb40001f6, "e,f,g", 0 }, -{ "m12apm.sd", 0x48000489, 0xb4000176, "e,f,g", 0 }, -{ "m12apm.dd", 0x48000589, 0xb4000076, "e,f,g", 0 }, -{ "ra1p2.ss", 0x4800040a, 0xb40001f5, "e,f,g", 0 }, -{ "ra1p2.sd", 0x4800048a, 0xb4000175, "e,f,g", 0 }, -{ "ra1p2.dd", 0x4800058a, 0xb4000075, "e,f,g", 0 }, -{ "m12ttpa.ss", 0x4800040b, 0xb40001f4, "e,f,g", 0 }, -{ "m12ttpa.sd", 0x4800048b, 0xb4000174, "e,f,g", 0 }, -{ "m12ttpa.dd", 0x4800058b, 0xb4000074, "e,f,g", 0 }, -{ "iat1p2.ss", 0x4800040c, 0xb40001f3, "e,f,g", 0 }, -{ "iat1p2.sd", 0x4800048c, 0xb4000173, "e,f,g", 0 }, -{ "iat1p2.dd", 0x4800058c, 0xb4000073, "e,f,g", 0 }, -{ "m12tpm.ss", 0x4800040d, 0xb40001f2, "e,f,g", 0 }, -{ "m12tpm.sd", 0x4800048d, 0xb4000172, "e,f,g", 0 }, -{ "m12tpm.dd", 0x4800058d, 0xb4000072, "e,f,g", 0 }, -{ "ia1p2.ss", 0x4800040e, 0xb40001f1, "e,f,g", 0 }, -{ "ia1p2.sd", 0x4800048e, 0xb4000171, "e,f,g", 0 }, -{ "ia1p2.dd", 0x4800058e, 0xb4000071, "e,f,g", 0 }, -{ "m12tpa.ss", 0x4800040f, 0xb40001f0, "e,f,g", 0 }, -{ "m12tpa.sd", 0x4800048f, 0xb4000170, "e,f,g", 0 }, -{ "m12tpa.dd", 0x4800058f, 0xb4000070, "e,f,g", 0 }, - -/* Floating Point Escape Instruction Format - pfsm.p fsrc1,fsrc2,fdest. */ -{ "r2s1.ss", 0x48000410, 0xb40001ef, "e,f,g", 0 }, -{ "r2s1.sd", 0x48000490, 0xb400016f, "e,f,g", 0 }, -{ "r2s1.dd", 0x48000590, 0xb400006f, "e,f,g", 0 }, -{ "r2st.ss", 0x48000411, 0xb40001ee, "e,f,g", 0 }, -{ "r2st.sd", 0x48000491, 0xb400016e, "e,f,g", 0 }, -{ "r2st.dd", 0x48000591, 0xb400006e, "e,f,g", 0 }, -{ "r2as1.ss", 0x48000412, 0xb40001ed, "e,f,g", 0 }, -{ "r2as1.sd", 0x48000492, 0xb400016d, "e,f,g", 0 }, -{ "r2as1.dd", 0x48000592, 0xb400006d, "e,f,g", 0 }, -{ "r2ast.ss", 0x48000413, 0xb40001ec, "e,f,g", 0 }, -{ "r2ast.sd", 0x48000493, 0xb400016c, "e,f,g", 0 }, -{ "r2ast.dd", 0x48000593, 0xb400006c, "e,f,g", 0 }, -{ "i2s1.ss", 0x48000414, 0xb40001eb, "e,f,g", 0 }, -{ "i2s1.sd", 0x48000494, 0xb400016b, "e,f,g", 0 }, -{ "i2s1.dd", 0x48000594, 0xb400006b, "e,f,g", 0 }, -{ "i2st.ss", 0x48000415, 0xb40001ea, "e,f,g", 0 }, -{ "i2st.sd", 0x48000495, 0xb400016a, "e,f,g", 0 }, -{ "i2st.dd", 0x48000595, 0xb400006a, "e,f,g", 0 }, -{ "i2as1.ss", 0x48000416, 0xb40001e9, "e,f,g", 0 }, -{ "i2as1.sd", 0x48000496, 0xb4000169, "e,f,g", 0 }, -{ "i2as1.dd", 0x48000596, 0xb4000069, "e,f,g", 0 }, -{ "i2ast.ss", 0x48000417, 0xb40001e8, "e,f,g", 0 }, -{ "i2ast.sd", 0x48000497, 0xb4000168, "e,f,g", 0 }, -{ "i2ast.dd", 0x48000597, 0xb4000068, "e,f,g", 0 }, -{ "rat1s2.ss", 0x48000418, 0xb40001e7, "e,f,g", 0 }, -{ "rat1s2.sd", 0x48000498, 0xb4000167, "e,f,g", 0 }, -{ "rat1s2.dd", 0x48000598, 0xb4000067, "e,f,g", 0 }, -{ "m12asm.ss", 0x48000419, 0xb40001e6, "e,f,g", 0 }, -{ "m12asm.sd", 0x48000499, 0xb4000166, "e,f,g", 0 }, -{ "m12asm.dd", 0x48000599, 0xb4000066, "e,f,g", 0 }, -{ "ra1s2.ss", 0x4800041a, 0xb40001e5, "e,f,g", 0 }, -{ "ra1s2.sd", 0x4800049a, 0xb4000165, "e,f,g", 0 }, -{ "ra1s2.dd", 0x4800059a, 0xb4000065, "e,f,g", 0 }, -{ "m12ttsa.ss", 0x4800041b, 0xb40001e4, "e,f,g", 0 }, -{ "m12ttsa.sd", 0x4800049b, 0xb4000164, "e,f,g", 0 }, -{ "m12ttsa.dd", 0x4800059b, 0xb4000064, "e,f,g", 0 }, -{ "iat1s2.ss", 0x4800041c, 0xb40001e3, "e,f,g", 0 }, -{ "iat1s2.sd", 0x4800049c, 0xb4000163, "e,f,g", 0 }, -{ "iat1s2.dd", 0x4800059c, 0xb4000063, "e,f,g", 0 }, -{ "m12tsm.ss", 0x4800041d, 0xb40001e2, "e,f,g", 0 }, -{ "m12tsm.sd", 0x4800049d, 0xb4000162, "e,f,g", 0 }, -{ "m12tsm.dd", 0x4800059d, 0xb4000062, "e,f,g", 0 }, -{ "ia1s2.ss", 0x4800041e, 0xb40001e1, "e,f,g", 0 }, -{ "ia1s2.sd", 0x4800049e, 0xb4000161, "e,f,g", 0 }, -{ "ia1s2.dd", 0x4800059e, 0xb4000061, "e,f,g", 0 }, -{ "m12tsa.ss", 0x4800041f, 0xb40001e0, "e,f,g", 0 }, -{ "m12tsa.sd", 0x4800049f, 0xb4000160, "e,f,g", 0 }, -{ "m12tsa.dd", 0x4800059f, 0xb4000060, "e,f,g", 0 }, - -/* Floating Point Escape Instruction Format - pfmam.p fsrc1,fsrc2,fdest. */ -{ "mr2p1.ss", 0x48000000, 0xb40005ff, "e,f,g", 0 }, -{ "mr2p1.sd", 0x48000080, 0xb400057f, "e,f,g", 0 }, -{ "mr2p1.dd", 0x48000180, 0xb400047f, "e,f,g", 0 }, -{ "mr2pt.ss", 0x48000001, 0xb40005fe, "e,f,g", 0 }, -{ "mr2pt.sd", 0x48000081, 0xb400057e, "e,f,g", 0 }, -{ "mr2pt.dd", 0x48000181, 0xb400047e, "e,f,g", 0 }, -{ "mr2mp1.ss", 0x48000002, 0xb40005fd, "e,f,g", 0 }, -{ "mr2mp1.sd", 0x48000082, 0xb400057d, "e,f,g", 0 }, -{ "mr2mp1.dd", 0x48000182, 0xb400047d, "e,f,g", 0 }, -{ "mr2mpt.ss", 0x48000003, 0xb40005fc, "e,f,g", 0 }, -{ "mr2mpt.sd", 0x48000083, 0xb400057c, "e,f,g", 0 }, -{ "mr2mpt.dd", 0x48000183, 0xb400047c, "e,f,g", 0 }, -{ "mi2p1.ss", 0x48000004, 0xb40005fb, "e,f,g", 0 }, -{ "mi2p1.sd", 0x48000084, 0xb400057b, "e,f,g", 0 }, -{ "mi2p1.dd", 0x48000184, 0xb400047b, "e,f,g", 0 }, -{ "mi2pt.ss", 0x48000005, 0xb40005fa, "e,f,g", 0 }, -{ "mi2pt.sd", 0x48000085, 0xb400057a, "e,f,g", 0 }, -{ "mi2pt.dd", 0x48000185, 0xb400047a, "e,f,g", 0 }, -{ "mi2mp1.ss", 0x48000006, 0xb40005f9, "e,f,g", 0 }, -{ "mi2mp1.sd", 0x48000086, 0xb4000579, "e,f,g", 0 }, -{ "mi2mp1.dd", 0x48000186, 0xb4000479, "e,f,g", 0 }, -{ "mi2mpt.ss", 0x48000007, 0xb40005f8, "e,f,g", 0 }, -{ "mi2mpt.sd", 0x48000087, 0xb4000578, "e,f,g", 0 }, -{ "mi2mpt.dd", 0x48000187, 0xb4000478, "e,f,g", 0 }, -{ "mrmt1p2.ss", 0x48000008, 0xb40005f7, "e,f,g", 0 }, -{ "mrmt1p2.sd", 0x48000088, 0xb4000577, "e,f,g", 0 }, -{ "mrmt1p2.dd", 0x48000188, 0xb4000477, "e,f,g", 0 }, -{ "mm12mpm.ss", 0x48000009, 0xb40005f6, "e,f,g", 0 }, -{ "mm12mpm.sd", 0x48000089, 0xb4000576, "e,f,g", 0 }, -{ "mm12mpm.dd", 0x48000189, 0xb4000476, "e,f,g", 0 }, -{ "mrm1p2.ss", 0x4800000a, 0xb40005f5, "e,f,g", 0 }, -{ "mrm1p2.sd", 0x4800008a, 0xb4000575, "e,f,g", 0 }, -{ "mrm1p2.dd", 0x4800018a, 0xb4000475, "e,f,g", 0 }, -{ "mm12ttpm.ss",0x4800000b, 0xb40005f4, "e,f,g", 0 }, -{ "mm12ttpm.sd",0x4800008b, 0xb4000574, "e,f,g", 0 }, -{ "mm12ttpm.dd",0x4800018b, 0xb4000474, "e,f,g", 0 }, -{ "mimt1p2.ss", 0x4800000c, 0xb40005f3, "e,f,g", 0 }, -{ "mimt1p2.sd", 0x4800008c, 0xb4000573, "e,f,g", 0 }, -{ "mimt1p2.dd", 0x4800018c, 0xb4000473, "e,f,g", 0 }, -{ "mm12tpm.ss", 0x4800000d, 0xb40005f2, "e,f,g", 0 }, -{ "mm12tpm.sd", 0x4800008d, 0xb4000572, "e,f,g", 0 }, -{ "mm12tpm.dd", 0x4800018d, 0xb4000472, "e,f,g", 0 }, -{ "mim1p2.ss", 0x4800000e, 0xb40005f1, "e,f,g", 0 }, -{ "mim1p2.sd", 0x4800008e, 0xb4000571, "e,f,g", 0 }, -{ "mim1p2.dd", 0x4800018e, 0xb4000471, "e,f,g", 0 }, - -/* Floating Point Escape Instruction Format - pfmsm.p fsrc1,fsrc2,fdest. */ -{ "mr2s1.ss", 0x48000010, 0xb40005ef, "e,f,g", 0 }, -{ "mr2s1.sd", 0x48000090, 0xb400056f, "e,f,g", 0 }, -{ "mr2s1.dd", 0x48000190, 0xb400046f, "e,f,g", 0 }, -{ "mr2st.ss", 0x48000011, 0xb40005ee, "e,f,g", 0 }, -{ "mr2st.sd", 0x48000091, 0xb400056e, "e,f,g", 0 }, -{ "mr2st.dd", 0x48000191, 0xb400046e, "e,f,g", 0 }, -{ "mr2ms1.ss", 0x48000012, 0xb40005ed, "e,f,g", 0 }, -{ "mr2ms1.sd", 0x48000092, 0xb400056d, "e,f,g", 0 }, -{ "mr2ms1.dd", 0x48000192, 0xb400046d, "e,f,g", 0 }, -{ "mr2mst.ss", 0x48000013, 0xb40005ec, "e,f,g", 0 }, -{ "mr2mst.sd", 0x48000093, 0xb400056c, "e,f,g", 0 }, -{ "mr2mst.dd", 0x48000193, 0xb400046c, "e,f,g", 0 }, -{ "mi2s1.ss", 0x48000014, 0xb40005eb, "e,f,g", 0 }, -{ "mi2s1.sd", 0x48000094, 0xb400056b, "e,f,g", 0 }, -{ "mi2s1.dd", 0x48000194, 0xb400046b, "e,f,g", 0 }, -{ "mi2st.ss", 0x48000015, 0xb40005ea, "e,f,g", 0 }, -{ "mi2st.sd", 0x48000095, 0xb400056a, "e,f,g", 0 }, -{ "mi2st.dd", 0x48000195, 0xb400046a, "e,f,g", 0 }, -{ "mi2ms1.ss", 0x48000016, 0xb40005e9, "e,f,g", 0 }, -{ "mi2ms1.sd", 0x48000096, 0xb4000569, "e,f,g", 0 }, -{ "mi2ms1.dd", 0x48000196, 0xb4000469, "e,f,g", 0 }, -{ "mi2mst.ss", 0x48000017, 0xb40005e8, "e,f,g", 0 }, -{ "mi2mst.sd", 0x48000097, 0xb4000568, "e,f,g", 0 }, -{ "mi2mst.dd", 0x48000197, 0xb4000468, "e,f,g", 0 }, -{ "mrmt1s2.ss", 0x48000018, 0xb40005e7, "e,f,g", 0 }, -{ "mrmt1s2.sd", 0x48000098, 0xb4000567, "e,f,g", 0 }, -{ "mrmt1s2.dd", 0x48000198, 0xb4000467, "e,f,g", 0 }, -{ "mm12msm.ss", 0x48000019, 0xb40005e6, "e,f,g", 0 }, -{ "mm12msm.sd", 0x48000099, 0xb4000566, "e,f,g", 0 }, -{ "mm12msm.dd", 0x48000199, 0xb4000466, "e,f,g", 0 }, -{ "mrm1s2.ss", 0x4800001a, 0xb40005e5, "e,f,g", 0 }, -{ "mrm1s2.sd", 0x4800009a, 0xb4000565, "e,f,g", 0 }, -{ "mrm1s2.dd", 0x4800019a, 0xb4000465, "e,f,g", 0 }, -{ "mm12ttsm.ss",0x4800001b, 0xb40005e4, "e,f,g", 0 }, -{ "mm12ttsm.sd",0x4800009b, 0xb4000564, "e,f,g", 0 }, -{ "mm12ttsm.dd",0x4800019b, 0xb4000464, "e,f,g", 0 }, -{ "mimt1s2.ss", 0x4800001c, 0xb40005e3, "e,f,g", 0 }, -{ "mimt1s2.sd", 0x4800009c, 0xb4000563, "e,f,g", 0 }, -{ "mimt1s2.dd", 0x4800019c, 0xb4000463, "e,f,g", 0 }, -{ "mm12tsm.ss", 0x4800001d, 0xb40005e2, "e,f,g", 0 }, -{ "mm12tsm.sd", 0x4800009d, 0xb4000562, "e,f,g", 0 }, -{ "mm12tsm.dd", 0x4800019d, 0xb4000462, "e,f,g", 0 }, -{ "mim1s2.ss", 0x4800001e, 0xb40005e1, "e,f,g", 0 }, -{ "mim1s2.sd", 0x4800009e, 0xb4000561, "e,f,g", 0 }, -{ "mim1s2.dd", 0x4800019e, 0xb4000461, "e,f,g", 0 }, - -{ "fmul.ss", 0x48000020, 0xb40005df, "e,f,g", 0 }, /* fmul.p fsrc1,fsrc2,fdest */ -{ "fmul.sd", 0x480000a0, 0xb400055f, "e,f,g", 0 }, /* fmul.p fsrc1,fsrc2,fdest */ -{ "fmul.dd", 0x480001a0, 0xb400045f, "e,f,g", 0 }, /* fmul.p fsrc1,fsrc2,fdest */ -{ "pfmul.ss", 0x48000420, 0xb40001df, "e,f,g", 0 }, /* pfmul.p fsrc1,fsrc2,fdest */ -{ "pfmul.sd", 0x480004a0, 0xb400015f, "e,f,g", 0 }, /* pfmul.p fsrc1,fsrc2,fdest */ -{ "pfmul.dd", 0x480005a0, 0xb400005f, "e,f,g", 0 }, /* pfmul.p fsrc1,fsrc2,fdest */ -{ "pfmul3.dd", 0x480005a4, 0xb400005b, "e,f,g", 0 }, /* pfmul3.p fsrc1,fsrc2,fdest */ -{ "fmlow.dd", 0x480001a1, 0xb400045e, "e,f,g", 0 }, /* fmlow.dd fsrc1,fsrc2,fdest */ -{ "frcp.ss", 0x48000022, 0xb40005dd, "f,g", 0 }, /* frcp.p fsrc2,fdest */ -{ "frcp.sd", 0x480000a2, 0xb400055d, "f,g", 0 }, /* frcp.p fsrc2,fdest */ -{ "frcp.dd", 0x480001a2, 0xb400045d, "f,g", 0 }, /* frcp.p fsrc2,fdest */ -{ "frsqr.ss", 0x48000023, 0xb40005dc, "f,g", 0 }, /* frsqr.p fsrc2,fdest */ -{ "frsqr.sd", 0x480000a3, 0xb400055c, "f,g", 0 }, /* frsqr.p fsrc2,fdest */ -{ "frsqr.dd", 0x480001a3, 0xb400045c, "f,g", 0 }, /* frsqr.p fsrc2,fdest */ -{ "fadd.ss", 0x48000030, 0xb40005cf, "e,f,g", 0 }, /* fadd.p fsrc1,fsrc2,fdest */ -{ "fadd.sd", 0x480000b0, 0xb400054f, "e,f,g", 0 }, /* fadd.p fsrc1,fsrc2,fdest */ -{ "fadd.dd", 0x480001b0, 0xb400044f, "e,f,g", 0 }, /* fadd.p fsrc1,fsrc2,fdest */ -{ "pfadd.ss", 0x48000430, 0xb40001cf, "e,f,g", 0 }, /* pfadd.p fsrc1,fsrc2,fdest */ -{ "pfadd.sd", 0x480004b0, 0xb400014f, "e,f,g", 0 }, /* pfadd.p fsrc1,fsrc2,fdest */ -{ "pfadd.dd", 0x480005b0, 0xb400004f, "e,f,g", 0 }, /* pfadd.p fsrc1,fsrc2,fdest */ -{ "fsub.ss", 0x48000031, 0xb40005ce, "e,f,g", 0 }, /* fsub.p fsrc1,fsrc2,fdest */ -{ "fsub.sd", 0x480000b1, 0xb400054e, "e,f,g", 0 }, /* fsub.p fsrc1,fsrc2,fdest */ -{ "fsub.dd", 0x480001b1, 0xb400044e, "e,f,g", 0 }, /* fsub.p fsrc1,fsrc2,fdest */ -{ "pfsub.ss", 0x48000431, 0xb40001ce, "e,f,g", 0 }, /* pfsub.p fsrc1,fsrc2,fdest */ -{ "pfsub.sd", 0x480004b1, 0xb400014e, "e,f,g", 0 }, /* pfsub.p fsrc1,fsrc2,fdest */ -{ "pfsub.dd", 0x480005b1, 0xb400004e, "e,f,g", 0 }, /* pfsub.p fsrc1,fsrc2,fdest */ -{ "fix.sd", 0x480000b2, 0xb400054d, "e,g", 0 }, /* fix.p fsrc1,fdest */ -{ "fix.dd", 0x480001b2, 0xb400044d, "e,g", 0 }, /* fix.p fsrc1,fdest */ -{ "pfix.sd", 0x480004b2, 0xb400014d, "e,g", 0 }, /* pfix.p fsrc1,fdest */ -{ "pfix.dd", 0x480005b2, 0xb400004d, "e,g", 0 }, /* pfix.p fsrc1,fdest */ -{ "famov.ss", 0x48000033, 0xb40005cc, "e,g", 0 }, /* famov.p fsrc1,fdest */ -{ "famov.ds", 0x48000133, 0xb40004cc, "e,g", 0 }, /* famov.p fsrc1,fdest */ -{ "famov.sd", 0x480000b3, 0xb400054c, "e,g", 0 }, /* famov.p fsrc1,fdest */ -{ "famov.dd", 0x480001b3, 0xb400044c, "e,g", 0 }, /* famov.p fsrc1,fdest */ -{ "pfamov.ss", 0x48000433, 0xb40001cc, "e,g", 0 }, /* pfamov.p fsrc1,fdest */ -{ "pfamov.ds", 0x48000533, 0xb40000cc, "e,g", 0 }, /* pfamov.p fsrc1,fdest */ -{ "pfamov.sd", 0x480004b3, 0xb400014c, "e,g", 0 }, /* pfamov.p fsrc1,fdest */ -{ "pfamov.dd", 0x480005b3, 0xb400004c, "e,g", 0 }, /* pfamov.p fsrc1,fdest */ -/* Opcode pfgt has R bit cleared; pfle has R bit set. */ -{ "pfgt.ss", 0x48000434, 0xb40001cb, "e,f,g", 0 }, /* pfgt.p fsrc1,fsrc2,fdest */ -{ "pfgt.dd", 0x48000534, 0xb40000cb, "e,f,g", 0 }, /* pfgt.p fsrc1,fsrc2,fdest */ -/* Opcode pfgt has R bit cleared; pfle has R bit set. */ -{ "pfle.ss", 0x480004b4, 0xb400014b, "e,f,g", 0 }, /* pfle.p fsrc1,fsrc2,fdest */ -{ "pfle.dd", 0x480005b4, 0xb400004b, "e,f,g", 0 }, /* pfle.p fsrc1,fsrc2,fdest */ -{ "pfeq.ss", 0x48000435, 0xb40001ca, "e,f,g", 0 }, /* pfeq.p fsrc1,fsrc2,fdest */ -{ "pfeq.dd", 0x48000535, 0xb40000ca, "e,f,g", 0 }, /* pfeq.p fsrc1,fsrc2,fdest */ -{ "ftrunc.sd", 0x480000ba, 0xb4000545, "e,g", 0 }, /* ftrunc.p fsrc1,fdest */ -{ "ftrunc.dd", 0x480001ba, 0xb4000445, "e,g", 0 }, /* ftrunc.p fsrc1,fdest */ -{ "pftrunc.sd", 0x480004ba, 0xb4000145, "e,g", 0 }, /* pftrunc.p fsrc1,fdest */ -{ "pftrunc.dd", 0x480005ba, 0xb4000045, "e,g", 0 }, /* pftrunc.p fsrc1,fdest */ -{ "fxfr", 0x48000040, 0xb40005bf, "e,d", 0 }, /* fxfr fsrc1,idest */ -{ "fiadd.ss", 0x48000049, 0xb40005b6, "e,f,g", 0 }, /* fiadd.w fsrc1,fsrc2,fdest */ -{ "fiadd.dd", 0x480001c9, 0xb4000436, "e,f,g", 0 }, /* fiadd.w fsrc1,fsrc2,fdest */ -{ "pfiadd.ss", 0x48000449, 0xb40001b6, "e,f,g", 0 }, /* pfiadd.w fsrc1,fsrc2,fdest */ -{ "pfiadd.dd", 0x480005c9, 0xb4000036, "e,f,g", 0 }, /* pfiadd.w fsrc1,fsrc2,fdest */ -{ "fisub.ss", 0x4800004d, 0xb40005b2, "e,f,g", 0 }, /* fisub.w fsrc1,fsrc2,fdest */ -{ "fisub.dd", 0x480001cd, 0xb4000432, "e,f,g", 0 }, /* fisub.w fsrc1,fsrc2,fdest */ -{ "pfisub.ss", 0x4800044d, 0xb40001b2, "e,f,g", 0 }, /* pfisub.w fsrc1,fsrc2,fdest */ -{ "pfisub.dd", 0x480005cd, 0xb4000032, "e,f,g", 0 }, /* pfisub.w fsrc1,fsrc2,fdest */ -{ "fzchkl", 0x480001d7, 0xb4000428, "e,f,g", 0 }, /* fzchkl fsrc1,fsrc2,fdest */ -{ "pfzchkl", 0x480005d7, 0xb4000028, "e,f,g", 0 }, /* pfzchkl fsrc1,fsrc2,fdest */ -{ "fzchks", 0x480001df, 0xb4000420, "e,f,g", 0 }, /* fzchks fsrc1,fsrc2,fdest */ -{ "pfzchks", 0x480005df, 0xb4000020, "e,f,g", 0 }, /* pfzchks fsrc1,fsrc2,fdest */ -{ "faddp", 0x480001d0, 0xb400042f, "e,f,g", 0 }, /* faddp fsrc1,fsrc2,fdest */ -{ "pfaddp", 0x480005d0, 0xb400002f, "e,f,g", 0 }, /* pfaddp fsrc1,fsrc2,fdest */ -{ "faddz", 0x480001d1, 0xb400042e, "e,f,g", 0 }, /* faddz fsrc1,fsrc2,fdest */ -{ "pfaddz", 0x480005d1, 0xb400002e, "e,f,g", 0 }, /* pfaddz fsrc1,fsrc2,fdest */ -{ "form", 0x480001da, 0xb4000425, "e,g", 0 }, /* form fsrc1,fdest */ -{ "pform", 0x480005da, 0xb4000025, "e,g", 0 }, /* pform fsrc1,fdest */ - -/* Floating point pseudo-instructions. */ -{ "fmov.ss", 0x48000049, 0xb7e005b6, "e,g", 0 }, /* fiadd.ss fsrc1,f0,fdest */ -{ "fmov.dd", 0x480001c9, 0xb7e00436, "e,g", 0 }, /* fiadd.dd fsrc1,f0,fdest */ -{ "fmov.sd", 0x480000b3, 0xb400054c, "e,g", 0 }, /* famov.sd fsrc1,fdest */ -{ "fmov.ds", 0x48000133, 0xb40004cc, "e,g", 0 }, /* famov.ds fsrc1,fdest */ -{ "pfmov.ds", 0x48000533, 0xb40000cc, "e,g", 0 }, /* pfamov.ds fsrc1,fdest */ -{ "pfmov.dd", 0x480005c9, 0xb7e00036, "e,g", 0 }, /* pfiadd.dd fsrc1,f0,fdest */ -{ 0, 0, 0, 0, 0 }, - -}; - -#define NUMOPCODES ((sizeof i860_opcodes)/(sizeof i860_opcodes[0])) - - diff --git a/include/opcode/i960.h b/include/opcode/i960.h deleted file mode 100644 index 0999aa15d68..00000000000 --- a/include/opcode/i960.h +++ /dev/null @@ -1,525 +0,0 @@ -/* Basic 80960 instruction formats. - - Copyright 2001 Free Software Foundation, Inc. - - This program 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, 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., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. - - The 'COJ' instructions are actually COBR instructions with the 'b' in - the mnemonic replaced by a 'j'; they are ALWAYS "de-optimized" if necessary: - if the displacement will not fit in 13 bits, the assembler will replace them - with the corresponding compare and branch instructions. - - All of the 'MEMn' instructions are the same format; the 'n' in the name - indicates the default index scale factor (the size of the datum operated on). - - The FBRA formats are not actually an instruction format. They are the - "convenience directives" for branching on floating-point comparisons, - each of which generates 2 instructions (a 'bno' and one other branch). - - The CALLJ format is not actually an instruction format. It indicates that - the instruction generated (a CTRL-format 'call') should have its relocation - specially flagged for link-time replacement with a 'bal' or 'calls' if - appropriate. */ - -#define CTRL 0 -#define COBR 1 -#define COJ 2 -#define REG 3 -#define MEM1 4 -#define MEM2 5 -#define MEM4 6 -#define MEM8 7 -#define MEM12 8 -#define MEM16 9 -#define FBRA 10 -#define CALLJ 11 - -/* Masks for the mode bits in REG format instructions */ -#define M1 0x0800 -#define M2 0x1000 -#define M3 0x2000 - -/* Generate the 12-bit opcode for a REG format instruction by placing the - * high 8 bits in instruction bits 24-31, the low 4 bits in instruction bits - * 7-10. - */ - -#define REG_OPC(opc) ((opc & 0xff0) << 20) | ((opc & 0xf) << 7) - -/* Generate a template for a REG format instruction: place the opcode bits - * in the appropriate fields and OR in mode bits for the operands that will not - * be used. I.e., - * set m1=1, if src1 will not be used - * set m2=1, if src2 will not be used - * set m3=1, if dst will not be used - * - * Setting the "unused" mode bits to 1 speeds up instruction execution(!). - * The information is also useful to us because some 1-operand REG instructions - * use the src1 field, others the dst field; and some 2-operand REG instructions - * use src1/src2, others src1/dst. The set mode bits enable us to distinguish. - */ -#define R_0(opc) ( REG_OPC(opc) | M1 | M2 | M3 ) /* No operands */ -#define R_1(opc) ( REG_OPC(opc) | M2 | M3 ) /* 1 operand: src1 */ -#define R_1D(opc) ( REG_OPC(opc) | M1 | M2 ) /* 1 operand: dst */ -#define R_2(opc) ( REG_OPC(opc) | M3 ) /* 2 ops: src1/src2 */ -#define R_2D(opc) ( REG_OPC(opc) | M2 ) /* 2 ops: src1/dst */ -#define R_3(opc) ( REG_OPC(opc) ) /* 3 operands */ - -/* DESCRIPTOR BYTES FOR REGISTER OPERANDS - * - * Interpret names as follows: - * R: global or local register only - * RS: global, local, or (if target allows) special-function register only - * RL: global or local register, or integer literal - * RSL: global, local, or (if target allows) special-function register; - * or integer literal - * F: global, local, or floating-point register - * FL: global, local, or floating-point register; or literal (including - * floating point) - * - * A number appended to a name indicates that registers must be aligned, - * as follows: - * 2: register number must be multiple of 2 - * 4: register number must be multiple of 4 - */ - -#define SFR 0x10 /* Mask for the "sfr-OK" bit */ -#define LIT 0x08 /* Mask for the "literal-OK" bit */ -#define FP 0x04 /* Mask for "floating-point-OK" bit */ - -/* This macro ors the bits together. Note that 'align' is a mask - * for the low 0, 1, or 2 bits of the register number, as appropriate. - */ -#define OP(align,lit,fp,sfr) ( align | lit | fp | sfr ) - -#define R OP( 0, 0, 0, 0 ) -#define RS OP( 0, 0, 0, SFR ) -#define RL OP( 0, LIT, 0, 0 ) -#define RSL OP( 0, LIT, 0, SFR ) -#define F OP( 0, 0, FP, 0 ) -#define FL OP( 0, LIT, FP, 0 ) -#define R2 OP( 1, 0, 0, 0 ) -#define RL2 OP( 1, LIT, 0, 0 ) -#define F2 OP( 1, 0, FP, 0 ) -#define FL2 OP( 1, LIT, FP, 0 ) -#define R4 OP( 3, 0, 0, 0 ) -#define RL4 OP( 3, LIT, 0, 0 ) -#define F4 OP( 3, 0, FP, 0 ) -#define FL4 OP( 3, LIT, FP, 0 ) - -#define M 0x7f /* Memory operand (MEMA & MEMB format instructions) */ - -/* Macros to extract info from the register operand descriptor byte 'od'. - */ -#define SFR_OK(od) (od & SFR) /* TRUE if sfr operand allowed */ -#define LIT_OK(od) (od & LIT) /* TRUE if literal operand allowed */ -#define FP_OK(od) (od & FP) /* TRUE if floating-point op allowed */ -#define REG_ALIGN(od,n) ((od & 0x3 & n) == 0) - /* TRUE if reg #n is properly aligned */ -#define MEMOP(od) (od == M) /* TRUE if operand is a memory operand*/ - -/* Description of a single i80960 instruction */ -struct i960_opcode { - long opcode; /* 32 bits, constant fields filled in, rest zeroed */ - char *name; /* Assembler mnemonic */ - short iclass; /* Class: see #defines below */ - char format; /* REG, COBR, CTRL, MEMn, COJ, FBRA, or CALLJ */ - char num_ops; /* Number of operands */ - char operand[3];/* Operand descriptors; same order as assembler instr */ -}; - -/* Classes of 960 intructions: - * - each instruction falls into one class. - * - each target architecture supports one or more classes. - * - * EACH CONSTANT MUST CONTAIN 1 AND ONLY 1 SET BIT!: see targ_has_iclass(). - */ -#define I_BASE 0x01 /* 80960 base instruction set */ -#define I_CX 0x02 /* 80960Cx instruction */ -#define I_DEC 0x04 /* Decimal instruction */ -#define I_FP 0x08 /* Floating point instruction */ -#define I_KX 0x10 /* 80960Kx instruction */ -#define I_MIL 0x20 /* Military instruction */ -#define I_CASIM 0x40 /* CA simulator instruction */ -#define I_CX2 0x80 /* Cx/Jx/Hx instructions */ -#define I_JX 0x100 /* Jx/Hx instruction */ -#define I_HX 0x200 /* Hx instructions */ - -/****************************************************************************** - * - * TABLE OF i960 INSTRUCTION DESCRIPTIONS - * - ******************************************************************************/ - -const struct i960_opcode i960_opcodes[] = { - - /* if a CTRL instruction has an operand, it's always a displacement */ - - /* callj default=='call' */ - { 0x09000000, "callj", I_BASE, CALLJ, 1, { 0, 0, 0 } }, - { 0x08000000, "b", I_BASE, CTRL, 1, { 0, 0, 0 } }, - { 0x09000000, "call", I_BASE, CTRL, 1, { 0, 0, 0 } }, - { 0x0a000000, "ret", I_BASE, CTRL, 0, { 0, 0, 0 } }, - { 0x0b000000, "bal", I_BASE, CTRL, 1, { 0, 0, 0 } }, - { 0x10000000, "bno", I_BASE, CTRL, 1, { 0, 0, 0 } }, - /* bf same as bno */ - { 0x10000000, "bf", I_BASE, CTRL, 1, { 0, 0, 0 } }, - /* bru same as bno */ - { 0x10000000, "bru", I_BASE, CTRL, 1, { 0, 0, 0 } }, - { 0x11000000, "bg", I_BASE, CTRL, 1, { 0, 0, 0 } }, - /* brg same as bg */ - { 0x11000000, "brg", I_BASE, CTRL, 1, { 0, 0, 0 } }, - { 0x12000000, "be", I_BASE, CTRL, 1, { 0, 0, 0 } }, - /* bre same as be */ - { 0x12000000, "bre", I_BASE, CTRL, 1, { 0, 0, 0 } }, - { 0x13000000, "bge", I_BASE, CTRL, 1, { 0, 0, 0 } }, - /* brge same as bge */ - { 0x13000000, "brge", I_BASE, CTRL, 1, { 0, 0, 0 } }, - { 0x14000000, "bl", I_BASE, CTRL, 1, { 0, 0, 0 } }, - /* brl same as bl */ - { 0x14000000, "brl", I_BASE, CTRL, 1, { 0, 0, 0 } }, - { 0x15000000, "bne", I_BASE, CTRL, 1, { 0, 0, 0 } }, - /* brlg same as bne */ - { 0x15000000, "brlg", I_BASE, CTRL, 1, { 0, 0, 0 } }, - { 0x16000000, "ble", I_BASE, CTRL, 1, { 0, 0, 0 } }, - /* brle same as ble */ - { 0x16000000, "brle", I_BASE, CTRL, 1, { 0, 0, 0 } }, - { 0x17000000, "bo", I_BASE, CTRL, 1, { 0, 0, 0 } }, - /* bt same as bo */ - { 0x17000000, "bt", I_BASE, CTRL, 1, { 0, 0, 0 } }, - /* bro same as bo */ - { 0x17000000, "bro", I_BASE, CTRL, 1, { 0, 0, 0 } }, - { 0x18000000, "faultno", I_BASE, CTRL, 0, { 0, 0, 0 } }, - /* faultf same as faultno */ - { 0x18000000, "faultf", I_BASE, CTRL, 0, { 0, 0, 0 } }, - { 0x19000000, "faultg", I_BASE, CTRL, 0, { 0, 0, 0 } }, - { 0x1a000000, "faulte", I_BASE, CTRL, 0, { 0, 0, 0 } }, - { 0x1b000000, "faultge", I_BASE, CTRL, 0, { 0, 0, 0 } }, - { 0x1c000000, "faultl", I_BASE, CTRL, 0, { 0, 0, 0 } }, - { 0x1d000000, "faultne", I_BASE, CTRL, 0, { 0, 0, 0 } }, - { 0x1e000000, "faultle", I_BASE, CTRL, 0, { 0, 0, 0 } }, - { 0x1f000000, "faulto", I_BASE, CTRL, 0, { 0, 0, 0 } }, - /* faultt syn for faulto */ - { 0x1f000000, "faultt", I_BASE, CTRL, 0, { 0, 0, 0 } }, - - { 0x01000000, "syscall", I_CASIM,CTRL, 0, { 0, 0, 0 } }, - - /* If a COBR (or COJ) has 3 operands, the last one is always a - * displacement and does not appear explicitly in the table. - */ - - { 0x20000000, "testno", I_BASE, COBR, 1, { R, 0, 0 } }, - { 0x21000000, "testg", I_BASE, COBR, 1, { R, 0, 0 } }, - { 0x22000000, "teste", I_BASE, COBR, 1, { R, 0, 0 } }, - { 0x23000000, "testge", I_BASE, COBR, 1, { R, 0, 0 } }, - { 0x24000000, "testl", I_BASE, COBR, 1, { R, 0, 0 } }, - { 0x25000000, "testne", I_BASE, COBR, 1, { R, 0, 0 } }, - { 0x26000000, "testle", I_BASE, COBR, 1, { R, 0, 0 } }, - { 0x27000000, "testo", I_BASE, COBR, 1, { R, 0, 0 } }, - { 0x30000000, "bbc", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x31000000, "cmpobg", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x32000000, "cmpobe", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x33000000, "cmpobge", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x34000000, "cmpobl", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x35000000, "cmpobne", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x36000000, "cmpoble", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x37000000, "bbs", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x38000000, "cmpibno", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x39000000, "cmpibg", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x3a000000, "cmpibe", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x3b000000, "cmpibge", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x3c000000, "cmpibl", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x3d000000, "cmpibne", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x3e000000, "cmpible", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x3f000000, "cmpibo", I_BASE, COBR, 3, { RL, RS, 0 } }, - { 0x31000000, "cmpojg", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x32000000, "cmpoje", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x33000000, "cmpojge", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x34000000, "cmpojl", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x35000000, "cmpojne", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x36000000, "cmpojle", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x38000000, "cmpijno", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x39000000, "cmpijg", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x3a000000, "cmpije", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x3b000000, "cmpijge", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x3c000000, "cmpijl", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x3d000000, "cmpijne", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x3e000000, "cmpijle", I_BASE, COJ, 3, { RL, RS, 0 } }, - { 0x3f000000, "cmpijo", I_BASE, COJ, 3, { RL, RS, 0 } }, - - { 0x80000000, "ldob", I_BASE, MEM1, 2, { M, R, 0 } }, - { 0x82000000, "stob", I_BASE, MEM1, 2, { R, M, 0 } }, - { 0x84000000, "bx", I_BASE, MEM1, 1, { M, 0, 0 } }, - { 0x85000000, "balx", I_BASE, MEM1, 2, { M, R, 0 } }, - { 0x86000000, "callx", I_BASE, MEM1, 1, { M, 0, 0 } }, - { 0x88000000, "ldos", I_BASE, MEM2, 2, { M, R, 0 } }, - { 0x8a000000, "stos", I_BASE, MEM2, 2, { R, M, 0 } }, - { 0x8c000000, "lda", I_BASE, MEM1, 2, { M, R, 0 } }, - { 0x90000000, "ld", I_BASE, MEM4, 2, { M, R, 0 } }, - { 0x92000000, "st", I_BASE, MEM4, 2, { R, M, 0 } }, - { 0x98000000, "ldl", I_BASE, MEM8, 2, { M, R2, 0 } }, - { 0x9a000000, "stl", I_BASE, MEM8, 2, { R2, M, 0 } }, - { 0xa0000000, "ldt", I_BASE, MEM12, 2, { M, R4, 0 } }, - { 0xa2000000, "stt", I_BASE, MEM12, 2, { R4, M, 0 } }, - { 0xb0000000, "ldq", I_BASE, MEM16, 2, { M, R4, 0 } }, - { 0xb2000000, "stq", I_BASE, MEM16, 2, { R4, M, 0 } }, - { 0xc0000000, "ldib", I_BASE, MEM1, 2, { M, R, 0 } }, - { 0xc2000000, "stib", I_BASE, MEM1, 2, { R, M, 0 } }, - { 0xc8000000, "ldis", I_BASE, MEM2, 2, { M, R, 0 } }, - { 0xca000000, "stis", I_BASE, MEM2, 2, { R, M, 0 } }, - - { R_3(0x580), "notbit", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x581), "and", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x582), "andnot", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x583), "setbit", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x584), "notand", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x586), "xor", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x587), "or", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x588), "nor", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x589), "xnor", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_2D(0x58a), "not", I_BASE, REG, 2, { RSL,RS, 0 } }, - { R_3(0x58b), "ornot", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x58c), "clrbit", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x58d), "notor", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x58e), "nand", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x58f), "alterbit", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x590), "addo", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x591), "addi", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x592), "subo", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x593), "subi", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x598), "shro", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x59a), "shrdi", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x59b), "shri", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x59c), "shlo", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x59d), "rotate", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x59e), "shli", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_2(0x5a0), "cmpo", I_BASE, REG, 2, { RSL,RSL, 0 } }, - { R_2(0x5a1), "cmpi", I_BASE, REG, 2, { RSL,RSL, 0 } }, - { R_2(0x5a2), "concmpo", I_BASE, REG, 2, { RSL,RSL, 0 } }, - { R_2(0x5a3), "concmpi", I_BASE, REG, 2, { RSL,RSL, 0 } }, - { R_3(0x5a4), "cmpinco", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x5a5), "cmpinci", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x5a6), "cmpdeco", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x5a7), "cmpdeci", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_2(0x5ac), "scanbyte", I_BASE, REG, 2, { RSL,RSL, 0 } }, - { R_2(0x5ae), "chkbit", I_BASE, REG, 2, { RSL,RSL, 0 } }, - { R_3(0x5b0), "addc", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x5b2), "subc", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_2D(0x5cc), "mov", I_BASE, REG, 2, { RSL,RS, 0 } }, - { R_2D(0x5dc), "movl", I_BASE, REG, 2, { RL2,R2, 0 } }, - { R_2D(0x5ec), "movt", I_BASE, REG, 2, { RL4,R4, 0 } }, - { R_2D(0x5fc), "movq", I_BASE, REG, 2, { RL4,R4, 0 } }, - { R_3(0x610), "atmod", I_BASE, REG, 3, { RS, RSL,R } }, - { R_3(0x612), "atadd", I_BASE, REG, 3, { RS, RSL,RS } }, - { R_2D(0x640), "spanbit", I_BASE, REG, 2, { RSL,RS, 0 } }, - { R_2D(0x641), "scanbit", I_BASE, REG, 2, { RSL,RS, 0 } }, - { R_3(0x645), "modac", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x650), "modify", I_BASE, REG, 3, { RSL,RSL,R } }, - { R_3(0x651), "extract", I_BASE, REG, 3, { RSL,RSL,R } }, - { R_3(0x654), "modtc", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x655), "modpc", I_BASE, REG, 3, { RSL,RSL,R } }, - { R_1(0x660), "calls", I_BASE, REG, 1, { RSL, 0, 0 } }, - { R_0(0x66b), "mark", I_BASE, REG, 0, { 0, 0, 0 } }, - { R_0(0x66c), "fmark", I_BASE, REG, 0, { 0, 0, 0 } }, - { R_0(0x66d), "flushreg", I_BASE, REG, 0, { 0, 0, 0 } }, - { R_0(0x66f), "syncf", I_BASE, REG, 0, { 0, 0, 0 } }, - { R_3(0x670), "emul", I_BASE, REG, 3, { RSL,RSL,R2 } }, - { R_3(0x671), "ediv", I_BASE, REG, 3, { RSL,RL2,RS } }, - { R_2D(0x672), "cvtadr", I_CASIM,REG, 2, { RL, R2, 0 } }, - { R_3(0x701), "mulo", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x708), "remo", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x70b), "divo", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x741), "muli", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x748), "remi", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x749), "modi", I_BASE, REG, 3, { RSL,RSL,RS } }, - { R_3(0x74b), "divi", I_BASE, REG, 3, { RSL,RSL,RS } }, - - /* Floating-point instructions */ - - { R_2D(0x674), "cvtir", I_FP, REG, 2, { RL, F, 0 } }, - { R_2D(0x675), "cvtilr", I_FP, REG, 2, { RL, F, 0 } }, - { R_3(0x676), "scalerl", I_FP, REG, 3, { RL, FL2,F2 } }, - { R_3(0x677), "scaler", I_FP, REG, 3, { RL, FL, F } }, - { R_3(0x680), "atanr", I_FP, REG, 3, { FL, FL, F } }, - { R_3(0x681), "logepr", I_FP, REG, 3, { FL, FL, F } }, - { R_3(0x682), "logr", I_FP, REG, 3, { FL, FL, F } }, - { R_3(0x683), "remr", I_FP, REG, 3, { FL, FL, F } }, - { R_2(0x684), "cmpor", I_FP, REG, 2, { FL, FL, 0 } }, - { R_2(0x685), "cmpr", I_FP, REG, 2, { FL, FL, 0 } }, - { R_2D(0x688), "sqrtr", I_FP, REG, 2, { FL, F, 0 } }, - { R_2D(0x689), "expr", I_FP, REG, 2, { FL, F, 0 } }, - { R_2D(0x68a), "logbnr", I_FP, REG, 2, { FL, F, 0 } }, - { R_2D(0x68b), "roundr", I_FP, REG, 2, { FL, F, 0 } }, - { R_2D(0x68c), "sinr", I_FP, REG, 2, { FL, F, 0 } }, - { R_2D(0x68d), "cosr", I_FP, REG, 2, { FL, F, 0 } }, - { R_2D(0x68e), "tanr", I_FP, REG, 2, { FL, F, 0 } }, - { R_1(0x68f), "classr", I_FP, REG, 1, { FL, 0, 0 } }, - { R_3(0x690), "atanrl", I_FP, REG, 3, { FL2,FL2,F2 } }, - { R_3(0x691), "logeprl", I_FP, REG, 3, { FL2,FL2,F2 } }, - { R_3(0x692), "logrl", I_FP, REG, 3, { FL2,FL2,F2 } }, - { R_3(0x693), "remrl", I_FP, REG, 3, { FL2,FL2,F2 } }, - { R_2(0x694), "cmporl", I_FP, REG, 2, { FL2,FL2, 0 } }, - { R_2(0x695), "cmprl", I_FP, REG, 2, { FL2,FL2, 0 } }, - { R_2D(0x698), "sqrtrl", I_FP, REG, 2, { FL2,F2, 0 } }, - { R_2D(0x699), "exprl", I_FP, REG, 2, { FL2,F2, 0 } }, - { R_2D(0x69a), "logbnrl", I_FP, REG, 2, { FL2,F2, 0 } }, - { R_2D(0x69b), "roundrl", I_FP, REG, 2, { FL2,F2, 0 } }, - { R_2D(0x69c), "sinrl", I_FP, REG, 2, { FL2,F2, 0 } }, - { R_2D(0x69d), "cosrl", I_FP, REG, 2, { FL2,F2, 0 } }, - { R_2D(0x69e), "tanrl", I_FP, REG, 2, { FL2,F2, 0 } }, - { R_1(0x69f), "classrl", I_FP, REG, 1, { FL2, 0, 0 } }, - { R_2D(0x6c0), "cvtri", I_FP, REG, 2, { FL, R, 0 } }, - { R_2D(0x6c1), "cvtril", I_FP, REG, 2, { FL, R2, 0 } }, - { R_2D(0x6c2), "cvtzri", I_FP, REG, 2, { FL, R, 0 } }, - { R_2D(0x6c3), "cvtzril", I_FP, REG, 2, { FL, R2, 0 } }, - { R_2D(0x6c9), "movr", I_FP, REG, 2, { FL, F, 0 } }, - { R_2D(0x6d9), "movrl", I_FP, REG, 2, { FL2,F2, 0 } }, - { R_2D(0x6e1), "movre", I_FP, REG, 2, { FL4,F4, 0 } }, - { R_3(0x6e2), "cpysre", I_FP, REG, 3, { FL4,FL4,F4 } }, - { R_3(0x6e3), "cpyrsre", I_FP, REG, 3, { FL4,FL4,F4 } }, - { R_3(0x78b), "divr", I_FP, REG, 3, { FL, FL, F } }, - { R_3(0x78c), "mulr", I_FP, REG, 3, { FL, FL, F } }, - { R_3(0x78d), "subr", I_FP, REG, 3, { FL, FL, F } }, - { R_3(0x78f), "addr", I_FP, REG, 3, { FL, FL, F } }, - { R_3(0x79b), "divrl", I_FP, REG, 3, { FL2,FL2,F2 } }, - { R_3(0x79c), "mulrl", I_FP, REG, 3, { FL2,FL2,F2 } }, - { R_3(0x79d), "subrl", I_FP, REG, 3, { FL2,FL2,F2 } }, - { R_3(0x79f), "addrl", I_FP, REG, 3, { FL2,FL2,F2 } }, - - /* These are the floating point branch instructions. Each actually - * generates 2 branch instructions: the first a CTRL instruction with - * the indicated opcode, and the second a 'bno'. - */ - - { 0x12000000, "brue", I_FP, FBRA, 1, { 0, 0, 0 } }, - { 0x11000000, "brug", I_FP, FBRA, 1, { 0, 0, 0 } }, - { 0x13000000, "bruge", I_FP, FBRA, 1, { 0, 0, 0 } }, - { 0x14000000, "brul", I_FP, FBRA, 1, { 0, 0, 0 } }, - { 0x16000000, "brule", I_FP, FBRA, 1, { 0, 0, 0 } }, - { 0x15000000, "brulg", I_FP, FBRA, 1, { 0, 0, 0 } }, - - - /* Decimal instructions */ - - { R_3(0x642), "daddc", I_DEC, REG, 3, { RSL,RSL,RS } }, - { R_3(0x643), "dsubc", I_DEC, REG, 3, { RSL,RSL,RS } }, - { R_2D(0x644), "dmovt", I_DEC, REG, 2, { RSL,RS, 0 } }, - - - /* KX extensions */ - - { R_2(0x600), "synmov", I_KX, REG, 2, { R, R, 0 } }, - { R_2(0x601), "synmovl", I_KX, REG, 2, { R, R, 0 } }, - { R_2(0x602), "synmovq", I_KX, REG, 2, { R, R, 0 } }, - { R_2D(0x615), "synld", I_KX, REG, 2, { R, R, 0 } }, - - - /* MC extensions */ - - { R_3(0x603), "cmpstr", I_MIL, REG, 3, { R, R, RL } }, - { R_3(0x604), "movqstr", I_MIL, REG, 3, { R, R, RL } }, - { R_3(0x605), "movstr", I_MIL, REG, 3, { R, R, RL } }, - { R_2D(0x613), "inspacc", I_MIL, REG, 2, { R, R, 0 } }, - { R_2D(0x614), "ldphy", I_MIL, REG, 2, { R, R, 0 } }, - { R_3(0x617), "fill", I_MIL, REG, 3, { R, RL, RL } }, - { R_2D(0x646), "condrec", I_MIL, REG, 2, { R, R, 0 } }, - { R_2D(0x656), "receive", I_MIL, REG, 2, { R, R, 0 } }, - { R_3(0x662), "send", I_MIL, REG, 3, { R, RL, R } }, - { R_1(0x663), "sendserv", I_MIL, REG, 1, { R, 0, 0 } }, - { R_1(0x664), "resumprcs", I_MIL, REG, 1, { R, 0, 0 } }, - { R_1(0x665), "schedprcs", I_MIL, REG, 1, { R, 0, 0 } }, - { R_0(0x666), "saveprcs", I_MIL, REG, 0, { 0, 0, 0 } }, - { R_1(0x668), "condwait", I_MIL, REG, 1, { R, 0, 0 } }, - { R_1(0x669), "wait", I_MIL, REG, 1, { R, 0, 0 } }, - { R_1(0x66a), "signal", I_MIL, REG, 1, { R, 0, 0 } }, - { R_1D(0x673), "ldtime", I_MIL, REG, 1, { R2, 0, 0 } }, - - - /* CX extensions */ - - { R_3(0x5d8), "eshro", I_CX2, REG, 3, { RSL,RSL,RS } }, - { R_3(0x630), "sdma", I_CX, REG, 3, { RSL,RSL,RL } }, - { R_3(0x631), "udma", I_CX, REG, 0, { 0, 0, 0 } }, - { R_3(0x659), "sysctl", I_CX2, REG, 3, { RSL,RSL,RL } }, - - - /* Jx extensions. */ - { R_3(0x780), "addono", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x790), "addog", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7a0), "addoe", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7b0), "addoge", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7c0), "addol", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7d0), "addone", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7e0), "addole", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7f0), "addoo", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x781), "addino", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x791), "addig", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7a1), "addie", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7b1), "addige", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7c1), "addil", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7d1), "addine", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7e1), "addile", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7f1), "addio", I_JX, REG, 3, { RSL,RSL,RS } }, - - { R_2D(0x5ad), "bswap", I_JX, REG, 2, { RSL, RS, 0 } }, - - { R_2(0x594), "cmpob", I_JX, REG, 2, { RSL,RSL, 0 } }, - { R_2(0x595), "cmpib", I_JX, REG, 2, { RSL,RSL, 0 } }, - { R_2(0x596), "cmpos", I_JX, REG, 2, { RSL,RSL, 0 } }, - { R_2(0x597), "cmpis", I_JX, REG, 2, { RSL,RSL, 0 } }, - - { R_3(0x784), "selno", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x794), "selg", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7a4), "sele", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7b4), "selge", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7c4), "sell", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7d4), "selne", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7e4), "selle", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7f4), "selo", I_JX, REG, 3, { RSL,RSL,RS } }, - - { R_3(0x782), "subono", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x792), "subog", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7a2), "suboe", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7b2), "suboge", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7c2), "subol", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7d2), "subone", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7e2), "subole", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7f2), "suboo", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x783), "subino", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x793), "subig", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7a3), "subie", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7b3), "subige", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7c3), "subil", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7d3), "subine", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7e3), "subile", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_3(0x7f3), "subio", I_JX, REG, 3, { RSL,RSL,RS } }, - - { R_3(0x65c), "dcctl", I_JX, REG, 3, { RSL,RSL,RL } }, - { R_3(0x65b), "icctl", I_JX, REG, 3, { RSL,RSL,RS } }, - { R_2D(0x658), "intctl", I_JX, REG, 2, { RSL, RS, 0 } }, - { R_0(0x5b4), "intdis", I_JX, REG, 0, { 0, 0, 0 } }, - { R_0(0x5b5), "inten", I_JX, REG, 0, { 0, 0, 0 } }, - { R_0(0x65d), "halt", I_JX, REG, 1, { RSL, 0, 0 } }, - - /* Hx extensions. */ - { 0xac000000, "dcinva", I_HX, MEM1, 1, { M, 0, 0 } }, - - /* END OF TABLE */ - - { 0, NULL, 0, 0, 0, { 0, 0, 0 } } -}; - - /* end of i960-opcode.h */ diff --git a/include/opcode/ia64.h b/include/opcode/ia64.h deleted file mode 100644 index 447e50e1dbf..00000000000 --- a/include/opcode/ia64.h +++ /dev/null @@ -1,396 +0,0 @@ -/* ia64.h -- Header file for ia64 opcode table - Copyright (C) 1998, 1999, 2000, 2002, 2005, 2006 - Free Software Foundation, Inc. - Contributed by David Mosberger-Tang */ - -#ifndef opcode_ia64_h -#define opcode_ia64_h - -#include - -#include "bfd.h" - - -typedef BFD_HOST_U_64_BIT ia64_insn; - -enum ia64_insn_type - { - IA64_TYPE_NIL = 0, /* illegal type */ - IA64_TYPE_A, /* integer alu (I- or M-unit) */ - IA64_TYPE_I, /* non-alu integer (I-unit) */ - IA64_TYPE_M, /* memory (M-unit) */ - IA64_TYPE_B, /* branch (B-unit) */ - IA64_TYPE_F, /* floating-point (F-unit) */ - IA64_TYPE_X, /* long encoding (X-unit) */ - IA64_TYPE_DYN, /* Dynamic opcode */ - IA64_NUM_TYPES - }; - -enum ia64_unit - { - IA64_UNIT_NIL = 0, /* illegal unit */ - IA64_UNIT_I, /* integer unit */ - IA64_UNIT_M, /* memory unit */ - IA64_UNIT_B, /* branching unit */ - IA64_UNIT_F, /* floating-point unit */ - IA64_UNIT_L, /* long "unit" */ - IA64_UNIT_X, /* may be integer or branch unit */ - IA64_NUM_UNITS - }; - -/* Changes to this enumeration must be propagated to the operand table in - bfd/cpu-ia64-opc.c - */ -enum ia64_opnd - { - IA64_OPND_NIL, /* no operand---MUST BE FIRST!*/ - - /* constants */ - IA64_OPND_AR_CSD, /* application register csd (ar.csd) */ - IA64_OPND_AR_CCV, /* application register ccv (ar.ccv) */ - IA64_OPND_AR_PFS, /* application register pfs (ar.pfs) */ - IA64_OPND_C1, /* the constant 1 */ - IA64_OPND_C8, /* the constant 8 */ - IA64_OPND_C16, /* the constant 16 */ - IA64_OPND_GR0, /* gr0 */ - IA64_OPND_IP, /* instruction pointer (ip) */ - IA64_OPND_PR, /* predicate register (pr) */ - IA64_OPND_PR_ROT, /* rotating predicate register (pr.rot) */ - IA64_OPND_PSR, /* processor status register (psr) */ - IA64_OPND_PSR_L, /* processor status register L (psr.l) */ - IA64_OPND_PSR_UM, /* processor status register UM (psr.um) */ - - /* register operands: */ - IA64_OPND_AR3, /* third application register # (bits 20-26) */ - IA64_OPND_B1, /* branch register # (bits 6-8) */ - IA64_OPND_B2, /* branch register # (bits 13-15) */ - IA64_OPND_CR3, /* third control register # (bits 20-26) */ - IA64_OPND_F1, /* first floating-point register # */ - IA64_OPND_F2, /* second floating-point register # */ - IA64_OPND_F3, /* third floating-point register # */ - IA64_OPND_F4, /* fourth floating-point register # */ - IA64_OPND_P1, /* first predicate # */ - IA64_OPND_P2, /* second predicate # */ - IA64_OPND_R1, /* first register # */ - IA64_OPND_R2, /* second register # */ - IA64_OPND_R3, /* third register # */ - IA64_OPND_R3_2, /* third register # (limited to gr0-gr3) */ - - /* memory operands: */ - IA64_OPND_MR3, /* memory at addr of third register # */ - - /* indirect operands: */ - IA64_OPND_CPUID_R3, /* cpuid[reg] */ - IA64_OPND_DBR_R3, /* dbr[reg] */ - IA64_OPND_DTR_R3, /* dtr[reg] */ - IA64_OPND_ITR_R3, /* itr[reg] */ - IA64_OPND_IBR_R3, /* ibr[reg] */ - IA64_OPND_MSR_R3, /* msr[reg] */ - IA64_OPND_PKR_R3, /* pkr[reg] */ - IA64_OPND_PMC_R3, /* pmc[reg] */ - IA64_OPND_PMD_R3, /* pmd[reg] */ - IA64_OPND_RR_R3, /* rr[reg] */ - - /* immediate operands: */ - IA64_OPND_CCNT5, /* 5-bit count (31 - bits 20-24) */ - IA64_OPND_CNT2a, /* 2-bit count (1 + bits 27-28) */ - IA64_OPND_CNT2b, /* 2-bit count (bits 27-28): 1, 2, 3 */ - IA64_OPND_CNT2c, /* 2-bit count (bits 30-31): 0, 7, 15, or 16 */ - IA64_OPND_CNT5, /* 5-bit count (bits 14-18) */ - IA64_OPND_CNT6, /* 6-bit count (bits 27-32) */ - IA64_OPND_CPOS6a, /* 6-bit count (63 - bits 20-25) */ - IA64_OPND_CPOS6b, /* 6-bit count (63 - bits 14-19) */ - IA64_OPND_CPOS6c, /* 6-bit count (63 - bits 31-36) */ - IA64_OPND_IMM1, /* signed 1-bit immediate (bit 36) */ - IA64_OPND_IMMU2, /* unsigned 2-bit immediate (bits 13-14) */ - IA64_OPND_IMMU5b, /* unsigned 5-bit immediate (32 + bits 14-18) */ - IA64_OPND_IMMU7a, /* unsigned 7-bit immediate (bits 13-19) */ - IA64_OPND_IMMU7b, /* unsigned 7-bit immediate (bits 20-26) */ - IA64_OPND_SOF, /* 8-bit stack frame size */ - IA64_OPND_SOL, /* 8-bit size of locals */ - IA64_OPND_SOR, /* 6-bit number of rotating registers (scaled by 8) */ - IA64_OPND_IMM8, /* signed 8-bit immediate (bits 13-19 & 36) */ - IA64_OPND_IMM8U4, /* cmp4*u signed 8-bit immediate (bits 13-19 & 36) */ - IA64_OPND_IMM8M1, /* signed 8-bit immediate -1 (bits 13-19 & 36) */ - IA64_OPND_IMM8M1U4, /* cmp4*u signed 8-bit immediate -1 (bits 13-19 & 36)*/ - IA64_OPND_IMM8M1U8, /* cmp*u signed 8-bit immediate -1 (bits 13-19 & 36) */ - IA64_OPND_IMMU9, /* unsigned 9-bit immediate (bits 33-34, 20-26) */ - IA64_OPND_IMM9a, /* signed 9-bit immediate (bits 6-12, 27, 36) */ - IA64_OPND_IMM9b, /* signed 9-bit immediate (bits 13-19, 27, 36) */ - IA64_OPND_IMM14, /* signed 14-bit immediate (bits 13-19, 27-32, 36) */ - IA64_OPND_IMM17, /* signed 17-bit immediate (2*bits 6-12, 24-31, 36) */ - IA64_OPND_IMMU21, /* unsigned 21-bit immediate (bits 6-25, 36) */ - IA64_OPND_IMM22, /* signed 22-bit immediate (bits 13-19, 22-36) */ - IA64_OPND_IMMU24, /* unsigned 24-bit immediate (bits 6-26, 31-32, 36) */ - IA64_OPND_IMM44, /* signed 44-bit immediate (2^16*bits 6-32, 36) */ - IA64_OPND_IMMU62, /* unsigned 62-bit immediate */ - IA64_OPND_IMMU64, /* unsigned 64-bit immediate (lotsa bits...) */ - IA64_OPND_INC3, /* signed 3-bit (bits 13-15): +/-1, 4, 8, 16 */ - IA64_OPND_LEN4, /* 4-bit count (bits 27-30 + 1) */ - IA64_OPND_LEN6, /* 6-bit count (bits 27-32 + 1) */ - IA64_OPND_MBTYPE4, /* 4-bit mux type (bits 20-23) */ - IA64_OPND_MHTYPE8, /* 8-bit mux type (bits 20-27) */ - IA64_OPND_POS6, /* 6-bit count (bits 14-19) */ - IA64_OPND_TAG13, /* signed 13-bit tag (ip + 16*bits 6-12, 33-34) */ - IA64_OPND_TAG13b, /* signed 13-bit tag (ip + 16*bits 24-32) */ - IA64_OPND_TGT25, /* signed 25-bit (ip + 16*bits 6-25, 36) */ - IA64_OPND_TGT25b, /* signed 25-bit (ip + 16*bits 6-12, 20-32, 36) */ - IA64_OPND_TGT25c, /* signed 25-bit (ip + 16*bits 13-32, 36) */ - IA64_OPND_TGT64, /* 64-bit (ip + 16*bits 13-32, 36, 2-40(L)) */ - IA64_OPND_LDXMOV, /* any symbol, generates R_IA64_LDXMOV. */ - - IA64_OPND_COUNT /* # of operand types (MUST BE LAST!) */ - }; - -enum ia64_dependency_mode -{ - IA64_DV_RAW, - IA64_DV_WAW, - IA64_DV_WAR, -}; - -enum ia64_dependency_semantics -{ - IA64_DVS_NONE, - IA64_DVS_IMPLIED, - IA64_DVS_IMPLIEDF, - IA64_DVS_DATA, - IA64_DVS_INSTR, - IA64_DVS_SPECIFIC, - IA64_DVS_STOP, - IA64_DVS_OTHER, -}; - -enum ia64_resource_specifier -{ - IA64_RS_ANY, - IA64_RS_AR_K, - IA64_RS_AR_UNAT, - IA64_RS_AR, /* 8-15, 20, 22-23, 31, 33-35, 37-39, 41-43, 45-47, 67-111 */ - IA64_RS_ARb, /* 48-63, 112-127 */ - IA64_RS_BR, - IA64_RS_CFM, - IA64_RS_CPUID, - IA64_RS_CR_IRR, - IA64_RS_CR_LRR, - IA64_RS_CR, /* 3-7,10-15,18,26-63,75-79,82-127 */ - IA64_RS_DBR, - IA64_RS_FR, - IA64_RS_FRb, - IA64_RS_GR0, - IA64_RS_GR, - IA64_RS_IBR, - IA64_RS_INSERVICE, /* CR[EOI] or CR[IVR] */ - IA64_RS_MSR, - IA64_RS_PKR, - IA64_RS_PMC, - IA64_RS_PMD, - IA64_RS_PR, /* non-rotating, 1-15 */ - IA64_RS_PRr, /* rotating, 16-62 */ - IA64_RS_PR63, - IA64_RS_RR, - - IA64_RS_ARX, /* ARs not in RS_AR or RS_ARb */ - IA64_RS_CRX, /* CRs not in RS_CR */ - IA64_RS_PSR, /* PSR bits */ - IA64_RS_RSE, /* implementation-specific RSE resources */ - IA64_RS_AR_FPSR, -}; - -enum ia64_rse_resource -{ - IA64_RSE_N_STACKED_PHYS, - IA64_RSE_BOF, - IA64_RSE_STORE_REG, - IA64_RSE_LOAD_REG, - IA64_RSE_BSPLOAD, - IA64_RSE_RNATBITINDEX, - IA64_RSE_CFLE, - IA64_RSE_NDIRTY, -}; - -/* Information about a given resource dependency */ -struct ia64_dependency -{ - /* Name of the resource */ - const char *name; - /* Does this dependency need further specification? */ - enum ia64_resource_specifier specifier; - /* Mode of dependency */ - enum ia64_dependency_mode mode; - /* Dependency semantics */ - enum ia64_dependency_semantics semantics; - /* Register index, if applicable (distinguishes AR, CR, and PSR deps) */ -#define REG_NONE (-1) - int regindex; - /* Special info on semantics */ - const char *info; -}; - -/* Two arrays of indexes into the ia64_dependency table. - chks are dependencies to check for conflicts when an opcode is - encountered; regs are dependencies to register (mark as used) when an - opcode is used. chks correspond to readers (RAW) or writers (WAW or - WAR) of a resource, while regs correspond to writers (RAW or WAW) and - readers (WAR) of a resource. */ -struct ia64_opcode_dependency -{ - int nchks; - const unsigned short *chks; - int nregs; - const unsigned short *regs; -}; - -/* encode/extract the note/index for a dependency */ -#define RDEP(N,X) (((N)<<11)|(X)) -#define NOTE(X) (((X)>>11)&0x1F) -#define DEP(X) ((X)&0x7FF) - -/* A template descriptor describes the execution units that are active - for each of the three slots. It also specifies the location of - instruction group boundaries that may be present between two slots. */ -struct ia64_templ_desc - { - int group_boundary; /* 0=no boundary, 1=between slot 0 & 1, etc. */ - enum ia64_unit exec_unit[3]; - const char *name; - }; - -/* The opcode table is an array of struct ia64_opcode. */ - -struct ia64_opcode - { - /* The opcode name. */ - const char *name; - - /* The type of the instruction: */ - enum ia64_insn_type type; - - /* Number of output operands: */ - int num_outputs; - - /* The opcode itself. Those bits which will be filled in with - operands are zeroes. */ - ia64_insn opcode; - - /* The opcode mask. This is used by the disassembler. This is a - mask containing ones indicating those bits which must match the - opcode field, and zeroes indicating those bits which need not - match (and are presumably filled in by operands). */ - ia64_insn mask; - - /* An array of operand codes. Each code is an index into the - operand table. They appear in the order which the operands must - appear in assembly code, and are terminated by a zero. */ - enum ia64_opnd operands[5]; - - /* One bit flags for the opcode. These are primarily used to - indicate specific processors and environments support the - instructions. The defined values are listed below. */ - unsigned int flags; - - /* Used by ia64_find_next_opcode (). */ - short ent_index; - - /* Opcode dependencies. */ - const struct ia64_opcode_dependency *dependencies; - }; - -/* Values defined for the flags field of a struct ia64_opcode. */ - -#define IA64_OPCODE_FIRST (1<<0) /* must be first in an insn group */ -#define IA64_OPCODE_X_IN_MLX (1<<1) /* insn is allowed in X slot of MLX */ -#define IA64_OPCODE_LAST (1<<2) /* must be last in an insn group */ -#define IA64_OPCODE_PRIV (1<<3) /* privileged instruct */ -#define IA64_OPCODE_SLOT2 (1<<4) /* insn allowed in slot 2 only */ -#define IA64_OPCODE_NO_PRED (1<<5) /* insn cannot be predicated */ -#define IA64_OPCODE_PSEUDO (1<<6) /* insn is a pseudo-op */ -#define IA64_OPCODE_F2_EQ_F3 (1<<7) /* constraint: F2 == F3 */ -#define IA64_OPCODE_LEN_EQ_64MCNT (1<<8) /* constraint: LEN == 64-CNT */ -#define IA64_OPCODE_MOD_RRBS (1<<9) /* modifies all rrbs in CFM */ -#define IA64_OPCODE_POSTINC (1<<10) /* postincrement MR3 operand */ - -/* A macro to extract the major opcode from an instruction. */ -#define IA64_OP(i) (((i) >> 37) & 0xf) - -enum ia64_operand_class - { - IA64_OPND_CLASS_CST, /* constant */ - IA64_OPND_CLASS_REG, /* register */ - IA64_OPND_CLASS_IND, /* indirect register */ - IA64_OPND_CLASS_ABS, /* absolute value */ - IA64_OPND_CLASS_REL, /* IP-relative value */ - }; - -/* The operands table is an array of struct ia64_operand. */ - -struct ia64_operand -{ - enum ia64_operand_class class; - - /* Set VALUE as the operand bits for the operand of type SELF in the - instruction pointed to by CODE. If an error occurs, *CODE is not - modified and the returned string describes the cause of the - error. If no error occurs, NULL is returned. */ - const char *(*insert) (const struct ia64_operand *self, ia64_insn value, - ia64_insn *code); - - /* Extract the operand bits for an operand of type SELF from - instruction CODE store them in *VALUE. If an error occurs, the - cause of the error is described by the string returned. If no - error occurs, NULL is returned. */ - const char *(*extract) (const struct ia64_operand *self, ia64_insn code, - ia64_insn *value); - - /* A string whose meaning depends on the operand class. */ - - const char *str; - - struct bit_field - { - /* The number of bits in the operand. */ - int bits; - - /* How far the operand is left shifted in the instruction. */ - int shift; - } - field[4]; /* no operand has more than this many bit-fields */ - - unsigned int flags; - - const char *desc; /* brief description */ -}; - -/* Values defined for the flags field of a struct ia64_operand. */ - -/* Disassemble as signed decimal (instead of hex): */ -#define IA64_OPND_FLAG_DECIMAL_SIGNED (1<<0) -/* Disassemble as unsigned decimal (instead of hex): */ -#define IA64_OPND_FLAG_DECIMAL_UNSIGNED (1<<1) - -extern const struct ia64_templ_desc ia64_templ_desc[16]; - -/* The tables are sorted by major opcode number and are otherwise in - the order in which the disassembler should consider instructions. */ -extern struct ia64_opcode ia64_opcodes_a[]; -extern struct ia64_opcode ia64_opcodes_i[]; -extern struct ia64_opcode ia64_opcodes_m[]; -extern struct ia64_opcode ia64_opcodes_b[]; -extern struct ia64_opcode ia64_opcodes_f[]; -extern struct ia64_opcode ia64_opcodes_d[]; - - -extern struct ia64_opcode *ia64_find_opcode (const char *name); -extern struct ia64_opcode *ia64_find_next_opcode (struct ia64_opcode *ent); - -extern struct ia64_opcode *ia64_dis_opcode (ia64_insn insn, - enum ia64_insn_type type); - -extern void ia64_free_opcode (struct ia64_opcode *ent); -extern const struct ia64_dependency *ia64_find_dependency (int index); - -/* To avoid circular library dependencies, this array is implemented - in bfd/cpu-ia64-opc.c: */ -extern const struct ia64_operand elf64_ia64_operands[IA64_OPND_COUNT]; - -#endif /* opcode_ia64_h */ diff --git a/include/opcode/m68hc11.h b/include/opcode/m68hc11.h deleted file mode 100644 index cddc59ad030..00000000000 --- a/include/opcode/m68hc11.h +++ /dev/null @@ -1,427 +0,0 @@ -/* m68hc11.h -- Header file for Motorola 68HC11 & 68HC12 opcode table - Copyright 1999, 2000, 2002, 2003 Free Software Foundation, Inc. - Written by Stephane Carrez (stcarrez@nerim.fr) - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _OPCODE_M68HC11_H -#define _OPCODE_M68HC11_H - -/* Flags for the definition of the 68HC11 & 68HC12 CCR. */ -#define M6811_S_BIT 0x80 /* Stop disable */ -#define M6811_X_BIT 0x40 /* X-interrupt mask */ -#define M6811_H_BIT 0x20 /* Half carry flag */ -#define M6811_I_BIT 0x10 /* I-interrupt mask */ -#define M6811_N_BIT 0x08 /* Negative */ -#define M6811_Z_BIT 0x04 /* Zero */ -#define M6811_V_BIT 0x02 /* Overflow */ -#define M6811_C_BIT 0x01 /* Carry */ - -/* 68HC11 register address offsets (range 0..0x3F or 0..64). - The absolute address of the I/O register depends on the setting - of the M6811_INIT register. At init time, the I/O registers are - mapped at 0x1000. Address of registers is then: - - 0x1000 + M6811_xxx -*/ -#define M6811_PORTA 0x00 /* Port A register */ -#define M6811__RES1 0x01 /* Unused/Reserved */ -#define M6811_PIOC 0x02 /* Parallel I/O Control register */ -#define M6811_PORTC 0x03 /* Port C register */ -#define M6811_PORTB 0x04 /* Port B register */ -#define M6811_PORTCL 0x05 /* Alternate latched port C */ -#define M6811__RES6 0x06 /* Unused/Reserved */ -#define M6811_DDRC 0x07 /* Data direction register for port C */ -#define M6811_PORTD 0x08 /* Port D register */ -#define M6811_DDRD 0x09 /* Data direction register for port D */ -#define M6811_PORTE 0x0A /* Port E input register */ -#define M6811_CFORC 0x0B /* Compare Force Register */ -#define M6811_OC1M 0x0C /* OC1 Action Mask register */ -#define M6811_OC1D 0x0D /* OC1 Action Data register */ -#define M6811_TCTN 0x0E /* Timer Counter Register */ -#define M6811_TCTN_H 0x0E /* " " " High part */ -#define M6811_TCTN_L 0x0F /* " " " Low part */ -#define M6811_TIC1 0x10 /* Input capture 1 register */ -#define M6811_TIC1_H 0x10 /* " " " High part */ -#define M6811_TIC1_L 0x11 /* " " " Low part */ -#define M6811_TIC2 0x12 /* Input capture 2 register */ -#define M6811_TIC2_H 0x12 /* " " " High part */ -#define M6811_TIC2_L 0x13 /* " " " Low part */ -#define M6811_TIC3 0x14 /* Input capture 3 register */ -#define M6811_TIC3_H 0x14 /* " " " High part */ -#define M6811_TIC3_L 0x15 /* " " " Low part */ -#define M6811_TOC1 0x16 /* Output Compare 1 register */ -#define M6811_TOC1_H 0x16 /* " " " High part */ -#define M6811_TOC1_L 0x17 /* " " " Low part */ -#define M6811_TOC2 0x18 /* Output Compare 2 register */ -#define M6811_TOC2_H 0x18 /* " " " High part */ -#define M6811_TOC2_L 0x19 /* " " " Low part */ -#define M6811_TOC3 0x1A /* Output Compare 3 register */ -#define M6811_TOC3_H 0x1A /* " " " High part */ -#define M6811_TOC3_L 0x1B /* " " " Low part */ -#define M6811_TOC4 0x1C /* Output Compare 4 register */ -#define M6811_TOC4_H 0x1C /* " " " High part */ -#define M6811_TOC4_L 0x1D /* " " " Low part */ -#define M6811_TOC5 0x1E /* Output Compare 5 register */ -#define M6811_TOC5_H 0x1E /* " " " High part */ -#define M6811_TOC5_L 0x1F /* " " " Low part */ -#define M6811_TCTL1 0x20 /* Timer Control register 1 */ -#define M6811_TCTL2 0x21 /* Timer Control register 2 */ -#define M6811_TMSK1 0x22 /* Timer Interrupt Mask Register 1 */ -#define M6811_TFLG1 0x23 /* Timer Interrupt Flag Register 1 */ -#define M6811_TMSK2 0x24 /* Timer Interrupt Mask Register 2 */ -#define M6811_TFLG2 0x25 /* Timer Interrupt Flag Register 2 */ -#define M6811_PACTL 0x26 /* Pulse Accumulator Control Register */ -#define M6811_PACNT 0x27 /* Pulse Accumulator Count Register */ -#define M6811_SPCR 0x28 /* SPI Control register */ -#define M6811_SPSR 0x29 /* SPI Status register */ -#define M6811_SPDR 0x2A /* SPI Data register */ -#define M6811_BAUD 0x2B /* SCI Baud register */ -#define M6811_SCCR1 0x2C /* SCI Control register 1 */ -#define M6811_SCCR2 0x2D /* SCI Control register 2 */ -#define M6811_SCSR 0x2E /* SCI Status register */ -#define M6811_SCDR 0x2F /* SCI Data (Read => RDR, Write => TDR) */ -#define M6811_ADCTL 0x30 /* A/D Control register */ -#define M6811_ADR1 0x31 /* A/D, Analog Result register 1 */ -#define M6811_ADR2 0x32 /* A/D, Analog Result register 2 */ -#define M6811_ADR3 0x33 /* A/D, Analog Result register 3 */ -#define M6811_ADR4 0x34 /* A/D, Analog Result register 4 */ -#define M6811__RES35 0x35 -#define M6811__RES36 0x36 -#define M6811__RES37 0x37 -#define M6811__RES38 0x38 -#define M6811_OPTION 0x39 /* System Configuration Options */ -#define M6811_COPRST 0x3A /* Arm/Reset COP Timer Circuitry */ -#define M6811_PPROG 0x3B /* EEPROM Programming Control Register */ -#define M6811_HPRIO 0x3C /* Highest priority I-Bit int and misc */ -#define M6811_INIT 0x3D /* Ram and I/O mapping register */ -#define M6811_TEST1 0x3E /* Factory test control register */ -#define M6811_CONFIG 0x3F /* COP, ROM and EEPROM enables */ - - -/* Flags of the CONFIG register (in EEPROM). */ -#define M6811_NOSEC 0x08 /* Security mode disable */ -#define M6811_NOCOP 0x04 /* COP system disable */ -#define M6811_ROMON 0x02 /* Enable on-chip rom */ -#define M6811_EEON 0x01 /* Enable on-chip eeprom */ - -/* Flags of the PPROG register. */ -#define M6811_BYTE 0x10 /* Byte mode */ -#define M6811_ROW 0x08 /* Row mode */ -#define M6811_ERASE 0x04 /* Erase mode select (1 = erase, 0 = read) */ -#define M6811_EELAT 0x02 /* EEPROM Latch Control */ -#define M6811_EEPGM 0x01 /* EEPROM Programming Voltage Enable */ - -/* Flags of the PIOC register. */ -#define M6811_STAF 0x80 /* Strobe A Interrupt Status Flag */ -#define M6811_STAI 0x40 /* Strobe A Interrupt Enable Mask */ -#define M6811_CWOM 0x20 /* Port C Wire OR mode */ -#define M6811_HNDS 0x10 /* Handshake mode */ -#define M6811_OIN 0x08 /* Output or Input handshaking */ -#define M6811_PLS 0x04 /* Pulse/Interlocked Handshake Operation */ -#define M6811_EGA 0x02 /* Active Edge for Strobe A */ -#define M6811_INVB 0x01 /* Invert Strobe B */ - -/* Flags of the SCCR1 register. */ -#define M6811_R8 0x80 /* Receive Data bit 8 */ -#define M6811_T8 0x40 /* Transmit data bit 8 */ -#define M6811__SCCR1_5 0x20 /* Unused */ -#define M6811_M 0x10 /* SCI Character length */ -#define M6811_WAKE 0x08 /* Wake up method select (0=idle, 1=addr mark) */ - -/* Flags of the SCCR2 register. */ -#define M6811_TIE 0x80 /* Transmit Interrupt enable */ -#define M6811_TCIE 0x40 /* Transmit Complete Interrupt Enable */ -#define M6811_RIE 0x20 /* Receive Interrupt Enable */ -#define M6811_ILIE 0x10 /* Idle Line Interrupt Enable */ -#define M6811_TE 0x08 /* Transmit Enable */ -#define M6811_RE 0x04 /* Receive Enable */ -#define M6811_RWU 0x02 /* Receiver Wake Up */ -#define M6811_SBK 0x01 /* Send Break */ - -/* Flags of the SCSR register. */ -#define M6811_TDRE 0x80 /* Transmit Data Register Empty */ -#define M6811_TC 0x40 /* Transmit Complete */ -#define M6811_RDRF 0x20 /* Receive Data Register Full */ -#define M6811_IDLE 0x10 /* Idle Line Detect */ -#define M6811_OR 0x08 /* Overrun Error */ -#define M6811_NF 0x04 /* Noise Flag */ -#define M6811_FE 0x02 /* Framing Error */ -#define M6811__SCSR_0 0x01 /* Unused */ - -/* Flags of the BAUD register. */ -#define M6811_TCLR 0x80 /* Clear Baud Rate (TEST mode) */ -#define M6811__BAUD_6 0x40 /* Not used */ -#define M6811_SCP1 0x20 /* SCI Baud rate prescaler select */ -#define M6811_SCP0 0x10 -#define M6811_RCKB 0x08 /* Baud Rate Clock Check (TEST mode) */ -#define M6811_SCR2 0x04 /* SCI Baud rate select */ -#define M6811_SCR1 0x02 -#define M6811_SCR0 0x01 - -#define M6811_BAUD_DIV_1 (0) -#define M6811_BAUD_DIV_3 (M6811_SCP0) -#define M6811_BAUD_DIV_4 (M6811_SCP1) -#define M6811_BAUD_DIV_13 (M6811_SCP1|M6811_SCP0) - -/* Flags of the SPCR register. */ -#define M6811_SPIE 0x80 /* Serial Peripheral Interrupt Enable */ -#define M6811_SPE 0x40 /* Serial Peripheral System Enable */ -#define M6811_DWOM 0x20 /* Port D Wire-OR mode option */ -#define M6811_MSTR 0x10 /* Master Mode Select */ -#define M6811_CPOL 0x08 /* Clock Polarity */ -#define M6811_CPHA 0x04 /* Clock Phase */ -#define M6811_SPR1 0x02 /* SPI Clock Rate Select */ -#define M6811_SPR0 0x01 - -/* Flags of the SPSR register. */ -#define M6811_SPIF 0x80 /* SPI Transfer Complete flag */ -#define M6811_WCOL 0x40 /* Write Collision */ -#define M6811_MODF 0x10 /* Mode Fault */ - -/* Flags of the ADCTL register. */ -#define M6811_CCF 0x80 /* Conversions Complete Flag */ -#define M6811_SCAN 0x20 /* Continuous Scan Control */ -#define M6811_MULT 0x10 /* Multiple Channel/Single Channel Control */ -#define M6811_CD 0x08 /* Channel Select D */ -#define M6811_CC 0x04 /* C */ -#define M6811_CB 0x02 /* B */ -#define M6811_CA 0x01 /* A */ - -/* Flags of the CFORC register. */ -#define M6811_FOC1 0x80 /* Force Output Compare 1 */ -#define M6811_FOC2 0x40 /* 2 */ -#define M6811_FOC3 0x20 /* 3 */ -#define M6811_FOC4 0x10 /* 4 */ -#define M6811_FOC5 0x08 /* 5 */ - -/* Flags of the OC1M register. */ -#define M6811_OC1M7 0x80 /* Output Compare 7 */ -#define M6811_OC1M6 0x40 /* 6 */ -#define M6811_OC1M5 0x20 /* 5 */ -#define M6811_OC1M4 0x10 /* 4 */ -#define M6811_OC1M3 0x08 /* 3 */ - -/* Flags of the OC1D register. */ -#define M6811_OC1D7 0x80 -#define M6811_OC1D6 0x40 -#define M6811_OC1D5 0x20 -#define M6811_OC1D4 0x10 -#define M6811_OC1D3 0x08 - -/* Flags of the TCTL1 register. */ -#define M6811_OM2 0x80 /* Output Mode 2 */ -#define M6811_OL2 0x40 /* Output Level 2 */ -#define M6811_OM3 0x20 -#define M6811_OL3 0x10 -#define M6811_OM4 0x08 -#define M6811_OL4 0x04 -#define M6811_OM5 0x02 -#define M6811_OL5 0x01 - -/* Flags of the TCTL2 register. */ -#define M6811_EDG1B 0x20 /* Input Edge Capture Control 1 */ -#define M6811_EDG1A 0x10 -#define M6811_EDG2B 0x08 /* Input 2 */ -#define M6811_EDG2A 0x04 -#define M6811_EDG3B 0x02 /* Input 3 */ -#define M6811_EDG3A 0x01 - -/* Flags of the TMSK1 register. */ -#define M6811_OC1I 0x80 /* Output Compare 1 Interrupt */ -#define M6811_OC2I 0x40 /* 2 */ -#define M6811_OC3I 0x20 /* 3 */ -#define M6811_OC4I 0x10 /* 4 */ -#define M6811_OC5I 0x08 /* 5 */ -#define M6811_IC1I 0x04 /* Input Capture 1 Interrupt */ -#define M6811_IC2I 0x02 /* 2 */ -#define M6811_IC3I 0x01 /* 3 */ - -/* Flags of the TFLG1 register. */ -#define M6811_OC1F 0x80 /* Output Compare 1 Flag */ -#define M6811_OC2F 0x40 /* 2 */ -#define M6811_OC3F 0x20 /* 3 */ -#define M6811_OC4F 0x10 /* 4 */ -#define M6811_OC5F 0x08 /* 5 */ -#define M6811_IC1F 0x04 /* Input Capture 1 Flag */ -#define M6811_IC2F 0x02 /* 2 */ -#define M6811_IC3F 0x01 /* 3 */ - -/* Flags of Timer Interrupt Mask Register 2 (TMSK2). */ -#define M6811_TOI 0x80 /* Timer Overflow Interrupt Enable */ -#define M6811_RTII 0x40 /* RTI Interrupt Enable */ -#define M6811_PAOVI 0x20 /* Pulse Accumulator Overflow Interrupt En. */ -#define M6811_PAII 0x10 /* Pulse Accumulator Interrupt Enable */ -#define M6811_PR1 0x02 /* Timer prescaler */ -#define M6811_PR0 0x01 /* Timer prescaler */ -#define M6811_TPR_1 0x00 /* " " prescale div 1 */ -#define M6811_TPR_4 0x01 /* " " prescale div 4 */ -#define M6811_TPR_8 0x02 /* " " prescale div 8 */ -#define M6811_TPR_16 0x03 /* " " prescale div 16 */ - -/* Flags of Timer Interrupt Flag Register 2 (M6811_TFLG2). */ -#define M6811_TOF 0x80 /* Timer overflow bit */ -#define M6811_RTIF 0x40 /* Read time interrupt flag */ -#define M6811_PAOVF 0x20 /* Pulse accumulator overflow Interrupt flag */ -#define M6811_PAIF 0x10 /* Pulse accumulator Input Edge " " " */ - -/* Flags of Pulse Accumulator Control Register (PACTL). */ -#define M6811_DDRA7 0x80 /* Data direction for port A bit 7 */ -#define M6811_PAEN 0x40 /* Pulse accumulator system enable */ -#define M6811_PAMOD 0x20 /* Pulse accumulator mode */ -#define M6811_PEDGE 0x10 /* Pulse accumulator edge control */ -#define M6811_RTR1 0x02 /* RTI Interrupt rates select */ -#define M6811_RTR0 0x01 /* " " " " */ - -/* Flags of the Options register. */ -#define M6811_ADPU 0x80 /* A/D Powerup */ -#define M6811_CSEL 0x40 /* A/D/EE Charge pump clock source select */ -#define M6811_IRQE 0x20 /* IRQ Edge/Level sensitive */ -#define M6811_DLY 0x10 /* Stop exit turn on delay */ -#define M6811_CME 0x08 /* Clock Monitor enable */ -#define M6811_CR1 0x02 /* COP timer rate select */ -#define M6811_CR0 0x01 /* COP timer rate select */ - -/* Flags of the HPRIO register. */ -#define M6811_RBOOT 0x80 /* Read Bootstrap ROM */ -#define M6811_SMOD 0x40 /* Special Mode */ -#define M6811_MDA 0x20 /* Mode Select A */ -#define M6811_IRV 0x10 /* Internal Read Visibility */ -#define M6811_PSEL3 0x08 /* Priority Select */ -#define M6811_PSEL2 0x04 -#define M6811_PSEL1 0x02 -#define M6811_PSEL0 0x01 - -/* Some insns used by gas to turn relative branches into absolute ones. */ -#define M6811_BRA 0x20 -#define M6811_JMP 0x7e -#define M6811_BSR 0x8d -#define M6811_JSR 0xbd -#define M6812_JMP 0x06 -#define M6812_BSR 0x07 -#define M6812_JSR 0x16 - -/* Instruction code pages. Code page 1 is the default. */ -/*#define M6811_OPCODE_PAGE1 0x00*/ -#define M6811_OPCODE_PAGE2 0x18 -#define M6811_OPCODE_PAGE3 0x1A -#define M6811_OPCODE_PAGE4 0xCD - - -/* 68HC11 operands formats as stored in the m6811_opcode table. These - flags do not correspond to anything in the 68HC11 or 68HC12. - They are only used by GAS to recognize operands. */ -#define M6811_OP_NONE 0 /* No operand */ -#define M6811_OP_DIRECT 0x0001 /* Page 0 addressing: * */ -#define M6811_OP_IMM8 0x0002 /* 8 bits immediat: # */ -#define M6811_OP_IMM16 0x0004 /* 16 bits immediat: # */ -#define M6811_OP_IND16 0x0008 /* Indirect abs: */ -#define M6812_OP_IND16_P2 0x0010 /* Second parameter indirect abs. */ -#define M6812_OP_REG 0x0020 /* Register operand 1 */ -#define M6812_OP_REG_2 0x0040 /* Register operand 2 */ - -#define M6811_OP_IX 0x0080 /* Indirect IX: ,x */ -#define M6811_OP_IY 0x0100 /* Indirect IY: ,y */ -#define M6812_OP_IDX 0x0200 /* Indirect: N,r N,[+-]r[+-] N:5-bits */ -#define M6812_OP_IDX_1 0x0400 /* N,r N:9-bits */ -#define M6812_OP_IDX_2 0x0800 /* N,r N:16-bits */ -#define M6812_OP_D_IDX 0x1000 /* Indirect indexed: [D,r] */ -#define M6812_OP_D_IDX_2 0x2000 /* [N,r] N:16-bits */ -#define M6812_OP_PAGE 0x4000 /* Page number */ -#define M6811_OP_MASK 0x07FFF -#define M6811_OP_BRANCH 0x00008000 /* Branch, jsr, call */ -#define M6811_OP_BITMASK 0x00010000 /* Bitmask: # */ -#define M6811_OP_JUMP_REL 0x00020000 /* Pc-Relative: */ -#define M6812_OP_JUMP_REL16 0x00040000 /* Pc-relative: */ -#define M6811_OP_PAGE1 0x0000 -#define M6811_OP_PAGE2 0x00080000 /* Need a page2 opcode before */ -#define M6811_OP_PAGE3 0x00100000 /* Need a page3 opcode before */ -#define M6811_OP_PAGE4 0x00200000 /* Need a page4 opcode before */ -#define M6811_MAX_OPERANDS 3 /* Max operands: brset */ - -#define M6812_ACC_OFFSET 0x00400000 /* A,r B,r D,r */ -#define M6812_ACC_IND 0x00800000 /* [D,r] */ -#define M6812_PRE_INC 0x01000000 /* n,+r n = -8..8 */ -#define M6812_PRE_DEC 0x02000000 /* n,-r */ -#define M6812_POST_INC 0x04000000 /* n,r+ */ -#define M6812_POST_DEC 0x08000000 /* n,r- */ -#define M6812_INDEXED_IND 0x10000000 /* [n,r] n = 16-bits */ -#define M6812_INDEXED 0x20000000 /* n,r n = 5, 9 or 16-bits */ -#define M6812_OP_IDX_P2 0x40000000 - -/* Markers to identify some instructions. */ -#define M6812_OP_EXG_MARKER 0x01000000 /* exg r1,r2 */ -#define M6812_OP_TFR_MARKER 0x02000000 /* tfr r1,r2 */ -#define M6812_OP_SEX_MARKER 0x04000000 /* sex r1,r2 */ - -#define M6812_OP_EQ_MARKER 0x80000000 /* dbeq/ibeq/tbeq */ -#define M6812_OP_DBCC_MARKER 0x04000000 /* dbeq/dbne */ -#define M6812_OP_IBCC_MARKER 0x02000000 /* ibeq/ibne */ -#define M6812_OP_TBCC_MARKER 0x01000000 - -#define M6812_OP_TRAP_ID 0x80000000 /* trap #N */ - -#define M6811_OP_HIGH_ADDR 0x01000000 /* Used internally by gas. */ -#define M6811_OP_LOW_ADDR 0x02000000 - -#define M68HC12_BANK_VIRT 0x010000 -#define M68HC12_BANK_MASK 0x00003fff -#define M68HC12_BANK_BASE 0x00008000 -#define M68HC12_BANK_SHIFT 14 -#define M68HC12_BANK_PAGE_MASK 0x0ff - - -/* CPU identification. */ -#define cpu6811 0x01 -#define cpu6812 0x02 -#define cpu6812s 0x04 - -/* The opcode table is an array of struct m68hc11_opcode. */ -struct m68hc11_opcode { - const char* name; /* Op-code name */ - long format; - unsigned char size; - unsigned char opcode; - unsigned char cycles_low; - unsigned char cycles_high; - unsigned char set_flags_mask; - unsigned char clr_flags_mask; - unsigned char chg_flags_mask; - unsigned char arch; -}; - -/* Alias definition for 68HC12. */ -struct m68hc12_opcode_alias -{ - const char* name; - const char* translation; - unsigned char size; - unsigned char code1; - unsigned char code2; -}; - -/* The opcode table. The table contains all the opcodes (all pages). - You can't rely on the order. */ -extern const struct m68hc11_opcode m68hc11_opcodes[]; -extern const int m68hc11_num_opcodes; - -/* Alias table for 68HC12. It translates some 68HC11 insn which are not - implemented in 68HC12 but have equivalent translations. */ -extern const struct m68hc12_opcode_alias m68hc12_alias[]; -extern const int m68hc12_num_alias; - -#endif /* _OPCODE_M68HC11_H */ diff --git a/include/opcode/m68k.h b/include/opcode/m68k.h deleted file mode 100644 index 65543e64940..00000000000 --- a/include/opcode/m68k.h +++ /dev/null @@ -1,368 +0,0 @@ -/* Opcode table header for m680[01234]0/m6888[12]/m68851. - Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001, - 2003, 2004, 2006 Free Software Foundation, Inc. - - This file is part of GDB, GAS, and the GNU binutils. - - GDB, GAS, and the GNU binutils are free software; you can redistribute - them and/or modify them under the terms of the GNU General Public - License as published by the Free Software Foundation; either version - 1, or (at your option) any later version. - - GDB, GAS, and the GNU binutils are distributed in the hope that they - 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 file; see the file COPYING. If not, write to the Free - Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA - 02110-1301, USA. */ - -/* These are used as bit flags for the arch field in the m68k_opcode - structure. */ -#define _m68k_undef 0 -#define m68000 0x001 -#define m68010 0x002 -#define m68020 0x004 -#define m68030 0x008 -#define m68040 0x010 -#define m68060 0x020 -#define m68881 0x040 -#define m68851 0x080 -#define cpu32 0x100 /* e.g., 68332 */ -#define m68k_mask 0x1ff - -#define mcfmac 0x200 /* ColdFire MAC. */ -#define mcfemac 0x400 /* ColdFire EMAC. */ -#define cfloat 0x800 /* ColdFire FPU. */ -#define mcfhwdiv 0x1000 /* ColdFire hardware divide. */ - -#define mcfisa_a 0x2000 /* ColdFire ISA_A. */ -#define mcfisa_aa 0x4000 /* ColdFire ISA_A+. */ -#define mcfisa_b 0x8000 /* ColdFire ISA_B. */ -#define mcfusp 0x10000 /* ColdFire USP instructions. */ -#define mcf_mask 0x1f200 - -/* Handy aliases. */ -#define m68040up (m68040 | m68060) -#define m68030up (m68030 | m68040up) -#define m68020up (m68020 | m68030up) -#define m68010up (m68010 | cpu32 | m68020up) -#define m68000up (m68000 | m68010up) - -#define mfloat (m68881 | m68040 | m68060) -#define mmmu (m68851 | m68030 | m68040 | m68060) - -/* The structure used to hold information for an opcode. */ - -struct m68k_opcode -{ - /* The opcode name. */ - const char *name; - /* The pseudo-size of the instruction(in bytes). Used to determine - number of bytes necessary to disassemble the instruction. */ - unsigned int size; - /* The opcode itself. */ - unsigned long opcode; - /* The mask used by the disassembler. */ - unsigned long match; - /* The arguments. */ - const char *args; - /* The architectures which support this opcode. */ - unsigned int arch; -}; - -/* The structure used to hold information for an opcode alias. */ - -struct m68k_opcode_alias -{ - /* The alias name. */ - const char *alias; - /* The instruction for which this is an alias. */ - const char *primary; -}; - -/* We store four bytes of opcode for all opcodes because that is the - most any of them need. The actual length of an instruction is - always at least 2 bytes, and is as much longer as necessary to hold - the operands it has. - - The match field is a mask saying which bits must match particular - opcode in order for an instruction to be an instance of that - opcode. - - The args field is a string containing two characters for each - operand of the instruction. The first specifies the kind of - operand; the second, the place it is stored. */ - -/* Kinds of operands: - Characters used: AaBbCcDdEeFfGgHIiJkLlMmnOopQqRrSsTtU VvWwXxYyZz01234|*~%;@!&$?/<>#^+- - - D data register only. Stored as 3 bits. - A address register only. Stored as 3 bits. - a address register indirect only. Stored as 3 bits. - R either kind of register. Stored as 4 bits. - r either kind of register indirect only. Stored as 4 bits. - At the moment, used only for cas2 instruction. - F floating point coprocessor register only. Stored as 3 bits. - O an offset (or width): immediate data 0-31 or data register. - Stored as 6 bits in special format for BF... insns. - + autoincrement only. Stored as 3 bits (number of the address register). - - autodecrement only. Stored as 3 bits (number of the address register). - Q quick immediate data. Stored as 3 bits. - This matches an immediate operand only when value is in range 1 .. 8. - M moveq immediate data. Stored as 8 bits. - This matches an immediate operand only when value is in range -128..127 - T trap vector immediate data. Stored as 4 bits. - - k K-factor for fmove.p instruction. Stored as a 7-bit constant or - a three bit register offset, depending on the field type. - - # immediate data. Stored in special places (b, w or l) - which say how many bits to store. - ^ immediate data for floating point instructions. Special places - are offset by 2 bytes from '#'... - B pc-relative address, converted to an offset - that is treated as immediate data. - d displacement and register. Stores the register as 3 bits - and stores the displacement in the entire second word. - - C the CCR. No need to store it; this is just for filtering validity. - S the SR. No need to store, just as with CCR. - U the USP. No need to store, just as with CCR. - E the MAC ACC. No need to store, just as with CCR. - e the EMAC ACC[0123]. - G the MAC/EMAC MACSR. No need to store, just as with CCR. - g the EMAC ACCEXT{01,23}. - H the MASK. No need to store, just as with CCR. - i the MAC/EMAC scale factor. - - I Coprocessor ID. Not printed if 1. The Coprocessor ID is always - extracted from the 'd' field of word one, which means that an extended - coprocessor opcode can be skipped using the 'i' place, if needed. - - s System Control register for the floating point coprocessor. - - J Misc register for movec instruction, stored in 'j' format. - Possible values: - 0x000 SFC Source Function Code reg [60, 40, 30, 20, 10] - 0x001 DFC Data Function Code reg [60, 40, 30, 20, 10] - 0x002 CACR Cache Control Register [60, 40, 30, 20, mcf] - 0x003 TC MMU Translation Control [60, 40] - 0x004 ITT0 Instruction Transparent - Translation reg 0 [60, 40] - 0x005 ITT1 Instruction Transparent - Translation reg 1 [60, 40] - 0x006 DTT0 Data Transparent - Translation reg 0 [60, 40] - 0x007 DTT1 Data Transparent - Translation reg 1 [60, 40] - 0x008 BUSCR Bus Control Register [60] - 0x800 USP User Stack Pointer [60, 40, 30, 20, 10] - 0x801 VBR Vector Base reg [60, 40, 30, 20, 10, mcf] - 0x802 CAAR Cache Address Register [ 30, 20] - 0x803 MSP Master Stack Pointer [ 40, 30, 20] - 0x804 ISP Interrupt Stack Pointer [ 40, 30, 20] - 0x805 MMUSR MMU Status reg [ 40] - 0x806 URP User Root Pointer [60, 40] - 0x807 SRP Supervisor Root Pointer [60, 40] - 0x808 PCR Processor Configuration reg [60] - 0xC00 ROMBAR ROM Base Address Register [520X] - 0xC04 RAMBAR0 RAM Base Address Register 0 [520X] - 0xC05 RAMBAR1 RAM Base Address Register 0 [520X] - 0xC0F MBAR0 RAM Base Address Register 0 [520X] - 0xC04 FLASHBAR FLASH Base Address Register [mcf528x] - 0xC05 RAMBAR Static RAM Base Address Register [mcf528x] - - L Register list of the type d0-d7/a0-a7 etc. - (New! Improved! Can also hold fp0-fp7, as well!) - The assembler tries to see if the registers match the insn by - looking at where the insn wants them stored. - - l Register list like L, but with all the bits reversed. - Used for going the other way. . . - - c cache identifier which may be "nc" for no cache, "ic" - for instruction cache, "dc" for data cache, or "bc" - for both caches. Used in cinv and cpush. Always - stored in position "d". - - u Any register, with ``upper'' or ``lower'' specification. Used - in the mac instructions with size word. - - The remainder are all stored as 6 bits using an address mode and a - register number; they differ in which addressing modes they match. - - * all (modes 0-6,7.0-4) - ~ alterable memory (modes 2-6,7.0,7.1) - (not 0,1,7.2-4) - % alterable (modes 0-6,7.0,7.1) - (not 7.2-4) - ; data (modes 0,2-6,7.0-4) - (not 1) - @ data, but not immediate (modes 0,2-6,7.0-3) - (not 1,7.4) - ! control (modes 2,5,6,7.0-3) - (not 0,1,3,4,7.4) - & alterable control (modes 2,5,6,7.0,7.1) - (not 0,1,3,4,7.2-4) - $ alterable data (modes 0,2-6,7.0,7.1) - (not 1,7.2-4) - ? alterable control, or data register (modes 0,2,5,6,7.0,7.1) - (not 1,3,4,7.2-4) - / control, or data register (modes 0,2,5,6,7.0-3) - (not 1,3,4,7.4) - > *save operands (modes 2,4,5,6,7.0,7.1) - (not 0,1,3,7.2-4) - < *restore operands (modes 2,3,5,6,7.0-3) - (not 0,1,4,7.4) - - coldfire move operands: - m (modes 0-4) - n (modes 5,7.2) - o (modes 6,7.0,7.1,7.3,7.4) - p (modes 0-5) - - coldfire bset/bclr/btst/mulsl/mulul operands: - q (modes 0,2-5) - v (modes 0,2-5,7.0,7.1) - b (modes 0,2-5,7.2) - w (modes 2-5,7.2) - y (modes 2,5) - z (modes 2,5,7.2) - x mov3q immediate operand. - 4 (modes 2,3,4,5) - */ - -/* For the 68851: */ -/* I didn't use much imagination in choosing the - following codes, so many of them aren't very - mnemonic. -rab - - 0 32 bit pmmu register - Possible values: - 000 TC Translation Control Register (68030, 68851) - - 1 16 bit pmmu register - 111 AC Access Control (68851) - - 2 8 bit pmmu register - 100 CAL Current Access Level (68851) - 101 VAL Validate Access Level (68851) - 110 SCC Stack Change Control (68851) - - 3 68030-only pmmu registers (32 bit) - 010 TT0 Transparent Translation reg 0 - (aka Access Control reg 0 -- AC0 -- on 68ec030) - 011 TT1 Transparent Translation reg 1 - (aka Access Control reg 1 -- AC1 -- on 68ec030) - - W wide pmmu registers - Possible values: - 001 DRP Dma Root Pointer (68851) - 010 SRP Supervisor Root Pointer (68030, 68851) - 011 CRP Cpu Root Pointer (68030, 68851) - - f function code register (68030, 68851) - 0 SFC - 1 DFC - - V VAL register only (68851) - - X BADx, BACx (16 bit) - 100 BAD Breakpoint Acknowledge Data (68851) - 101 BAC Breakpoint Acknowledge Control (68851) - - Y PSR (68851) (MMUSR on 68030) (ACUSR on 68ec030) - Z PCSR (68851) - - | memory (modes 2-6, 7.*) - - t address test level (68030 only) - Stored as 3 bits, range 0-7. - Also used for breakpoint instruction now. - -*/ - -/* Places to put an operand, for non-general operands: - Characters used: BbCcDdFfGgHhIijkLlMmNnostWw123456789/ - - s source, low bits of first word. - d dest, shifted 9 in first word - 1 second word, shifted 12 - 2 second word, shifted 6 - 3 second word, shifted 0 - 4 third word, shifted 12 - 5 third word, shifted 6 - 6 third word, shifted 0 - 7 second word, shifted 7 - 8 second word, shifted 10 - 9 second word, shifted 5 - D store in both place 1 and place 3; for divul and divsl. - B first word, low byte, for branch displacements - W second word (entire), for branch displacements - L second and third words (entire), for branch displacements - (also overloaded for move16) - b second word, low byte - w second word (entire) [variable word/long branch offset for dbra] - W second word (entire) (must be signed 16 bit value) - l second and third word (entire) - g variable branch offset for bra and similar instructions. - The place to store depends on the magnitude of offset. - t store in both place 7 and place 8; for floating point operations - c branch offset for cpBcc operations. - The place to store is word two if bit six of word one is zero, - and words two and three if bit six of word one is one. - i Increment by two, to skip over coprocessor extended operands. Only - works with the 'I' format. - k Dynamic K-factor field. Bits 6-4 of word 2, used as a register number. - Also used for dynamic fmovem instruction. - C floating point coprocessor constant - 7 bits. Also used for static - K-factors... - j Movec register #, stored in 12 low bits of second word. - m For M[S]ACx; 4 bits split with MSB shifted 6 bits in first word - and remaining 3 bits of register shifted 9 bits in first word. - Indicate upper/lower in 1 bit shifted 7 bits in second word. - Use with `R' or `u' format. - n `m' withouth upper/lower indication. (For M[S]ACx; 4 bits split - with MSB shifted 6 bits in first word and remaining 3 bits of - register shifted 9 bits in first word. No upper/lower - indication is done.) Use with `R' or `u' format. - o For M[S]ACw; 4 bits shifted 12 in second word (like `1'). - Indicate upper/lower in 1 bit shifted 7 bits in second word. - Use with `R' or `u' format. - M For M[S]ACw; 4 bits in low bits of first word. Indicate - upper/lower in 1 bit shifted 6 bits in second word. Use with - `R' or `u' format. - N For M[S]ACw; 4 bits in low bits of second word. Indicate - upper/lower in 1 bit shifted 6 bits in second word. Use with - `R' or `u' format. - h shift indicator (scale factor), 1 bit shifted 10 in second word - - Places to put operand, for general operands: - d destination, shifted 6 bits in first word - b source, at low bit of first word, and immediate uses one byte - w source, at low bit of first word, and immediate uses two bytes - l source, at low bit of first word, and immediate uses four bytes - s source, at low bit of first word. - Used sometimes in contexts where immediate is not allowed anyway. - f single precision float, low bit of 1st word, immediate uses 4 bytes - F double precision float, low bit of 1st word, immediate uses 8 bytes - x extended precision float, low bit of 1st word, immediate uses 12 bytes - p packed float, low bit of 1st word, immediate uses 12 bytes - G EMAC accumulator, load (bit 4 2nd word, !bit8 first word) - H EMAC accumulator, non load (bit 4 2nd word, bit 8 first word) - F EMAC ACCx - f EMAC ACCy - I MAC/EMAC scale factor - / Like 's', but set 2nd word, bit 5 if trailing_ampersand set - ] first word, bit 10 -*/ - -extern const struct m68k_opcode m68k_opcodes[]; -extern const struct m68k_opcode_alias m68k_opcode_aliases[]; - -extern const int m68k_numopcodes, m68k_numaliases; - -/* end of m68k-opcode.h */ diff --git a/include/opcode/m88k.h b/include/opcode/m88k.h deleted file mode 100644 index 2589686069a..00000000000 --- a/include/opcode/m88k.h +++ /dev/null @@ -1,454 +0,0 @@ -/* Table of opcodes for the Motorola M88k family. - Copyright 1989, 1990, 1991, 1993, 2001, 2002 - Free Software Foundation, Inc. - -This file is part of GDB and GAS. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* - * Disassembler Instruction Table - * - * The first field of the table is the opcode field. If an opcode - * is specified which has any non-opcode bits on, a system error - * will occur when the system attempts the install it into the - * instruction table. The second parameter is a pointer to the - * instruction mnemonic. Each operand is specified by offset, width, - * and type. The offset is the bit number of the least significant - * bit of the operand with bit 0 being the least significant bit of - * the instruction. The width is the number of bits used to specify - * the operand. The type specifies the output format to be used for - * the operand. The valid formats are: register, register indirect, - * hex constant, and bit field specification. The last field is a - * pointer to the next instruction in the linked list. These pointers - * are initialized by init_disasm(). - * - * Revision History - * - * Revision 1.0 11/08/85 Creation date - * 1.1 02/05/86 Updated instruction mnemonic table MD - * 1.2 06/16/86 Updated SIM_FLAGS for floating point - * 1.3 09/20/86 Updated for new encoding - * 05/11/89 R. Trawick adapted from Motorola disassembler - */ - -#include - -/* Define the number of bits in the primary opcode field of the instruction, - the destination field, the source 1 and source 2 fields. */ - -/* Size of opcode field. */ -#define OP 8 - -/* Size of destination. */ -#define DEST 6 - -/* Size of source1. */ -#define SOURCE1 6 - -/* Size of source2. */ -#define SOURCE2 6 - -/* Number of registers. */ -#define REGs 32 - -/* Type definitions. */ - -typedef unsigned int UINT; -#define WORD long -#define FLAG unsigned -#define STATE short - -/* The next four equates define the priorities that the various classes - * of instructions have regarding writing results back into registers and - * signalling exceptions. */ - -/* PMEM is also defined in on Delta 88's. Sigh! */ -#undef PMEM - -/* Integer priority. */ -#define PINT 0 - -/* Floating point priority. */ -#define PFLT 1 - -/* Memory priority. */ -#define PMEM 2 - -/* Not applicable, instruction doesn't write to regs. */ -#define NA 3 - -/* Highest of these priorities. */ -#define HIPRI 3 - -/* The instruction registers are an artificial mechanism to speed up - * simulator execution. In the real processor, an instruction register - * is 32 bits wide. In the simulator, the 32 bit instruction is kept in - * a structure field called rawop, and the instruction is partially decoded, - * and split into various fields and flags which make up the other fields - * of the structure. - * The partial decode is done when the instructions are initially loaded - * into simulator memory. The simulator code memory is not an array of - * 32 bit words, but is an array of instruction register structures. - * Yes this wastes memory, but it executes much quicker. - */ - -struct IR_FIELDS -{ - unsigned op:OP, - dest: DEST, - src1: SOURCE1, - src2: SOURCE2; - int ltncy, - extime, - /* Writeback priority. */ - wb_pri; - /* Immediate size. */ - unsigned imm_flags:2, - /* Register source 1 used. */ - rs1_used:1, - /* Register source 2 used. */ - rs2_used:1, - /* Register source/dest. used. */ - rsd_used:1, - /* Complement. */ - c_flag:1, - /* Upper half word. */ - u_flag:1, - /* Execute next. */ - n_flag:1, - /* Uses writeback slot. */ - wb_flag:1, - /* Dest size. */ - dest_64:1, - /* Source 1 size. */ - s1_64:1, - /* Source 2 size. */ - s2_64:1, - scale_flag:1, - /* Scaled register. */ - brk_flg:1; -}; - -struct mem_segs -{ - /* Pointer (returned by calloc) to segment. */ - struct mem_wrd *seg; - - /* Base load address from file headers. */ - unsigned long baseaddr; - - /* Ending address of segment. */ - unsigned long endaddr; - - /* Segment control flags (none defined). */ - int flags; -}; - -#define MAXSEGS (10) /* max number of segment allowed */ -#define MEMSEGSIZE (sizeof(struct mem_segs))/* size of mem_segs structure */ - -#if 0 -#define BRK_RD (0x01) /* break on memory read */ -#define BRK_WR (0x02) /* break on memory write */ -#define BRK_EXEC (0x04) /* break on execution */ -#define BRK_CNT (0x08) /* break on terminal count */ -#endif - -struct mem_wrd -{ - /* Simulator instruction break down. */ - struct IR_FIELDS opcode; - union { - /* Memory element break down. */ - unsigned long l; - unsigned short s[2]; - unsigned char c[4]; - } mem; -}; - -/* Size of each 32 bit memory model. */ -#define MEMWRDSIZE (sizeof (struct mem_wrd)) - -extern struct mem_segs memory[]; -extern struct PROCESSOR m78000; - -struct PROCESSOR -{ - unsigned WORD - /* Execute instruction pointer. */ - ip, - /* Vector base register. */ - vbr, - /* Processor status register. */ - psr; - - /* Source 1. */ - WORD S1bus, - /* Source 2. */ - S2bus, - /* Destination. */ - Dbus, - /* Data address bus. */ - DAbus, - ALU, - /* Data registers. */ - Regs[REGs], - /* Max clocks before reg is available. */ - time_left[REGs], - /* Writeback priority of reg. */ - wb_pri[REGs], - /* Integer unit control regs. */ - SFU0_regs[REGs], - /* Floating point control regs. */ - SFU1_regs[REGs], - Scoreboard[REGs], - Vbr; - unsigned WORD scoreboard, - Psw, - Tpsw; - /* Waiting for a jump instruction. */ - FLAG jump_pending:1; -}; - -/* Size of immediate field. */ - -#define i26bit 1 -#define i16bit 2 -#define i10bit 3 - -/* Definitions for fields in psr. */ - -#define psr_mode 31 -#define psr_rbo 30 -#define psr_ser 29 -#define psr_carry 28 -#define psr_sf7m 11 -#define psr_sf6m 10 -#define psr_sf5m 9 -#define psr_sf4m 8 -#define psr_sf3m 7 -#define psr_sf2m 6 -#define psr_sf1m 5 -#define psr_mam 4 -#define psr_inm 3 -#define psr_exm 2 -#define psr_trm 1 -#define psr_ovfm 0 - -/* The 1 clock operations. */ - -#define ADDU 1 -#define ADDC 2 -#define ADDUC 3 -#define ADD 4 - -#define SUBU ADD+1 -#define SUBB ADD+2 -#define SUBUB ADD+3 -#define SUB ADD+4 - -#define AND_ ADD+5 -#define OR ADD+6 -#define XOR ADD+7 -#define CMP ADD+8 - -/* Loads. */ - -#define LDAB CMP+1 -#define LDAH CMP+2 -#define LDA CMP+3 -#define LDAD CMP+4 - -#define LDB LDAD+1 -#define LDH LDAD+2 -#define LD LDAD+3 -#define LDD LDAD+4 -#define LDBU LDAD+5 -#define LDHU LDAD+6 - -/* Stores. */ - -#define STB LDHU+1 -#define STH LDHU+2 -#define ST LDHU+3 -#define STD LDHU+4 - -/* Exchange. */ - -#define XMEMBU LDHU+5 -#define XMEM LDHU+6 - -/* Branches. */ - -#define JSR STD+1 -#define BSR STD+2 -#define BR STD+3 -#define JMP STD+4 -#define BB1 STD+5 -#define BB0 STD+6 -#define RTN STD+7 -#define BCND STD+8 - -/* Traps. */ - -#define TB1 BCND+1 -#define TB0 BCND+2 -#define TCND BCND+3 -#define RTE BCND+4 -#define TBND BCND+5 - -/* Misc. */ - -#define MUL TBND + 1 -#define DIV MUL +2 -#define DIVU MUL +3 -#define MASK MUL +4 -#define FF0 MUL +5 -#define FF1 MUL +6 -#define CLR MUL +7 -#define SET MUL +8 -#define EXT MUL +9 -#define EXTU MUL +10 -#define MAK MUL +11 -#define ROT MUL +12 - -/* Control register manipulations. */ - -#define LDCR ROT +1 -#define STCR ROT +2 -#define XCR ROT +3 - -#define FLDCR ROT +4 -#define FSTCR ROT +5 -#define FXCR ROT +6 - -#define NOP XCR +1 - -/* Floating point instructions. */ - -#define FADD NOP +1 -#define FSUB NOP +2 -#define FMUL NOP +3 -#define FDIV NOP +4 -#define FSQRT NOP +5 -#define FCMP NOP +6 -#define FIP NOP +7 -#define FLT NOP +8 -#define INT NOP +9 -#define NINT NOP +10 -#define TRNC NOP +11 -#define FLDC NOP +12 -#define FSTC NOP +13 -#define FXC NOP +14 - -#define UEXT(src,off,wid) \ - ((((unsigned int)(src)) >> (off)) & ((1 << (wid)) - 1)) - -#define SEXT(src,off,wid) \ - (((((int)(src))<<(32 - ((off) + (wid)))) >>(32 - (wid))) ) - -#define MAKE(src,off,wid) \ - ((((unsigned int)(src)) & ((1 << (wid)) - 1)) << (off)) - -#define opword(n) (unsigned long) (memaddr->mem.l) - -/* Constants and masks. */ - -#define SFU0 0x80000000 -#define SFU1 0x84000000 -#define SFU7 0x9c000000 -#define RRI10 0xf0000000 -#define RRR 0xf4000000 -#define SFUMASK 0xfc00ffe0 -#define RRRMASK 0xfc00ffe0 -#define RRI10MASK 0xfc00fc00 -#define DEFMASK 0xfc000000 -#define CTRL 0x0000f000 -#define CTRLMASK 0xfc00f800 - -/* Operands types. */ - -enum operand_type -{ - HEX = 1, - REG = 2, - CONT = 3, - IND = 3, - BF = 4, - /* Scaled register. */ - REGSC = 5, - /* Control register. */ - CRREG = 6, - /* Floating point control register. */ - FCRREG = 7, - PCREL = 8, - CONDMASK = 9, - /* Extended register. */ - XREG = 10, - /* Decimal. */ - DEC = 11 -}; - -/* Hashing specification. */ - -#define HASHVAL 79 - -/* Structure templates. */ - -typedef struct -{ - unsigned int offset; - unsigned int width; - enum operand_type type; -} OPSPEC; - -struct SIM_FLAGS -{ - int ltncy, /* latency (max number of clocks needed to execute). */ - extime, /* execution time (min number of clocks needed to execute). */ - wb_pri; /* writeback slot priority. */ - unsigned op:OP, /* simulator version of opcode. */ - imm_flags:2, /* 10,16 or 26 bit immediate flags. */ - rs1_used:1, /* register source 1 used. */ - rs2_used:1, /* register source 2 used. */ - rsd_used:1, /* register source/dest used. */ - c_flag:1, /* complement. */ - u_flag:1, /* upper half word. */ - n_flag:1, /* execute next. */ - wb_flag:1, /* uses writeback slot. */ - dest_64:1, /* double precision dest. */ - s1_64:1, /* double precision source 1. */ - s2_64:1, /* double precision source 2. */ - scale_flag:1; /* register is scaled. */ -}; - -typedef struct INSTRUCTAB { - unsigned int opcode; - char *mnemonic; - OPSPEC op1,op2,op3; - struct SIM_FLAGS flgs; -} INSTAB; - - -#define NO_OPERAND {0,0,0} - -extern const INSTAB instructions[]; - -/* - * Local Variables: - * fill-column: 131 - * End: - */ diff --git a/include/opcode/maxq.h b/include/opcode/maxq.h deleted file mode 100644 index f621ac15623..00000000000 --- a/include/opcode/maxq.h +++ /dev/null @@ -1,1132 +0,0 @@ -/* maxq.h -- Header file for MAXQ opcode table. - - Copyright (C) 2004 Free Software Foundation, Inc. - - This file is part of GDB, GAS, and the GNU binutils. - - Written by Vineet Sharma(vineets@noida.hcltech.com) - Inderpreet Singh (inderpreetb@noida.hcltech.com) - - GDB, GAS, and the GNU binutils are free software; you can redistribute - them and/or modify them under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2, or (at - your option) any later version. - - GDB, GAS, and the GNU binutils are distributed in the hope that they 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 file; see the file COPYING. If not, write to the Free Software - Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _MAXQ20_H_ -#define _MAXQ20_H_ - -/* This file contains the opcode table for the MAXQ10/20 processor. The table - has been designed on the lines of the SH processor with the following - fields: - (1) Instruction Name - (2) Instruction arguments description - (3) Description of the breakup of the opcode (1+7+8|8+8|1+4+4|1+7+1+3+4 - |1+3+4+1+3+4|1+3+4+8|1+1+2+4+8) - (4) Architecture supported - - The Register table is also defined. It contains the following fields - (1) Register name - (2) Module Number - (3) Module Index - (4) Opcode - (5) Regtype - - The Memory access table is defined containing the various opcodes for - memory access containing the following fields - (1) Memory access Operand Name - (2) Memory access Operand opcode. */ - -# define MAXQ10 0x0001 -# define MAXQ20 0x0002 -# define MAX (MAXQ10 | MAXQ20) - -/* This is for the NOP instruction Specify : 1st bit : NOP_FMT 1st byte: - NOP_DST 2nd byte: NOP_SRC. */ -# define NOP_FMT 1 -# define NOP_SRC 0x3A -# define NOP_DST 0x5A - -typedef enum -{ - ZEROBIT = 0x1, /* A zero followed by 3 bits. */ - ONEBIT = 0x2, /* A one followed by 3 bits. */ - REG = 0x4, /* Register. */ - MEM = 0x8, /* Memory access. */ - IMM = 0x10, /* Immediate value. */ - DISP = 0x20, /* Displacement value. */ - BIT = 0x40, /* Bit value. */ - FMT = 0x80, /* The format bit. */ - IMMBIT = 0x100, /* An immediate bit. */ - FLAG = 0x200, /* A Flag. */ - DATA = 0x400, /* Symbol in the data section. */ - BIT_BUCKET = 0x800, /* FOr BIT BUCKET. */ -} -UNKNOWN_OP; - -typedef enum -{ - NO_ARG = 0, - A_IMM = 0x01, /* An 8 bit immediate value. */ - A_REG = 0x2, /* An 8 bit source register. */ - A_MEM = 0x4, /* A 7 bit destination register. */ - FLAG_C = 0x8, /* Carry Flag. */ - FLAG_NC = 0x10, /* No Carry (~C) flag. */ - FLAG_Z = 0x20, /* Zero Flag. */ - FLAG_NZ = 0x40, /* Not Zero Flag. */ - FLAG_S = 0x80, /* Sign Flag. */ - FLAG_E = 0x100, /* Equals Flag. */ - FLAG_NE = 0x200, /* Not Equal Flag. */ - ACC_BIT = 0x400, /* One of the 16 accumulator bits of the form Acc.. */ - DST_BIT = 0x800, /* One of the 8 bits of the specified SRC. */ - SRC_BIT = 0x1000, /* One of the 8 bits of the specified source register. */ - A_BIT_0 = 0x2000, /* #0. */ - A_BIT_1 = 0x4000, /* #1. */ - A_DISP = 0x8000, /* Displacement Operand. */ - A_DATA = 0x10000, /* Data in the data section. */ - A_BIT_BUCKET = 0x200000, -} -MAX_ARG_TYPE; - -typedef struct -{ - char * name; /* Name of the instruction. */ - unsigned int op_number; /* Operand Number or the number of operands. */ - MAX_ARG_TYPE arg[2]; /* Types of operands. */ - int format; /* Format bit. */ - int dst[2]; /* Destination in the move instruction. */ - int src[2]; /* Source in the move instruction. */ - int arch; /* The Machine architecture. */ - unsigned int instr_id; /* Added for decode and dissassembly. */ -} -MAXQ20_OPCODE_INFO; - -/* Structure for holding opcodes of the same name. */ -typedef struct -{ - const MAXQ20_OPCODE_INFO *start; /* The first opcode. */ - const MAXQ20_OPCODE_INFO *end; /* The last opcode. */ -} -MAXQ20_OPCODES; - -/* The entry into the hash table will be of the type MAXX_OPCODES. */ - -/* The definition of the table. */ -const MAXQ20_OPCODE_INFO op_table[] = -{ - /* LOGICAL OPERATIONS */ - /* AND src : f001 1010 ssss ssss */ - {"AND", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x1a, 0}, - {REG | MEM | IMM | DISP, 0}, MAX, 0x11}, - /* AND Acc. : 1111 1010 bbbb 1010 */ - {"AND", 1, {ACC_BIT, 0}, 1, {0x1a, 0}, {BIT, 0xa}, MAX, 0x39}, - /* OR src : f010 1010 ssss ssss */ - {"OR", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x2a, 0}, - {REG | MEM | IMM | DISP, 0}, MAX, 0x12}, - /* OR Acc. : 1010 1010 bbbb 1010 */ - {"OR", 1, {ACC_BIT, 0}, 1, {0x2a, 0}, {BIT, 0xa}, MAX, 0x3A}, - /* XOR src : f011 1010 ssss ssss */ - {"XOR", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x3a, 0}, - {REG | MEM | IMM | DISP, 0}, MAX, 0x13}, - /* XOR Acc. : 1011 1010 bbbb 1010 */ - {"XOR", 1, {ACC_BIT, 0}, 1, {0x3a, 0}, {BIT, 0xa}, MAX, 0x3B}, - /* LOGICAL OPERATIONS INVOLVING ONLY THE ACCUMULATOR */ - /* CPL : 1000 1010 0001 1010 */ - {"CPL", 0, {0, 0}, 1, {0x0a, 0}, {0x1a, 0}, MAX, 0x21}, - /* CPL C : 1101 1010 0010 1010 */ - {"CPL", 1, {FLAG_C, 0}, 1, {0x5a, 0}, {0x2a, 0}, MAX, 0x3D}, - /* NEG : 1000 1010 1001 1010 */ - {"NEG", 0, {0, 0}, 1, {0x0a, 0}, {0x9a, 0}, MAX, 0x29}, - /* SLA : 1000 1010 0010 1010 */ - {"SLA", 0, {0, 0}, 1, {0x0a, 0}, {0x2a, 0}, MAX, 0x22}, - /* SLA2: 1000 1010 0011 1010 */ - {"SLA2", 0, {0, 0}, 1, {0x0a, 0}, {0x3a, 0}, MAX, 0x23}, - /* SLA4: 1000 1010 0110 1010 */ - {"SLA4", 0, {0, 0}, 1, {0x0a, 0}, {0x6a, 0}, MAX, 0x26}, - /* RL : 1000 1010 0100 1010 */ - {"RL", 0, {0, 0}, 1, {0x0a, 0}, {0x4a, 0}, MAX, 0x24}, - /* RLC : 1000 1010 0101 1010 */ - {"RLC", 0, {0, 0}, 1, {0x0a, 0}, {0x5a, 0}, MAX, 0x25}, - /* SRA : 1000 1010 1111 1010 */ - {"SRA", 0, {0, 0}, 1, {0x0a, 0}, {0xfa, 0}, MAX, 0x2F}, - /* SRA2: 1000 1010 1110 1010 */ - {"SRA2", 0, {0, 0}, 1, {0x0a, 0}, {0xea, 0}, MAX, 0x2E}, - /* SRA4: 1000 1010 1011 1010 */ - {"SRA4", 0, {0, 0}, 1, {0x0a, 0}, {0xba, 0}, MAX, 0x2B}, - /* SR : 1000 1010 1010 1010 */ - {"SR", 0, {0, 0}, 1, {0x0a, 0}, {0xaa, 0}, MAX, 0x2A}, - /* RR : 1000 1010 1100 1010 */ - {"RR", 0, {0, 0}, 1, {0x0a, 0}, {0xca, 0}, MAX, 0x2C}, - /* RRC : 1000 1010 1101 1010 */ - {"RRC", 0, {0, 0}, 1, {0x0a, 0}, {0xda, 0}, MAX, 0x2D}, - /* MATH OPERATIONS */ - /* ADD src : f100 1010 ssss ssss */ - {"ADD", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x4a, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0x14}, - /* ADDC src : f110 1010 ssss ssss */ - {"ADDC", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x6a, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0x16}, - /* SUB src : f101 1010 ssss ssss */ - {"SUB", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x5a, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0x15}, - /* SUBB src : f111 1010 ssss ssss */ - {"SUBB", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x7a, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0x17}, - /* BRANCHING OPERATIONS */ - - /* DJNZ LC[0] src: f100 1101 ssss ssss */ - {"DJNZ", 2, {A_REG, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x4d, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0xA4}, - /* DJNZ LC[1] src: f101 1101 ssss ssss */ - {"DJNZ", 2, {A_REG, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x5d, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0xA5}, - /* CALL src : f011 1101 ssss ssss */ - {"CALL", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x3d, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0xA3}, - /* JUMP src : f000 1100 ssss ssss */ - {"JUMP", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x0c, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0x50}, - /* JUMP C,src : f010 1100 ssss ssss */ - {"JUMP", 2, {FLAG_C, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x2c, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0x52}, - /* JUMP NC,src: f110 1100 ssss ssss */ - {"JUMP", 2, {FLAG_NC, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x6c, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0x56}, - /* JUMP Z,src : f001 1100 ssss ssss */ - {"JUMP", 2, {FLAG_Z, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x1c, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0x51}, - /* JUMP NZ,src: f101 1100 ssss ssss */ - {"JUMP", 2, {FLAG_NZ, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x5c, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0x55}, - /* JUMP E,src : 0011 1100 ssss ssss */ - {"JUMP", 2, {FLAG_E, A_IMM | A_DISP}, 0, {0x3c, 0}, {IMM, 0}, MAX, 0x53}, - /* JUMP NE,src: 0111 1100 ssss ssss */ - {"JUMP", 2, {FLAG_NE, A_IMM | A_DISP}, 0, {0x7c, 0}, {IMM, 0}, MAX, 0x57}, - /* JUMP S,src : f100 1100 ssss ssss */ - {"JUMP", 2, {FLAG_S, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x4c, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0x54}, - /* RET : 1000 1100 0000 1101 */ - {"RET", 0, {0, 0}, 1, {0x0c, 0}, {0x0d, 0}, MAX, 0x68}, - /* RET C : 1010 1100 0000 1101 */ - {"RET", 1, {FLAG_C, 0}, 1, {0x2c, 0}, {0x0d, 0}, MAX, 0x6A}, - /* RET NC : 1110 1100 0000 1101 */ - {"RET", 1, {FLAG_NC, 0}, 1, {0x6c, 0}, {0x0d, 0}, MAX, 0x6E}, - /* RET Z : 1001 1100 0000 1101 */ - {"RET", 1, {FLAG_Z, 0}, 1, {0x1c, 0}, {0x0d, 0}, MAX, 0x69}, - /* RET NZ : 1101 1100 0000 1101 */ - {"RET", 1, {FLAG_NZ, 0}, 1, {0x5c, 0}, {0x0d, 0}, MAX, 0x6D}, - /* RET S : 1100 1100 0000 1101 */ - {"RET", 1, {FLAG_S, 0}, 1, {0x4c, 0}, {0x0d, 0}, MAX, 0x6C}, - /* RETI : 1000 1100 1000 1101 */ - {"RETI", 0, {0, 0}, 1, {0x0c, 0}, {0x8d, 0}, MAX, 0x78}, - /* ADDED ACCORDING TO NEW SPECIFICATION */ - - /* RETI C : 1010 1100 1000 1101 */ - {"RETI", 1, {FLAG_C, 0}, 1, {0x2c, 0}, {0x8d, 0}, MAX, 0x7A}, - /* RETI NC : 1110 1100 1000 1101 */ - {"RETI", 1, {FLAG_NC, 0}, 1, {0x6c, 0}, {0x8d, 0}, MAX, 0x7E}, - /* RETI Z : 1001 1100 1000 1101 */ - {"RETI", 1, {FLAG_Z, 0}, 1, {0x1c, 0}, {0x8d, 0}, MAX, 0x79}, - /* RETI NZ : 1101 1100 1000 1101 */ - {"RETI", 1, {FLAG_NZ, 0}, 1, {0x5c, 0}, {0x8d, 0}, MAX, 0x7D}, - /* RETI S : 1100 1100 1000 1101 */ - {"RETI", 1, {FLAG_S, 0}, 1, {0x4c, 0}, {0x8d, 0}, MAX, 0x7C}, - /* MISCELLANEOUS INSTRUCTIONS */ - /* CMP src : f111 1000 ssss ssss */ - {"CMP", 1, {A_REG | A_IMM | A_MEM | A_DISP, 0}, FMT, {0x78, 0}, - {REG | MEM | IMM | DISP, 0}, MAX, 0xD7}, - /* DATA TRANSFER OPERATIONS */ - /* XCH : 1000 1010 1000 1010 */ - {"XCH", 0, {0, 0}, 1, {0x0a, 0}, {0x8a, 0}, MAXQ20, 0x28}, - /* XCHN : 1000 1010 0111 1010 */ - {"XCHN", 0, {0, 0}, 1, {0x0a, 0}, {0x7a, 0}, MAX, 0x27}, - /* PUSH src : f000 1101 ssss ssss */ - {"PUSH", 1, {A_REG | A_IMM | A_MEM | A_DISP, 0}, FMT, {0x0d, 0}, - {IMM | REG | MEM | DISP, 0}, MAX, 0xA0}, - /* POP dst : 1ddd dddd 0000 1101 */ - {"POP", 1, {A_REG, 0}, 1, {REG, 0}, {0x0d, 0}, MAX, 0xB0}, - /* Added according to new spec */ - /* POPI dst : 1ddd dddd 1000 1101 */ - {"POPI", 1, {A_REG, 0}, 1, {REG, 0}, {0x8d, 0}, MAX, 0xC0}, - /* MOVE dst,src: fddd dddd ssss ssss */ - {"MOVE", 2, {A_REG | A_MEM, A_REG | A_IMM | A_MEM | A_DATA | A_DISP}, FMT, - {REG | MEM, 0}, {REG | IMM | MEM | DATA | A_DISP, 0}, MAX, 0x80}, - /* BIT OPERATIONS */ - /* MOVE C,Acc. : 1110 1010 bbbb 1010 */ - {"MOVE", 2, {FLAG_C, ACC_BIT}, 1, {0x6a, 0}, {BIT, 0xa}, MAX, 0x3E}, - /* MOVE C,#0 : 1101 1010 0000 1010 */ - {"MOVE", 2, {FLAG_C, A_BIT_0}, 1, {0x5a, 0}, {0x0a, 0}, MAX, 0x3D}, - /* MOVE C,#1 : 1101 1010 0001 1010 */ - {"MOVE", 2, {FLAG_C, A_BIT_1}, 1, {0x5a, 0}, {0x1a, 0}, MAX, 0x3D}, - /* MOVE Acc.,C : 1111 1010 bbbb 1010 */ - {"MOVE", 2, {ACC_BIT, FLAG_C}, 1, {0x7a, 0}, {BIT, 0xa}, MAX, 0x3F}, - /* MOVE dst.,#0 : 1ddd dddd 0bbb 0111 */ - {"MOVE", 2, {DST_BIT, A_BIT_0}, 1, {REG, 0}, {ZEROBIT, 0x7}, MAX, 0x40}, - /* MOVE dst.,#1 : 1ddd dddd 1bbb 0111 */ - {"MOVE", 2, {DST_BIT, A_BIT_1}, 1, {REG, 0}, {ONEBIT, 0x7}, MAX, 0x41}, - /* MOVE C,src. : fbbb 0111 ssss ssss */ - {"MOVE", 2, {FLAG_C, SRC_BIT}, FMT, {BIT, 0x7}, {REG, 0}, MAX, 0x97}, - /* NOP : 1101 1010 0011 1010 */ - {"NOP", 0, {0, 0}, NOP_FMT, {NOP_DST, 0}, {NOP_SRC, 0}, MAX, 0x3D}, - {NULL, 0, {0, 0}, 0, {0, 0}, {0, 0}, 0, 0x00} -}; - -/* All the modules. */ - -#define MOD0 0x0 -#define MOD1 0x1 -#define MOD2 0x2 -#define MOD3 0x3 -#define MOD4 0x4 -#define MOD5 0x5 -#define MOD6 0x6 -#define MOD7 0x7 -#define MOD8 0x8 -#define MOD9 0x9 -#define MODA 0xa -#define MODB 0xb -#define MODC 0xc -#define MODD 0xd -#define MODE 0xe -#define MODF 0xf - -/* Added according to new specification. */ -#define MOD10 0x10 -#define MOD11 0x11 -#define MOD12 0x12 -#define MOD13 0x13 -#define MOD14 0x14 -#define MOD15 0x15 -#define MOD16 0x16 -#define MOD17 0x17 -#define MOD18 0x18 -#define MOD19 0x19 -#define MOD1A 0x1a -#define MOD1B 0x1b -#define MOD1C 0x1c -#define MOD1D 0x1d -#define MOD1E 0x1e -#define MOD1F 0x1f - -/* - Peripheral Register Modules - */ -/* Serial Register Modules. */ -#define CTRL MOD8 /* For the module containing the control registers. */ -#define ACC MOD9 /* For the module containing the 16 accumulators. */ -#define Act_ACC MODA /* For the module containing the active accumulator. */ -#define PFX MODB /* For the module containing the prefix registers. */ -#define IP MODC /* For the module containing the instruction pointer register. */ -#define SPIV MODD /* For the module containing the stack pointer and the interrupt vector. */ -#define LC MODD /* For the module containing the loop counters and HILO registers. */ -#define DP MODF /* For the module containig the data pointer registers. */ - -/* Register Types. */ -typedef enum _Reg_type -{ Reg_8R, /* 8 bit register. read only. */ - Reg_16R, /* 16 bit register, read only. */ - Reg_8W, /* 8 bit register, both read and write. */ - Reg_16W /* 16 bit register, both read and write. */ -} -Reg_type; - -/* Register Structure. */ -typedef struct reg -{ - char *reg_name; /* Register name. */ - short int Mod_name; /* The module name. */ - short int Mod_index; /* The module index. */ - int opcode; /* The opcode of the register. */ - Reg_type rtype; /* 8 bit/16 bit and read only/read write. */ - int arch; /* The Machine architecture. */ -} -reg_entry; - -reg_entry *new_reg_table = NULL; -int num_of_reg = 0; - -typedef struct -{ - char *rname; - int rindex; -} -reg_index; - -/* Register Table description. */ -reg_entry system_reg_table[] = -{ - /* Serial Registers */ - /* MODULE 8 Registers : I call them the control registers. */ - /* Accumulator Pointer CTRL[0h] */ - { - "AP", CTRL, 0x0, 0x00 | CTRL, Reg_8W, MAX}, - /* Accumulator Pointer Control Register : CTRL[1h] */ - - { - "APC", CTRL, 0x1, 0x10 | CTRL, Reg_8W, MAX}, - /* Processor Status Flag Register CTRL[4h] Note: Bits 6 and 7 read only */ - { - "PSF", CTRL, 0x4, 0x40 | CTRL, Reg_8W, MAX}, - /* Interrupt and Control Register : CTRL[5h] */ - { - "IC", CTRL, 0x5, 0x50 | CTRL, Reg_8W, MAX}, - /* Interrupt Mask Register : CTRL[6h] */ - { - "IMR", CTRL, 0x6, 0x60 | CTRL, Reg_8W, MAX}, - /* Interrupt System Control : CTRL[8h] */ - { - "SC", CTRL, 0x8, 0x80 | CTRL, Reg_8W, MAX}, - /* Interrupt Identification Register : CTRL[Bh] */ - { - "IIR", CTRL, 0xb, 0xb0 | CTRL, Reg_8R, MAX}, - /* System Clock Control Register : CTRL[Eh] Note: Bit 5 is read only */ - { - "CKCN", CTRL, 0xe, 0xe0 | CTRL, Reg_8W, MAX}, - /* Watchdog Control Register : CTRL[Fh] */ - { - "WDCN", CTRL, 0xf, 0xf0 | CTRL, Reg_8W, MAX}, - /* The 16 accumulator registers : ACC[0h-Fh] */ - { - "A[0]", ACC, 0x0, 0x00 | ACC, Reg_16W, MAXQ20}, - { - "A[1]", ACC, 0x1, 0x10 | ACC, Reg_16W, MAXQ20}, - { - "A[2]", ACC, 0x2, 0x20 | ACC, Reg_16W, MAXQ20}, - { - "A[3]", ACC, 0x3, 0x30 | ACC, Reg_16W, MAXQ20}, - { - "A[4]", ACC, 0x4, 0x40 | ACC, Reg_16W, MAXQ20}, - { - "A[5]", ACC, 0x5, 0x50 | ACC, Reg_16W, MAXQ20}, - { - "A[6]", ACC, 0x6, 0x60 | ACC, Reg_16W, MAXQ20}, - { - "A[7]", ACC, 0x7, 0x70 | ACC, Reg_16W, MAXQ20}, - { - "A[8]", ACC, 0x8, 0x80 | ACC, Reg_16W, MAXQ20}, - { - "A[9]", ACC, 0x9, 0x90 | ACC, Reg_16W, MAXQ20}, - { - "A[10]", ACC, 0xa, 0xa0 | ACC, Reg_16W, MAXQ20}, - { - "A[11]", ACC, 0xb, 0xb0 | ACC, Reg_16W, MAXQ20}, - { - "A[12]", ACC, 0xc, 0xc0 | ACC, Reg_16W, MAXQ20}, - { - "A[13]", ACC, 0xd, 0xd0 | ACC, Reg_16W, MAXQ20}, - { - "A[14]", ACC, 0xe, 0xe0 | ACC, Reg_16W, MAXQ20}, - { - "A[15]", ACC, 0xf, 0xf0 | ACC, Reg_16W, MAXQ20}, - /* The Active Accumulators : Act_Acc[0h-1h] */ - { - "ACC", Act_ACC, 0x0, 0x00 | Act_ACC, Reg_16W, MAXQ20}, - { - "A[AP]", Act_ACC, 0x1, 0x10 | Act_ACC, Reg_16W, MAXQ20}, - /* The 16 accumulator registers : ACC[0h-Fh] */ - { - "A[0]", ACC, 0x0, 0x00 | ACC, Reg_8W, MAXQ10}, - { - "A[1]", ACC, 0x1, 0x10 | ACC, Reg_8W, MAXQ10}, - { - "A[2]", ACC, 0x2, 0x20 | ACC, Reg_8W, MAXQ10}, - { - "A[3]", ACC, 0x3, 0x30 | ACC, Reg_8W, MAXQ10}, - { - "A[4]", ACC, 0x4, 0x40 | ACC, Reg_8W, MAXQ10}, - { - "A[5]", ACC, 0x5, 0x50 | ACC, Reg_8W, MAXQ10}, - { - "A[6]", ACC, 0x6, 0x60 | ACC, Reg_8W, MAXQ10}, - { - "A[7]", ACC, 0x7, 0x70 | ACC, Reg_8W, MAXQ10}, - { - "A[8]", ACC, 0x8, 0x80 | ACC, Reg_8W, MAXQ10}, - { - "A[9]", ACC, 0x9, 0x90 | ACC, Reg_8W, MAXQ10}, - { - "A[10]", ACC, 0xa, 0xa0 | ACC, Reg_8W, MAXQ10}, - { - "A[11]", ACC, 0xb, 0xb0 | ACC, Reg_8W, MAXQ10}, - { - "A[12]", ACC, 0xc, 0xc0 | ACC, Reg_8W, MAXQ10}, - { - "A[13]", ACC, 0xd, 0xd0 | ACC, Reg_8W, MAXQ10}, - { - "A[14]", ACC, 0xe, 0xe0 | ACC, Reg_8W, MAXQ10}, - { - "A[15]", ACC, 0xf, 0xf0 | ACC, Reg_8W, MAXQ10}, - /* The Active Accumulators : Act_Acc[0h-1h] */ - { - "A[AP]", Act_ACC, 0x1, 0x10 | Act_ACC, Reg_8W, MAXQ10}, - /* The Active Accumulators : Act_Acc[0h-1h] */ - { - "ACC", Act_ACC, 0x0, 0x00 | Act_ACC, Reg_8W, MAXQ10}, - /* The Prefix Registers : PFX[0h,2h] */ - { - "PFX[0]", PFX, 0x0, 0x00 | PFX, Reg_16W, MAX}, - { - "PFX[1]", PFX, 0x1, 0x10 | PFX, Reg_16W, MAX}, - { - "PFX[2]", PFX, 0x2, 0x20 | PFX, Reg_16W, MAX}, - { - "PFX[3]", PFX, 0x3, 0x30 | PFX, Reg_16W, MAX}, - { - "PFX[4]", PFX, 0x4, 0x40 | PFX, Reg_16W, MAX}, - { - "PFX[5]", PFX, 0x5, 0x50 | PFX, Reg_16W, MAX}, - { - "PFX[6]", PFX, 0x6, 0x60 | PFX, Reg_16W, MAX}, - { - "PFX[7]", PFX, 0x7, 0x70 | PFX, Reg_16W, MAX}, - /* The Instruction Pointer Registers : IP[0h,8h] */ - { - "IP", IP, 0x0, 0x00 | IP, Reg_16W, MAX}, - /* The Stack Pointer Registers : SPIV[1h,9h] */ - { - "SP", SPIV, 0x1, 0x10 | SPIV, Reg_16W, MAX}, - /* The Interrupt Vector Registers : SPIV[2h,Ah] */ - { - "IV", SPIV, 0x2, 0x20 | SPIV, Reg_16W, MAX}, - /* ADDED for New Specification */ - - /* The Loop Counter Registers : LCHILO[0h-4h,8h-Bh] */ - { - "LC[0]", LC, 0x6, 0x60 | LC, Reg_16W, MAX}, - { - "LC[1]", LC, 0x7, 0x70 | LC, Reg_16W, MAX}, - /* MODULE Eh Whole Column has changed */ - - { - "OFFS", MODE, 0x3, 0x30 | MODE, Reg_8W, MAX}, - { - "DPC", MODE, 0x4, 0x40 | MODE, Reg_16W, MAX}, - { - "GR", MODE, 0x5, 0x50 | MODE, Reg_16W, MAX}, - { - "GRL", MODE, 0x6, 0x60 | MODE, Reg_8W, MAX}, - { - "BP", MODE, 0x7, 0x70 | MODE, Reg_16W, MAX}, - { - "GRS", MODE, 0x8, 0x80 | MODE, Reg_16W, MAX}, - { - "GRH", MODE, 0x9, 0x90 | MODE, Reg_8W, MAX}, - { - "GRXL", MODE, 0xA, 0xA0 | MODE, Reg_8R, MAX}, - { - "FP", MODE, 0xB, 0xB0 | MODE, Reg_16R, MAX}, - /* The Data Pointer registers : DP[3h,7h,Bh,Fh] */ - { - "DP[0]", DP, 0x3, 0x30 | DP, Reg_16W, MAX}, - { - "DP[1]", DP, 0x7, 0x70 | DP, Reg_16W, MAX}, -}; -typedef struct -{ - char *name; - int type; -} -match_table; - -#define GPIO0 0x00 /* Gerneral Purpose I/O Module 0. */ -#define GPIO1 0x01 /* Gerneral Purpose I/O Module 1. */ -#define RTC 0x00 /* Real Time Clock Module. */ -#define MAC 0x02 /* Hardware Multiplier Module. */ -#define SER0 0x02 /* Contains the UART Registers. */ -#define SPI 0x03 /* Serial Pheripheral Interface Module. */ -#define OWBM 0x03 /* One Wire Bus Module. */ -#define SER1 0x03 /* Contains the UART Registers. */ -#define TIMER20 0x03 /* Timer Counter Module 2. */ -#define TIMER21 0x04 /* Timer Counter Module 2. */ -#define JTAGD 0x03 /* In-Circuit Debugging Support. */ -#define LCD 0x03 /* LCD register Modules. */ - -/* Plugable modules register table f. */ - -reg_entry peripheral_reg_table[] = -{ - /* -------- The GPIO Module Registers -------- */ - /* Port n Output Registers : GPIO[0h-4h] */ - { - "PO0", GPIO0, 0x0, 0x00 | MOD0, Reg_8W, MAX}, - { - "PO1", GPIO0, 0x1, 0x10 | MOD0, Reg_8W, MAX}, - { - "PO2", GPIO0, 0x2, 0x20 | MOD0, Reg_8W, MAX}, - { - "PO3", GPIO0, 0x3, 0x30 | MOD0, Reg_8W, MAX}, - /* External Interrupt Flag Register : GPIO[6h] */ - { - "EIF0", GPIO0, 0x6, 0x60 | MOD0, Reg_8W, MAX}, - /* External Interrupt Enable Register : GPIO[7h] */ - { - "EIE0", GPIO0, 0x7, 0x70 | MOD0, Reg_8W, MAX}, - /* Port n Input Registers : GPIO[8h-Bh] */ - { - "PI0", GPIO0, 0x8, 0x80 | MOD0, Reg_8W, MAX}, - { - "PI1", GPIO0, 0x9, 0x90 | MOD0, Reg_8W, MAX}, - { - "PI2", GPIO0, 0xa, 0xa0 | MOD0, Reg_8W, MAX}, - { - "PI3", GPIO0, 0xb, 0xb0 | MOD0, Reg_8W, MAX}, - { - "EIES0", GPIO0, 0xc, 0xc0 | MOD0, Reg_8W, MAX}, - /* Port n Direction Registers : GPIO[Ch-Fh] */ - { - "PD0", GPIO0, 0x10, 0x10 | MOD0, Reg_8W, MAX}, - { - "PD1", GPIO0, 0x11, 0x11 | MOD0, Reg_8W, MAX}, - { - "PD2", GPIO0, 0x12, 0x12 | MOD0, Reg_8W, MAX}, - { - "PD3", GPIO0, 0x13, 0x13 | MOD0, Reg_8W, MAX}, - /* -------- Real Time Counter Module RTC -------- */ - /* RTC Control Register : [01h] */ - { - "RCNT", RTC, 0x19, 0x19 | MOD0, Reg_16W, MAX}, - /* RTC Seconds High [02h] */ - { - "RTSS", RTC, 0x1A, 0x1A | MOD0, Reg_8W, MAX}, - /* RTC Seconds Low [03h] */ - { - "RTSH", RTC, 0x1b, 0x1b | MOD0, Reg_16W, MAX}, - /* RTC Subsecond Register [04h] */ - { - "RTSL", RTC, 0x1C, 0x1C | MOD0, Reg_16W, MAX}, - /* RTC Alarm seconds high [05h] */ - { - "RSSA", RTC, 0x1D, 0x1D | MOD0, Reg_8W, MAX}, - /* RTC Alarm seconds high [06h] */ - { - "RASH", RTC, 0x1E, 0x1E | MOD0, Reg_8W, MAX}, - /* RTC Subsecond Alarm Register [07h] */ - { - "RASL", RTC, 0x1F, 0x1F | MOD0, Reg_16W, MAX}, - /* -------- The GPIO Module Registers -------- */ - /* Port n Output Registers : GPIO[0h-4h] */ - { - "PO4", GPIO1, 0x0, 0x00 | MOD1, Reg_8W, MAX}, - { - "PO5", GPIO1, 0x1, 0x10 | MOD1, Reg_8W, MAX}, - { - "PO6", GPIO1, 0x2, 0x20 | MOD1, Reg_8W, MAX}, - { - "PO7", GPIO1, 0x3, 0x30 | MOD1, Reg_8W, MAX}, - /* External Interrupt Flag Register : GPIO[6h] */ - { - "EIF1", GPIO0, 0x6, 0x60 | MOD1, Reg_8W, MAX}, - /* External Interrupt Enable Register : GPIO[7h] */ - { - "EIE1", GPIO0, 0x7, 0x70 | MOD1, Reg_8W, MAX}, - /* Port n Input Registers : GPIO[8h-Bh] */ - { - "PI4", GPIO1, 0x8, 0x80 | MOD1, Reg_8W, MAX}, - { - "PI5", GPIO1, 0x9, 0x90 | MOD1, Reg_8W, MAX}, - { - "PI6", GPIO1, 0xa, 0xa0 | MOD1, Reg_8W, MAX}, - { - "PI7", GPIO1, 0xb, 0xb0 | MOD1, Reg_8W, MAX}, - { - "EIES1", GPIO1, 0xc, 0xc0 | MOD1, Reg_8W, MAX}, - /* Port n Direction Registers : GPIO[Ch-Fh] */ - { - "PD4", GPIO1, 0x10, 0x10 | MOD1, Reg_8W, MAX}, - { - "PD5", GPIO1, 0x11, 0x11 | MOD1, Reg_8W, MAX}, - { - "PD6", GPIO1, 0x12, 0x12 | MOD1, Reg_8W, MAX}, - { - "PD7", GPIO1, 0x13, 0x13 | MOD1, Reg_8W, MAX}, -#if 0 - /* Supply Boltage Check Register */ - { - "SVS", GPIO1, 0x1e, 0x1e | GPIO1, Reg_8W, MAX}, - /* Wake up output register */ - { - "WK0", GPIO1, 0x1f, 0x1f | GPIO1, Reg_8W, MAX}, -#endif /* */ - - /* -------- MAC Hardware multiplier module -------- */ - /* MAC Hardware Multiplier control register: [01h] */ - { - "MCNT", MAC, 0x1, 0x10 | MOD2, Reg_8W, MAX}, - /* MAC Multiplier Operand A Register [02h] */ - { - "MA", MAC, 0x2, 0x20 | MOD2, Reg_16W, MAX}, - /* MAC Multiplier Operand B Register [03h] */ - { - "MB", MAC, 0x3, 0x30 | MOD2, Reg_16W, MAX}, - /* MAC Multiplier Accumulator 2 Register [04h] */ - { - "MC2", MAC, 0x4, 0x40 | MOD2, Reg_16W, MAX}, - /* MAC Multiplier Accumulator 1 Register [05h] */ - { - "MC1", MAC, 0x5, 0x50 | MOD2, Reg_16W, MAX}, - /* MAC Multiplier Accumulator 0 Register [06h] */ - { - "MC0", MAC, 0x6, 0x60 | MOD2, Reg_16W, MAX}, - /* -------- The Serial I/O module SER -------- */ - /* UART registers */ - /* Serial Port Control Register : SER[6h] */ - { - "SCON0", SER0, 0x6, 0x60 | MOD2, Reg_8W, MAX}, - /* Serial Data Buffer Register : SER[7h] */ - { - "SBUF0", SER0, 0x7, 0x70 | MOD2, Reg_8W, MAX}, - /* Serial Port Mode Register : SER[4h] */ - { - "SMD0", SER0, 0x8, 0x80 | MOD2, Reg_8W, MAX}, - /* Serial Port Phase Register : SER[4h] */ - { - "PR0", SER1, 0x9, 0x90 | MOD2, Reg_16W, MAX}, - /* ------ LCD Display Module ---------- */ - { - "LCRA", LCD, 0xd, 0xd0 | MOD2, Reg_16W, MAX}, - { - "LCFG", LCD, 0xe, 0xe0 | MOD2, Reg_8W, MAX}, - { - "LCD16", LCD, 0xf, 0xf0 | MOD2, Reg_8W, MAX}, - { - "LCD0", LCD, 0x10, 0x10 | MOD2, Reg_8W, MAX}, - { - "LCD1", LCD, 0x11, 0x11 | MOD2, Reg_8W, MAX}, - { - "LCD2", LCD, 0x12, 0x12 | MOD2, Reg_8W, MAX}, - { - "LCD3", LCD, 0x13, 0x13 | MOD2, Reg_8W, MAX}, - { - "LCD4", LCD, 0x14, 0x14 | MOD2, Reg_8W, MAX}, - { - "LCD5", LCD, 0x15, 0x15 | MOD2, Reg_8W, MAX}, - { - "LCD6", LCD, 0x16, 0x16 | MOD2, Reg_8W, MAX}, - { - "LCD7", LCD, 0x17, 0x17 | MOD2, Reg_8W, MAX}, - { - "LCD8", LCD, 0x18, 0x18 | MOD2, Reg_8W, MAX}, - { - "LCD9", LCD, 0x19, 0x19 | MOD2, Reg_8W, MAX}, - { - "LCD10", LCD, 0x1a, 0x1a | MOD2, Reg_8W, MAX}, - { - "LCD11", LCD, 0x1b, 0x1b | MOD2, Reg_8W, MAX}, - { - "LCD12", LCD, 0x1c, 0x1c | MOD2, Reg_8W, MAX}, - { - "LCD13", LCD, 0x1d, 0x1d | MOD2, Reg_8W, MAX}, - { - "LCD14", LCD, 0x1e, 0x1e | MOD2, Reg_8W, MAX}, - { - "LCD15", LCD, 0x1f, 0x1f | MOD2, Reg_8W, MAX}, - /* -------- SPI registers -------- */ - /* SPI data buffer Register : SER[7h] */ - { - "SPIB", SPI, 0x5, 0x50 | MOD3, Reg_16W, MAX}, - /* SPI Control Register : SER[8h] Note : Bit 7 is a read only bit */ - { - "SPICN", SPI, 0x15, 0x15 | MOD3, Reg_8W, MAX}, - /* SPI Configuration Register : SER[9h] Note : Bits 4,3 and 2 are read - only. */ - { - "SPICF", SPI, 0x16, 0x16 | MOD3, Reg_8W, MAX}, - /* SPI Clock Register : SER[Ah] */ - { - "SPICK", SPI, 0x17, 0x17 | MOD3, Reg_8W, MAX}, - /* -------- One Wire Bus Master OWBM -------- */ - /* OWBM One Wire address Register register: [01h] */ - { - "OWA", OWBM, 0x13, 0x13 | MOD3, Reg_8W, MAX}, - /* OWBM One Wire Data register: [02h] */ - { - "OWD", OWBM, 0x14, 0x14 | MOD3, Reg_8W, MAX}, - /* -------- The Serial I/O module SER -------- */ - /* UART registers */ - /* Serial Port Control Register : SER[6h] */ - { - "SCON1", SER1, 0x6, 0x60 | MOD3, Reg_8W, MAX}, - /* Serial Data Buffer Register : SER[7h] */ - { - "SBUF1", SER1, 0x7, 0x70 | MOD3, Reg_8W, MAX}, - /* Serial Port Mode Register : SER[4h] */ - { - "SMD1", SER1, 0x8, 0x80 | MOD3, Reg_8W, MAX}, - /* Serial Port Phase Register : SER[4h] */ - { - "PR1", SER1, 0x9, 0x90 | MOD3, Reg_16W, MAX}, - /* -------- Timer/Counter 2 Module -------- */ - /* Timer 2 configuration Register : TC[3h] */ - { - "T2CNA0", TIMER20, 0x0, 0x00 | MOD3, Reg_8W, MAX}, - { - "T2H0", TIMER20, 0x1, 0x10 | MOD3, Reg_8W, MAX}, - { - "T2RH0", TIMER20, 0x2, 0x20 | MOD3, Reg_8W, MAX}, - { - "T2CH0", TIMER20, 0x3, 0x30 | MOD3, Reg_8W, MAX}, - { - "T2CNB0", TIMER20, 0xc, 0xc0 | MOD3, Reg_8W, MAX}, - { - "T2V0", TIMER20, 0xd, 0xd0 | MOD3, Reg_16W, MAX}, - { - "T2R0", TIMER20, 0xe, 0xe0 | MOD3, Reg_16W, MAX}, - { - "T2C0", TIMER20, 0xf, 0xf0 | MOD3, Reg_16W, MAX}, - { - "T2CFG0", TIMER20, 0x10, 0x10 | MOD3, Reg_8W, MAX}, - /* Timer 2-1 configuration Register : TC[4h] */ - - { - "T2CNA1", TIMER21, 0x0, 0x00 | MOD4, Reg_8W, MAX}, - { - "T2H1", TIMER21, 0x1, 0x10 | MOD4, Reg_8W, MAX}, - { - "T2RH1", TIMER21, 0x2, 0x20 | MOD4, Reg_8W, MAX}, - { - "T2CH1", TIMER21, 0x3, 0x30 | MOD4, Reg_8W, MAX}, - { - "T2CNA2", TIMER21, 0x4, 0x40 | MOD4, Reg_8W, MAX}, - { - "T2H2", TIMER21, 0x5, 0x50 | MOD4, Reg_8W, MAX}, - { - "T2RH2", TIMER21, 0x6, 0x60 | MOD4, Reg_8W, MAX}, - { - "T2CH2", TIMER21, 0x7, 0x70 | MOD4, Reg_8W, MAX}, - { - "T2CNB1", TIMER21, 0x8, 0x80 | MOD4, Reg_8W, MAX}, - { - "T2V1", TIMER21, 0x9, 0x90 | MOD4, Reg_16W, MAX}, - { - "T2R1", TIMER21, 0xa, 0xa0 | MOD4, Reg_16W, MAX}, - { - "T2C1", TIMER21, 0xb, 0xb0 | MOD4, Reg_16W, MAX}, - { - "T2CNB2", TIMER21, 0xc, 0xc0 | MOD4, Reg_8W, MAX}, - { - "T2V2", TIMER21, 0xd, 0xd0 | MOD4, Reg_16W, MAX}, - { - "T2R2", TIMER21, 0xe, 0xe0 | MOD4, Reg_16W, MAX}, - { - "T2C2", TIMER21, 0xf, 0xf0 | MOD4, Reg_16W, MAX}, - { - "T2CFG1", TIMER21, 0x10, 0x10 | MOD4, Reg_8W, MAX}, - { - "T2CFG2", TIMER21, 0x11, 0x11 | MOD4, Reg_8W, MAX}, - { - NULL, 0, 0, 0, 0, 0} -}; - -/* Memory access argument. */ -struct mem_access -{ - char *name; /* Name of the Memory access operand. */ - int opcode; /* Its corresponding opcode. */ -}; -typedef struct mem_access mem_access; - -/* The Memory table for accessing the data memory through particular registers. */ -struct mem_access mem_table[] = -{ - /* The Pop Operation on the stack. */ - {"@SP--", 0x0d}, - /* Data Pointer 0 */ - {"@DP[0]", 0x0f}, - /* Data Ponter 1 */ - {"@DP[1]", 0x4f}, - /* Data Pointer 0 post increment */ - {"@DP[0]++", 0x1f}, - /* Data Pointer 1 post increment */ - {"@DP[1]++", 0x5f}, - /* Data Pointer 0 post decrement */ - {"@DP[0]--", 0x2f}, - /* Data Pointer 1 post decrement */ - {"@DP[1]--", 0x6f}, - /* ADDED According to New Specification. */ - - {"@BP[OFFS]", 0x0E}, - {"@BP[OFFS++]", 0x1E}, - {"@BP[OFFS--]", 0x2E}, - {"NUL", 0x76}, - {"@++SP", 0x0D}, - {"@BP[++OFFS]", 0x1E}, - {"@BP[--OFFS]", 0x2E}, - {"@++DP[0]", 0x1F}, - {"@++DP[1]", 0x5F}, {"@--DP[0]", 0x2F}, {"@--DP[1]", 0x6F} -}; - -/* Register bit argument. */ -struct reg_bit -{ - reg_entry *reg; - int bit; -}; -typedef struct reg_bit reg_bit; - -/* There are certain names given to particular bits of some registers. - These will be taken care of here. */ -struct bit_name -{ - char *name; - char *reg_bit; -}; -typedef struct bit_name bit_name; - -bit_name bit_table[] = -{ - { - "RI", "SCON.0"}, - /* FOr APC */ - { - "MOD0", "APC.0"}, - { - "MOD1", "APC.1"}, - { - "MOD2", "APC.2"}, - { - "IDS", "APC.6"}, - { - "CLR", "APC.6"}, - /* For PSF */ - { - "E", "PSF.0"}, - { - "C", "PSF.1"}, - { - "OV", "PSF.2"}, - { - "S", "PSF.6"}, - { - "Z", "PSF.7"}, - /* For IC */ - - { - "IGE", "IC.0"}, - { - "INS", "IC.1"}, - { - "CGDS", "IC.5"}, - /* For IMR */ - - { - "IM0", "IMR.0"}, - { - "IM1", "IMR.1"}, - { - "IM2", "IMR.2"}, - { - "IM3", "IMR.3"}, - { - "IM4", "IMR.4"}, - { - "IM5", "IMR.5"}, - { - "IMS", "IMR.7"}, - /* For SC */ - { - "PWL", "SC.1"}, - { - "ROD", "SC.2"}, - { - "UPA", "SC.3"}, - { - "CDA0", "SC.4"}, - { - "CDA1", "SC.5"}, - /* For IIR */ - - { - "II0", "IIR.0"}, - { - "II1", "IIR.1"}, - { - "II2", "IIR.2"}, - { - "II3", "IIR.3"}, - { - "II4", "IIR.4"}, - { - "II5", "IIR.5"}, - { - "IIS", "IIR.7"}, - /* For CKCN */ - - { - "CD0", "CKCN.0"}, - { - "CD1", "CKCN.1"}, - { - "PMME", "CKCN.2"}, - { - "SWB", "CKCN.3"}, - { - "STOP", "CKCN.4"}, - { - "RGMD", "CKCN.5"}, - { - "RGSL", "CKCN.6"}, - /* For WDCN */ - - { - "RWT", "WDCN.0"}, - { - "EWT", "WDCN.1"}, - { - "WTRF", "WDCN.2"}, - { - "WDIF", "WDCN.3"}, - { - "WD0", "WDCN.4"}, - { - "WD1", "WDCN.5"}, - { - "EWDI", "WDCN.6"}, - { - "POR", "WDCN.7"}, - /* For DPC */ - - { - "DPS0", "DPC.0"}, - { - "DPS1", "DPC.1"}, - { - "WBS0", "DPC.2"}, - { - "WBS1", "DPC.3"}, - { - "WBS2", "DPC.4"}, - - /* For SCON */ - { - "TI", "SCON.1"}, - { - "RB8", "SCON.2"}, - { - "TB8", "SCON.3"}, - { - "REN", "SCON.4"}, - { - "SM2", "SCON.5"}, - { - "SM1", "SCON.6"}, - { - "SM0", "SCON.7"}, - { - "FE", "SCON.7"} -}; - -const char *LSInstr[] = -{ - "LJUMP", "SJUMP", "LDJNZ", "SDJNZ", "LCALL", "SCALL", "JUMP", - "DJNZ", "CALL", NULL -}; - -typedef enum -{ - DST, - SRC, - BOTH, -} -type1; - -struct mem_access_syntax -{ - char name[12]; /* Name of the Memory access operand. */ - type1 type; - char *invalid_op[5]; -}; -typedef struct mem_access_syntax mem_access_syntax; - -/* The Memory Access table for accessing the data memory through particular - registers. */ -const mem_access_syntax mem_access_syntax_table[] = -{ - { - "@SP--", SRC, - { - NULL, NULL, NULL, NULL, NULL}}, - /* Data Pointer 0 */ - { - "@DP[0]", BOTH, - { - "@DP[0]--", "@DP[0]++", NULL, NULL, NULL}}, - /* Data Ponter 1 */ - { - "@DP[1]", BOTH, - { - "@DP[1]--", "@DP[1]++", NULL, NULL, NULL}}, - /* Data Pointer 0 post increment */ - { - "@DP[0]++", SRC, - { - NULL, NULL, NULL, NULL, NULL}}, - /* Data Pointer 1 post increment */ - { - "@DP[1]++", SRC, - { - NULL, NULL, NULL, NULL, NULL}}, - /* Data Pointer 0 post decrement */ - { - "@DP[0]--", SRC, - { - NULL, NULL, NULL, NULL, NULL}}, - /* Data Pointer 1 post decrement */ - { - "@DP[1]--", SRC, - { - NULL, NULL, NULL, NULL, NULL}}, - /* ADDED According to New Specification */ - - { - "@BP[OFFS]", BOTH, - { - "@BP[OFFS++]", "@BP[OFFS--]", NULL, NULL, NULL}}, - { - "@BP[OFFS++]", SRC, - { - NULL, NULL, NULL, NULL, NULL}}, - { - "@BP[OFFS--]", SRC, - { - NULL, NULL, NULL, NULL, NULL}}, - { - "NUL", DST, - { - NULL, NULL, NULL, NULL, NULL}}, - { - "@++SP", DST, - { - NULL, NULL, NULL, NULL, NULL}}, - { - "@BP[++OFFS]", DST, - { - "@BP[OFFS--]", "@BP[OFFS++]", NULL, NULL, NULL}}, - { - "@BP[--OFFS]", DST, - { - "@BP[OFFS--]", "@BP[OFFS++]", NULL, NULL, NULL}}, - { - "@++DP[0]", DST, - { - "@DP[0]--", "@DP[0]++", NULL, NULL, NULL}}, - { - "@++DP[1]", DST, - { - "@DP[1]--", "@DP[1]++", NULL, NULL, NULL}}, - { - "@--DP[0]", DST, - { - "@DP[0]++", "@DP[0]--", NULL, NULL, NULL}}, - { - "@--DP[1]", DST, - { - "@DP[1]++", "@DP[1]--", NULL, NULL, NULL}} -}; - -#endif diff --git a/include/opcode/mips.h b/include/opcode/mips.h deleted file mode 100644 index dd99c4d3ab0..00000000000 --- a/include/opcode/mips.h +++ /dev/null @@ -1,1015 +0,0 @@ -/* mips.h. Mips opcode list for GDB, the GNU debugger. - Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005 - Free Software Foundation, Inc. - Contributed by Ralph Campbell and OSF - Commented and modified by Ian Lance Taylor, Cygnus Support - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef _MIPS_H_ -#define _MIPS_H_ - -/* These are bit masks and shift counts to use to access the various - fields of an instruction. To retrieve the X field of an - instruction, use the expression - (i >> OP_SH_X) & OP_MASK_X - To set the same field (to j), use - i = (i &~ (OP_MASK_X << OP_SH_X)) | (j << OP_SH_X) - - Make sure you use fields that are appropriate for the instruction, - of course. - - The 'i' format uses OP, RS, RT and IMMEDIATE. - - The 'j' format uses OP and TARGET. - - The 'r' format uses OP, RS, RT, RD, SHAMT and FUNCT. - - The 'b' format uses OP, RS, RT and DELTA. - - The floating point 'i' format uses OP, RS, RT and IMMEDIATE. - - The floating point 'r' format uses OP, FMT, FT, FS, FD and FUNCT. - - A breakpoint instruction uses OP, CODE and SPEC (10 bits of the - breakpoint instruction are not defined; Kane says the breakpoint - code field in BREAK is 20 bits; yet MIPS assemblers and debuggers - only use ten bits). An optional two-operand form of break/sdbbp - allows the lower ten bits to be set too, and MIPS32 and later - architectures allow 20 bits to be set with a signal operand - (using CODE20). - - The syscall instruction uses CODE20. - - The general coprocessor instructions use COPZ. */ - -#define OP_MASK_OP 0x3f -#define OP_SH_OP 26 -#define OP_MASK_RS 0x1f -#define OP_SH_RS 21 -#define OP_MASK_FR 0x1f -#define OP_SH_FR 21 -#define OP_MASK_FMT 0x1f -#define OP_SH_FMT 21 -#define OP_MASK_BCC 0x7 -#define OP_SH_BCC 18 -#define OP_MASK_CODE 0x3ff -#define OP_SH_CODE 16 -#define OP_MASK_CODE2 0x3ff -#define OP_SH_CODE2 6 -#define OP_MASK_RT 0x1f -#define OP_SH_RT 16 -#define OP_MASK_FT 0x1f -#define OP_SH_FT 16 -#define OP_MASK_CACHE 0x1f -#define OP_SH_CACHE 16 -#define OP_MASK_RD 0x1f -#define OP_SH_RD 11 -#define OP_MASK_FS 0x1f -#define OP_SH_FS 11 -#define OP_MASK_PREFX 0x1f -#define OP_SH_PREFX 11 -#define OP_MASK_CCC 0x7 -#define OP_SH_CCC 8 -#define OP_MASK_CODE20 0xfffff /* 20 bit syscall/breakpoint code. */ -#define OP_SH_CODE20 6 -#define OP_MASK_SHAMT 0x1f -#define OP_SH_SHAMT 6 -#define OP_MASK_FD 0x1f -#define OP_SH_FD 6 -#define OP_MASK_TARGET 0x3ffffff -#define OP_SH_TARGET 0 -#define OP_MASK_COPZ 0x1ffffff -#define OP_SH_COPZ 0 -#define OP_MASK_IMMEDIATE 0xffff -#define OP_SH_IMMEDIATE 0 -#define OP_MASK_DELTA 0xffff -#define OP_SH_DELTA 0 -#define OP_MASK_FUNCT 0x3f -#define OP_SH_FUNCT 0 -#define OP_MASK_SPEC 0x3f -#define OP_SH_SPEC 0 -#define OP_SH_LOCC 8 /* FP condition code. */ -#define OP_SH_HICC 18 /* FP condition code. */ -#define OP_MASK_CC 0x7 -#define OP_SH_COP1NORM 25 /* Normal COP1 encoding. */ -#define OP_MASK_COP1NORM 0x1 /* a single bit. */ -#define OP_SH_COP1SPEC 21 /* COP1 encodings. */ -#define OP_MASK_COP1SPEC 0xf -#define OP_MASK_COP1SCLR 0x4 -#define OP_MASK_COP1CMP 0x3 -#define OP_SH_COP1CMP 4 -#define OP_SH_FORMAT 21 /* FP short format field. */ -#define OP_MASK_FORMAT 0x7 -#define OP_SH_TRUE 16 -#define OP_MASK_TRUE 0x1 -#define OP_SH_GE 17 -#define OP_MASK_GE 0x01 -#define OP_SH_UNSIGNED 16 -#define OP_MASK_UNSIGNED 0x1 -#define OP_SH_HINT 16 -#define OP_MASK_HINT 0x1f -#define OP_SH_MMI 0 /* Multimedia (parallel) op. */ -#define OP_MASK_MMI 0x3f -#define OP_SH_MMISUB 6 -#define OP_MASK_MMISUB 0x1f -#define OP_MASK_PERFREG 0x1f /* Performance monitoring. */ -#define OP_SH_PERFREG 1 -#define OP_SH_SEL 0 /* Coprocessor select field. */ -#define OP_MASK_SEL 0x7 /* The sel field of mfcZ and mtcZ. */ -#define OP_SH_CODE19 6 /* 19 bit wait code. */ -#define OP_MASK_CODE19 0x7ffff -#define OP_SH_ALN 21 -#define OP_MASK_ALN 0x7 -#define OP_SH_VSEL 21 -#define OP_MASK_VSEL 0x1f -#define OP_MASK_VECBYTE 0x7 /* Selector field is really 4 bits, - but 0x8-0xf don't select bytes. */ -#define OP_SH_VECBYTE 22 -#define OP_MASK_VECALIGN 0x7 /* Vector byte-align (alni.ob) op. */ -#define OP_SH_VECALIGN 21 -#define OP_MASK_INSMSB 0x1f /* "ins" MSB. */ -#define OP_SH_INSMSB 11 -#define OP_MASK_EXTMSBD 0x1f /* "ext" MSBD. */ -#define OP_SH_EXTMSBD 11 - -/* MIPS DSP ASE */ -#define OP_SH_DSPACC 11 -#define OP_MASK_DSPACC 0x3 -#define OP_SH_DSPACC_S 21 -#define OP_MASK_DSPACC_S 0x3 -#define OP_SH_DSPSFT 20 -#define OP_MASK_DSPSFT 0x3f -#define OP_SH_DSPSFT_7 19 -#define OP_MASK_DSPSFT_7 0x7f -#define OP_SH_SA3 21 -#define OP_MASK_SA3 0x7 -#define OP_SH_SA4 21 -#define OP_MASK_SA4 0xf -#define OP_SH_IMM8 16 -#define OP_MASK_IMM8 0xff -#define OP_SH_IMM10 16 -#define OP_MASK_IMM10 0x3ff -#define OP_SH_WRDSP 11 -#define OP_MASK_WRDSP 0x3f -#define OP_SH_RDDSP 16 -#define OP_MASK_RDDSP 0x3f - -/* MIPS MT ASE */ -#define OP_SH_MT_U 5 -#define OP_MASK_MT_U 0x1 -#define OP_SH_MT_H 4 -#define OP_MASK_MT_H 0x1 -#define OP_SH_MTACC_T 18 -#define OP_MASK_MTACC_T 0x3 -#define OP_SH_MTACC_D 13 -#define OP_MASK_MTACC_D 0x3 - -#define OP_OP_COP0 0x10 -#define OP_OP_COP1 0x11 -#define OP_OP_COP2 0x12 -#define OP_OP_COP3 0x13 -#define OP_OP_LWC1 0x31 -#define OP_OP_LWC2 0x32 -#define OP_OP_LWC3 0x33 /* a.k.a. pref */ -#define OP_OP_LDC1 0x35 -#define OP_OP_LDC2 0x36 -#define OP_OP_LDC3 0x37 /* a.k.a. ld */ -#define OP_OP_SWC1 0x39 -#define OP_OP_SWC2 0x3a -#define OP_OP_SWC3 0x3b -#define OP_OP_SDC1 0x3d -#define OP_OP_SDC2 0x3e -#define OP_OP_SDC3 0x3f /* a.k.a. sd */ - -/* Values in the 'VSEL' field. */ -#define MDMX_FMTSEL_IMM_QH 0x1d -#define MDMX_FMTSEL_IMM_OB 0x1e -#define MDMX_FMTSEL_VEC_QH 0x15 -#define MDMX_FMTSEL_VEC_OB 0x16 - -/* UDI */ -#define OP_SH_UDI1 6 -#define OP_MASK_UDI1 0x1f -#define OP_SH_UDI2 6 -#define OP_MASK_UDI2 0x3ff -#define OP_SH_UDI3 6 -#define OP_MASK_UDI3 0x7fff -#define OP_SH_UDI4 6 -#define OP_MASK_UDI4 0xfffff - -/* This structure holds information for a particular instruction. */ - -struct mips_opcode -{ - /* The name of the instruction. */ - const char *name; - /* A string describing the arguments for this instruction. */ - const char *args; - /* The basic opcode for the instruction. When assembling, this - opcode is modified by the arguments to produce the actual opcode - that is used. If pinfo is INSN_MACRO, then this is 0. */ - unsigned long match; - /* If pinfo is not INSN_MACRO, then this is a bit mask for the - relevant portions of the opcode when disassembling. If the - actual opcode anded with the match field equals the opcode field, - then we have found the correct instruction. If pinfo is - INSN_MACRO, then this field is the macro identifier. */ - unsigned long mask; - /* For a macro, this is INSN_MACRO. Otherwise, it is a collection - of bits describing the instruction, notably any relevant hazard - information. */ - unsigned long pinfo; - /* A collection of additional bits describing the instruction. */ - unsigned long pinfo2; - /* A collection of bits describing the instruction sets of which this - instruction or macro is a member. */ - unsigned long membership; -}; - -/* These are the characters which may appear in the args field of an - instruction. They appear in the order in which the fields appear - when the instruction is used. Commas and parentheses in the args - string are ignored when assembling, and written into the output - when disassembling. - - Each of these characters corresponds to a mask field defined above. - - "<" 5 bit shift amount (OP_*_SHAMT) - ">" shift amount between 32 and 63, stored after subtracting 32 (OP_*_SHAMT) - "a" 26 bit target address (OP_*_TARGET) - "b" 5 bit base register (OP_*_RS) - "c" 10 bit breakpoint code (OP_*_CODE) - "d" 5 bit destination register specifier (OP_*_RD) - "h" 5 bit prefx hint (OP_*_PREFX) - "i" 16 bit unsigned immediate (OP_*_IMMEDIATE) - "j" 16 bit signed immediate (OP_*_DELTA) - "k" 5 bit cache opcode in target register position (OP_*_CACHE) - Also used for immediate operands in vr5400 vector insns. - "o" 16 bit signed offset (OP_*_DELTA) - "p" 16 bit PC relative branch target address (OP_*_DELTA) - "q" 10 bit extra breakpoint code (OP_*_CODE2) - "r" 5 bit same register used as both source and target (OP_*_RS) - "s" 5 bit source register specifier (OP_*_RS) - "t" 5 bit target register (OP_*_RT) - "u" 16 bit upper 16 bits of address (OP_*_IMMEDIATE) - "v" 5 bit same register used as both source and destination (OP_*_RS) - "w" 5 bit same register used as both target and destination (OP_*_RT) - "U" 5 bit same destination register in both OP_*_RD and OP_*_RT - (used by clo and clz) - "C" 25 bit coprocessor function code (OP_*_COPZ) - "B" 20 bit syscall/breakpoint function code (OP_*_CODE20) - "J" 19 bit wait function code (OP_*_CODE19) - "x" accept and ignore register name - "z" must be zero register - "K" 5 bit Hardware Register (rdhwr instruction) (OP_*_RD) - "+A" 5 bit ins/ext/dins/dext/dinsm/dextm position, which becomes - LSB (OP_*_SHAMT). - Enforces: 0 <= pos < 32. - "+B" 5 bit ins/dins size, which becomes MSB (OP_*_INSMSB). - Requires that "+A" or "+E" occur first to set position. - Enforces: 0 < (pos+size) <= 32. - "+C" 5 bit ext/dext size, which becomes MSBD (OP_*_EXTMSBD). - Requires that "+A" or "+E" occur first to set position. - Enforces: 0 < (pos+size) <= 32. - (Also used by "dext" w/ different limits, but limits for - that are checked by the M_DEXT macro.) - "+E" 5 bit dinsu/dextu position, which becomes LSB-32 (OP_*_SHAMT). - Enforces: 32 <= pos < 64. - "+F" 5 bit "dinsm/dinsu" size, which becomes MSB-32 (OP_*_INSMSB). - Requires that "+A" or "+E" occur first to set position. - Enforces: 32 < (pos+size) <= 64. - "+G" 5 bit "dextm" size, which becomes MSBD-32 (OP_*_EXTMSBD). - Requires that "+A" or "+E" occur first to set position. - Enforces: 32 < (pos+size) <= 64. - "+H" 5 bit "dextu" size, which becomes MSBD (OP_*_EXTMSBD). - Requires that "+A" or "+E" occur first to set position. - Enforces: 32 < (pos+size) <= 64. - - Floating point instructions: - "D" 5 bit destination register (OP_*_FD) - "M" 3 bit compare condition code (OP_*_CCC) (only used for mips4 and up) - "N" 3 bit branch condition code (OP_*_BCC) (only used for mips4 and up) - "S" 5 bit fs source 1 register (OP_*_FS) - "T" 5 bit ft source 2 register (OP_*_FT) - "R" 5 bit fr source 3 register (OP_*_FR) - "V" 5 bit same register used as floating source and destination (OP_*_FS) - "W" 5 bit same register used as floating target and destination (OP_*_FT) - - Coprocessor instructions: - "E" 5 bit target register (OP_*_RT) - "G" 5 bit destination register (OP_*_RD) - "H" 3 bit sel field for (d)mtc* and (d)mfc* (OP_*_SEL) - "P" 5 bit performance-monitor register (OP_*_PERFREG) - "e" 5 bit vector register byte specifier (OP_*_VECBYTE) - "%" 3 bit immediate vr5400 vector alignment operand (OP_*_VECALIGN) - see also "k" above - "+D" Combined destination register ("G") and sel ("H") for CP0 ops, - for pretty-printing in disassembly only. - - Macro instructions: - "A" General 32 bit expression - "I" 32 bit immediate (value placed in imm_expr). - "+I" 32 bit immediate (value placed in imm2_expr). - "F" 64 bit floating point constant in .rdata - "L" 64 bit floating point constant in .lit8 - "f" 32 bit floating point constant - "l" 32 bit floating point constant in .lit4 - - MDMX instruction operands (note that while these use the FP register - fields, they accept both $fN and $vN names for the registers): - "O" MDMX alignment offset (OP_*_ALN) - "Q" MDMX vector/scalar/immediate source (OP_*_VSEL and OP_*_FT) - "X" MDMX destination register (OP_*_FD) - "Y" MDMX source register (OP_*_FS) - "Z" MDMX source register (OP_*_FT) - - DSP ASE usage: - "3" 3 bit unsigned immediate (OP_*_SA3) - "4" 4 bit unsigned immediate (OP_*_SA4) - "5" 8 bit unsigned immediate (OP_*_IMM8) - "6" 5 bit unsigned immediate (OP_*_RS) - "7" 2 bit dsp accumulator register (OP_*_DSPACC) - "8" 6 bit unsigned immediate (OP_*_WRDSP) - "9" 2 bit dsp accumulator register (OP_*_DSPACC_S) - "0" 6 bit signed immediate (OP_*_DSPSFT) - ":" 7 bit signed immediate (OP_*_DSPSFT_7) - "'" 6 bit unsigned immediate (OP_*_RDDSP) - "@" 10 bit signed immediate (OP_*_IMM10) - - MT ASE usage: - "!" 1 bit usermode flag (OP_*_MT_U) - "$" 1 bit load high flag (OP_*_MT_H) - "*" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_T) - "&" 2 bit dsp/smartmips accumulator register (OP_*_MTACC_D) - "g" 5 bit coprocessor 1 and 2 destination register (OP_*_RD) - "+t" 5 bit coprocessor 0 destination register (OP_*_RT) - "+T" 5 bit coprocessor 0 destination register (OP_*_RT) - disassembly only - - UDI immediates: - "+1" UDI immediate bits 6-10 - "+2" UDI immediate bits 6-15 - "+3" UDI immediate bits 6-20 - "+4" UDI immediate bits 6-25 - - Other: - "()" parens surrounding optional value - "," separates operands - "[]" brackets around index for vector-op scalar operand specifier (vr5400) - "+" Start of extension sequence. - - Characters used so far, for quick reference when adding more: - "34567890" - "%[]<>(),+:'@!$*&" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklopqrstuvwxz" - - Extension character sequences used so far ("+" followed by the - following), for quick reference when adding more: - "1234" - "ABCDEFGHIT" - "t" -*/ - -/* These are the bits which may be set in the pinfo field of an - instructions, if it is not equal to INSN_MACRO. */ - -/* Modifies the general purpose register in OP_*_RD. */ -#define INSN_WRITE_GPR_D 0x00000001 -/* Modifies the general purpose register in OP_*_RT. */ -#define INSN_WRITE_GPR_T 0x00000002 -/* Modifies general purpose register 31. */ -#define INSN_WRITE_GPR_31 0x00000004 -/* Modifies the floating point register in OP_*_FD. */ -#define INSN_WRITE_FPR_D 0x00000008 -/* Modifies the floating point register in OP_*_FS. */ -#define INSN_WRITE_FPR_S 0x00000010 -/* Modifies the floating point register in OP_*_FT. */ -#define INSN_WRITE_FPR_T 0x00000020 -/* Reads the general purpose register in OP_*_RS. */ -#define INSN_READ_GPR_S 0x00000040 -/* Reads the general purpose register in OP_*_RT. */ -#define INSN_READ_GPR_T 0x00000080 -/* Reads the floating point register in OP_*_FS. */ -#define INSN_READ_FPR_S 0x00000100 -/* Reads the floating point register in OP_*_FT. */ -#define INSN_READ_FPR_T 0x00000200 -/* Reads the floating point register in OP_*_FR. */ -#define INSN_READ_FPR_R 0x00000400 -/* Modifies coprocessor condition code. */ -#define INSN_WRITE_COND_CODE 0x00000800 -/* Reads coprocessor condition code. */ -#define INSN_READ_COND_CODE 0x00001000 -/* TLB operation. */ -#define INSN_TLB 0x00002000 -/* Reads coprocessor register other than floating point register. */ -#define INSN_COP 0x00004000 -/* Instruction loads value from memory, requiring delay. */ -#define INSN_LOAD_MEMORY_DELAY 0x00008000 -/* Instruction loads value from coprocessor, requiring delay. */ -#define INSN_LOAD_COPROC_DELAY 0x00010000 -/* Instruction has unconditional branch delay slot. */ -#define INSN_UNCOND_BRANCH_DELAY 0x00020000 -/* Instruction has conditional branch delay slot. */ -#define INSN_COND_BRANCH_DELAY 0x00040000 -/* Conditional branch likely: if branch not taken, insn nullified. */ -#define INSN_COND_BRANCH_LIKELY 0x00080000 -/* Moves to coprocessor register, requiring delay. */ -#define INSN_COPROC_MOVE_DELAY 0x00100000 -/* Loads coprocessor register from memory, requiring delay. */ -#define INSN_COPROC_MEMORY_DELAY 0x00200000 -/* Reads the HI register. */ -#define INSN_READ_HI 0x00400000 -/* Reads the LO register. */ -#define INSN_READ_LO 0x00800000 -/* Modifies the HI register. */ -#define INSN_WRITE_HI 0x01000000 -/* Modifies the LO register. */ -#define INSN_WRITE_LO 0x02000000 -/* Takes a trap (easier to keep out of delay slot). */ -#define INSN_TRAP 0x04000000 -/* Instruction stores value into memory. */ -#define INSN_STORE_MEMORY 0x08000000 -/* Instruction uses single precision floating point. */ -#define FP_S 0x10000000 -/* Instruction uses double precision floating point. */ -#define FP_D 0x20000000 -/* Instruction is part of the tx39's integer multiply family. */ -#define INSN_MULT 0x40000000 -/* Instruction synchronize shared memory. */ -#define INSN_SYNC 0x80000000 - -/* These are the bits which may be set in the pinfo2 field of an - instruction. */ - -/* Instruction is a simple alias (I.E. "move" for daddu/addu/or) */ -#define INSN2_ALIAS 0x00000001 -/* Instruction reads MDMX accumulator. */ -#define INSN2_READ_MDMX_ACC 0x00000002 -/* Instruction writes MDMX accumulator. */ -#define INSN2_WRITE_MDMX_ACC 0x00000004 - -/* Instruction is actually a macro. It should be ignored by the - disassembler, and requires special treatment by the assembler. */ -#define INSN_MACRO 0xffffffff - -/* Masks used to mark instructions to indicate which MIPS ISA level - they were introduced in. ISAs, as defined below, are logical - ORs of these bits, indicating that they support the instructions - defined at the given level. */ - -#define INSN_ISA_MASK 0x00000fff -#define INSN_ISA1 0x00000001 -#define INSN_ISA2 0x00000002 -#define INSN_ISA3 0x00000004 -#define INSN_ISA4 0x00000008 -#define INSN_ISA5 0x00000010 -#define INSN_ISA32 0x00000020 -#define INSN_ISA64 0x00000040 -#define INSN_ISA32R2 0x00000080 -#define INSN_ISA64R2 0x00000100 - -/* Masks used for MIPS-defined ASEs. */ -#define INSN_ASE_MASK 0x1c00f000 - -/* DSP ASE */ -#define INSN_DSP 0x00001000 -#define INSN_DSP64 0x00002000 -/* MIPS 16 ASE */ -#define INSN_MIPS16 0x00004000 -/* MIPS-3D ASE */ -#define INSN_MIPS3D 0x00008000 - -/* Chip specific instructions. These are bitmasks. */ - -/* MIPS R4650 instruction. */ -#define INSN_4650 0x00010000 -/* LSI R4010 instruction. */ -#define INSN_4010 0x00020000 -/* NEC VR4100 instruction. */ -#define INSN_4100 0x00040000 -/* Toshiba R3900 instruction. */ -#define INSN_3900 0x00080000 -/* MIPS R10000 instruction. */ -#define INSN_10000 0x00100000 -/* Broadcom SB-1 instruction. */ -#define INSN_SB1 0x00200000 -/* NEC VR4111/VR4181 instruction. */ -#define INSN_4111 0x00400000 -/* NEC VR4120 instruction. */ -#define INSN_4120 0x00800000 -/* NEC VR5400 instruction. */ -#define INSN_5400 0x01000000 -/* NEC VR5500 instruction. */ -#define INSN_5500 0x02000000 - -/* MDMX ASE */ -#define INSN_MDMX 0x04000000 -/* MT ASE */ -#define INSN_MT 0x08000000 -/* SmartMIPS ASE. */ -#define INSN_SMARTMIPS 0x10000000 - -/* MIPS ISA defines, use instead of hardcoding ISA level. */ - -#define ISA_UNKNOWN 0 /* Gas internal use. */ -#define ISA_MIPS1 (INSN_ISA1) -#define ISA_MIPS2 (ISA_MIPS1 | INSN_ISA2) -#define ISA_MIPS3 (ISA_MIPS2 | INSN_ISA3) -#define ISA_MIPS4 (ISA_MIPS3 | INSN_ISA4) -#define ISA_MIPS5 (ISA_MIPS4 | INSN_ISA5) - -#define ISA_MIPS32 (ISA_MIPS2 | INSN_ISA32) -#define ISA_MIPS64 (ISA_MIPS5 | INSN_ISA32 | INSN_ISA64) - -#define ISA_MIPS32R2 (ISA_MIPS32 | INSN_ISA32R2) -#define ISA_MIPS64R2 (ISA_MIPS64 | INSN_ISA32R2 | INSN_ISA64R2) - - -/* CPU defines, use instead of hardcoding processor number. Keep this - in sync with bfd/archures.c in order for machine selection to work. */ -#define CPU_UNKNOWN 0 /* Gas internal use. */ -#define CPU_R3000 3000 -#define CPU_R3900 3900 -#define CPU_R4000 4000 -#define CPU_R4010 4010 -#define CPU_VR4100 4100 -#define CPU_R4111 4111 -#define CPU_VR4120 4120 -#define CPU_R4300 4300 -#define CPU_R4400 4400 -#define CPU_R4600 4600 -#define CPU_R4650 4650 -#define CPU_R5000 5000 -#define CPU_VR5400 5400 -#define CPU_VR5500 5500 -#define CPU_R6000 6000 -#define CPU_RM7000 7000 -#define CPU_R8000 8000 -#define CPU_RM9000 9000 -#define CPU_R10000 10000 -#define CPU_R12000 12000 -#define CPU_MIPS16 16 -#define CPU_MIPS32 32 -#define CPU_MIPS32R2 33 -#define CPU_MIPS5 5 -#define CPU_MIPS64 64 -#define CPU_MIPS64R2 65 -#define CPU_SB1 12310201 /* octal 'SB', 01. */ - -/* Test for membership in an ISA including chip specific ISAs. INSN - is pointer to an element of the opcode table; ISA is the specified - ISA/ASE bitmask to test against; and CPU is the CPU specific ISA to - test, or zero if no CPU specific ISA test is desired. */ - -#define OPCODE_IS_MEMBER(insn, isa, cpu) \ - (((insn)->membership & isa) != 0 \ - || (cpu == CPU_R4650 && ((insn)->membership & INSN_4650) != 0) \ - || (cpu == CPU_RM7000 && ((insn)->membership & INSN_4650) != 0) \ - || (cpu == CPU_RM9000 && ((insn)->membership & INSN_4650) != 0) \ - || (cpu == CPU_R4010 && ((insn)->membership & INSN_4010) != 0) \ - || (cpu == CPU_VR4100 && ((insn)->membership & INSN_4100) != 0) \ - || (cpu == CPU_R3900 && ((insn)->membership & INSN_3900) != 0) \ - || ((cpu == CPU_R10000 || cpu == CPU_R12000) \ - && ((insn)->membership & INSN_10000) != 0) \ - || (cpu == CPU_SB1 && ((insn)->membership & INSN_SB1) != 0) \ - || (cpu == CPU_R4111 && ((insn)->membership & INSN_4111) != 0) \ - || (cpu == CPU_VR4120 && ((insn)->membership & INSN_4120) != 0) \ - || (cpu == CPU_VR5400 && ((insn)->membership & INSN_5400) != 0) \ - || (cpu == CPU_VR5500 && ((insn)->membership & INSN_5500) != 0) \ - || 0) /* Please keep this term for easier source merging. */ - -/* This is a list of macro expanded instructions. - - _I appended means immediate - _A appended means address - _AB appended means address with base register - _D appended means 64 bit floating point constant - _S appended means 32 bit floating point constant. */ - -enum -{ - M_ABS, - M_ADD_I, - M_ADDU_I, - M_AND_I, - M_BEQ, - M_BEQ_I, - M_BEQL_I, - M_BGE, - M_BGEL, - M_BGE_I, - M_BGEL_I, - M_BGEU, - M_BGEUL, - M_BGEU_I, - M_BGEUL_I, - M_BGT, - M_BGTL, - M_BGT_I, - M_BGTL_I, - M_BGTU, - M_BGTUL, - M_BGTU_I, - M_BGTUL_I, - M_BLE, - M_BLEL, - M_BLE_I, - M_BLEL_I, - M_BLEU, - M_BLEUL, - M_BLEU_I, - M_BLEUL_I, - M_BLT, - M_BLTL, - M_BLT_I, - M_BLTL_I, - M_BLTU, - M_BLTUL, - M_BLTU_I, - M_BLTUL_I, - M_BNE, - M_BNE_I, - M_BNEL_I, - M_CACHE_AB, - M_DABS, - M_DADD_I, - M_DADDU_I, - M_DDIV_3, - M_DDIV_3I, - M_DDIVU_3, - M_DDIVU_3I, - M_DEXT, - M_DINS, - M_DIV_3, - M_DIV_3I, - M_DIVU_3, - M_DIVU_3I, - M_DLA_AB, - M_DLCA_AB, - M_DLI, - M_DMUL, - M_DMUL_I, - M_DMULO, - M_DMULO_I, - M_DMULOU, - M_DMULOU_I, - M_DREM_3, - M_DREM_3I, - M_DREMU_3, - M_DREMU_3I, - M_DSUB_I, - M_DSUBU_I, - M_DSUBU_I_2, - M_J_A, - M_JAL_1, - M_JAL_2, - M_JAL_A, - M_L_DOB, - M_L_DAB, - M_LA_AB, - M_LB_A, - M_LB_AB, - M_LBU_A, - M_LBU_AB, - M_LCA_AB, - M_LD_A, - M_LD_OB, - M_LD_AB, - M_LDC1_AB, - M_LDC2_AB, - M_LDC3_AB, - M_LDL_AB, - M_LDR_AB, - M_LH_A, - M_LH_AB, - M_LHU_A, - M_LHU_AB, - M_LI, - M_LI_D, - M_LI_DD, - M_LI_S, - M_LI_SS, - M_LL_AB, - M_LLD_AB, - M_LS_A, - M_LW_A, - M_LW_AB, - M_LWC0_A, - M_LWC0_AB, - M_LWC1_A, - M_LWC1_AB, - M_LWC2_A, - M_LWC2_AB, - M_LWC3_A, - M_LWC3_AB, - M_LWL_A, - M_LWL_AB, - M_LWR_A, - M_LWR_AB, - M_LWU_AB, - M_MOVE, - M_MUL, - M_MUL_I, - M_MULO, - M_MULO_I, - M_MULOU, - M_MULOU_I, - M_NOR_I, - M_OR_I, - M_REM_3, - M_REM_3I, - M_REMU_3, - M_REMU_3I, - M_DROL, - M_ROL, - M_DROL_I, - M_ROL_I, - M_DROR, - M_ROR, - M_DROR_I, - M_ROR_I, - M_S_DA, - M_S_DOB, - M_S_DAB, - M_S_S, - M_SC_AB, - M_SCD_AB, - M_SD_A, - M_SD_OB, - M_SD_AB, - M_SDC1_AB, - M_SDC2_AB, - M_SDC3_AB, - M_SDL_AB, - M_SDR_AB, - M_SEQ, - M_SEQ_I, - M_SGE, - M_SGE_I, - M_SGEU, - M_SGEU_I, - M_SGT, - M_SGT_I, - M_SGTU, - M_SGTU_I, - M_SLE, - M_SLE_I, - M_SLEU, - M_SLEU_I, - M_SLT_I, - M_SLTU_I, - M_SNE, - M_SNE_I, - M_SB_A, - M_SB_AB, - M_SH_A, - M_SH_AB, - M_SW_A, - M_SW_AB, - M_SWC0_A, - M_SWC0_AB, - M_SWC1_A, - M_SWC1_AB, - M_SWC2_A, - M_SWC2_AB, - M_SWC3_A, - M_SWC3_AB, - M_SWL_A, - M_SWL_AB, - M_SWR_A, - M_SWR_AB, - M_SUB_I, - M_SUBU_I, - M_SUBU_I_2, - M_TEQ_I, - M_TGE_I, - M_TGEU_I, - M_TLT_I, - M_TLTU_I, - M_TNE_I, - M_TRUNCWD, - M_TRUNCWS, - M_ULD, - M_ULD_A, - M_ULH, - M_ULH_A, - M_ULHU, - M_ULHU_A, - M_ULW, - M_ULW_A, - M_USH, - M_USH_A, - M_USW, - M_USW_A, - M_USD, - M_USD_A, - M_XOR_I, - M_COP0, - M_COP1, - M_COP2, - M_COP3, - M_NUM_MACROS -}; - - -/* The order of overloaded instructions matters. Label arguments and - register arguments look the same. Instructions that can have either - for arguments must apear in the correct order in this table for the - assembler to pick the right one. In other words, entries with - immediate operands must apear after the same instruction with - registers. - - Many instructions are short hand for other instructions (i.e., The - jal instruction is short for jalr ). */ - -extern const struct mips_opcode mips_builtin_opcodes[]; -extern const int bfd_mips_num_builtin_opcodes; -extern struct mips_opcode *mips_opcodes; -extern int bfd_mips_num_opcodes; -#define NUMOPCODES bfd_mips_num_opcodes - - -/* The rest of this file adds definitions for the mips16 TinyRISC - processor. */ - -/* These are the bitmasks and shift counts used for the different - fields in the instruction formats. Other than OP, no masks are - provided for the fixed portions of an instruction, since they are - not needed. - - The I format uses IMM11. - - The RI format uses RX and IMM8. - - The RR format uses RX, and RY. - - The RRI format uses RX, RY, and IMM5. - - The RRR format uses RX, RY, and RZ. - - The RRI_A format uses RX, RY, and IMM4. - - The SHIFT format uses RX, RY, and SHAMT. - - The I8 format uses IMM8. - - The I8_MOVR32 format uses RY and REGR32. - - The IR_MOV32R format uses REG32R and MOV32Z. - - The I64 format uses IMM8. - - The RI64 format uses RY and IMM5. - */ - -#define MIPS16OP_MASK_OP 0x1f -#define MIPS16OP_SH_OP 11 -#define MIPS16OP_MASK_IMM11 0x7ff -#define MIPS16OP_SH_IMM11 0 -#define MIPS16OP_MASK_RX 0x7 -#define MIPS16OP_SH_RX 8 -#define MIPS16OP_MASK_IMM8 0xff -#define MIPS16OP_SH_IMM8 0 -#define MIPS16OP_MASK_RY 0x7 -#define MIPS16OP_SH_RY 5 -#define MIPS16OP_MASK_IMM5 0x1f -#define MIPS16OP_SH_IMM5 0 -#define MIPS16OP_MASK_RZ 0x7 -#define MIPS16OP_SH_RZ 2 -#define MIPS16OP_MASK_IMM4 0xf -#define MIPS16OP_SH_IMM4 0 -#define MIPS16OP_MASK_REGR32 0x1f -#define MIPS16OP_SH_REGR32 0 -#define MIPS16OP_MASK_REG32R 0x1f -#define MIPS16OP_SH_REG32R 3 -#define MIPS16OP_EXTRACT_REG32R(i) ((((i) >> 5) & 7) | ((i) & 0x18)) -#define MIPS16OP_MASK_MOVE32Z 0x7 -#define MIPS16OP_SH_MOVE32Z 0 -#define MIPS16OP_MASK_IMM6 0x3f -#define MIPS16OP_SH_IMM6 5 - -/* These are the characters which may appears in the args field of an - instruction. They appear in the order in which the fields appear - when the instruction is used. Commas and parentheses in the args - string are ignored when assembling, and written into the output - when disassembling. - - "y" 3 bit register (MIPS16OP_*_RY) - "x" 3 bit register (MIPS16OP_*_RX) - "z" 3 bit register (MIPS16OP_*_RZ) - "Z" 3 bit register (MIPS16OP_*_MOVE32Z) - "v" 3 bit same register as source and destination (MIPS16OP_*_RX) - "w" 3 bit same register as source and destination (MIPS16OP_*_RY) - "0" zero register ($0) - "S" stack pointer ($sp or $29) - "P" program counter - "R" return address register ($ra or $31) - "X" 5 bit MIPS register (MIPS16OP_*_REGR32) - "Y" 5 bit MIPS register (MIPS16OP_*_REG32R) - "6" 6 bit unsigned break code (MIPS16OP_*_IMM6) - "a" 26 bit jump address - "e" 11 bit extension value - "l" register list for entry instruction - "L" register list for exit instruction - - The remaining codes may be extended. Except as otherwise noted, - the full extended operand is a 16 bit signed value. - "<" 3 bit unsigned shift count * 0 (MIPS16OP_*_RZ) (full 5 bit unsigned) - ">" 3 bit unsigned shift count * 0 (MIPS16OP_*_RX) (full 5 bit unsigned) - "[" 3 bit unsigned shift count * 0 (MIPS16OP_*_RZ) (full 6 bit unsigned) - "]" 3 bit unsigned shift count * 0 (MIPS16OP_*_RX) (full 6 bit unsigned) - "4" 4 bit signed immediate * 0 (MIPS16OP_*_IMM4) (full 15 bit signed) - "5" 5 bit unsigned immediate * 0 (MIPS16OP_*_IMM5) - "H" 5 bit unsigned immediate * 2 (MIPS16OP_*_IMM5) - "W" 5 bit unsigned immediate * 4 (MIPS16OP_*_IMM5) - "D" 5 bit unsigned immediate * 8 (MIPS16OP_*_IMM5) - "j" 5 bit signed immediate * 0 (MIPS16OP_*_IMM5) - "8" 8 bit unsigned immediate * 0 (MIPS16OP_*_IMM8) - "V" 8 bit unsigned immediate * 4 (MIPS16OP_*_IMM8) - "C" 8 bit unsigned immediate * 8 (MIPS16OP_*_IMM8) - "U" 8 bit unsigned immediate * 0 (MIPS16OP_*_IMM8) (full 16 bit unsigned) - "k" 8 bit signed immediate * 0 (MIPS16OP_*_IMM8) - "K" 8 bit signed immediate * 8 (MIPS16OP_*_IMM8) - "p" 8 bit conditional branch address (MIPS16OP_*_IMM8) - "q" 11 bit branch address (MIPS16OP_*_IMM11) - "A" 8 bit PC relative address * 4 (MIPS16OP_*_IMM8) - "B" 5 bit PC relative address * 8 (MIPS16OP_*_IMM5) - "E" 5 bit PC relative address * 4 (MIPS16OP_*_IMM5) - "m" 7 bit register list for save instruction (18 bit extended) - "M" 7 bit register list for restore instruction (18 bit extended) - */ - -/* Save/restore encoding for the args field when all 4 registers are - either saved as arguments or saved/restored as statics. */ -#define MIPS16_ALL_ARGS 0xe -#define MIPS16_ALL_STATICS 0xb - -/* For the mips16, we use the same opcode table format and a few of - the same flags. However, most of the flags are different. */ - -/* Modifies the register in MIPS16OP_*_RX. */ -#define MIPS16_INSN_WRITE_X 0x00000001 -/* Modifies the register in MIPS16OP_*_RY. */ -#define MIPS16_INSN_WRITE_Y 0x00000002 -/* Modifies the register in MIPS16OP_*_RZ. */ -#define MIPS16_INSN_WRITE_Z 0x00000004 -/* Modifies the T ($24) register. */ -#define MIPS16_INSN_WRITE_T 0x00000008 -/* Modifies the SP ($29) register. */ -#define MIPS16_INSN_WRITE_SP 0x00000010 -/* Modifies the RA ($31) register. */ -#define MIPS16_INSN_WRITE_31 0x00000020 -/* Modifies the general purpose register in MIPS16OP_*_REG32R. */ -#define MIPS16_INSN_WRITE_GPR_Y 0x00000040 -/* Reads the register in MIPS16OP_*_RX. */ -#define MIPS16_INSN_READ_X 0x00000080 -/* Reads the register in MIPS16OP_*_RY. */ -#define MIPS16_INSN_READ_Y 0x00000100 -/* Reads the register in MIPS16OP_*_MOVE32Z. */ -#define MIPS16_INSN_READ_Z 0x00000200 -/* Reads the T ($24) register. */ -#define MIPS16_INSN_READ_T 0x00000400 -/* Reads the SP ($29) register. */ -#define MIPS16_INSN_READ_SP 0x00000800 -/* Reads the RA ($31) register. */ -#define MIPS16_INSN_READ_31 0x00001000 -/* Reads the program counter. */ -#define MIPS16_INSN_READ_PC 0x00002000 -/* Reads the general purpose register in MIPS16OP_*_REGR32. */ -#define MIPS16_INSN_READ_GPR_X 0x00004000 -/* Is a branch insn. */ -#define MIPS16_INSN_BRANCH 0x00010000 - -/* The following flags have the same value for the mips16 opcode - table: - INSN_UNCOND_BRANCH_DELAY - INSN_COND_BRANCH_DELAY - INSN_COND_BRANCH_LIKELY (never used) - INSN_READ_HI - INSN_READ_LO - INSN_WRITE_HI - INSN_WRITE_LO - INSN_TRAP - INSN_ISA3 - */ - -extern const struct mips_opcode mips16_opcodes[]; -extern const int bfd_mips16_num_opcodes; - -#endif /* _MIPS_H_ */ diff --git a/include/opcode/mmix.h b/include/opcode/mmix.h deleted file mode 100644 index 7f561c6393b..00000000000 --- a/include/opcode/mmix.h +++ /dev/null @@ -1,186 +0,0 @@ -/* mmix.h -- Header file for MMIX opcode table - Copyright (C) 2001, 2003 Free Software Foundation, Inc. - Written by Hans-Peter Nilsson (hp@bitrange.com) - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version 2, -or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* We could have just a char*[] table indexed by the register number, but - that would not allow for synonyms. The table is terminated with an - entry with a NULL name. */ -struct mmix_spec_reg -{ - const char *name; - unsigned int number; -}; - -/* General indication of the type of instruction. */ -enum mmix_insn_type - { - mmix_type_pseudo, - mmix_type_normal, - mmix_type_branch, - mmix_type_condbranch, - mmix_type_memaccess_octa, - mmix_type_memaccess_tetra, - mmix_type_memaccess_wyde, - mmix_type_memaccess_byte, - mmix_type_memaccess_block, - mmix_type_jsr - }; - -/* Type of operands an instruction takes. Use when parsing assembly code - and disassembling. */ -enum mmix_operands_type - { - mmix_operands_none = 0, - - /* All operands are registers: "$X,$Y,$Z". */ - mmix_operands_regs, - - /* "$X,YZ", like SETH. */ - mmix_operands_reg_yz, - - /* The regular "$X,$Y,$Z|Z". - The Z is optional; if only "$X,$Y" is given, then "$X,$Y,0" is - assumed. */ - mmix_operands_regs_z_opt, - - /* The regular "$X,$Y,$Z|Z". */ - mmix_operands_regs_z, - - /* "Address"; only JMP. Zero operands allowed unless GNU syntax. */ - mmix_operands_jmp, - - /* "$X|X,$Y,$Z|Z": PUSHGO; like "3", but X can be expressed as an - integer. */ - mmix_operands_pushgo, - - /* Two registers or a register and a byte, like FLOT, possibly with - rounding: "$X,$Z|Z" or "$X,ROUND_MODE,$Z|Z". */ - mmix_operands_roundregs_z, - - /* "X,YZ", POP. Unless GNU syntax, zero or one operand is allowed. */ - mmix_operands_pop, - - /* Two registers, possibly with rounding: "$X,$Z" or - "$X,ROUND_MODE,$Z". */ - mmix_operands_roundregs, - - /* "XYZ", like SYNC. */ - mmix_operands_sync, - - /* "X,$Y,$Z|Z", like SYNCD. */ - mmix_operands_x_regs_z, - - /* "$X,Y,$Z|Z", like NEG and NEGU. The Y field is optional, default 0. */ - mmix_operands_neg, - - /* "$X,Address, like GETA or branches. */ - mmix_operands_regaddr, - - /* "$X|X,Address, like PUSHJ. */ - mmix_operands_pushj, - - /* "$X,spec_reg"; GET. */ - mmix_operands_get, - - /* "spec_reg,$Z|Z"; PUT. */ - mmix_operands_put, - - /* Two registers, "$X,$Y". */ - mmix_operands_set, - - /* "$X,0"; SAVE. */ - mmix_operands_save, - - /* "0,$Z"; UNSAVE. */ - mmix_operands_unsave, - - /* "X,Y,Z"; like SWYM or TRAP. Zero (or 1 if GNU syntax) to three - operands, interpreted as 0; XYZ; X, YZ and X, Y, Z. */ - mmix_operands_xyz_opt, - - /* Just "Z", like RESUME. Unless GNU syntax, the operand can be omitted - and will then be assumed zero. */ - mmix_operands_resume, - - /* These are specials to handle that pseudo-directives are specified - like ordinary insns when being mmixal-compatible. They signify the - specific pseudo-directive rather than the operands type. */ - - /* LOC. */ - mmix_operands_loc, - - /* PREFIX. */ - mmix_operands_prefix, - - /* BYTE. */ - mmix_operands_byte, - - /* WYDE. */ - mmix_operands_wyde, - - /* TETRA. */ - mmix_operands_tetra, - - /* OCTA. */ - mmix_operands_octa, - - /* LOCAL. */ - mmix_operands_local, - - /* BSPEC. */ - mmix_operands_bspec, - - /* ESPEC. */ - mmix_operands_espec, - }; - -struct mmix_opcode - { - const char *name; - unsigned long match; - unsigned long lose; - enum mmix_operands_type operands; - - /* This is used by the disassembly function. */ - enum mmix_insn_type type; - }; - -/* Declare the actual tables. */ -extern const struct mmix_opcode mmix_opcodes[]; - -/* This one is terminated with an entry with a NULL name. */ -extern const struct mmix_spec_reg mmix_spec_regs[]; - -/* Some insn values we use when padding and synthesizing address loads. */ -#define IMM_OFFSET_BIT 1 -#define COND_INV_BIT 0x8 -#define PRED_INV_BIT 0x10 - -#define PUSHGO_INSN_BYTE 0xbe -#define GO_INSN_BYTE 0x9e -#define SETL_INSN_BYTE 0xe3 -#define INCML_INSN_BYTE 0xe6 -#define INCMH_INSN_BYTE 0xe5 -#define INCH_INSN_BYTE 0xe4 -#define SWYM_INSN_BYTE 0xfd -#define JMP_INSN_BYTE 0xf0 - -/* We can have 256 - 32 (local registers) - 1 ($255 is not allocatable) - global registers. */ -#define MAX_GREGS 223 diff --git a/include/opcode/mn10200.h b/include/opcode/mn10200.h deleted file mode 100644 index 51e44c629b6..00000000000 --- a/include/opcode/mn10200.h +++ /dev/null @@ -1,110 +0,0 @@ -/* mn10200.h -- Header file for Matsushita 10200 opcode table - Copyright 1996, 1997 Free Software Foundation, Inc. - Written by Jeff Law, Cygnus Support - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef MN10200_H -#define MN10200_H - -/* The opcode table is an array of struct mn10200_opcode. */ - -struct mn10200_opcode -{ - /* The opcode name. */ - const char *name; - - /* The opcode itself. Those bits which will be filled in with - operands are zeroes. */ - unsigned long opcode; - - /* The opcode mask. This is used by the disassembler. This is a - mask containing ones indicating those bits which must match the - opcode field, and zeroes indicating those bits which need not - match (and are presumably filled in by operands). */ - unsigned long mask; - - /* The format of this opcode. */ - unsigned char format; - - /* An array of operand codes. Each code is an index into the - operand table. They appear in the order which the operands must - appear in assembly code, and are terminated by a zero. */ - unsigned char operands[8]; -}; - -/* The table itself is sorted by major opcode number, and is otherwise - in the order in which the disassembler should consider - instructions. */ -extern const struct mn10200_opcode mn10200_opcodes[]; -extern const int mn10200_num_opcodes; - - -/* The operands table is an array of struct mn10200_operand. */ - -struct mn10200_operand -{ - /* The number of bits in the operand. */ - int bits; - - /* How far the operand is left shifted in the instruction. */ - int shift; - - /* One bit syntax flags. */ - int flags; -}; - -/* Elements in the table are retrieved by indexing with values from - the operands field of the mn10200_opcodes table. */ - -extern const struct mn10200_operand mn10200_operands[]; - -/* Values defined for the flags field of a struct mn10200_operand. */ -#define MN10200_OPERAND_DREG 0x1 - -#define MN10200_OPERAND_AREG 0x2 - -#define MN10200_OPERAND_PSW 0x4 - -#define MN10200_OPERAND_MDR 0x8 - -#define MN10200_OPERAND_SIGNED 0x10 - -#define MN10200_OPERAND_PROMOTE 0x20 - -#define MN10200_OPERAND_PAREN 0x40 - -#define MN10200_OPERAND_REPEATED 0x80 - -#define MN10200_OPERAND_EXTENDED 0x100 - -#define MN10200_OPERAND_NOCHECK 0x200 - -#define MN10200_OPERAND_PCREL 0x400 - -#define MN10200_OPERAND_MEMADDR 0x800 - -#define MN10200_OPERAND_RELAX 0x1000 - -#define FMT_1 1 -#define FMT_2 2 -#define FMT_3 3 -#define FMT_4 4 -#define FMT_5 5 -#define FMT_6 6 -#define FMT_7 7 -#endif /* MN10200_H */ diff --git a/include/opcode/mn10300.h b/include/opcode/mn10300.h deleted file mode 100644 index a47ef48a357..00000000000 --- a/include/opcode/mn10300.h +++ /dev/null @@ -1,169 +0,0 @@ -/* mn10300.h -- Header file for Matsushita 10300 opcode table - Copyright 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc. - Written by Jeff Law, Cygnus Support - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef MN10300_H -#define MN10300_H - -/* The opcode table is an array of struct mn10300_opcode. */ - -#define MN10300_MAX_OPERANDS 8 -struct mn10300_opcode -{ - /* The opcode name. */ - const char *name; - - /* The opcode itself. Those bits which will be filled in with - operands are zeroes. */ - unsigned long opcode; - - /* The opcode mask. This is used by the disassembler. This is a - mask containing ones indicating those bits which must match the - opcode field, and zeroes indicating those bits which need not - match (and are presumably filled in by operands). */ - unsigned long mask; - - /* A bitmask. For each operand, nonzero if it must not have the same - register specification as all other operands with a nonzero bit in - this flag. ie 0x81 would indicate that operands 7 and 0 must not - match. Note that we count operands from left to right as they appear - in the operands specification below. */ - unsigned int no_match_operands; - - /* The format of this opcode. */ - unsigned char format; - - /* Bitmask indicating what cpu variants this opcode is available on. - We assume mn10300 base opcodes are available everywhere, so we only - have to note opcodes which are available on other variants. */ - unsigned int machine; - - /* An array of operand codes. Each code is an index into the - operand table. They appear in the order which the operands must - appear in assembly code, and are terminated by a zero. */ - unsigned char operands[MN10300_MAX_OPERANDS]; -}; - -/* The table itself is sorted by major opcode number, and is otherwise - in the order in which the disassembler should consider - instructions. */ -extern const struct mn10300_opcode mn10300_opcodes[]; -extern const int mn10300_num_opcodes; - - -/* The operands table is an array of struct mn10300_operand. */ - -struct mn10300_operand -{ - /* The number of bits in the operand. */ - int bits; - - /* How far the operand is left shifted in the instruction. */ - int shift; - - /* One bit syntax flags. */ - int flags; -}; - -/* Elements in the table are retrieved by indexing with values from - the operands field of the mn10300_opcodes table. */ - -extern const struct mn10300_operand mn10300_operands[]; - -/* Values defined for the flags field of a struct mn10300_operand. */ -#define MN10300_OPERAND_DREG 0x1 - -#define MN10300_OPERAND_AREG 0x2 - -#define MN10300_OPERAND_SP 0x4 - -#define MN10300_OPERAND_PSW 0x8 - -#define MN10300_OPERAND_MDR 0x10 - -#define MN10300_OPERAND_SIGNED 0x20 - -#define MN10300_OPERAND_PROMOTE 0x40 - -#define MN10300_OPERAND_PAREN 0x80 - -#define MN10300_OPERAND_REPEATED 0x100 - -#define MN10300_OPERAND_EXTENDED 0x200 - -#define MN10300_OPERAND_SPLIT 0x400 - -#define MN10300_OPERAND_REG_LIST 0x800 - -#define MN10300_OPERAND_PCREL 0x1000 - -#define MN10300_OPERAND_MEMADDR 0x2000 - -#define MN10300_OPERAND_RELAX 0x4000 - -#define MN10300_OPERAND_USP 0x8000 - -#define MN10300_OPERAND_SSP 0x10000 - -#define MN10300_OPERAND_MSP 0x20000 - -#define MN10300_OPERAND_PC 0x40000 - -#define MN10300_OPERAND_EPSW 0x80000 - -#define MN10300_OPERAND_RREG 0x100000 - -#define MN10300_OPERAND_XRREG 0x200000 - -#define MN10300_OPERAND_PLUS 0x400000 - -#define MN10300_OPERAND_24BIT 0x800000 - -#define MN10300_OPERAND_FSREG 0x1000000 - -#define MN10300_OPERAND_FDREG 0x2000000 - -#define MN10300_OPERAND_FPCR 0x4000000 - -/* Opcode Formats. */ -#define FMT_S0 1 -#define FMT_S1 2 -#define FMT_S2 3 -#define FMT_S4 4 -#define FMT_S6 5 -#define FMT_D0 6 -#define FMT_D1 7 -#define FMT_D2 8 -#define FMT_D4 9 -#define FMT_D5 10 -#define FMT_D6 11 -#define FMT_D7 12 -#define FMT_D8 13 -#define FMT_D9 14 -#define FMT_D10 15 -#define FMT_D3 16 - -/* Variants of the mn10300 which have additional opcodes. */ -#define MN103 300 -#define AM30 300 - -#define AM33 330 -#define AM33_2 332 - -#endif /* MN10300_H */ diff --git a/include/opcode/msp430.h b/include/opcode/msp430.h deleted file mode 100644 index eec2f1e45a0..00000000000 --- a/include/opcode/msp430.h +++ /dev/null @@ -1,125 +0,0 @@ -/* Opcode table for the TI MSP430 microcontrollers - - Copyright 2002, 2004 Free Software Foundation, Inc. - Contributed by Dmitry Diky - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef __MSP430_H_ -#define __MSP430_H_ - -struct msp430_operand_s -{ - int ol; /* Operand length words. */ - int am; /* Addr mode. */ - int reg; /* Register. */ - int mode; /* Pperand mode. */ -#define OP_REG 0 -#define OP_EXP 1 -#ifndef DASM_SECTION - expressionS exp; -#endif -}; - -#define BYTE_OPERATION (1 << 6) /* Byte operation flag for all instructions. */ - -struct msp430_opcode_s -{ - char *name; - int fmt; - int insn_opnumb; - int bin_opcode; - int bin_mask; -}; - -#define MSP_INSN(name, size, numb, bin, mask) { #name, size, numb, bin, mask } - -static struct msp430_opcode_s msp430_opcodes[] = -{ - MSP_INSN (and, 1, 2, 0xf000, 0xf000), - MSP_INSN (inv, 0, 1, 0xe330, 0xfff0), - MSP_INSN (xor, 1, 2, 0xe000, 0xf000), - MSP_INSN (setz, 0, 0, 0xd322, 0xffff), - MSP_INSN (setc, 0, 0, 0xd312, 0xffff), - MSP_INSN (eint, 0, 0, 0xd232, 0xffff), - MSP_INSN (setn, 0, 0, 0xd222, 0xffff), - MSP_INSN (bis, 1, 2, 0xd000, 0xf000), - MSP_INSN (clrz, 0, 0, 0xc322, 0xffff), - MSP_INSN (clrc, 0, 0, 0xc312, 0xffff), - MSP_INSN (dint, 0, 0, 0xc232, 0xffff), - MSP_INSN (clrn, 0, 0, 0xc222, 0xffff), - MSP_INSN (bic, 1, 2, 0xc000, 0xf000), - MSP_INSN (bit, 1, 2, 0xb000, 0xf000), - MSP_INSN (dadc, 0, 1, 0xa300, 0xff30), - MSP_INSN (dadd, 1, 2, 0xa000, 0xf000), - MSP_INSN (tst, 0, 1, 0x9300, 0xff30), - MSP_INSN (cmp, 1, 2, 0x9000, 0xf000), - MSP_INSN (decd, 0, 1, 0x8320, 0xff30), - MSP_INSN (dec, 0, 1, 0x8310, 0xff30), - MSP_INSN (sub, 1, 2, 0x8000, 0xf000), - MSP_INSN (sbc, 0, 1, 0x7300, 0xff30), - MSP_INSN (subc, 1, 2, 0x7000, 0xf000), - MSP_INSN (adc, 0, 1, 0x6300, 0xff30), - MSP_INSN (rlc, 0, 2, 0x6000, 0xf000), - MSP_INSN (addc, 1, 2, 0x6000, 0xf000), - MSP_INSN (incd, 0, 1, 0x5320, 0xff30), - MSP_INSN (inc, 0, 1, 0x5310, 0xff30), - MSP_INSN (rla, 0, 2, 0x5000, 0xf000), - MSP_INSN (add, 1, 2, 0x5000, 0xf000), - MSP_INSN (nop, 0, 0, 0x4303, 0xffff), - MSP_INSN (clr, 0, 1, 0x4300, 0xff30), - MSP_INSN (ret, 0, 0, 0x4130, 0xff30), - MSP_INSN (pop, 0, 1, 0x4130, 0xff30), - MSP_INSN (br, 0, 3, 0x4000, 0xf000), - MSP_INSN (mov, 1, 2, 0x4000, 0xf000), - MSP_INSN (jmp, 3, 1, 0x3c00, 0xfc00), - MSP_INSN (jl, 3, 1, 0x3800, 0xfc00), - MSP_INSN (jge, 3, 1, 0x3400, 0xfc00), - MSP_INSN (jn, 3, 1, 0x3000, 0xfc00), - MSP_INSN (jc, 3, 1, 0x2c00, 0xfc00), - MSP_INSN (jhs, 3, 1, 0x2c00, 0xfc00), - MSP_INSN (jnc, 3, 1, 0x2800, 0xfc00), - MSP_INSN (jlo, 3, 1, 0x2800, 0xfc00), - MSP_INSN (jz, 3, 1, 0x2400, 0xfc00), - MSP_INSN (jeq, 3, 1, 0x2400, 0xfc00), - MSP_INSN (jnz, 3, 1, 0x2000, 0xfc00), - MSP_INSN (jne, 3, 1, 0x2000, 0xfc00), - MSP_INSN (reti, 2, 0, 0x1300, 0xffc0), - MSP_INSN (call, 2, 1, 0x1280, 0xffc0), - MSP_INSN (push, 2, 1, 0x1200, 0xff80), - MSP_INSN (sxt, 2, 1, 0x1180, 0xffc0), - MSP_INSN (rra, 2, 1, 0x1100, 0xff80), - MSP_INSN (swpb, 2, 1, 0x1080, 0xffc0), - MSP_INSN (rrc, 2, 1, 0x1000, 0xff80), - /* Simple polymorphs. */ - MSP_INSN (beq, 4, 0, 0, 0xffff), - MSP_INSN (bne, 4, 1, 0, 0xffff), - MSP_INSN (blt, 4, 2, 0, 0xffff), - MSP_INSN (bltu, 4, 3, 0, 0xffff), - MSP_INSN (bge, 4, 4, 0, 0xffff), - MSP_INSN (bgeu, 4, 5, 0, 0xffff), - MSP_INSN (bltn, 4, 6, 0, 0xffff), - MSP_INSN (jump, 4, 7, 0, 0xffff), - /* Long polymorphs. */ - MSP_INSN (bgt, 5, 0, 0, 0xffff), - MSP_INSN (bgtu, 5, 1, 0, 0xffff), - MSP_INSN (bleu, 5, 2, 0, 0xffff), - MSP_INSN (ble, 5, 3, 0, 0xffff), - - /* End of instruction set. */ - { NULL, 0, 0, 0, 0 } -}; - -#endif diff --git a/include/opcode/np1.h b/include/opcode/np1.h deleted file mode 100644 index ebe37f5d2df..00000000000 --- a/include/opcode/np1.h +++ /dev/null @@ -1,422 +0,0 @@ -/* Print GOULD NPL instructions for GDB, the GNU debugger. - Copyright 1986, 1987, 1989, 1991 Free Software Foundation, Inc. - -This file is part of GDB. - -GDB 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 1, or (at your option) -any later version. - -GDB 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 GDB; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -struct gld_opcode -{ - char *name; - unsigned long opcode; - unsigned long mask; - char *args; - int length; -}; - -/* We store four bytes of opcode for all opcodes because that - is the most any of them need. The actual length of an instruction - is always at least 2 bytes, and at most four. The length of the - instruction is based on the opcode. - - The mask component is a mask saying which bits must match - particular opcode in order for an instruction to be an instance - of that opcode. - - The args component is a string containing characters - that are used to format the arguments to the instruction. */ - -/* Kinds of operands: - r Register in first field - R Register in second field - b Base register in first field - B Base register in second field - v Vector register in first field - V Vector register in first field - A Optional address register (base register) - X Optional index register - I Immediate data (16bits signed) - O Offset field (16bits signed) - h Offset field (15bits signed) - d Offset field (14bits signed) - S Shift count field - - any other characters are printed as is... -*/ - -/* The assembler requires that this array be sorted as follows: - all instances of the same mnemonic must be consecutive. - All instances of the same mnemonic with the same number of operands - must be consecutive. - */ -struct gld_opcode gld_opcodes[] = -{ -{ "lb", 0xb4080000, 0xfc080000, "r,xOA,X", 4 }, -{ "lnb", 0xb8080000, 0xfc080000, "r,xOA,X", 4 }, -{ "lbs", 0xec080000, 0xfc080000, "r,xOA,X", 4 }, -{ "lh", 0xb4000001, 0xfc080001, "r,xOA,X", 4 }, -{ "lnh", 0xb8000001, 0xfc080001, "r,xOA,X", 4 }, -{ "lw", 0xb4000000, 0xfc080000, "r,xOA,X", 4 }, -{ "lnw", 0xb8000000, 0xfc080000, "r,xOA,X", 4 }, -{ "ld", 0xb4000002, 0xfc080002, "r,xOA,X", 4 }, -{ "lnd", 0xb8000002, 0xfc080002, "r,xOA,X", 4 }, -{ "li", 0xf8000000, 0xfc7f0000, "r,I", 4 }, -{ "lpa", 0x50080000, 0xfc080000, "r,xOA,X", 4 }, -{ "la", 0x50000000, 0xfc080000, "r,xOA,X", 4 }, -{ "labr", 0x58080000, 0xfc080000, "b,xOA,X", 4 }, -{ "lbp", 0x90080000, 0xfc080000, "r,xOA,X", 4 }, -{ "lhp", 0x90000001, 0xfc080001, "r,xOA,X", 4 }, -{ "lwp", 0x90000000, 0xfc080000, "r,xOA,X", 4 }, -{ "ldp", 0x90000002, 0xfc080002, "r,xOA,X", 4 }, -{ "suabr", 0x58000000, 0xfc080000, "b,xOA,X", 4 }, -{ "lf", 0xbc000000, 0xfc080000, "r,xOA,X", 4 }, -{ "lfbr", 0xbc080000, 0xfc080000, "b,xOA,X", 4 }, -{ "lwbr", 0x5c000000, 0xfc080000, "b,xOA,X", 4 }, -{ "stb", 0xd4080000, 0xfc080000, "r,xOA,X", 4 }, -{ "sth", 0xd4000001, 0xfc080001, "r,xOA,X", 4 }, -{ "stw", 0xd4000000, 0xfc080000, "r,xOA,X", 4 }, -{ "std", 0xd4000002, 0xfc080002, "r,xOA,X", 4 }, -{ "stf", 0xdc000000, 0xfc080000, "r,xOA,X", 4 }, -{ "stfbr", 0xdc080000, 0xfc080000, "b,xOA,X", 4 }, -{ "stwbr", 0x54000000, 0xfc080000, "b,xOA,X", 4 }, -{ "zmb", 0xd8080000, 0xfc080000, "r,xOA,X", 4 }, -{ "zmh", 0xd8000001, 0xfc080001, "r,xOA,X", 4 }, -{ "zmw", 0xd8000000, 0xfc080000, "r,xOA,X", 4 }, -{ "zmd", 0xd8000002, 0xfc080002, "r,xOA,X", 4 }, -{ "stbp", 0x94080000, 0xfc080000, "r,xOA,X", 4 }, -{ "sthp", 0x94000001, 0xfc080001, "r,xOA,X", 4 }, -{ "stwp", 0x94000000, 0xfc080000, "r,xOA,X", 4 }, -{ "stdp", 0x94000002, 0xfc080002, "r,xOA,X", 4 }, -{ "lil", 0xf80b0000, 0xfc7f0000, "r,D", 4 }, -{ "lwsl1", 0xec000000, 0xfc080000, "r,xOA,X", 4 }, -{ "lwsl2", 0xfc000000, 0xfc080000, "r,xOA,X", 4 }, -{ "lwsl3", 0xfc080000, 0xfc080000, "r,xOA,X", 4 }, - -{ "lvb", 0xb0080000, 0xfc080000, "v,xOA,X", 4 }, -{ "lvh", 0xb0000001, 0xfc080001, "v,xOA,X", 4 }, -{ "lvw", 0xb0000000, 0xfc080000, "v,xOA,X", 4 }, -{ "lvd", 0xb0000002, 0xfc080002, "v,xOA,X", 4 }, -{ "liv", 0x3c040000, 0xfc0f0000, "v,R", 2 }, -{ "livf", 0x3c080000, 0xfc0f0000, "v,R", 2 }, -{ "stvb", 0xd0080000, 0xfc080000, "v,xOA,X", 4 }, -{ "stvh", 0xd0000001, 0xfc080001, "v,xOA,X", 4 }, -{ "stvw", 0xd0000000, 0xfc080000, "v,xOA,X", 4 }, -{ "stvd", 0xd0000002, 0xfc080002, "v,xOA,X", 4 }, - -{ "trr", 0x2c000000, 0xfc0f0000, "r,R", 2 }, -{ "trn", 0x2c040000, 0xfc0f0000, "r,R", 2 }, -{ "trnd", 0x2c0c0000, 0xfc0f0000, "r,R", 2 }, -{ "trabs", 0x2c010000, 0xfc0f0000, "r,R", 2 }, -{ "trabsd", 0x2c090000, 0xfc0f0000, "r,R", 2 }, -{ "trc", 0x2c030000, 0xfc0f0000, "r,R", 2 }, -{ "xcr", 0x28040000, 0xfc0f0000, "r,R", 2 }, -{ "cxcr", 0x2c060000, 0xfc0f0000, "r,R", 2 }, -{ "cxcrd", 0x2c0e0000, 0xfc0f0000, "r,R", 2 }, -{ "tbrr", 0x2c020000, 0xfc0f0000, "r,B", 2 }, -{ "trbr", 0x28030000, 0xfc0f0000, "b,R", 2 }, -{ "xcbr", 0x28020000, 0xfc0f0000, "b,B", 2 }, -{ "tbrbr", 0x28010000, 0xfc0f0000, "b,B", 2 }, - -{ "trvv", 0x28050000, 0xfc0f0000, "v,V", 2 }, -{ "trvvn", 0x2c050000, 0xfc0f0000, "v,V", 2 }, -{ "trvvnd", 0x2c0d0000, 0xfc0f0000, "v,V", 2 }, -{ "trvab", 0x2c070000, 0xfc0f0000, "v,V", 2 }, -{ "trvabd", 0x2c0f0000, 0xfc0f0000, "v,V", 2 }, -{ "cmpv", 0x14060000, 0xfc0f0000, "v,V", 2 }, -{ "expv", 0x14070000, 0xfc0f0000, "v,V", 2 }, -{ "mrvvlt", 0x10030000, 0xfc0f0000, "v,V", 2 }, -{ "mrvvle", 0x10040000, 0xfc0f0000, "v,V", 2 }, -{ "mrvvgt", 0x14030000, 0xfc0f0000, "v,V", 2 }, -{ "mrvvge", 0x14040000, 0xfc0f0000, "v,V", 2 }, -{ "mrvveq", 0x10050000, 0xfc0f0000, "v,V", 2 }, -{ "mrvvne", 0x10050000, 0xfc0f0000, "v,V", 2 }, -{ "mrvrlt", 0x100d0000, 0xfc0f0000, "v,R", 2 }, -{ "mrvrle", 0x100e0000, 0xfc0f0000, "v,R", 2 }, -{ "mrvrgt", 0x140d0000, 0xfc0f0000, "v,R", 2 }, -{ "mrvrge", 0x140e0000, 0xfc0f0000, "v,R", 2 }, -{ "mrvreq", 0x100f0000, 0xfc0f0000, "v,R", 2 }, -{ "mrvrne", 0x140f0000, 0xfc0f0000, "v,R", 2 }, -{ "trvr", 0x140b0000, 0xfc0f0000, "r,V", 2 }, -{ "trrv", 0x140c0000, 0xfc0f0000, "v,R", 2 }, - -{ "bu", 0x40000000, 0xff880000, "xOA,X", 4 }, -{ "bns", 0x70080000, 0xff880000, "xOA,X", 4 }, -{ "bnco", 0x70880000, 0xff880000, "xOA,X", 4 }, -{ "bge", 0x71080000, 0xff880000, "xOA,X", 4 }, -{ "bne", 0x71880000, 0xff880000, "xOA,X", 4 }, -{ "bunge", 0x72080000, 0xff880000, "xOA,X", 4 }, -{ "bunle", 0x72880000, 0xff880000, "xOA,X", 4 }, -{ "bgt", 0x73080000, 0xff880000, "xOA,X", 4 }, -{ "bnany", 0x73880000, 0xff880000, "xOA,X", 4 }, -{ "bs" , 0x70000000, 0xff880000, "xOA,X", 4 }, -{ "bco", 0x70800000, 0xff880000, "xOA,X", 4 }, -{ "blt", 0x71000000, 0xff880000, "xOA,X", 4 }, -{ "beq", 0x71800000, 0xff880000, "xOA,X", 4 }, -{ "buge", 0x72000000, 0xff880000, "xOA,X", 4 }, -{ "bult", 0x72800000, 0xff880000, "xOA,X", 4 }, -{ "ble", 0x73000000, 0xff880000, "xOA,X", 4 }, -{ "bany", 0x73800000, 0xff880000, "xOA,X", 4 }, -{ "brlnk", 0x44000000, 0xfc080000, "r,xOA,X", 4 }, -{ "bib", 0x48000000, 0xfc080000, "r,xOA,X", 4 }, -{ "bih", 0x48080000, 0xfc080000, "r,xOA,X", 4 }, -{ "biw", 0x4c000000, 0xfc080000, "r,xOA,X", 4 }, -{ "bid", 0x4c080000, 0xfc080000, "r,xOA,X", 4 }, -{ "bivb", 0x60000000, 0xfc080000, "r,xOA,X", 4 }, -{ "bivh", 0x60080000, 0xfc080000, "r,xOA,X", 4 }, -{ "bivw", 0x64000000, 0xfc080000, "r,xOA,X", 4 }, -{ "bivd", 0x64080000, 0xfc080000, "r,xOA,X", 4 }, -{ "bvsb", 0x68000000, 0xfc080000, "r,xOA,X", 4 }, -{ "bvsh", 0x68080000, 0xfc080000, "r,xOA,X", 4 }, -{ "bvsw", 0x6c000000, 0xfc080000, "r,xOA,X", 4 }, -{ "bvsd", 0x6c080000, 0xfc080000, "r,xOA,X", 4 }, - -{ "camb", 0x80080000, 0xfc080000, "r,xOA,X", 4 }, -{ "camh", 0x80000001, 0xfc080001, "r,xOA,X", 4 }, -{ "camw", 0x80000000, 0xfc080000, "r,xOA,X", 4 }, -{ "camd", 0x80000002, 0xfc080002, "r,xOA,X", 4 }, -{ "car", 0x10000000, 0xfc0f0000, "r,R", 2 }, -{ "card", 0x14000000, 0xfc0f0000, "r,R", 2 }, -{ "ci", 0xf8050000, 0xfc7f0000, "r,I", 4 }, -{ "chkbnd", 0x5c080000, 0xfc080000, "r,xOA,X", 4 }, - -{ "cavv", 0x10010000, 0xfc0f0000, "v,V", 2 }, -{ "cavr", 0x10020000, 0xfc0f0000, "v,R", 2 }, -{ "cavvd", 0x10090000, 0xfc0f0000, "v,V", 2 }, -{ "cavrd", 0x100b0000, 0xfc0f0000, "v,R", 2 }, - -{ "anmb", 0x84080000, 0xfc080000, "r,xOA,X", 4 }, -{ "anmh", 0x84000001, 0xfc080001, "r,xOA,X", 4 }, -{ "anmw", 0x84000000, 0xfc080000, "r,xOA,X", 4 }, -{ "anmd", 0x84000002, 0xfc080002, "r,xOA,X", 4 }, -{ "anr", 0x04000000, 0xfc0f0000, "r,R", 2 }, -{ "ani", 0xf8080000, 0xfc7f0000, "r,I", 4 }, -{ "ormb", 0xb8080000, 0xfc080000, "r,xOA,X", 4 }, -{ "ormh", 0xb8000001, 0xfc080001, "r,xOA,X", 4 }, -{ "ormw", 0xb8000000, 0xfc080000, "r,xOA,X", 4 }, -{ "ormd", 0xb8000002, 0xfc080002, "r,xOA,X", 4 }, -{ "orr", 0x08000000, 0xfc0f0000, "r,R", 2 }, -{ "oi", 0xf8090000, 0xfc7f0000, "r,I", 4 }, -{ "eomb", 0x8c080000, 0xfc080000, "r,xOA,X", 4 }, -{ "eomh", 0x8c000001, 0xfc080001, "r,xOA,X", 4 }, -{ "eomw", 0x8c000000, 0xfc080000, "r,xOA,X", 4 }, -{ "eomd", 0x8c000002, 0xfc080002, "r,xOA,X", 4 }, -{ "eor", 0x0c000000, 0xfc0f0000, "r,R", 2 }, -{ "eoi", 0xf80a0000, 0xfc7f0000, "r,I", 4 }, - -{ "anvv", 0x04010000, 0xfc0f0000, "v,V", 2 }, -{ "anvr", 0x04020000, 0xfc0f0000, "v,R", 2 }, -{ "orvv", 0x08010000, 0xfc0f0000, "v,V", 2 }, -{ "orvr", 0x08020000, 0xfc0f0000, "v,R", 2 }, -{ "eovv", 0x0c010000, 0xfc0f0000, "v,V", 2 }, -{ "eovr", 0x0c020000, 0xfc0f0000, "v,R", 2 }, - -{ "sacz", 0x100c0000, 0xfc0f0000, "r,R", 2 }, -{ "sla", 0x1c400000, 0xfc600000, "r,S", 2 }, -{ "sll", 0x1c600000, 0xfc600000, "r,S", 2 }, -{ "slc", 0x24400000, 0xfc600000, "r,S", 2 }, -{ "slad", 0x20400000, 0xfc600000, "r,S", 2 }, -{ "slld", 0x20600000, 0xfc600000, "r,S", 2 }, -{ "sra", 0x1c000000, 0xfc600000, "r,S", 2 }, -{ "srl", 0x1c200000, 0xfc600000, "r,S", 2 }, -{ "src", 0x24000000, 0xfc600000, "r,S", 2 }, -{ "srad", 0x20000000, 0xfc600000, "r,S", 2 }, -{ "srld", 0x20200000, 0xfc600000, "r,S", 2 }, -{ "sda", 0x3c030000, 0xfc0f0000, "r,R", 2 }, -{ "sdl", 0x3c020000, 0xfc0f0000, "r,R", 2 }, -{ "sdc", 0x3c010000, 0xfc0f0000, "r,R", 2 }, -{ "sdad", 0x3c0b0000, 0xfc0f0000, "r,R", 2 }, -{ "sdld", 0x3c0a0000, 0xfc0f0000, "r,R", 2 }, - -{ "svda", 0x3c070000, 0xfc0f0000, "v,R", 2 }, -{ "svdl", 0x3c060000, 0xfc0f0000, "v,R", 2 }, -{ "svdc", 0x3c050000, 0xfc0f0000, "v,R", 2 }, -{ "svdad", 0x3c0e0000, 0xfc0f0000, "v,R", 2 }, -{ "svdld", 0x3c0d0000, 0xfc0f0000, "v,R", 2 }, - -{ "sbm", 0xac080000, 0xfc080000, "f,xOA,X", 4 }, -{ "zbm", 0xac000000, 0xfc080000, "f,xOA,X", 4 }, -{ "tbm", 0xa8080000, 0xfc080000, "f,xOA,X", 4 }, -{ "incmb", 0xa0000000, 0xfc080000, "xOA,X", 4 }, -{ "incmh", 0xa0080000, 0xfc080000, "xOA,X", 4 }, -{ "incmw", 0xa4000000, 0xfc080000, "xOA,X", 4 }, -{ "incmd", 0xa4080000, 0xfc080000, "xOA,X", 4 }, -{ "sbmd", 0x7c080000, 0xfc080000, "r,xOA,X", 4 }, -{ "zbmd", 0x7c000000, 0xfc080000, "r,xOA,X", 4 }, -{ "tbmd", 0x78080000, 0xfc080000, "r,xOA,X", 4 }, - -{ "ssm", 0x9c080000, 0xfc080000, "f,xOA,X", 4 }, -{ "zsm", 0x9c000000, 0xfc080000, "f,xOA,X", 4 }, -{ "tsm", 0x98080000, 0xfc080000, "f,xOA,X", 4 }, - -{ "admb", 0xc8080000, 0xfc080000, "r,xOA,X", 4 }, -{ "admh", 0xc8000001, 0xfc080001, "r,xOA,X", 4 }, -{ "admw", 0xc8000000, 0xfc080000, "r,xOA,X", 4 }, -{ "admd", 0xc8000002, 0xfc080002, "r,xOA,X", 4 }, -{ "adr", 0x38000000, 0xfc0f0000, "r,R", 2 }, -{ "armb", 0xe8080000, 0xfc080000, "r,xOA,X", 4 }, -{ "armh", 0xe8000001, 0xfc080001, "r,xOA,X", 4 }, -{ "armw", 0xe8000000, 0xfc080000, "r,xOA,X", 4 }, -{ "armd", 0xe8000002, 0xfc080002, "r,xOA,X", 4 }, -{ "adi", 0xf8010000, 0xfc0f0000, "r,I", 4 }, -{ "sumb", 0xcc080000, 0xfc080000, "r,xOA,X", 4 }, -{ "sumh", 0xcc000001, 0xfc080001, "r,xOA,X", 4 }, -{ "sumw", 0xcc000000, 0xfc080000, "r,xOA,X", 4 }, -{ "sumd", 0xcc000002, 0xfc080002, "r,xOA,X", 4 }, -{ "sur", 0x3c000000, 0xfc0f0000, "r,R", 2 }, -{ "sui", 0xf8020000, 0xfc0f0000, "r,I", 4 }, -{ "mpmb", 0xc0080000, 0xfc080000, "r,xOA,X", 4 }, -{ "mpmh", 0xc0000001, 0xfc080001, "r,xOA,X", 4 }, -{ "mpmw", 0xc0000000, 0xfc080000, "r,xOA,X", 4 }, -{ "mpr", 0x38020000, 0xfc0f0000, "r,R", 2 }, -{ "mprd", 0x3c0f0000, 0xfc0f0000, "r,R", 2 }, -{ "mpi", 0xf8030000, 0xfc0f0000, "r,I", 4 }, -{ "dvmb", 0xc4080000, 0xfc080000, "r,xOA,X", 4 }, -{ "dvmh", 0xc4000001, 0xfc080001, "r,xOA,X", 4 }, -{ "dvmw", 0xc4000000, 0xfc080000, "r,xOA,X", 4 }, -{ "dvr", 0x380a0000, 0xfc0f0000, "r,R", 2 }, -{ "dvi", 0xf8040000, 0xfc0f0000, "r,I", 4 }, -{ "exs", 0x38080000, 0xfc0f0000, "r,R", 2 }, - -{ "advv", 0x30000000, 0xfc0f0000, "v,V", 2 }, -{ "advvd", 0x30080000, 0xfc0f0000, "v,V", 2 }, -{ "adrv", 0x34000000, 0xfc0f0000, "v,R", 2 }, -{ "adrvd", 0x34080000, 0xfc0f0000, "v,R", 2 }, -{ "suvv", 0x30010000, 0xfc0f0000, "v,V", 2 }, -{ "suvvd", 0x30090000, 0xfc0f0000, "v,V", 2 }, -{ "surv", 0x34010000, 0xfc0f0000, "v,R", 2 }, -{ "survd", 0x34090000, 0xfc0f0000, "v,R", 2 }, -{ "mpvv", 0x30020000, 0xfc0f0000, "v,V", 2 }, -{ "mprv", 0x34020000, 0xfc0f0000, "v,R", 2 }, - -{ "adfw", 0xe0080000, 0xfc080000, "r,xOA,X", 4 }, -{ "adfd", 0xe0080002, 0xfc080002, "r,xOA,X", 4 }, -{ "adrfw", 0x38010000, 0xfc0f0000, "r,R", 2 }, -{ "adrfd", 0x38090000, 0xfc0f0000, "r,R", 2 }, -{ "surfw", 0xe0000000, 0xfc080000, "r,xOA,X", 4 }, -{ "surfd", 0xe0000002, 0xfc080002, "r,xOA,X", 4 }, -{ "surfw", 0x38030000, 0xfc0f0000, "r,R", 2 }, -{ "surfd", 0x380b0000, 0xfc0f0000, "r,R", 2 }, -{ "mpfw", 0xe4080000, 0xfc080000, "r,xOA,X", 4 }, -{ "mpfd", 0xe4080002, 0xfc080002, "r,xOA,X", 4 }, -{ "mprfw", 0x38060000, 0xfc0f0000, "r,R", 2 }, -{ "mprfd", 0x380e0000, 0xfc0f0000, "r,R", 2 }, -{ "rfw", 0xe4000000, 0xfc080000, "r,xOA,X", 4 }, -{ "rfd", 0xe4000002, 0xfc080002, "r,xOA,X", 4 }, -{ "rrfw", 0x0c0e0000, 0xfc0f0000, "r", 2 }, -{ "rrfd", 0x0c0f0000, 0xfc0f0000, "r", 2 }, - -{ "advvfw", 0x30040000, 0xfc0f0000, "v,V", 2 }, -{ "advvfd", 0x300c0000, 0xfc0f0000, "v,V", 2 }, -{ "adrvfw", 0x34040000, 0xfc0f0000, "v,R", 2 }, -{ "adrvfd", 0x340c0000, 0xfc0f0000, "v,R", 2 }, -{ "suvvfw", 0x30050000, 0xfc0f0000, "v,V", 2 }, -{ "suvvfd", 0x300d0000, 0xfc0f0000, "v,V", 2 }, -{ "survfw", 0x34050000, 0xfc0f0000, "v,R", 2 }, -{ "survfd", 0x340d0000, 0xfc0f0000, "v,R", 2 }, -{ "mpvvfw", 0x30060000, 0xfc0f0000, "v,V", 2 }, -{ "mpvvfd", 0x300e0000, 0xfc0f0000, "v,V", 2 }, -{ "mprvfw", 0x34060000, 0xfc0f0000, "v,R", 2 }, -{ "mprvfd", 0x340e0000, 0xfc0f0000, "v,R", 2 }, -{ "rvfw", 0x30070000, 0xfc0f0000, "v", 2 }, -{ "rvfd", 0x300f0000, 0xfc0f0000, "v", 2 }, - -{ "fltw", 0x38070000, 0xfc0f0000, "r,R", 2 }, -{ "fltd", 0x380f0000, 0xfc0f0000, "r,R", 2 }, -{ "fixw", 0x38050000, 0xfc0f0000, "r,R", 2 }, -{ "fixd", 0x380d0000, 0xfc0f0000, "r,R", 2 }, -{ "cfpds", 0x3c090000, 0xfc0f0000, "r,R", 2 }, - -{ "fltvw", 0x080d0000, 0xfc0f0000, "v,V", 2 }, -{ "fltvd", 0x080f0000, 0xfc0f0000, "v,V", 2 }, -{ "fixvw", 0x080c0000, 0xfc0f0000, "v,V", 2 }, -{ "fixvd", 0x080e0000, 0xfc0f0000, "v,V", 2 }, -{ "cfpvds", 0x0c0d0000, 0xfc0f0000, "v,V", 2 }, - -{ "orvrn", 0x000a0000, 0xfc0f0000, "r,V", 2 }, -{ "andvrn", 0x00080000, 0xfc0f0000, "r,V", 2 }, -{ "frsteq", 0x04090000, 0xfc0f0000, "r,V", 2 }, -{ "sigma", 0x0c080000, 0xfc0f0000, "r,V", 2 }, -{ "sigmad", 0x0c0a0000, 0xfc0f0000, "r,V", 2 }, -{ "sigmf", 0x08080000, 0xfc0f0000, "r,V", 2 }, -{ "sigmfd", 0x080a0000, 0xfc0f0000, "r,V", 2 }, -{ "prodf", 0x04080000, 0xfc0f0000, "r,V", 2 }, -{ "prodfd", 0x040a0000, 0xfc0f0000, "r,V", 2 }, -{ "maxv", 0x10080000, 0xfc0f0000, "r,V", 2 }, -{ "maxvd", 0x100a0000, 0xfc0f0000, "r,V", 2 }, -{ "minv", 0x14080000, 0xfc0f0000, "r,V", 2 }, -{ "minvd", 0x140a0000, 0xfc0f0000, "r,V", 2 }, - -{ "lpsd", 0xf0000000, 0xfc080000, "xOA,X", 4 }, -{ "ldc", 0xf0080000, 0xfc080000, "xOA,X", 4 }, -{ "spm", 0x040c0000, 0xfc0f0000, "r", 2 }, -{ "rpm", 0x040d0000, 0xfc0f0000, "r", 2 }, -{ "tritr", 0x00070000, 0xfc0f0000, "r", 2 }, -{ "trrit", 0x00060000, 0xfc0f0000, "r", 2 }, -{ "rpswt", 0x04080000, 0xfc0f0000, "r", 2 }, -{ "exr", 0xf8070000, 0xfc0f0000, "", 4 }, -{ "halt", 0x00000000, 0xfc0f0000, "", 2 }, -{ "wait", 0x00010000, 0xfc0f0000, "", 2 }, -{ "nop", 0x00020000, 0xfc0f0000, "", 2 }, -{ "eiae", 0x00030000, 0xfc0f0000, "", 2 }, -{ "efae", 0x000d0000, 0xfc0f0000, "", 2 }, -{ "diae", 0x000e0000, 0xfc0f0000, "", 2 }, -{ "dfae", 0x000f0000, 0xfc0f0000, "", 2 }, -{ "spvc", 0xf8060000, 0xfc0f0000, "r,T,N", 4 }, -{ "rdsts", 0x00090000, 0xfc0f0000, "r", 2 }, -{ "setcpu", 0x000c0000, 0xfc0f0000, "r", 2 }, -{ "cmc", 0x000b0000, 0xfc0f0000, "r", 2 }, -{ "trrcu", 0x00040000, 0xfc0f0000, "r", 2 }, -{ "attnio", 0x00050000, 0xfc0f0000, "", 2 }, -{ "fudit", 0x28080000, 0xfc0f0000, "", 2 }, -{ "break", 0x28090000, 0xfc0f0000, "", 2 }, -{ "frzss", 0x280a0000, 0xfc0f0000, "", 2 }, -{ "ripi", 0x04040000, 0xfc0f0000, "r,R", 2 }, -{ "xcp", 0x04050000, 0xfc0f0000, "r", 2 }, -{ "block", 0x04060000, 0xfc0f0000, "", 2 }, -{ "unblock", 0x04070000, 0xfc0f0000, "", 2 }, -{ "trsc", 0x08060000, 0xfc0f0000, "r,R", 2 }, -{ "tscr", 0x08070000, 0xfc0f0000, "r,R", 2 }, -{ "fq", 0x04080000, 0xfc0f0000, "r", 2 }, -{ "flupte", 0x2c080000, 0xfc0f0000, "r", 2 }, -{ "rviu", 0x040f0000, 0xfc0f0000, "", 2 }, -{ "ldel", 0x280c0000, 0xfc0f0000, "r,R", 2 }, -{ "ldu", 0x280d0000, 0xfc0f0000, "r,R", 2 }, -{ "stdecc", 0x280b0000, 0xfc0f0000, "r,R", 2 }, -{ "trpc", 0x08040000, 0xfc0f0000, "r", 2 }, -{ "tpcr", 0x08050000, 0xfc0f0000, "r", 2 }, -{ "ghalt", 0x0c050000, 0xfc0f0000, "r", 2 }, -{ "grun", 0x0c040000, 0xfc0f0000, "", 2 }, -{ "tmpr", 0x2c0a0000, 0xfc0f0000, "r,R", 2 }, -{ "trmp", 0x2c0b0000, 0xfc0f0000, "r,R", 2 }, - -{ "trrve", 0x28060000, 0xfc0f0000, "r", 2 }, -{ "trver", 0x28070000, 0xfc0f0000, "r", 2 }, -{ "trvlr", 0x280f0000, 0xfc0f0000, "r", 2 }, - -{ "linkfl", 0x18000000, 0xfc0f0000, "r,R", 2 }, -{ "linkbl", 0x18020000, 0xfc0f0000, "r,R", 2 }, -{ "linkfp", 0x18010000, 0xfc0f0000, "r,R", 2 }, -{ "linkbp", 0x18030000, 0xfc0f0000, "r,R", 2 }, -{ "linkpl", 0x18040000, 0xfc0f0000, "r,R", 2 }, -{ "ulinkl", 0x18080000, 0xfc0f0000, "r,R", 2 }, -{ "ulinkp", 0x18090000, 0xfc0f0000, "r,R", 2 }, -{ "ulinktl", 0x180a0000, 0xfc0f0000, "r,R", 2 }, -{ "ulinktp", 0x180b0000, 0xfc0f0000, "r,R", 2 }, -}; - -int numopcodes = sizeof(gld_opcodes) / sizeof(gld_opcodes[0]); - -struct gld_opcode *endop = gld_opcodes + sizeof(gld_opcodes) / - sizeof(gld_opcodes[0]); diff --git a/include/opcode/ns32k.h b/include/opcode/ns32k.h deleted file mode 100644 index 5cb2f97cc38..00000000000 --- a/include/opcode/ns32k.h +++ /dev/null @@ -1,487 +0,0 @@ -/* ns32k-opcode.h -- Opcode table for National Semi 32k processor - Copyright 1987, 1991, 1994, 2002 Free Software Foundation, Inc. - -This file is part of GAS, the GNU Assembler. - -GAS 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 1, or (at your option) -any later version. - -GAS 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 GAS; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - - -#ifdef SEQUENT_COMPATABILITY -#define DEF_MODEC 20 -#define DEF_MODEL 21 -#endif - -#ifndef DEF_MODEC -#define DEF_MODEC 20 -#endif - -#ifndef DEF_MODEL -#define DEF_MODEL 20 -#endif -/* - After deciding the instruction entry (via hash.c) the instruction parser - will try to match the operands after the instruction to the required set - given in the entry operandfield. Every operand will result in a change in - the opcode or the addition of data to the opcode. - The operands in the source instruction are checked for inconsistent - semantics. - - F : 32 bit float general form - L : 64 bit float " - B : byte " - W : word " - D : double-word " - A : double-word gen-address-form ie no regs, no immediate - I : integer writeable gen int except immediate (A + reg) - Z : floating writeable gen float except immediate (Z + freg) - d : displacement - b : displacement - pc relative addressing acb - p : displacement - pc relative addressing br bcond bsr cxp - q : quick - i : immediate (8 bits) - This is not a standard ns32k operandtype, it is used to build - instructions like svc arg1,arg2 - Svc is the instruction SuperVisorCall and is sometimes used to - call OS-routines from usermode. Some args might be handy! - r : register number (3 bits) - O : setcfg instruction optionslist - C : cinv instruction optionslist - S : stringinstruction optionslist - U : registerlist save,enter - u : registerlist restore,exit - M : mmu register - P : cpu register - g : 3:rd operand of inss or exts instruction - G : 4:th operand of inss or exts instruction - Those operands are encoded in the same byte. - This byte is placed last in the instruction. - f : operand of sfsr - H : sequent-hack for bsr (Warning) - -column 1 instructions - 2 number of bits in opcode. - 3 number of bits in opcode explicitly - determined by the instruction type. - 4 opcodeseed, the number we build our opcode - from. - 5 operandtypes, used by operandparser. - 6 size in bytes of immediate -*/ -struct ns32k_opcode { - const char *name; - unsigned char opcode_id_size; /* not used by the assembler */ - unsigned char opcode_size; - unsigned long opcode_seed; - const char *operands; - unsigned char im_size; /* not used by dissassembler */ - const char *default_args; /* default to those args when none given */ - char default_modec; /* default to this addr-mode when ambigous - ie when the argument of a general addr-mode - is a plain constant */ - char default_model; /* is a plain label */ -}; - -#ifdef comment -/* This section was from the gdb version of this file. */ - -#ifndef ns32k_opcodeT -#define ns32k_opcodeT int -#endif /* no ns32k_opcodeT */ - -struct not_wot /* ns32k opcode table: wot to do with this */ - /* particular opcode */ -{ - int obits; /* number of opcode bits */ - int ibits; /* number of instruction bits */ - ns32k_opcodeT code; /* op-code (may be > 8 bits!) */ - const char *args; /* how to compile said opcode */ -}; - -struct not /* ns32k opcode text */ -{ - const char *name; /* opcode name: lowercase string [key] */ - struct not_wot detail; /* rest of opcode table [datum] */ -}; - -/* Instructions look like this: - - basic instruction--1, 2, or 3 bytes - index byte for operand A, if operand A is indexed--1 byte - index byte for operand B, if operand B is indexed--1 byte - addressing extension for operand A - addressing extension for operand B - implied operands - - Operand A is the operand listed first in the following opcode table. - Operand B is the operand listed second in the following opcode table. - All instructions have at most 2 general operands, so this is enough. - The implied operands are associated with operands other than A and B. - - Each operand has a digit and a letter. - - The digit gives the position in the assembly language. The letter, - one of the following, tells us what kind of operand it is. */ - -/* F : 32 bit float - * L : 64 bit float - * B : byte - * W : word - * D : double-word - * I : integer not immediate - * Z : floating not immediate - * d : displacement - * q : quick - * i : immediate (8 bits) - * r : register number (3 bits) - * p : displacement - pc relative addressing -*/ - - -#endif /* comment */ - -static const struct ns32k_opcode ns32k_opcodes[]= -{ - { "absf", 14,24, 0x35be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "absl", 14,24, 0x34be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL }, - { "absb", 14,24, 0x304e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "absw", 14,24, 0x314e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "absd", 14,24, 0x334e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "acbb", 7,16, 0x4c, "2I1q3p", 1, "", DEF_MODEC,DEF_MODEL }, - { "acbw", 7,16, 0x4d, "2I1q3p", 2, "", DEF_MODEC,DEF_MODEL }, - { "acbd", 7,16, 0x4f, "2I1q3p", 4, "", DEF_MODEC,DEF_MODEL }, - { "addf", 14,24, 0x01be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "addl", 14,24, 0x00be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL }, - { "addb", 6,16, 0x00, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "addw", 6,16, 0x01, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "addd", 6,16, 0x03, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "addcb", 6,16, 0x10, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "addcw", 6,16, 0x11, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "addcd", 6,16, 0x13, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "addpb", 14,24, 0x3c4e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "addpw", 14,24, 0x3d4e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "addpd", 14,24, 0x3f4e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "addqb", 7,16, 0x0c, "2I1q", 1, "", DEF_MODEC,DEF_MODEL }, - { "addqw", 7,16, 0x0d, "2I1q", 2, "", DEF_MODEC,DEF_MODEL }, - { "addqd", 7,16, 0x0f, "2I1q", 4, "", DEF_MODEC,DEF_MODEL }, - { "addr", 6,16, 0x27, "1A2I", 4, "", 21,21 }, - { "adjspb", 11,16, 0x057c, "1B", 1, "", DEF_MODEC,DEF_MODEL }, - { "adjspw", 11,16, 0x057d, "1W", 2, "", DEF_MODEC,DEF_MODEL }, - { "adjspd", 11,16, 0x057f, "1D", 4, "", DEF_MODEC,DEF_MODEL }, - { "andb", 6,16, 0x28, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "andw", 6,16, 0x29, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "andd", 6,16, 0x2b, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "ashb", 14,24, 0x044e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "ashw", 14,24, 0x054e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "ashd", 14,24, 0x074e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "beq", 8,8, 0x0a, "1p", 0, "", 21,21 }, - { "bne", 8,8, 0x1a, "1p", 0, "", 21,21 }, - { "bcs", 8,8, 0x2a, "1p", 0, "", 21,21 }, - { "bcc", 8,8, 0x3a, "1p", 0, "", 21,21 }, - { "bhi", 8,8, 0x4a, "1p", 0, "", 21,21 }, - { "bls", 8,8, 0x5a, "1p", 0, "", 21,21 }, - { "bgt", 8,8, 0x6a, "1p", 0, "", 21,21 }, - { "ble", 8,8, 0x7a, "1p", 0, "", 21,21 }, - { "bfs", 8,8, 0x8a, "1p", 0, "", 21,21 }, - { "bfc", 8,8, 0x9a, "1p", 0, "", 21,21 }, - { "blo", 8,8, 0xaa, "1p", 0, "", 21,21 }, - { "bhs", 8,8, 0xba, "1p", 0, "", 21,21 }, - { "blt", 8,8, 0xca, "1p", 0, "", 21,21 }, - { "bge", 8,8, 0xda, "1p", 0, "", 21,21 }, - { "but", 8,8, 0xea, "1p", 0, "", 21,21 }, - { "buf", 8,8, 0xfa, "1p", 0, "", 21,21 }, - { "bicb", 6,16, 0x08, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "bicw", 6,16, 0x09, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "bicd", 6,16, 0x0b, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "bicpsrb", 11,16, 0x17c, "1B", 1, "", DEF_MODEC,DEF_MODEL }, - { "bicpsrw", 11,16, 0x17d, "1W", 2, "", DEF_MODEC,DEF_MODEL }, - { "bispsrb", 11,16, 0x37c, "1B", 1, "", DEF_MODEC,DEF_MODEL }, - { "bispsrw", 11,16, 0x37d, "1W", 2, "", DEF_MODEC,DEF_MODEL }, - { "bpt", 8,8, 0xf2, "", 0, "", DEF_MODEC,DEF_MODEL }, - { "br", 8,8, 0xea, "1p", 0, "", 21,21 }, -#ifdef SEQUENT_COMPATABILITY - { "bsr", 8,8, 0x02, "1H", 0, "", 21,21 }, -#else - { "bsr", 8,8, 0x02, "1p", 0, "", 21,21 }, -#endif - { "caseb", 11,16, 0x77c, "1B", 1, "", DEF_MODEC,DEF_MODEL }, - { "casew", 11,16, 0x77d, "1W", 2, "", DEF_MODEC,DEF_MODEL }, - { "cased", 11,16, 0x77f, "1D", 4, "", DEF_MODEC,DEF_MODEL }, - { "cbitb", 14,24, 0x084e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "cbitw", 14,24, 0x094e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "cbitd", 14,24, 0x0b4e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "cbitib", 14,24, 0x0c4e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "cbitiw", 14,24, 0x0d4e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "cbitid", 14,24, 0x0f4e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "checkb", 11,24, 0x0ee, "2A3B1r", 1, "", DEF_MODEC,DEF_MODEL }, - { "checkw", 11,24, 0x1ee, "2A3W1r", 2, "", DEF_MODEC,DEF_MODEL }, - { "checkd", 11,24, 0x3ee, "2A3D1r", 4, "", DEF_MODEC,DEF_MODEL }, - { "cinv", 14,24, 0x271e, "2D1C", 4, "", DEF_MODEC,DEF_MODEL }, - { "cmpf", 14,24, 0x09be, "1F2F", 4, "", DEF_MODEC,DEF_MODEL }, - { "cmpl", 14,24, 0x08be, "1L2L", 8, "", DEF_MODEC,DEF_MODEL }, - { "cmpb", 6,16, 0x04, "1B2B", 1, "", DEF_MODEC,DEF_MODEL }, - { "cmpw", 6,16, 0x05, "1W2W", 2, "", DEF_MODEC,DEF_MODEL }, - { "cmpd", 6,16, 0x07, "1D2D", 4, "", DEF_MODEC,DEF_MODEL }, - { "cmpmb", 14,24, 0x04ce, "1A2A3b", 1, "", DEF_MODEC,DEF_MODEL }, - { "cmpmw", 14,24, 0x05ce, "1A2A3b", 2, "", DEF_MODEC,DEF_MODEL }, - { "cmpmd", 14,24, 0x07ce, "1A2A3b", 4, "", DEF_MODEC,DEF_MODEL }, - { "cmpqb", 7,16, 0x1c, "2B1q", 1, "", DEF_MODEC,DEF_MODEL }, - { "cmpqw", 7,16, 0x1d, "2W1q", 2, "", DEF_MODEC,DEF_MODEL }, - { "cmpqd", 7,16, 0x1f, "2D1q", 4, "", DEF_MODEC,DEF_MODEL }, - { "cmpsb", 16,24, 0x040e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "cmpsw", 16,24, 0x050e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "cmpsd", 16,24, 0x070e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "cmpst", 16,24, 0x840e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "comb", 14,24, 0x344e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "comw", 14,24, 0x354e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "comd", 14,24, 0x374e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "cvtp", 11,24, 0x036e, "2A3D1r", 4, "", DEF_MODEC,DEF_MODEL }, - { "cxp", 8,8, 0x22, "1p", 0, "", 21,21 }, - { "cxpd", 11,16, 0x07f, "1A", 4, "", DEF_MODEC,DEF_MODEL }, - { "deib", 14,24, 0x2cce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "deiw", 14,24, 0x2dce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "deid", 14,24, 0x2fce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "dia", 8,8, 0xc2, "", 1, "", DEF_MODEC,DEF_MODEL }, - { "divf", 14,24, 0x21be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "divl", 14,24, 0x20be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL }, - { "divb", 14,24, 0x3cce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "divw", 14,24, 0x3dce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "divd", 14,24, 0x3fce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "enter", 8,8, 0x82, "1U2d", 0, "", DEF_MODEC,DEF_MODEL }, - { "exit", 8,8, 0x92, "1u", 0, "", DEF_MODEC,DEF_MODEL }, - { "extb", 11,24, 0x02e, "2I3B1r4d", 1, "", DEF_MODEC,DEF_MODEL }, - { "extw", 11,24, 0x12e, "2I3W1r4d", 2, "", DEF_MODEC,DEF_MODEL }, - { "extd", 11,24, 0x32e, "2I3D1r4d", 4, "", DEF_MODEC,DEF_MODEL }, - { "extsb", 14,24, 0x0cce, "1I2I4G3g", 1, "", DEF_MODEC,DEF_MODEL }, - { "extsw", 14,24, 0x0dce, "1I2I4G3g", 2, "", DEF_MODEC,DEF_MODEL }, - { "extsd", 14,24, 0x0fce, "1I2I4G3g", 4, "", DEF_MODEC,DEF_MODEL }, - { "ffsb", 14,24, 0x046e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "ffsw", 14,24, 0x056e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "ffsd", 14,24, 0x076e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "flag", 8,8, 0xd2, "", 0, "", DEF_MODEC,DEF_MODEL }, - { "floorfb", 14,24, 0x3c3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "floorfw", 14,24, 0x3d3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "floorfd", 14,24, 0x3f3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "floorlb", 14,24, 0x383e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL }, - { "floorlw", 14,24, 0x393e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL }, - { "floorld", 14,24, 0x3b3e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL }, - { "ibitb", 14,24, 0x384e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "ibitw", 14,24, 0x394e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "ibitd", 14,24, 0x3b4e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "indexb", 11,24, 0x42e, "2B3B1r", 1, "", DEF_MODEC,DEF_MODEL }, - { "indexw", 11,24, 0x52e, "2W3W1r", 2, "", DEF_MODEC,DEF_MODEL }, - { "indexd", 11,24, 0x72e, "2D3D1r", 4, "", DEF_MODEC,DEF_MODEL }, - { "insb", 11,24, 0x0ae, "2B3I1r4d", 1, "", DEF_MODEC,DEF_MODEL }, - { "insw", 11,24, 0x1ae, "2W3I1r4d", 2, "", DEF_MODEC,DEF_MODEL }, - { "insd", 11,24, 0x3ae, "2D3I1r4d", 4, "", DEF_MODEC,DEF_MODEL }, - { "inssb", 14,24, 0x08ce, "1B2I4G3g", 1, "", DEF_MODEC,DEF_MODEL }, - { "inssw", 14,24, 0x09ce, "1W2I4G3g", 2, "", DEF_MODEC,DEF_MODEL }, - { "inssd", 14,24, 0x0bce, "1D2I4G3g", 4, "", DEF_MODEC,DEF_MODEL }, - { "jsr", 11,16, 0x67f, "1A", 4, "", 21,21 }, - { "jump", 11,16, 0x27f, "1A", 4, "", 21,21 }, - { "lfsr", 19,24, 0x00f3e,"1D", 4, "", DEF_MODEC,DEF_MODEL }, - { "lmr", 15,24, 0x0b1e, "2D1M", 4, "", DEF_MODEC,DEF_MODEL }, - { "lprb", 7,16, 0x6c, "2B1P", 1, "", DEF_MODEC,DEF_MODEL }, - { "lprw", 7,16, 0x6d, "2W1P", 2, "", DEF_MODEC,DEF_MODEL }, - { "lprd", 7,16, 0x6f, "2D1P", 4, "", DEF_MODEC,DEF_MODEL }, - { "lshb", 14,24, 0x144e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "lshw", 14,24, 0x154e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "lshd", 14,24, 0x174e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "meib", 14,24, 0x24ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "meiw", 14,24, 0x25ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "meid", 14,24, 0x27ce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "modb", 14,24, 0x38ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "modw", 14,24, 0x39ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "modd", 14,24, 0x3bce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "movf", 14,24, 0x05be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "movl", 14,24, 0x04be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL }, - { "movb", 6,16, 0x14, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "movw", 6,16, 0x15, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "movd", 6,16, 0x17, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "movbf", 14,24, 0x043e, "1B2Z", 1, "", DEF_MODEC,DEF_MODEL }, - { "movwf", 14,24, 0x053e, "1W2Z", 2, "", DEF_MODEC,DEF_MODEL }, - { "movdf", 14,24, 0x073e, "1D2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "movbl", 14,24, 0x003e, "1B2Z", 1, "", DEF_MODEC,DEF_MODEL }, - { "movwl", 14,24, 0x013e, "1W2Z", 2, "", DEF_MODEC,DEF_MODEL }, - { "movdl", 14,24, 0x033e, "1D2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "movfl", 14,24, 0x1b3e, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "movlf", 14,24, 0x163e, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL }, - { "movmb", 14,24, 0x00ce, "1A2A3b", 1, "", DEF_MODEC,DEF_MODEL }, - { "movmw", 14,24, 0x01ce, "1A2A3b", 2, "", DEF_MODEC,DEF_MODEL }, - { "movmd", 14,24, 0x03ce, "1A2A3b", 4, "", DEF_MODEC,DEF_MODEL }, - { "movqb", 7,16, 0x5c, "2I1q", 1, "", DEF_MODEC,DEF_MODEL }, - { "movqw", 7,16, 0x5d, "2I1q", 2, "", DEF_MODEC,DEF_MODEL }, - { "movqd", 7,16, 0x5f, "2I1q", 4, "", DEF_MODEC,DEF_MODEL }, - { "movsb", 16,24, 0x000e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "movsw", 16,24, 0x010e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "movsd", 16,24, 0x030e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "movst", 16,24, 0x800e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "movsub", 14,24, 0x0cae, "1A2A", 1, "", DEF_MODEC,DEF_MODEL }, - { "movsuw", 14,24, 0x0dae, "1A2A", 2, "", DEF_MODEC,DEF_MODEL }, - { "movsud", 14,24, 0x0fae, "1A2A", 4, "", DEF_MODEC,DEF_MODEL }, - { "movusb", 14,24, 0x1cae, "1A2A", 1, "", DEF_MODEC,DEF_MODEL }, - { "movusw", 14,24, 0x1dae, "1A2A", 2, "", DEF_MODEC,DEF_MODEL }, - { "movusd", 14,24, 0x1fae, "1A2A", 4, "", DEF_MODEC,DEF_MODEL }, - { "movxbd", 14,24, 0x1cce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "movxwd", 14,24, 0x1dce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "movxbw", 14,24, 0x10ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "movzbd", 14,24, 0x18ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "movzwd", 14,24, 0x19ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "movzbw", 14,24, 0x14ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "mulf", 14,24, 0x31be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "mull", 14,24, 0x30be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL }, - { "mulb", 14,24, 0x20ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "mulw", 14,24, 0x21ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "muld", 14,24, 0x23ce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "negf", 14,24, 0x15be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "negl", 14,24, 0x14be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL }, - { "negb", 14,24, 0x204e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "negw", 14,24, 0x214e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "negd", 14,24, 0x234e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "nop", 8,8, 0xa2, "", 0, "", DEF_MODEC,DEF_MODEL }, - { "notb", 14,24, 0x244e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "notw", 14,24, 0x254e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "notd", 14,24, 0x274e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "orb", 6,16, 0x18, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "orw", 6,16, 0x19, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "ord", 6,16, 0x1b, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "quob", 14,24, 0x30ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "quow", 14,24, 0x31ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "quod", 14,24, 0x33ce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "rdval", 19,24, 0x0031e,"1A", 4, "", DEF_MODEC,DEF_MODEL }, - { "remb", 14,24, 0x34ce, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "remw", 14,24, 0x35ce, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "remd", 14,24, 0x37ce, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "restore", 8,8, 0x72, "1u", 0, "", DEF_MODEC,DEF_MODEL }, - { "ret", 8,8, 0x12, "1d", 0, "", DEF_MODEC,DEF_MODEL }, - { "reti", 8,8, 0x52, "", 0, "", DEF_MODEC,DEF_MODEL }, - { "rett", 8,8, 0x42, "1d", 0, "", DEF_MODEC,DEF_MODEL }, - { "rotb", 14,24, 0x004e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "rotw", 14,24, 0x014e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "rotd", 14,24, 0x034e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "roundfb", 14,24, 0x243e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "roundfw", 14,24, 0x253e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "roundfd", 14,24, 0x273e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "roundlb", 14,24, 0x203e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL }, - { "roundlw", 14,24, 0x213e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL }, - { "roundld", 14,24, 0x233e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL }, - { "rxp", 8,8, 0x32, "1d", 0, "", DEF_MODEC,DEF_MODEL }, - { "seqb", 11,16, 0x3c, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "seqw", 11,16, 0x3d, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "seqd", 11,16, 0x3f, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "sneb", 11,16, 0xbc, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "snew", 11,16, 0xbd, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "sned", 11,16, 0xbf, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "scsb", 11,16, 0x13c, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "scsw", 11,16, 0x13d, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "scsd", 11,16, 0x13f, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "sccb", 11,16, 0x1bc, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "sccw", 11,16, 0x1bd, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "sccd", 11,16, 0x1bf, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "shib", 11,16, 0x23c, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "shiw", 11,16, 0x23d, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "shid", 11,16, 0x23f, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "slsb", 11,16, 0x2bc, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "slsw", 11,16, 0x2bd, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "slsd", 11,16, 0x2bf, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "sgtb", 11,16, 0x33c, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "sgtw", 11,16, 0x33d, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "sgtd", 11,16, 0x33f, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "sleb", 11,16, 0x3bc, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "slew", 11,16, 0x3bd, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "sled", 11,16, 0x3bf, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "sfsb", 11,16, 0x43c, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "sfsw", 11,16, 0x43d, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "sfsd", 11,16, 0x43f, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "sfcb", 11,16, 0x4bc, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "sfcw", 11,16, 0x4bd, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "sfcd", 11,16, 0x4bf, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "slob", 11,16, 0x53c, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "slow", 11,16, 0x53d, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "slod", 11,16, 0x53f, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "shsb", 11,16, 0x5bc, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "shsw", 11,16, 0x5bd, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "shsd", 11,16, 0x5bf, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "sltb", 11,16, 0x63c, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "sltw", 11,16, 0x63d, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "sltd", 11,16, 0x63f, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "sgeb", 11,16, 0x6bc, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "sgew", 11,16, 0x6bd, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "sged", 11,16, 0x6bf, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "sutb", 11,16, 0x73c, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "sutw", 11,16, 0x73d, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "sutd", 11,16, 0x73f, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "sufb", 11,16, 0x7bc, "1B", 0, "", DEF_MODEC,DEF_MODEL }, - { "sufw", 11,16, 0x7bd, "1W", 0, "", DEF_MODEC,DEF_MODEL }, - { "sufd", 11,16, 0x7bf, "1D", 0, "", DEF_MODEC,DEF_MODEL }, - { "save", 8,8, 0x62, "1U", 0, "", DEF_MODEC,DEF_MODEL }, - { "sbitb", 14,24, 0x184e, "1B2A", 1, "", DEF_MODEC,DEF_MODEL }, - { "sbitw", 14,24, 0x194e, "1W2A", 2, "", DEF_MODEC,DEF_MODEL }, - { "sbitd", 14,24, 0x1b4e, "1D2A", 4, "", DEF_MODEC,DEF_MODEL }, - { "sbitib", 14,24, 0x1c4e, "1B2A", 1, "", DEF_MODEC,DEF_MODEL }, - { "sbitiw", 14,24, 0x1d4e, "1W2A", 2, "", DEF_MODEC,DEF_MODEL }, - { "sbitid", 14,24, 0x1f4e, "1D2A", 4, "", DEF_MODEC,DEF_MODEL }, - { "setcfg", 15,24, 0x0b0e, "1O", 0, "", DEF_MODEC,DEF_MODEL }, - { "sfsr", 14,24, 0x373e, "1f", 0, "", DEF_MODEC,DEF_MODEL }, - { "skpsb", 16,24, 0x0c0e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "skpsw", 16,24, 0x0d0e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "skpsd", 16,24, 0x0f0e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "skpst", 16,24, 0x8c0e, "1S", 0, "[]", DEF_MODEC,DEF_MODEL }, - { "smr", 15,24, 0x0f1e, "2I1M", 4, "", DEF_MODEC,DEF_MODEL }, - { "sprb", 7,16, 0x2c, "2I1P", 1, "", DEF_MODEC,DEF_MODEL }, - { "sprw", 7,16, 0x2d, "2I1P", 2, "", DEF_MODEC,DEF_MODEL }, - { "sprd", 7,16, 0x2f, "2I1P", 4, "", DEF_MODEC,DEF_MODEL }, - { "subf", 14,24, 0x11be, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "subl", 14,24, 0x10be, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL }, - { "subb", 6,16, 0x20, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "subw", 6,16, 0x21, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "subd", 6,16, 0x23, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "subcb", 6,16, 0x30, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "subcw", 6,16, 0x31, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "subcd", 6,16, 0x33, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "subpb", 14,24, 0x2c4e, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "subpw", 14,24, 0x2d4e, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "subpd", 14,24, 0x2f4e, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, -#ifdef NS32K_SVC_IMMED_OPERANDS - { "svc", 8,8, 0xe2, "2i1i", 1, "", DEF_MODEC,DEF_MODEL }, /* not really, but some unix uses it */ -#else - { "svc", 8,8, 0xe2, "", 0, "", DEF_MODEC,DEF_MODEL }, -#endif - { "tbitb", 6,16, 0x34, "1B2A", 1, "", DEF_MODEC,DEF_MODEL }, - { "tbitw", 6,16, 0x35, "1W2A", 2, "", DEF_MODEC,DEF_MODEL }, - { "tbitd", 6,16, 0x37, "1D2A", 4, "", DEF_MODEC,DEF_MODEL }, - { "truncfb", 14,24, 0x2c3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "truncfw", 14,24, 0x2d3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "truncfd", 14,24, 0x2f3e, "1F2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "trunclb", 14,24, 0x283e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL }, - { "trunclw", 14,24, 0x293e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL }, - { "truncld", 14,24, 0x2b3e, "1L2I", 8, "", DEF_MODEC,DEF_MODEL }, - { "wait", 8,8, 0xb2, "", 0, "", DEF_MODEC,DEF_MODEL }, - { "wrval", 19,24, 0x0071e,"1A", 0, "", DEF_MODEC,DEF_MODEL }, - { "xorb", 6,16, 0x38, "1B2I", 1, "", DEF_MODEC,DEF_MODEL }, - { "xorw", 6,16, 0x39, "1W2I", 2, "", DEF_MODEC,DEF_MODEL }, - { "xord", 6,16, 0x3b, "1D2I", 4, "", DEF_MODEC,DEF_MODEL }, - { "dotf", 14,24, 0x0dfe, "1F2F", 4, "", DEF_MODEC,DEF_MODEL }, - { "dotl", 14,24, 0x0cfe, "1L2L", 8, "", DEF_MODEC,DEF_MODEL }, - { "logbf", 14,24, 0x15fe, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "logbl", 14,24, 0x14fe, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL }, - { "polyf", 14,24, 0x09fe, "1F2F", 4, "", DEF_MODEC,DEF_MODEL }, - { "polyl", 14,24, 0x08fe, "1L2L", 8, "", DEF_MODEC,DEF_MODEL }, - { "scalbf", 14,24, 0x11fe, "1F2Z", 4, "", DEF_MODEC,DEF_MODEL }, - { "scalbl", 14,24, 0x10fe, "1L2Z", 8, "", DEF_MODEC,DEF_MODEL }, -}; - -#define MAX_ARGS 4 -#define ARG_LEN 50 - diff --git a/include/opcode/or32.h b/include/opcode/or32.h deleted file mode 100644 index 3412b22b65c..00000000000 --- a/include/opcode/or32.h +++ /dev/null @@ -1,180 +0,0 @@ -/* Table of opcodes for the OpenRISC 1000 ISA. - Copyright 2002, 2003 Free Software Foundation, Inc. - Contributed by Damjan Lampret (lampret@opencores.org). - - This file is part of or1k_gen_isa, or1ksim, GDB and GAS. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* We treat all letters the same in encode/decode routines so - we need to assign some characteristics to them like signess etc. */ - -#ifndef OR32_H_ISA -#define OR32_H_ISA - -#define NUM_UNSIGNED (0) -#define NUM_SIGNED (1) - -#define MAX_GPRS 32 -#define PAGE_SIZE 4096 -#undef __HALF_WORD_INSN__ - -#define OPERAND_DELIM (',') - -#define OR32_IF_DELAY (1) -#define OR32_W_FLAG (2) -#define OR32_R_FLAG (4) - -struct or32_letter -{ - char letter; - int sign; - /* int reloc; relocation per letter ?? */ -}; - -/* Main instruction specification array. */ -struct or32_opcode -{ - /* Name of the instruction. */ - char *name; - - /* A string of characters which describe the operands. - Valid characters are: - ,() Itself. Characters appears in the assembly code. - rA Register operand. - rB Register operand. - rD Register operand. - I An immediate operand, range -32768 to 32767. - J An immediate operand, range . (unused) - K An immediate operand, range 0 to 65535. - L An immediate operand, range 0 to 63. - M An immediate operand, range . (unused) - N An immediate operand, range -33554432 to 33554431. - O An immediate operand, range . (unused). */ - char *args; - - /* Opcode and operand encoding. */ - char *encoding; - void (*exec) (void); - unsigned int flags; -}; - -#define OPTYPE_LAST (0x80000000) -#define OPTYPE_OP (0x40000000) -#define OPTYPE_REG (0x20000000) -#define OPTYPE_SIG (0x10000000) -#define OPTYPE_DIS (0x08000000) -#define OPTYPE_DST (0x04000000) -#define OPTYPE_SBIT (0x00001F00) -#define OPTYPE_SHR (0x0000001F) -#define OPTYPE_SBIT_SHR (8) - -/* MM: Data how to decode operands. */ -extern struct insn_op_struct -{ - unsigned long type; - unsigned long data; -} **op_start; - -#ifdef HAS_EXECUTION -extern void l_invalid (void); -extern void l_sfne (void); -extern void l_bf (void); -extern void l_add (void); -extern void l_sw (void); -extern void l_sb (void); -extern void l_sh (void); -extern void l_lwz (void); -extern void l_lbs (void); -extern void l_lbz (void); -extern void l_lhs (void); -extern void l_lhz (void); -extern void l_movhi (void); -extern void l_and (void); -extern void l_or (void); -extern void l_xor (void); -extern void l_sub (void); -extern void l_mul (void); -extern void l_div (void); -extern void l_divu (void); -extern void l_sll (void); -extern void l_sra (void); -extern void l_srl (void); -extern void l_j (void); -extern void l_jal (void); -extern void l_jalr (void); -extern void l_jr (void); -extern void l_rfe (void); -extern void l_nop (void); -extern void l_bnf (void); -extern void l_sfeq (void); -extern void l_sfgts (void); -extern void l_sfges (void); -extern void l_sflts (void); -extern void l_sfles (void); -extern void l_sfgtu (void); -extern void l_sfgeu (void); -extern void l_sfltu (void); -extern void l_sfleu (void); -extern void l_mtspr (void); -extern void l_mfspr (void); -extern void l_sys (void); -extern void l_trap (void); /* CZ 21/06/01. */ -extern void l_macrc (void); -extern void l_mac (void); -extern void l_msb (void); -extern void l_invalid (void); -extern void l_cust1 (void); -extern void l_cust2 (void); -extern void l_cust3 (void); -extern void l_cust4 (void); -#endif -extern void l_none (void); - -extern const struct or32_letter or32_letters[]; - -extern const struct or32_opcode or32_opcodes[]; - -extern const unsigned int or32_num_opcodes; - -/* Calculates instruction length in bytes. Always 4 for OR32. */ -extern int insn_len (int); - -/* Is individual insn's operand signed or unsigned? */ -extern int letter_signed (char); - -/* Number of letters in the individual lettered operand. */ -extern int letter_range (char); - -/* MM: Returns index of given instruction name. */ -extern int insn_index (char *); - -/* MM: Returns instruction name from index. */ -extern const char *insn_name (int); - -/* MM: Constructs new FSM, based on or32_opcodes. */ -extern void build_automata (void); - -/* MM: Destructs FSM. */ -extern void destruct_automata (void); - -/* MM: Decodes instruction using FSM. Call build_automata first. */ -extern int insn_decode (unsigned int); - -/* Disassemble one instruction from insn to disassemble. - Return the size of the instruction. */ -int disassemble_insn (unsigned long); - -#endif diff --git a/include/opcode/pdp11.h b/include/opcode/pdp11.h deleted file mode 100644 index 0f0256ba21b..00000000000 --- a/include/opcode/pdp11.h +++ /dev/null @@ -1,85 +0,0 @@ -/* PDP-11 opcde list. - Copyright 2001, 2002 Free Software Foundation, Inc. - -This file is part of GDB and GAS. - -GDB and GAS are 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 1, or (at your option) -any later version. - -GDB and GAS are 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 GDB or GAS; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* - * PDP-11 opcode types. - */ - -#define PDP11_OPCODE_NO_OPS 0 -#define PDP11_OPCODE_REG 1 /* register */ -#define PDP11_OPCODE_OP 2 /* generic operand */ -#define PDP11_OPCODE_REG_OP 3 /* register and generic operand */ -#define PDP11_OPCODE_REG_OP_REV 4 /* register and generic operand, - reversed syntax */ -#define PDP11_OPCODE_AC_FOP 5 /* fpu accumulator and generic float - operand */ -#define PDP11_OPCODE_OP_OP 6 /* two generic operands */ -#define PDP11_OPCODE_DISPL 7 /* pc-relative displacement */ -#define PDP11_OPCODE_REG_DISPL 8 /* redister and pc-relative - displacement */ -#define PDP11_OPCODE_IMM8 9 /* 8-bit immediate */ -#define PDP11_OPCODE_IMM6 10 /* 6-bit immediate */ -#define PDP11_OPCODE_IMM3 11 /* 3-bit immediate */ -#define PDP11_OPCODE_ILLEGAL 12 /* illegal instruction */ -#define PDP11_OPCODE_FOP_AC 13 /* generic float argument, then fpu - accumulator */ -#define PDP11_OPCODE_FOP 14 /* generic float operand */ -#define PDP11_OPCODE_AC_OP 15 /* fpu accumulator and generic int - operand */ -#define PDP11_OPCODE_OP_AC 16 /* generic int argument, then fpu - accumulator */ - -/* - * PDP-11 instruction set extensions. - * - * Please keep the numbers low, as they are used as indices into - * an array. - */ - -#define PDP11_NONE 0 /* not in instruction set */ -#define PDP11_BASIC 1 /* basic instruction set (11/20 etc) */ -#define PDP11_CSM 2 /* commercial instruction set */ -#define PDP11_CIS 3 /* commercial instruction set */ -#define PDP11_EIS 4 /* extended instruction set (11/45 etc) */ -#define PDP11_FIS 5 /* KEV11 floating-point instructions */ -#define PDP11_FPP 6 /* FP-11 floating-point instructions */ -#define PDP11_LEIS 7 /* limited extended instruction set - (11/40 etc) */ -#define PDP11_MFPT 8 /* move from processor type */ -#define PDP11_MPROC 9 /* multiprocessor instructions: tstset, - wrtlck */ -#define PDP11_MXPS 10 /* move from/to processor status */ -#define PDP11_SPL 11 /* set priority level */ -#define PDP11_UCODE 12 /* microcode instructions: ldub, med, xfc */ -#define PDP11_EXT_NUM 13 /* total number of extension types */ - -struct pdp11_opcode -{ - const char *name; - int opcode; - int mask; - int type; - int extension; -}; - -extern const struct pdp11_opcode pdp11_opcodes[]; -extern const struct pdp11_opcode pdp11_aliases[]; -extern const int pdp11_num_opcodes, pdp11_num_aliases; - -/* end of pdp11.h */ diff --git a/include/opcode/pj.h b/include/opcode/pj.h deleted file mode 100644 index 30201d68509..00000000000 --- a/include/opcode/pj.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Definitions for decoding the picoJava opcode table. - Copyright 1999, 2002, 2003 Free Software Foundation, Inc. - Contributed by Steve Chamberlain of Transmeta (sac@pobox.com). - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - - -/* Names used to describe the type of instruction arguments, used by - the assembler and disassembler. Attributes are encoded in various fields. */ - -/* reloc size pcrel uns */ -#define O_N 0 -#define O_16 (1<<4 | 2 | (0<<6) | (0<<3)) -#define O_U16 (1<<4 | 2 | (0<<6) | (1<<3)) -#define O_R16 (2<<4 | 2 | (1<<6) | (0<<3)) -#define O_8 (3<<4 | 1 | (0<<6) | (0<<3)) -#define O_U8 (3<<4 | 1 | (0<<6) | (1<<3)) -#define O_R8 (4<<4 | 1 | (0<<6) | (0<<3)) -#define O_R32 (5<<4 | 4 | (1<<6) | (0<<3)) -#define O_32 (6<<4 | 4 | (0<<6) | (0<<3)) - -#define ASIZE(x) ((x) & 0x7) -#define PCREL(x) (!!((x) & (1<<6))) -#define UNS(x) (!!((x) & (1<<3))) - - -typedef struct pj_opc_info_t -{ - short opcode; - short opcode_next; - char len; - unsigned char arg[2]; - union { - const char *name; - void (*func) (struct pj_opc_info_t *, char *); - } u; -} pj_opc_info_t; diff --git a/include/opcode/pn.h b/include/opcode/pn.h deleted file mode 100644 index f8d474f60a5..00000000000 --- a/include/opcode/pn.h +++ /dev/null @@ -1,282 +0,0 @@ -/* Print GOULD PN (PowerNode) instructions for GDB, the GNU debugger. - Copyright 1986, 1987, 1989, 1991 Free Software Foundation, Inc. - -This file is part of GDB. - -GDB 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 1, or (at your option) -any later version. - -GDB 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 GDB; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -struct gld_opcode -{ - char *name; - unsigned long opcode; - unsigned long mask; - char *args; - int length; -}; - -/* We store four bytes of opcode for all opcodes because that - is the most any of them need. The actual length of an instruction - is always at least 2 bytes, and at most four. The length of the - instruction is based on the opcode. - - The mask component is a mask saying which bits must match - particular opcode in order for an instruction to be an instance - of that opcode. - - The args component is a string containing characters - that are used to format the arguments to the instruction. */ - -/* Kinds of operands: - r Register in first field - R Register in second field - b Base register in first field - B Base register in second field - v Vector register in first field - V Vector register in first field - A Optional address register (base register) - X Optional index register - I Immediate data (16bits signed) - O Offset field (16bits signed) - h Offset field (15bits signed) - d Offset field (14bits signed) - S Shift count field - - any other characters are printed as is... -*/ - -/* The assembler requires that this array be sorted as follows: - all instances of the same mnemonic must be consecutive. - All instances of the same mnemonic with the same number of operands - must be consecutive. - */ -struct gld_opcode gld_opcodes[] = -{ -{ "abm", 0xa0080000, 0xfc080000, "f,xOA,X", 4 }, -{ "abr", 0x18080000, 0xfc0c0000, "r,f", 2 }, -{ "aci", 0xfc770000, 0xfc7f8000, "r,I", 4 }, -{ "adfd", 0xe0080002, 0xfc080002, "r,xOA,X", 4 }, -{ "adfw", 0xe0080000, 0xfc080000, "r,xOA,X", 4 }, -{ "adi", 0xc8010000, 0xfc7f0000, "r,I", 4 }, -{ "admb", 0xb8080000, 0xfc080000, "r,xOA,X", 4 }, -{ "admd", 0xb8000002, 0xfc080002, "r,xOA,X", 4 }, -{ "admh", 0xb8000001, 0xfc080001, "r,xOA,X", 4 }, -{ "admw", 0xb8000000, 0xfc080000, "r,xOA,X", 4 }, -{ "adr", 0x38000000, 0xfc0f0000, "r,R", 2 }, -{ "adrfd", 0x38090000, 0xfc0f0000, "r,R", 2 }, -{ "adrfw", 0x38010000, 0xfc0f0000, "r,R", 2 }, -{ "adrm", 0x38080000, 0xfc0f0000, "r,R", 2 }, -{ "ai", 0xfc030000, 0xfc07ffff, "I", 4 }, -{ "anmb", 0x84080000, 0xfc080000, "r,xOA,X", 4 }, -{ "anmd", 0x84000002, 0xfc080002, "r,xOA,X", 4 }, -{ "anmh", 0x84000001, 0xfc080001, "r,xOA,X", 4 }, -{ "anmw", 0x84000000, 0xfc080000, "r,xOA,X", 4 }, -{ "anr", 0x04000000, 0xfc0f0000, "r,R", 2 }, -{ "armb", 0xe8080000, 0xfc080000, "r,xOA,X", 4 }, -{ "armd", 0xe8000002, 0xfc080002, "r,xOA,X", 4 }, -{ "armh", 0xe8000001, 0xfc080001, "r,xOA,X", 4 }, -{ "armw", 0xe8000000, 0xfc080000, "r,xOA,X", 4 }, -{ "bcf", 0xf0000000, 0xfc080000, "I,xOA,X", 4 }, -{ "bct", 0xec000000, 0xfc080000, "I,xOA,X", 4 }, -{ "bei", 0x00060000, 0xffff0000, "", 2 }, -{ "bft", 0xf0000000, 0xff880000, "xOA,X", 4 }, -{ "bib", 0xf4000000, 0xfc780000, "r,xOA", 4 }, -{ "bid", 0xf4600000, 0xfc780000, "r,xOA", 4 }, -{ "bih", 0xf4200000, 0xfc780000, "r,xOA", 4 }, -{ "biw", 0xf4400000, 0xfc780000, "r,xOA", 4 }, -{ "bl", 0xf8800000, 0xff880000, "xOA,X", 4 }, -{ "bsub", 0x5c080000, 0xff8f0000, "", 2 }, -{ "bsubm", 0x28080000, 0xfc080000, "", 4 }, -{ "bu", 0xec000000, 0xff880000, "xOA,X", 4 }, -{ "call", 0x28080000, 0xfc0f0000, "", 2 }, -{ "callm", 0x5c080000, 0xff880000, "", 4 }, -{ "camb", 0x90080000, 0xfc080000, "r,xOA,X", 4 }, -{ "camd", 0x90000002, 0xfc080002, "r,xOA,X", 4 }, -{ "camh", 0x90000001, 0xfc080001, "r,xOA,X", 4 }, -{ "camw", 0x90000000, 0xfc080000, "r.xOA,X", 4 }, -{ "car", 0x10000000, 0xfc0f0000, "r,R", 2 }, -{ "cd", 0xfc060000, 0xfc070000, "r,f", 4 }, -{ "cea", 0x000f0000, 0xffff0000, "", 2 }, -{ "ci", 0xc8050000, 0xfc7f0000, "r,I", 4 }, -{ "cmc", 0x040a0000, 0xfc7f0000, "r", 2 }, -{ "cmmb", 0x94080000, 0xfc080000, "r,xOA,X", 4 }, -{ "cmmd", 0x94000002, 0xfc080002, "r,xOA,X", 4 }, -{ "cmmh", 0x94000001, 0xfc080001, "r,xOA,X", 4 }, -{ "cmmw", 0x94000000, 0xfc080000, "r,xOA,X", 4 }, -{ "cmr", 0x14000000, 0xfc0f0000, "r,R", 2 }, -{ "daci", 0xfc7f0000, 0xfc7f8000, "r,I", 4 }, -{ "dae", 0x000e0000, 0xffff0000, "", 2 }, -{ "dai", 0xfc040000, 0xfc07ffff, "I", 4 }, -{ "dci", 0xfc6f0000, 0xfc7f8000, "r,I", 4 }, -{ "di", 0xfc010000, 0xfc07ffff, "I", 4 }, -{ "dvfd", 0xe4000002, 0xfc080002, "r,xOA,X", 4 }, -{ "dvfw", 0xe4000000, 0xfc080000, "r,xOA,X", 4 }, -{ "dvi", 0xc8040000, 0xfc7f0000, "r,I", 4 }, -{ "dvmb", 0xc4080000, 0xfc080000, "r,xOA,X", 4 }, -{ "dvmh", 0xc4000001, 0xfc080001, "r,xOA,X", 4 }, -{ "dvmw", 0xc4000000, 0xfc080000, "r,xOA,X", 4 }, -{ "dvr", 0x380a0000, 0xfc0f0000, "r,R", 2 }, -{ "dvrfd", 0x380c0000, 0xfc0f0000, "r,R", 4 }, -{ "dvrfw", 0x38040000, 0xfc0f0000, "r,xOA,X", 4 }, -{ "eae", 0x00080000, 0xffff0000, "", 2 }, -{ "eci", 0xfc670000, 0xfc7f8080, "r,I", 4 }, -{ "ecwcs", 0xfc4f0000, 0xfc7f8000, "", 4 }, -{ "ei", 0xfc000000, 0xfc07ffff, "I", 4 }, -{ "eomb", 0x8c080000, 0xfc080000, "r,xOA,X", 4 }, -{ "eomd", 0x8c000002, 0xfc080002, "r,xOA,X", 4 }, -{ "eomh", 0x8c000001, 0xfc080001, "r,xOA,X", 4 }, -{ "eomw", 0x8c000000, 0xfc080000, "r,xOA,X", 4 }, -{ "eor", 0x0c000000, 0xfc0f0000, "r,R", 2 }, -{ "eorm", 0x0c080000, 0xfc0f0000, "r,R", 2 }, -{ "es", 0x00040000, 0xfc7f0000, "r", 2 }, -{ "exm", 0xa8000000, 0xff880000, "xOA,X", 4 }, -{ "exr", 0xc8070000, 0xfc7f0000, "r", 2 }, -{ "exrr", 0xc8070002, 0xfc7f0002, "r", 2 }, -{ "fixd", 0x380d0000, 0xfc0f0000, "r,R", 2 }, -{ "fixw", 0x38050000, 0xfc0f0000, "r,R", 2 }, -{ "fltd", 0x380f0000, 0xfc0f0000, "r,R", 2 }, -{ "fltw", 0x38070000, 0xfc0f0000, "r,R", 2 }, -{ "grio", 0xfc3f0000, 0xfc7f8000, "r,I", 4 }, -{ "halt", 0x00000000, 0xffff0000, "", 2 }, -{ "hio", 0xfc370000, 0xfc7f8000, "r,I", 4 }, -{ "jwcs", 0xfa080000, 0xff880000, "xOA,X", 4 }, -{ "la", 0x50000000, 0xfc000000, "r,xOA,X", 4 }, -{ "labr", 0x58080000, 0xfc080000, "b,xOA,X", 4 }, -{ "lb", 0xac080000, 0xfc080000, "r,xOA,X", 4 }, -{ "lcs", 0x00030000, 0xfc7f0000, "r", 2 }, -{ "ld", 0xac000002, 0xfc080002, "r,xOA,X", 4 }, -{ "lear", 0x80000000, 0xfc080000, "r,xOA,X", 4 }, -{ "lf", 0xcc000000, 0xfc080000, "r,xOA,X", 4 }, -{ "lfbr", 0xcc080000, 0xfc080000, "b,xOA,X", 4 }, -{ "lh", 0xac000001, 0xfc080001, "r,xOA,X", 4 }, -{ "li", 0xc8000000, 0xfc7f0000, "r,I", 4 }, -{ "lmap", 0x2c070000, 0xfc7f0000, "r", 2 }, -{ "lmb", 0xb0080000, 0xfc080000, "r,xOA,X", 4 }, -{ "lmd", 0xb0000002, 0xfc080002, "r,xOA,X", 4 }, -{ "lmh", 0xb0000001, 0xfc080001, "r,xOA,X", 4 }, -{ "lmw", 0xb0000000, 0xfc080000, "r,xOA,X", 4 }, -{ "lnb", 0xb4080000, 0xfc080000, "r,xOA,X", 4 }, -{ "lnd", 0xb4000002, 0xfc080002, "r,xOA,X", 4 }, -{ "lnh", 0xb4000001, 0xfc080001, "r,xOA,X", 4 }, -{ "lnw", 0xb4000000, 0xfc080000, "r,xOA,X", 4 }, -{ "lpsd", 0xf9800000, 0xff880000, "r,xOA,X", 4 }, -{ "lpsdcm", 0xfa800000, 0xff880000, "r,xOA,X", 4 }, -{ "lw", 0xac000000, 0xfc080000, "r,xOA,X", 4 }, -{ "lwbr", 0x5c000000, 0xfc080000, "b,xOA,X", 4 }, -{ "mpfd", 0xe4080002, 0xfc080002, "r,xOA,X", 4 }, -{ "mpfw", 0xe4080000, 0xfc080000, "r,xOA,X", 4 }, -{ "mpi", 0xc8030000, 0xfc7f0000, "r,I", 4 }, -{ "mpmb", 0xc0080000, 0xfc080000, "r,xOA,X", 4 }, -{ "mpmh", 0xc0000001, 0xfc080001, "r,xOA,X", 4 }, -{ "mpmw", 0xc0000000, 0xfc080000, "r,xOA,X", 4 }, -{ "mpr", 0x38020000, 0xfc0f0000, "r,R", 2 }, -{ "mprfd", 0x380e0000, 0xfc0f0000, "r,R", 2 }, -{ "mprfw", 0x38060000, 0xfc0f0000, "r,R", 2 }, -{ "nop", 0x00020000, 0xffff0000, "", 2 }, -{ "ormb", 0x88080000, 0xfc080000, "r,xOA,X", 4 }, -{ "ormd", 0x88000002, 0xfc080002, "r,xOA,X", 4 }, -{ "ormh", 0x88000001, 0xfc080001, "r,xOA,X", 4 }, -{ "ormw", 0x88000000, 0xfc080000, "r,xOA,X", 4 }, -{ "orr", 0x08000000, 0xfc0f0000, "r,R", 2 }, -{ "orrm", 0x08080000, 0xfc0f0000, "r,R", 2 }, -{ "rdsts", 0x00090000, 0xfc7f0000, "r", 2 }, -{ "return", 0x280e0000, 0xfc7f0000, "", 2 }, -{ "ri", 0xfc020000, 0xfc07ffff, "I", 4 }, -{ "rnd", 0x00050000, 0xfc7f0000, "r", 2 }, -{ "rpswt", 0x040b0000, 0xfc7f0000, "r", 2 }, -{ "rschnl", 0xfc2f0000, 0xfc7f8000, "r,I", 4 }, -{ "rsctl", 0xfc470000, 0xfc7f8000, "r,I", 4 }, -{ "rwcs", 0x000b0000, 0xfc0f0000, "r,R", 2 }, -{ "sacz", 0x10080000, 0xfc0f0000, "r,R", 2 }, -{ "sbm", 0x98080000, 0xfc080000, "f,xOA,X", 4 }, -{ "sbr", 0x18000000, 0xfc0c0000, "r,f", 4 }, -{ "sea", 0x000d0000, 0xffff0000, "", 2 }, -{ "setcpu", 0x2c090000, 0xfc7f0000, "r", 2 }, -{ "sio", 0xfc170000, 0xfc7f8000, "r,I", 4 }, -{ "sipu", 0x000a0000, 0xffff0000, "", 2 }, -{ "sla", 0x1c400000, 0xfc600000, "r,S", 2 }, -{ "slad", 0x20400000, 0xfc600000, "r,S", 2 }, -{ "slc", 0x24400000, 0xfc600000, "r,S", 2 }, -{ "sll", 0x1c600000, 0xfc600000, "r,S", 2 }, -{ "slld", 0x20600000, 0xfc600000, "r,S", 2 }, -{ "smc", 0x04070000, 0xfc070000, "", 2 }, -{ "sra", 0x1c000000, 0xfc600000, "r,S", 2 }, -{ "srad", 0x20000000, 0xfc600000, "r,S", 2 }, -{ "src", 0x24000000, 0xfc600000, "r,S", 2 }, -{ "srl", 0x1c200000, 0xfc600000, "r,S", 2 }, -{ "srld", 0x20200000, 0xfc600000, "r,S", 2 }, -{ "stb", 0xd4080000, 0xfc080000, "r,xOA,X", 4 }, -{ "std", 0xd4000002, 0xfc080002, "r,xOA,X", 4 }, -{ "stf", 0xdc000000, 0xfc080000, "r,xOA,X", 4 }, -{ "stfbr", 0x54000000, 0xfc080000, "b,xOA,X", 4 }, -{ "sth", 0xd4000001, 0xfc080001, "r,xOA,X", 4 }, -{ "stmb", 0xd8080000, 0xfc080000, "r,xOA,X", 4 }, -{ "stmd", 0xd8000002, 0xfc080002, "r,xOA,X", 4 }, -{ "stmh", 0xd8000001, 0xfc080001, "r,xOA,X", 4 }, -{ "stmw", 0xd8000000, 0xfc080000, "r,xOA,X", 4 }, -{ "stpio", 0xfc270000, 0xfc7f8000, "r,I", 4 }, -{ "stw", 0xd4000000, 0xfc080000, "r,xOA,X", 4 }, -{ "stwbr", 0x54000000, 0xfc080000, "b,xOA,X", 4 }, -{ "suabr", 0x58000000, 0xfc080000, "b,xOA,X", 4 }, -{ "sufd", 0xe0000002, 0xfc080002, "r,xOA,X", 4 }, -{ "sufw", 0xe0000000, 0xfc080000, "r,xOA,X", 4 }, -{ "sui", 0xc8020000, 0xfc7f0000, "r,I", 4 }, -{ "sumb", 0xbc080000, 0xfc080000, "r,xOA,X", 4 }, -{ "sumd", 0xbc000002, 0xfc080002, "r,xOA,X", 4 }, -{ "sumh", 0xbc000001, 0xfc080001, "r,xOA,X", 4 }, -{ "sumw", 0xbc000000, 0xfc080000, "r,xOA,X", 4 }, -{ "sur", 0x3c000000, 0xfc0f0000, "r,R", 2 }, -{ "surfd", 0x380b0000, 0xfc0f0000, "r,xOA,X", 4 }, -{ "surfw", 0x38030000, 0xfc0f0000, "r,R", 2 }, -{ "surm", 0x3c080000, 0xfc0f0000, "r,R", 2 }, -{ "svc", 0xc8060000, 0xffff0000, "", 4 }, -{ "tbm", 0xa4080000, 0xfc080000, "f,xOA,X", 4 }, -{ "tbr", 0x180c0000, 0xfc0c0000, "r,f", 2 }, -{ "tbrr", 0x2c020000, 0xfc0f0000, "r,B", 2 }, -{ "tccr", 0x28040000, 0xfc7f0000, "", 2 }, -{ "td", 0xfc050000, 0xfc070000, "r,f", 4 }, -{ "tio", 0xfc1f0000, 0xfc7f8000, "r,I", 4 }, -{ "tmapr", 0x2c0a0000, 0xfc0f0000, "r,R", 2 }, -{ "tpcbr", 0x280c0000, 0xfc7f0000, "r", 2 }, -{ "trbr", 0x2c010000, 0xfc0f0000, "b,R", 2 }, -{ "trc", 0x2c030000, 0xfc0f0000, "r,R", 2 }, -{ "trcc", 0x28050000, 0xfc7f0000, "", 2 }, -{ "trcm", 0x2c0b0000, 0xfc0f0000, "r,R", 2 }, -{ "trn", 0x2c040000, 0xfc0f0000, "r,R", 2 }, -{ "trnm", 0x2c0c0000, 0xfc0f0000, "r,R", 2 }, -{ "trr", 0x2c000000, 0xfc0f0000, "r,R", 2 }, -{ "trrm", 0x2c080000, 0xfc0f0000, "r,R", 2 }, -{ "trsc", 0x2c0e0000, 0xfc0f0000, "r,R", 2 }, -{ "trsw", 0x28000000, 0xfc7f0000, "r", 2 }, -{ "tscr", 0x2c0f0000, 0xfc0f0000, "r,R", 2 }, -{ "uei", 0x00070000, 0xffff0000, "", 2 }, -{ "wait", 0x00010000, 0xffff0000, "", 2 }, -{ "wcwcs", 0xfc5f0000, 0xfc7f8000, "", 4 }, -{ "wwcs", 0x000c0000, 0xfc0f0000, "r,R", 2 }, -{ "xcbr", 0x28020000, 0xfc0f0000, "b,B", 2 }, -{ "xcr", 0x2c050000, 0xfc0f0000, "r,R", 2 }, -{ "xcrm", 0x2c0d0000, 0xfc0f0000, "r,R", 2 }, -{ "zbm", 0x9c080000, 0xfc080000, "f,xOA,X", 4 }, -{ "zbr", 0x18040000, 0xfc0c0000, "r,f", 2 }, -{ "zmb", 0xf8080000, 0xfc080000, "r,xOA,X", 4 }, -{ "zmd", 0xf8000002, 0xfc080002, "r,xOA,X", 4 }, -{ "zmh", 0xf8000001, 0xfc080001, "r,xOA,X", 4 }, -{ "zmw", 0xf8000000, 0xfc080000, "r,xOA,X", 4 }, -{ "zr", 0x0c000000, 0xfc0f0000, "r", 2 }, -}; - -int numopcodes = sizeof(gld_opcodes) / sizeof(gld_opcodes[0]); - -struct gld_opcode *endop = gld_opcodes + sizeof(gld_opcodes) / - sizeof(gld_opcodes[0]); diff --git a/include/opcode/ppc.h b/include/opcode/ppc.h deleted file mode 100644 index fc4d41f9f41..00000000000 --- a/include/opcode/ppc.h +++ /dev/null @@ -1,320 +0,0 @@ -/* ppc.h -- Header file for PowerPC opcode table - Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. - Written by Ian Lance Taylor, Cygnus Support - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef PPC_H -#define PPC_H - -/* The opcode table is an array of struct powerpc_opcode. */ - -struct powerpc_opcode -{ - /* The opcode name. */ - const char *name; - - /* The opcode itself. Those bits which will be filled in with - operands are zeroes. */ - unsigned long opcode; - - /* The opcode mask. This is used by the disassembler. This is a - mask containing ones indicating those bits which must match the - opcode field, and zeroes indicating those bits which need not - match (and are presumably filled in by operands). */ - unsigned long mask; - - /* One bit flags for the opcode. These are used to indicate which - specific processors support the instructions. The defined values - are listed below. */ - unsigned long flags; - - /* An array of operand codes. Each code is an index into the - operand table. They appear in the order which the operands must - appear in assembly code, and are terminated by a zero. */ - unsigned char operands[8]; -}; - -/* The table itself is sorted by major opcode number, and is otherwise - in the order in which the disassembler should consider - instructions. */ -extern const struct powerpc_opcode powerpc_opcodes[]; -extern const int powerpc_num_opcodes; - -/* Values defined for the flags field of a struct powerpc_opcode. */ - -/* Opcode is defined for the PowerPC architecture. */ -#define PPC_OPCODE_PPC 1 - -/* Opcode is defined for the POWER (RS/6000) architecture. */ -#define PPC_OPCODE_POWER 2 - -/* Opcode is defined for the POWER2 (Rios 2) architecture. */ -#define PPC_OPCODE_POWER2 4 - -/* Opcode is only defined on 32 bit architectures. */ -#define PPC_OPCODE_32 8 - -/* Opcode is only defined on 64 bit architectures. */ -#define PPC_OPCODE_64 0x10 - -/* Opcode is supported by the Motorola PowerPC 601 processor. The 601 - is assumed to support all PowerPC (PPC_OPCODE_PPC) instructions, - but it also supports many additional POWER instructions. */ -#define PPC_OPCODE_601 0x20 - -/* Opcode is supported in both the Power and PowerPC architectures - (ie, compiler's -mcpu=common or assembler's -mcom). */ -#define PPC_OPCODE_COMMON 0x40 - -/* Opcode is supported for any Power or PowerPC platform (this is - for the assembler's -many option, and it eliminates duplicates). */ -#define PPC_OPCODE_ANY 0x80 - -/* Opcode is supported as part of the 64-bit bridge. */ -#define PPC_OPCODE_64_BRIDGE 0x100 - -/* Opcode is supported by Altivec Vector Unit */ -#define PPC_OPCODE_ALTIVEC 0x200 - -/* Opcode is supported by PowerPC 403 processor. */ -#define PPC_OPCODE_403 0x400 - -/* Opcode is supported by PowerPC BookE processor. */ -#define PPC_OPCODE_BOOKE 0x800 - -/* Opcode is only supported by 64-bit PowerPC BookE processor. */ -#define PPC_OPCODE_BOOKE64 0x1000 - -/* Opcode is supported by PowerPC 440 processor. */ -#define PPC_OPCODE_440 0x2000 - -/* Opcode is only supported by Power4 architecture. */ -#define PPC_OPCODE_POWER4 0x4000 - -/* Opcode isn't supported by Power4 architecture. */ -#define PPC_OPCODE_NOPOWER4 0x8000 - -/* Opcode is only supported by POWERPC Classic architecture. */ -#define PPC_OPCODE_CLASSIC 0x10000 - -/* Opcode is only supported by e500x2 Core. */ -#define PPC_OPCODE_SPE 0x20000 - -/* Opcode is supported by e500x2 Integer select APU. */ -#define PPC_OPCODE_ISEL 0x40000 - -/* Opcode is an e500 SPE floating point instruction. */ -#define PPC_OPCODE_EFS 0x80000 - -/* Opcode is supported by branch locking APU. */ -#define PPC_OPCODE_BRLOCK 0x100000 - -/* Opcode is supported by performance monitor APU. */ -#define PPC_OPCODE_PMR 0x200000 - -/* Opcode is supported by cache locking APU. */ -#define PPC_OPCODE_CACHELCK 0x400000 - -/* Opcode is supported by machine check APU. */ -#define PPC_OPCODE_RFMCI 0x800000 - -/* Opcode is only supported by Power5 architecture. */ -#define PPC_OPCODE_POWER5 0x1000000 - -/* Opcode is supported by PowerPC e300 family. */ -#define PPC_OPCODE_E300 0x2000000 - -/* Opcode is only supported by Power6 architecture. */ -#define PPC_OPCODE_POWER6 0x4000000 - - -/* A macro to extract the major opcode from an instruction. */ -#define PPC_OP(i) (((i) >> 26) & 0x3f) - -/* The operands table is an array of struct powerpc_operand. */ - -struct powerpc_operand -{ - /* The number of bits in the operand. */ - int bits; - - /* How far the operand is left shifted in the instruction. */ - int shift; - - /* Insertion function. This is used by the assembler. To insert an - operand value into an instruction, check this field. - - If it is NULL, execute - i |= (op & ((1 << o->bits) - 1)) << o->shift; - (i is the instruction which we are filling in, o is a pointer to - this structure, and op is the opcode value; this assumes twos - complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction and the operand value. It will return the new value - of the instruction. If the ERRMSG argument is not NULL, then if - the operand value is illegal, *ERRMSG will be set to a warning - string (the operand will be inserted in any case). If the - operand value is legal, *ERRMSG will be unchanged (most operands - can accept any value). */ - unsigned long (*insert) - (unsigned long instruction, long op, int dialect, const char **errmsg); - - /* Extraction function. This is used by the disassembler. To - extract this operand type from an instruction, check this field. - - If it is NULL, compute - op = ((i) >> o->shift) & ((1 << o->bits) - 1); - if ((o->flags & PPC_OPERAND_SIGNED) != 0 - && (op & (1 << (o->bits - 1))) != 0) - op -= 1 << o->bits; - (i is the instruction, o is a pointer to this structure, and op - is the result; this assumes twos complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction value. It will return the value of the operand. If - the INVALID argument is not NULL, *INVALID will be set to - non-zero if this operand type can not actually be extracted from - this operand (i.e., the instruction does not match). If the - operand is valid, *INVALID will not be changed. */ - long (*extract) (unsigned long instruction, int dialect, int *invalid); - - /* One bit syntax flags. */ - unsigned long flags; -}; - -/* Elements in the table are retrieved by indexing with values from - the operands field of the powerpc_opcodes table. */ - -extern const struct powerpc_operand powerpc_operands[]; - -/* Values defined for the flags field of a struct powerpc_operand. */ - -/* This operand takes signed values. */ -#define PPC_OPERAND_SIGNED (01) - -/* This operand takes signed values, but also accepts a full positive - range of values when running in 32 bit mode. That is, if bits is - 16, it takes any value from -0x8000 to 0xffff. In 64 bit mode, - this flag is ignored. */ -#define PPC_OPERAND_SIGNOPT (02) - -/* This operand does not actually exist in the assembler input. This - is used to support extended mnemonics such as mr, for which two - operands fields are identical. The assembler should call the - insert function with any op value. The disassembler should call - the extract function, ignore the return value, and check the value - placed in the valid argument. */ -#define PPC_OPERAND_FAKE (04) - -/* The next operand should be wrapped in parentheses rather than - separated from this one by a comma. This is used for the load and - store instructions which want their operands to look like - reg,displacement(reg) - */ -#define PPC_OPERAND_PARENS (010) - -/* This operand may use the symbolic names for the CR fields, which - are - lt 0 gt 1 eq 2 so 3 un 3 - cr0 0 cr1 1 cr2 2 cr3 3 - cr4 4 cr5 5 cr6 6 cr7 7 - These may be combined arithmetically, as in cr2*4+gt. These are - only supported on the PowerPC, not the POWER. */ -#define PPC_OPERAND_CR (020) - -/* This operand names a register. The disassembler uses this to print - register names with a leading 'r'. */ -#define PPC_OPERAND_GPR (040) - -/* Like PPC_OPERAND_GPR, but don't print a leading 'r' for r0. */ -#define PPC_OPERAND_GPR_0 (0100) - -/* This operand names a floating point register. The disassembler - prints these with a leading 'f'. */ -#define PPC_OPERAND_FPR (0200) - -/* This operand is a relative branch displacement. The disassembler - prints these symbolically if possible. */ -#define PPC_OPERAND_RELATIVE (0400) - -/* This operand is an absolute branch address. The disassembler - prints these symbolically if possible. */ -#define PPC_OPERAND_ABSOLUTE (01000) - -/* This operand is optional, and is zero if omitted. This is used for - example, in the optional BF field in the comparison instructions. The - assembler must count the number of operands remaining on the line, - and the number of operands remaining for the opcode, and decide - whether this operand is present or not. The disassembler should - print this operand out only if it is not zero. */ -#define PPC_OPERAND_OPTIONAL (02000) - -/* This flag is only used with PPC_OPERAND_OPTIONAL. If this operand - is omitted, then for the next operand use this operand value plus - 1, ignoring the next operand field for the opcode. This wretched - hack is needed because the Power rotate instructions can take - either 4 or 5 operands. The disassembler should print this operand - out regardless of the PPC_OPERAND_OPTIONAL field. */ -#define PPC_OPERAND_NEXT (04000) - -/* This operand should be regarded as a negative number for the - purposes of overflow checking (i.e., the normal most negative - number is disallowed and one more than the normal most positive - number is allowed). This flag will only be set for a signed - operand. */ -#define PPC_OPERAND_NEGATIVE (010000) - -/* This operand names a vector unit register. The disassembler - prints these with a leading 'v'. */ -#define PPC_OPERAND_VR (020000) - -/* This operand is for the DS field in a DS form instruction. */ -#define PPC_OPERAND_DS (040000) - -/* This operand is for the DQ field in a DQ form instruction. */ -#define PPC_OPERAND_DQ (0100000) - -/* The POWER and PowerPC assemblers use a few macros. We keep them - with the operands table for simplicity. The macro table is an - array of struct powerpc_macro. */ - -struct powerpc_macro -{ - /* The macro name. */ - const char *name; - - /* The number of operands the macro takes. */ - unsigned int operands; - - /* One bit flags for the opcode. These are used to indicate which - specific processors support the instructions. The values are the - same as those for the struct powerpc_opcode flags field. */ - unsigned long flags; - - /* A format string to turn the macro into a normal instruction. - Each %N in the string is replaced with operand number N (zero - based). */ - const char *format; -}; - -extern const struct powerpc_macro powerpc_macros[]; -extern const int powerpc_num_macros; - -#endif /* PPC_H */ diff --git a/include/opcode/pyr.h b/include/opcode/pyr.h deleted file mode 100644 index a523dfd7284..00000000000 --- a/include/opcode/pyr.h +++ /dev/null @@ -1,305 +0,0 @@ -/* pyramid.opcode.h -- gdb initial attempt. - - Copyright 2001 Free Software Foundation, Inc. - - This program 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, 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., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - -/* pyramid opcode table: wot to do with this - particular opcode */ - -struct pyr_datum -{ - char nargs; - char * args; /* how to compile said opcode */ - unsigned long mask; /* Bit vector: which operand modes are valid - for this opcode */ - unsigned char code; /* op-code (always 6(?) bits */ -}; - -typedef struct pyr_insn_format -{ - unsigned int mode :4; - unsigned int operator :8; - unsigned int index_scale :2; - unsigned int index_reg :6; - unsigned int operand_1 :6; - unsigned int operand_2:6; -} pyr_insn_format; - - -/* We store four bytes of opcode for all opcodes. - Pyramid is sufficiently RISCy that: - - insns are always an integral number of words; - - the length of any insn can be told from the first word of - the insn. (ie, if there are zero, one, or two words of - immediate operand/offset). - - - The args component is a string containing two characters for each - operand of the instruction. The first specifies the kind of operand; - the second, the place it is stored. */ - -/* Kinds of operands: - mask assembler syntax description - 0x0001: movw Rn,Rn register to register - 0x0002: movw K,Rn quick immediate to register - 0x0004: movw I,Rn long immediate to register - 0x0008: movw (Rn),Rn register indirect to register - movw (Rn)[x],Rn register indirect to register - 0x0010: movw I(Rn),Rn offset register indirect to register - movw I(Rn)[x],Rn offset register indirect, indexed, to register - - 0x0020: movw Rn,(Rn) register to register indirect - 0x0040: movw K,(Rn) quick immediate to register indirect - 0x0080: movw I,(Rn) long immediate to register indirect - 0x0100: movw (Rn),(Rn) register indirect to-register indirect - 0x0100: movw (Rn),(Rn) register indirect to-register indirect - 0x0200: movw I(Rn),(Rn) register indirect+offset to register indirect - 0x0200: movw I(Rn),(Rn) register indirect+offset to register indirect - - 0x0400: movw Rn,I(Rn) register to register indirect+offset - 0x0800: movw K,I(Rn) quick immediate to register indirect+offset - 0x1000: movw I,I(Rn) long immediate to register indirect+offset - 0x1000: movw (Rn),I(Rn) register indirect to-register indirect+offset - 0x1000: movw I(Rn),I(Rn) register indirect+offset to register indirect - +offset - 0x0000: (irregular) ??? - - - Each insn has a four-bit field encoding the type(s) of its operands. -*/ - -/* Some common combinations - */ - -/* the first 5,(0x1|0x2|0x4|0x8|0x10) ie (1|2|4|8|16), ie ( 32 -1)*/ -#define GEN_TO_REG (31) - -#define UNKNOWN ((unsigned long)-1) -#define ANY (GEN_TO_REG | (GEN_TO_REG << 5) | (GEN_TO_REG << 15)) - -#define CONVERT (1|8|0x10|0x20|0x200) - -#define K_TO_REG (2) -#define I_TO_REG (4) -#define NOTK_TO_REG (GEN_TO_REG & ~K_TO_REG) -#define NOTI_TO_REG (GEN_TO_REG & ~I_TO_REG) - -/* The assembler requires that this array be sorted as follows: - all instances of the same mnemonic must be consecutive. - All instances of the same mnemonic with the same number of operands - must be consecutive. - */ - -struct pyr_opcode /* pyr opcode text */ -{ - char * name; /* opcode name: lowercase string [key] */ - struct pyr_datum datum; /* rest of opcode table [datum] */ -}; - -#define pyr_how args -#define pyr_nargs nargs -#define pyr_mask mask -#define pyr_name name - -struct pyr_opcode pyr_opcodes[] = -{ - {"movb", { 2, "", UNKNOWN, 0x11}, }, - {"movh", { 2, "", UNKNOWN, 0x12} }, - {"movw", { 2, "", ANY, 0x10} }, - {"movl", { 2, "", ANY, 0x13} }, - {"mnegw", { 2, "", (0x1|0x8|0x10), 0x14} }, - {"mnegf", { 2, "", 0x1, 0x15} }, - {"mnegd", { 2, "", 0x1, 0x16} }, - {"mcomw", { 2, "", (0x1|0x8|0x10), 0x17} }, - {"mabsw", { 2, "", (0x1|0x8|0x10), 0x18} }, - {"mabsf", { 2, "", 0x1, 0x19} }, - {"mabsd", { 2, "", 0x1, 0x1a} }, - {"mtstw", { 2, "", (0x1|0x8|0x10), 0x1c} }, - {"mtstf", { 2, "", 0x1, 0x1d} }, - {"mtstd", { 2, "", 0x1, 0x1e} }, - {"mova", { 2, "", 0x8|0x10, 0x1f} }, - {"movzbw", { 2, "", (0x1|0x8|0x10), 0x20} }, - {"movzhw", { 2, "", (0x1|0x8|0x10), 0x21} }, - /* 2 insns out of order here */ - {"movbl", { 2, "", 1, 0x4f} }, - {"filbl", { 2, "", 1, 0x4e} }, - - {"cvtbw", { 2, "", CONVERT, 0x22} }, - {"cvthw", { 2, "", CONVERT, 0x23} }, - {"cvtwb", { 2, "", CONVERT, 0x24} }, - {"cvtwh", { 2, "", CONVERT, 0x25} }, - {"cvtwf", { 2, "", CONVERT, 0x26} }, - {"cvtwd", { 2, "", CONVERT, 0x27} }, - {"cvtfw", { 2, "", CONVERT, 0x28} }, - {"cvtfd", { 2, "", CONVERT, 0x29} }, - {"cvtdw", { 2, "", CONVERT, 0x2a} }, - {"cvtdf", { 2, "", CONVERT, 0x2b} }, - - {"addw", { 2, "", GEN_TO_REG, 0x40} }, - {"addwc", { 2, "", GEN_TO_REG, 0x41} }, - {"subw", { 2, "", GEN_TO_REG, 0x42} }, - {"subwb", { 2, "", GEN_TO_REG, 0x43} }, - {"rsubw", { 2, "", GEN_TO_REG, 0x44} }, - {"mulw", { 2, "", GEN_TO_REG, 0x45} }, - {"emul", { 2, "", GEN_TO_REG, 0x47} }, - {"umulw", { 2, "", GEN_TO_REG, 0x46} }, - {"divw", { 2, "", GEN_TO_REG, 0x48} }, - {"ediv", { 2, "", GEN_TO_REG, 0x4a} }, - {"rdivw", { 2, "", GEN_TO_REG, 0x4b} }, - {"udivw", { 2, "", GEN_TO_REG, 0x49} }, - {"modw", { 2, "", GEN_TO_REG, 0x4c} }, - {"umodw", { 2, "", GEN_TO_REG, 0x4d} }, - - - {"addf", { 2, "", 1, 0x50} }, - {"addd", { 2, "", 1, 0x51} }, - {"subf", { 2, "", 1, 0x52} }, - {"subd", { 2, "", 1, 0x53} }, - {"mulf", { 2, "", 1, 0x56} }, - {"muld", { 2, "", 1, 0x57} }, - {"divf", { 2, "", 1, 0x58} }, - {"divd", { 2, "", 1, 0x59} }, - - - {"cmpb", { 2, "", UNKNOWN, 0x61} }, - {"cmph", { 2, "", UNKNOWN, 0x62} }, - {"cmpw", { 2, "", UNKNOWN, 0x60} }, - {"ucmpb", { 2, "", UNKNOWN, 0x66} }, - /* WHY no "ucmph"??? */ - {"ucmpw", { 2, "", UNKNOWN, 0x65} }, - {"xchw", { 2, "", UNKNOWN, 0x0f} }, - - - {"andw", { 2, "", GEN_TO_REG, 0x30} }, - {"orw", { 2, "", GEN_TO_REG, 0x31} }, - {"xorw", { 2, "", GEN_TO_REG, 0x32} }, - {"bicw", { 2, "", GEN_TO_REG, 0x33} }, - {"lshlw", { 2, "", GEN_TO_REG, 0x38} }, - {"ashlw", { 2, "", GEN_TO_REG, 0x3a} }, - {"ashll", { 2, "", GEN_TO_REG, 0x3c} }, - {"ashrw", { 2, "", GEN_TO_REG, 0x3b} }, - {"ashrl", { 2, "", GEN_TO_REG, 0x3d} }, - {"rotlw", { 2, "", GEN_TO_REG, 0x3e} }, - {"rotrw", { 2, "", GEN_TO_REG, 0x3f} }, - - /* push and pop insns are "going away next release". */ - {"pushw", { 2, "", GEN_TO_REG, 0x0c} }, - {"popw", { 2, "", (0x1|0x8|0x10), 0x0d} }, - {"pusha", { 2, "", (0x8|0x10), 0x0e} }, - - {"bitsw", { 2, "", UNKNOWN, 0x35} }, - {"bitcw", { 2, "", UNKNOWN, 0x36} }, - /* some kind of ibra/dbra insns??*/ - {"icmpw", { 2, "", UNKNOWN, 0x67} }, - {"dcmpw", { 2, "", (1|4|0x20|0x80|0x400|0x1000), 0x69} },/*FIXME*/ - {"acmpw", { 2, "", 1, 0x6b} }, - - /* Call is written as a 1-op insn, but is always (dis)assembled as a 2-op - insn with a 2nd op of tr14. The assembler will have to grok this. */ - {"call", { 2, "", GEN_TO_REG, 0x04} }, - {"call", { 1, "", GEN_TO_REG, 0x04} }, - - {"callk", { 1, "", UNKNOWN, 0x06} },/* system call?*/ - /* Ret is usually written as a 0-op insn, but gets disassembled as a - 1-op insn. The operand is always tr15. */ - {"ret", { 0, "", UNKNOWN, 0x09} }, - {"ret", { 1, "", UNKNOWN, 0x09} }, - {"adsf", { 2, "", (1|2|4), 0x08} }, - {"retd", { 2, "", UNKNOWN, 0x0a} }, - {"btc", { 2, "", UNKNOWN, 0x01} }, - {"bfc", { 2, "", UNKNOWN, 0x02} }, - /* Careful: halt is 0x00000000. Jump must have some other (mode?)bit set?? */ - {"jump", { 1, "", UNKNOWN, 0x00} }, - {"btp", { 2, "", UNKNOWN, 0xf00} }, - /* read control-stack pointer is another 1-or-2 operand insn. */ - {"rcsp", { 2, "", UNKNOWN, 0x01f} }, - {"rcsp", { 1, "", UNKNOWN, 0x01f} } -}; - -/* end: pyramid.opcode.h */ -/* One day I will have to take the time to find out what operands - are valid for these insns, and guess at what they mean. - - I can't imagine what the "I???" insns (iglob, etc) do. - - the arithmetic-sounding insns ending in "p" sound awfully like BCD - arithmetic insns: - dshlp -> Decimal SHift Left Packed - dshrp -> Decimal SHift Right Packed - and cvtlp would be convert long to packed. - I have no idea how the operands are interpreted; but having them be - a long register with (address, length) of an in-memory packed BCD operand - would not be surprising. - They are unlikely to be a packed bcd string: 64 bits of long give - is only 15 digits+sign, which isn't enough for COBOL. - */ -#if 0 - {"wcsp", { 2, "", UNKNOWN, 0x00} }, /*write csp?*/ - /* The OSx Operating System Porting Guide claims SSL does things - with tr12 (a register reserved to it) to do with static block-structure - references. SSL=Set Static Link? It's "Going away next release". */ - {"ssl", { 2, "", UNKNOWN, 0x00} }, - {"ccmps", { 2, "", UNKNOWN, 0x00} }, - {"lcd", { 2, "", UNKNOWN, 0x00} }, - {"uemul", { 2, "", UNKNOWN, 0x00} }, /*unsigned emul*/ - {"srf", { 2, "", UNKNOWN, 0x00} }, /*Gidget time???*/ - {"mnegp", { 2, "", UNKNOWN, 0x00} }, /move-neg phys?*/ - {"ldp", { 2, "", UNKNOWN, 0x00} }, /*load phys?*/ - {"ldti", { 2, "", UNKNOWN, 0x00} }, - {"ldb", { 2, "", UNKNOWN, 0x00} }, - {"stp", { 2, "", UNKNOWN, 0x00} }, - {"stti", { 2, "", UNKNOWN, 0x00} }, - {"stb", { 2, "", UNKNOWN, 0x00} }, - {"stu", { 2, "", UNKNOWN, 0x00} }, - {"addp", { 2, "", UNKNOWN, 0x00} }, - {"subp", { 2, "", UNKNOWN, 0x00} }, - {"mulp", { 2, "", UNKNOWN, 0x00} }, - {"divp", { 2, "", UNKNOWN, 0x00} }, - {"dshlp", { 2, "", UNKNOWN, 0x00} }, /* dec shl packed? */ - {"dshrp", { 2, "", UNKNOWN, 0x00} }, /* dec shr packed? */ - {"movs", { 2, "", UNKNOWN, 0x00} }, /*move (string?)?*/ - {"cmpp", { 2, "", UNKNOWN, 0x00} }, /* cmp phys?*/ - {"cmps", { 2, "", UNKNOWN, 0x00} }, /* cmp (string?)?*/ - {"cvtlp", { 2, "", UNKNOWN, 0x00} }, /* cvt long to p??*/ - {"cvtpl", { 2, "", UNKNOWN, 0x00} }, /* cvt p to l??*/ - {"dintr", { 2, "", UNKNOWN, 0x00} }, /* ?? intr ?*/ - {"rphysw", { 2, "", UNKNOWN, 0x00} }, /* read phys word?*/ - {"wphysw", { 2, "", UNKNOWN, 0x00} }, /* write phys word?*/ - {"cmovs", { 2, "", UNKNOWN, 0x00} }, - {"rsubw", { 2, "", UNKNOWN, 0x00} }, - {"bicpsw", { 2, "", UNKNOWN, 0x00} }, /* clr bit in psw? */ - {"bispsw", { 2, "", UNKNOWN, 0x00} }, /* set bit in psw? */ - {"eio", { 2, "", UNKNOWN, 0x00} }, /* ?? ?io ? */ - {"callp", { 2, "", UNKNOWN, 0x00} }, /* call phys?*/ - {"callr", { 2, "", UNKNOWN, 0x00} }, - {"lpcxt", { 2, "", UNKNOWN, 0x00} }, /*load proc context*/ - {"rei", { 2, "", UNKNOWN, 0x00} }, /*ret from intrpt*/ - {"rport", { 2, "", UNKNOWN, 0x00} }, /*read-port?*/ - {"rtod", { 2, "", UNKNOWN, 0x00} }, /*read-time-of-day?*/ - {"ssi", { 2, "", UNKNOWN, 0x00} }, - {"vtpa", { 2, "", UNKNOWN, 0x00} }, /*virt-to-phys-addr?*/ - {"wicl", { 2, "", UNKNOWN, 0x00} }, /* write icl ? */ - {"wport", { 2, "", UNKNOWN, 0x00} }, /*write-port?*/ - {"wtod", { 2, "", UNKNOWN, 0x00} }, /*write-time-of-day?*/ - {"flic", { 2, "", UNKNOWN, 0x00} }, - {"iglob", { 2, "", UNKNOWN, 0x00} }, /* I global? */ - {"iphys", { 2, "", UNKNOWN, 0x00} }, /* I physical? */ - {"ipid", { 2, "", UNKNOWN, 0x00} }, /* I pid? */ - {"ivect", { 2, "", UNKNOWN, 0x00} }, /* I vector? */ - {"lamst", { 2, "", UNKNOWN, 0x00} }, - {"tio", { 2, "", UNKNOWN, 0x00} }, -#endif diff --git a/include/opcode/s390.h b/include/opcode/s390.h deleted file mode 100644 index 7bb30de285f..00000000000 --- a/include/opcode/s390.h +++ /dev/null @@ -1,146 +0,0 @@ -/* s390.h -- Header file for S390 opcode table - Copyright 2000, 2001, 2003 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA - 02110-1301, USA. */ - -#ifndef S390_H -#define S390_H - -/* List of instruction sets variations. */ - -enum s390_opcode_mode_val - { - S390_OPCODE_ESA = 0, - S390_OPCODE_ZARCH - }; - -enum s390_opcode_cpu_val - { - S390_OPCODE_G5 = 0, - S390_OPCODE_G6, - S390_OPCODE_Z900, - S390_OPCODE_Z990, - S390_OPCODE_Z9_109 - }; - -/* The opcode table is an array of struct s390_opcode. */ - -struct s390_opcode - { - /* The opcode name. */ - const char * name; - - /* The opcode itself. Those bits which will be filled in with - operands are zeroes. */ - unsigned char opcode[6]; - - /* The opcode mask. This is used by the disassembler. This is a - mask containing ones indicating those bits which must match the - opcode field, and zeroes indicating those bits which need not - match (and are presumably filled in by operands). */ - unsigned char mask[6]; - - /* The opcode length in bytes. */ - int oplen; - - /* An array of operand codes. Each code is an index into the - operand table. They appear in the order which the operands must - appear in assembly code, and are terminated by a zero. */ - unsigned char operands[6]; - - /* Bitmask of execution modes this opcode is available for. */ - unsigned int modes; - - /* First cpu this opcode is available for. */ - enum s390_opcode_cpu_val min_cpu; - }; - -/* The table itself is sorted by major opcode number, and is otherwise - in the order in which the disassembler should consider - instructions. */ -extern const struct s390_opcode s390_opcodes[]; -extern const int s390_num_opcodes; - -/* A opcode format table for the .insn pseudo mnemonic. */ -extern const struct s390_opcode s390_opformats[]; -extern const int s390_num_opformats; - -/* Values defined for the flags field of a struct powerpc_opcode. */ - -/* The operands table is an array of struct s390_operand. */ - -struct s390_operand - { - /* The number of bits in the operand. */ - int bits; - - /* How far the operand is left shifted in the instruction. */ - int shift; - - /* One bit syntax flags. */ - unsigned long flags; - }; - -/* Elements in the table are retrieved by indexing with values from - the operands field of the powerpc_opcodes table. */ - -extern const struct s390_operand s390_operands[]; - -/* Values defined for the flags field of a struct s390_operand. */ - -/* This operand names a register. The disassembler uses this to print - register names with a leading 'r'. */ -#define S390_OPERAND_GPR 0x1 - -/* This operand names a floating point register. The disassembler - prints these with a leading 'f'. */ -#define S390_OPERAND_FPR 0x2 - -/* This operand names an access register. The disassembler - prints these with a leading 'a'. */ -#define S390_OPERAND_AR 0x4 - -/* This operand names a control register. The disassembler - prints these with a leading 'c'. */ -#define S390_OPERAND_CR 0x8 - -/* This operand is a displacement. */ -#define S390_OPERAND_DISP 0x10 - -/* This operand names a base register. */ -#define S390_OPERAND_BASE 0x20 - -/* This operand names an index register, it can be skipped. */ -#define S390_OPERAND_INDEX 0x40 - -/* This operand is a relative branch displacement. The disassembler - prints these symbolically if possible. */ -#define S390_OPERAND_PCREL 0x80 - -/* This operand takes signed values. */ -#define S390_OPERAND_SIGNED 0x100 - -/* This operand is a length. */ -#define S390_OPERAND_LENGTH 0x200 - -/* This operand is optional. Only a single operand at the end of - the instruction may be optional. */ -#define S390_OPERAND_OPTIONAL 0x400 - - #endif /* S390_H */ diff --git a/include/opcode/sparc.h b/include/opcode/sparc.h deleted file mode 100644 index 9e238be93a6..00000000000 --- a/include/opcode/sparc.h +++ /dev/null @@ -1,237 +0,0 @@ -/* Definitions for opcode table for the sparc. - Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2002, - 2003, 2005 Free Software Foundation, Inc. - - This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and - the GNU Binutils. - - GAS/GDB 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, or (at your option) - any later version. - - GAS/GDB 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 GAS or GDB; see the file COPYING. If not, write to - the Free Software Foundation, 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - -#include "ansidecl.h" - -/* The SPARC opcode table (and other related data) is defined in - the opcodes library in sparc-opc.c. If you change anything here, make - sure you fix up that file, and vice versa. */ - - /* FIXME-someday: perhaps the ,a's and such should be embedded in the - instruction's name rather than the args. This would make gas faster, pinsn - slower, but would mess up some macros a bit. xoxorich. */ - -/* List of instruction sets variations. - These values are such that each element is either a superset of a - preceding each one or they conflict in which case SPARC_OPCODE_CONFLICT_P - returns non-zero. - The values are indices into `sparc_opcode_archs' defined in sparc-opc.c. - Don't change this without updating sparc-opc.c. */ - -enum sparc_opcode_arch_val -{ - SPARC_OPCODE_ARCH_V6 = 0, - SPARC_OPCODE_ARCH_V7, - SPARC_OPCODE_ARCH_V8, - SPARC_OPCODE_ARCH_SPARCLET, - SPARC_OPCODE_ARCH_SPARCLITE, - /* V9 variants must appear last. */ - SPARC_OPCODE_ARCH_V9, - SPARC_OPCODE_ARCH_V9A, /* V9 with ultrasparc additions. */ - SPARC_OPCODE_ARCH_V9B, /* V9 with ultrasparc and cheetah additions. */ - SPARC_OPCODE_ARCH_BAD /* Error return from sparc_opcode_lookup_arch. */ -}; - -/* The highest architecture in the table. */ -#define SPARC_OPCODE_ARCH_MAX (SPARC_OPCODE_ARCH_BAD - 1) - -/* Given an enum sparc_opcode_arch_val, return the bitmask to use in - insn encoding/decoding. */ -#define SPARC_OPCODE_ARCH_MASK(arch) (1 << (arch)) - -/* Given a valid sparc_opcode_arch_val, return non-zero if it's v9. */ -#define SPARC_OPCODE_ARCH_V9_P(arch) ((arch) >= SPARC_OPCODE_ARCH_V9) - -/* Table of cpu variants. */ - -typedef struct sparc_opcode_arch -{ - const char *name; - /* Mask of sparc_opcode_arch_val's supported. - EG: For v7 this would be - (SPARC_OPCODE_ARCH_MASK (..._V6) | SPARC_OPCODE_ARCH_MASK (..._V7)). - These are short's because sparc_opcode.architecture is. */ - short supported; -} sparc_opcode_arch; - -extern const struct sparc_opcode_arch sparc_opcode_archs[]; - -/* Given architecture name, look up it's sparc_opcode_arch_val value. */ -extern enum sparc_opcode_arch_val sparc_opcode_lookup_arch (const char *); - -/* Return the bitmask of supported architectures for ARCH. */ -#define SPARC_OPCODE_SUPPORTED(ARCH) (sparc_opcode_archs[ARCH].supported) - -/* Non-zero if ARCH1 conflicts with ARCH2. - IE: ARCH1 as a supported bit set that ARCH2 doesn't, and vice versa. */ -#define SPARC_OPCODE_CONFLICT_P(ARCH1, ARCH2) \ - (((SPARC_OPCODE_SUPPORTED (ARCH1) & SPARC_OPCODE_SUPPORTED (ARCH2)) \ - != SPARC_OPCODE_SUPPORTED (ARCH1)) \ - && ((SPARC_OPCODE_SUPPORTED (ARCH1) & SPARC_OPCODE_SUPPORTED (ARCH2)) \ - != SPARC_OPCODE_SUPPORTED (ARCH2))) - -/* Structure of an opcode table entry. */ - -typedef struct sparc_opcode -{ - const char *name; - unsigned long match; /* Bits that must be set. */ - unsigned long lose; /* Bits that must not be set. */ - const char *args; - /* This was called "delayed" in versions before the flags. */ - char flags; - short architecture; /* Bitmask of sparc_opcode_arch_val's. */ -} sparc_opcode; - -#define F_DELAYED 1 /* Delayed branch. */ -#define F_ALIAS 2 /* Alias for a "real" instruction. */ -#define F_UNBR 4 /* Unconditional branch. */ -#define F_CONDBR 8 /* Conditional branch. */ -#define F_JSR 16 /* Subroutine call. */ -#define F_FLOAT 32 /* Floating point instruction (not a branch). */ -#define F_FBR 64 /* Floating point branch. */ -/* FIXME: Add F_ANACHRONISTIC flag for v9. */ - -/* All sparc opcodes are 32 bits, except for the `set' instruction (really a - macro), which is 64 bits. It is handled as a special case. - - The match component is a mask saying which bits must match a particular - opcode in order for an instruction to be an instance of that opcode. - - The args component is a string containing one character for each operand of the - instruction. - - Kinds of operands: - # Number used by optimizer. It is ignored. - 1 rs1 register. - 2 rs2 register. - d rd register. - e frs1 floating point register. - v frs1 floating point register (double/even). - V frs1 floating point register (quad/multiple of 4). - f frs2 floating point register. - B frs2 floating point register (double/even). - R frs2 floating point register (quad/multiple of 4). - g frsd floating point register. - H frsd floating point register (double/even). - J frsd floating point register (quad/multiple of 4). - b crs1 coprocessor register - c crs2 coprocessor register - D crsd coprocessor register - m alternate space register (asr) in rd - M alternate space register (asr) in rs1 - h 22 high bits. - X 5 bit unsigned immediate - Y 6 bit unsigned immediate - 3 SIAM mode (3 bits). (v9b) - K MEMBAR mask (7 bits). (v9) - j 10 bit Immediate. (v9) - I 11 bit Immediate. (v9) - i 13 bit Immediate. - n 22 bit immediate. - k 2+14 bit PC relative immediate. (v9) - G 19 bit PC relative immediate. (v9) - l 22 bit PC relative immediate. - L 30 bit PC relative immediate. - a Annul. The annul bit is set. - A Alternate address space. Stored as 8 bits. - C Coprocessor state register. - F floating point state register. - p Processor state register. - N Branch predict clear ",pn" (v9) - T Branch predict set ",pt" (v9) - z %icc. (v9) - Z %xcc. (v9) - q Floating point queue. - r Single register that is both rs1 and rd. - O Single register that is both rs2 and rd. - Q Coprocessor queue. - S Special case. - t Trap base register. - w Window invalid mask register. - y Y register. - u sparclet coprocessor registers in rd position - U sparclet coprocessor registers in rs1 position - E %ccr. (v9) - s %fprs. (v9) - P %pc. (v9) - W %tick. (v9) - o %asi. (v9) - 6 %fcc0. (v9) - 7 %fcc1. (v9) - 8 %fcc2. (v9) - 9 %fcc3. (v9) - ! Privileged Register in rd (v9) - ? Privileged Register in rs1 (v9) - * Prefetch function constant. (v9) - x OPF field (v9 impdep). - 0 32/64 bit immediate for set or setx (v9) insns - _ Ancillary state register in rd (v9a) - / Ancillary state register in rs1 (v9a) - - The following chars are unused: (note: ,[] are used as punctuation) - [45]. */ - -#define OP2(x) (((x) & 0x7) << 22) /* Op2 field of format2 insns. */ -#define OP3(x) (((x) & 0x3f) << 19) /* Op3 field of format3 insns. */ -#define OP(x) ((unsigned) ((x) & 0x3) << 30) /* Op field of all insns. */ -#define OPF(x) (((x) & 0x1ff) << 5) /* Opf field of float insns. */ -#define OPF_LOW5(x) OPF ((x) & 0x1f) /* V9. */ -#define F3F(x, y, z) (OP (x) | OP3 (y) | OPF (z)) /* Format3 float insns. */ -#define F3I(x) (((x) & 0x1) << 13) /* Immediate field of format 3 insns. */ -#define F2(x, y) (OP (x) | OP2(y)) /* Format 2 insns. */ -#define F3(x, y, z) (OP (x) | OP3(y) | F3I(z)) /* Format3 insns. */ -#define F1(x) (OP (x)) -#define DISP30(x) ((x) & 0x3fffffff) -#define ASI(x) (((x) & 0xff) << 5) /* Asi field of format3 insns. */ -#define RS2(x) ((x) & 0x1f) /* Rs2 field. */ -#define SIMM13(x) ((x) & 0x1fff) /* Simm13 field. */ -#define RD(x) (((x) & 0x1f) << 25) /* Destination register field. */ -#define RS1(x) (((x) & 0x1f) << 14) /* Rs1 field. */ -#define ASI_RS2(x) (SIMM13 (x)) -#define MEMBAR(x) ((x) & 0x7f) -#define SLCPOP(x) (((x) & 0x7f) << 6) /* Sparclet cpop. */ - -#define ANNUL (1 << 29) -#define BPRED (1 << 19) /* V9. */ -#define IMMED F3I (1) -#define RD_G0 RD (~0) -#define RS1_G0 RS1 (~0) -#define RS2_G0 RS2 (~0) - -extern const struct sparc_opcode sparc_opcodes[]; -extern const int sparc_num_opcodes; - -extern int sparc_encode_asi (const char *); -extern const char *sparc_decode_asi (int); -extern int sparc_encode_membar (const char *); -extern const char *sparc_decode_membar (int); -extern int sparc_encode_prefetch (const char *); -extern const char *sparc_decode_prefetch (int); -extern int sparc_encode_sparclet_cpreg (const char *); -extern const char *sparc_decode_sparclet_cpreg (int); - -/* Local Variables: - fill-column: 131 - comment-column: 0 - End: */ - diff --git a/include/opcode/tahoe.h b/include/opcode/tahoe.h deleted file mode 100644 index b5cee249ee4..00000000000 --- a/include/opcode/tahoe.h +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Ported by the State University of New York at Buffalo by the Distributed - * Computer Systems Lab, Department of Computer Science, 1991. - */ - -#ifndef tahoe_opcodeT -#define tahoe_opcodeT int -#endif /* no tahoe_opcodeT */ - -struct vot_wot /* tahoe opcode table: wot to do with this */ - /* particular opcode */ -{ - char * args; /* how to compile said opcode */ - tahoe_opcodeT code; /* op-code (may be > 8 bits!) */ -}; - -struct vot /* tahoe opcode text */ -{ - char * name; /* opcode name: lowercase string [key] */ - struct vot_wot detail; /* rest of opcode table [datum] */ -}; - -#define vot_how args -#define vot_code code -#define vot_detail detail -#define vot_name name - -static struct vot -votstrs[] = -{ -{ "halt", {"", 0x00 } }, -{ "sinf", {"", 0x05 } }, -{ "ldf", {"rl", 0x06 } }, -{ "ldd", {"rq", 0x07 } }, -{ "addb2", {"rbmb", 0x08 } }, -{ "movb", {"rbwb", 0x09 } }, -{ "addw2", {"rwmw", 0x0a } }, -{ "movw", {"rwww", 0x0b } }, -{ "addl2", {"rlml", 0x0c } }, -{ "movl", {"rlwl", 0x0d } }, -{ "bbs", {"rlvlbw", 0x0e } }, -{ "nop", {"", 0x10 } }, -{ "brb", {"bb", 0x11 } }, -{ "brw", {"bw", 0x13 } }, -{ "cosf", {"", 0x15 } }, -{ "lnf", {"rl", 0x16 } }, -{ "lnd", {"rq", 0x17 } }, -{ "addb3", {"rbrbwb", 0x18 } }, -{ "cmpb", {"rbwb", 0x19 } }, -{ "addw3", {"rwrwww", 0x1a } }, -{ "cmpw", {"rwww", 0x1b } }, -{ "addl3", {"rlrlwl", 0x1c } }, -{ "cmpl", {"rlwl", 0x1d } }, -{ "bbc", {"rlvlbw", 0x1e } }, -{ "rei", {"", 0x20 } }, -{ "bneq", {"bb", 0x21 } }, -{ "bnequ", {"bb", 0x21 } }, -{ "cvtwl", {"rwwl", 0x23 } }, -{ "stf", {"wl", 0x26 } }, -{ "std", {"wq", 0x27 } }, -{ "subb2", {"rbmb", 0x28 } }, -{ "mcomb", {"rbwb", 0x29 } }, -{ "subw2", {"rwmw", 0x2a } }, -{ "mcomw", {"rwww", 0x2b } }, -{ "subl2", {"rlml", 0x2c } }, -{ "mcoml", {"rlwl", 0x2d } }, -{ "emul", {"rlrlrlwq", 0x2e } }, -{ "aoblss", {"rlmlbw", 0x2f } }, -{ "bpt", {"", 0x30 } }, -{ "beql", {"bb", 0x31 } }, -{ "beqlu", {"bb", 0x31 } }, -{ "cvtwb", {"rwwb", 0x33 } }, -{ "logf", {"", 0x35 } }, -{ "cmpf", {"rl", 0x36 } }, -{ "cmpd", {"rq", 0x37 } }, -{ "subb3", {"rbrbwb", 0x38 } }, -{ "bitb", {"rbrb", 0x39 } }, -{ "subw3", {"rwrwww", 0x3a } }, -{ "bitw", {"rwrw", 0x3b } }, -{ "subl3", {"rlrlwl", 0x3c } }, -{ "bitl", {"rlrl", 0x3d } }, -{ "ediv", {"rlrqwlwl", 0x3e } }, -{ "aobleq", {"rlmlbw", 0x3f } }, -{ "ret", {"", 0x40 } }, -{ "bgtr", {"bb", 0x41 } }, -{ "sqrtf", {"", 0x45 } }, -{ "cmpf2", {"rl", 0x46 } }, -{ "cmpd2", {"rqrq", 0x47 } }, -{ "shll", {"rbrlwl", 0x48 } }, -{ "clrb", {"wb", 0x49 } }, -{ "shlq", {"rbrqwq", 0x4a } }, -{ "clrw", {"ww", 0x4b } }, -{ "mull2", {"rlml", 0x4c } }, -{ "clrl", {"wl", 0x4d } }, -{ "shal", {"rbrlwl", 0x4e } }, -{ "bleq", {"bb", 0x51 } }, -{ "expf", {"", 0x55 } }, -{ "tstf", {"", 0x56 } }, -{ "tstd", {"", 0x57 } }, -{ "shrl", {"rbrlwl", 0x58 } }, -{ "tstb", {"rb", 0x59 } }, -{ "shrq", {"rbrqwq", 0x5a } }, -{ "tstw", {"rw", 0x5b } }, -{ "mull3", {"rlrlwl", 0x5c } }, -{ "tstl", {"rl", 0x5d } }, -{ "shar", {"rbrlwl", 0x5e } }, -{ "bbssi", {"rlmlbw", 0x5f } }, -{ "ldpctx", {"", 0x60 } }, -{ "pushd", {"", 0x67 } }, -{ "incb", {"mb", 0x69 } }, -{ "incw", {"mw", 0x6b } }, -{ "divl2", {"rlml", 0x6c } }, -{ "incl", {"ml", 0x6d } }, -{ "cvtlb", {"rlwb", 0x6f } }, -{ "svpctx", {"", 0x70 } }, -{ "jmp", {"ab", 0x71 } }, -{ "cvlf", {"rl", 0x76 } }, -{ "cvld", {"rl", 0x77 } }, -{ "decb", {"mb", 0x79 } }, -{ "decw", {"mw", 0x7b } }, -{ "divl3", {"rlrlwl", 0x7c } }, -{ "decl", {"ml", 0x7d } }, -{ "cvtlw", {"rlww", 0x7f } }, -{ "bgeq", {"bb", 0x81 } }, -{ "movs2", {"abab", 0x82 } }, -{ "cvfl", {"wl", 0x86 } }, -{ "cvdl", {"wl", 0x87 } }, -{ "orb2", {"rbmb", 0x88 } }, -{ "cvtbl", {"rbwl", 0x89 } }, -{ "orw2", {"rwmw", 0x8a } }, -{ "bispsw", {"rw", 0x8b } }, -{ "orl2", {"rlml", 0x8c } }, -{ "adwc", {"rlml", 0x8d } }, -{ "adda", {"rlml", 0x8e } }, -{ "blss", {"bb", 0x91 } }, -{ "cmps2", {"abab", 0x92 } }, -{ "ldfd", {"rl", 0x97 } }, -{ "orb3", {"rbrbwb", 0x98 } }, -{ "cvtbw", {"rbww", 0x99 } }, -{ "orw3", {"rwrwww", 0x9a } }, -{ "bicpsw", {"rw", 0x9b } }, -{ "orl3", {"rlrlwl", 0x9c } }, -{ "sbwc", {"rlml", 0x9d } }, -{ "suba", {"rlml", 0x9e } }, -{ "bgtru", {"bb", 0xa1 } }, -{ "cvdf", {"", 0xa6 } }, -{ "andb2", {"rbmb", 0xa8 } }, -{ "movzbl", {"rbwl", 0xa9 } }, -{ "andw2", {"rwmw", 0xaa } }, -{ "loadr", {"rwal", 0xab } }, -{ "andl2", {"rlml", 0xac } }, -{ "mtpr", {"rlrl", 0xad } }, -{ "ffs", {"rlwl", 0xae } }, -{ "blequ", {"bb", 0xb1 } }, -{ "negf", {"", 0xb6 } }, -{ "negd", {"", 0xb7 } }, -{ "andb3", {"rbrbwb", 0xb8 } }, -{ "movzbw", {"rbww", 0xb9 } }, -{ "andw3", {"rwrwww", 0xba } }, -{ "storer", {"rwal", 0xbb } }, -{ "andl3", {"rlrlwl", 0xbc } }, -{ "mfpr", {"rlwl", 0xbd } }, -{ "ffc", {"rlwl", 0xbe } }, -{ "calls", {"rbab", 0xbf } }, -{ "prober", {"rbabrl", 0xc0 } }, -{ "bvc", {"bb", 0xc1 } }, -{ "movs3", {"ababrw", 0xc2 } }, -{ "movzwl", {"rwwl", 0xc3 } }, -{ "addf", {"rl", 0xc6 } }, -{ "addd", {"rq", 0xc7 } }, -{ "xorb2", {"rbmb", 0xc8 } }, -{ "movob", {"rbwb", 0xc9 } }, -{ "xorw2", {"rwmw", 0xca } }, -{ "movow", {"rwww", 0xcb } }, -{ "xorl2", {"rlml", 0xcc } }, -{ "movpsl", {"wl", 0xcd } }, -{ "kcall", {"rw", 0xcf } }, -{ "probew", {"rbabrl", 0xd0 } }, -{ "bvs", {"bb", 0xd1 } }, -{ "cmps3", {"ababrw", 0xd2 } }, -{ "subf", {"rq", 0xd6 } }, -{ "subd", {"rq", 0xd7 } }, -{ "xorb3", {"rbrbwb", 0xd8 } }, -{ "pushb", {"rb", 0xd9 } }, -{ "xorw3", {"rwrwww", 0xda } }, -{ "pushw", {"rw", 0xdb } }, -{ "xorl3", {"rlrlwl", 0xdc } }, -{ "pushl", {"rl", 0xdd } }, -{ "insque", {"abab", 0xe0 } }, -{ "bcs", {"bb", 0xe1 } }, -{ "bgequ", {"bb", 0xe1 } }, -{ "mulf", {"rq", 0xe6 } }, -{ "muld", {"rq", 0xe7 } }, -{ "mnegb", {"rbwb", 0xe8 } }, -{ "movab", {"abwl", 0xe9 } }, -{ "mnegw", {"rwww", 0xea } }, -{ "movaw", {"awwl", 0xeb } }, -{ "mnegl", {"rlwl", 0xec } }, -{ "moval", {"alwl", 0xed } }, -{ "remque", {"ab", 0xf0 } }, -{ "bcc", {"bb", 0xf1 } }, -{ "blssu", {"bb", 0xf1 } }, -{ "divf", {"rq", 0xf6 } }, -{ "divd", {"rq", 0xf7 } }, -{ "movblk", {"alalrw", 0xf8 } }, -{ "pushab", {"ab", 0xf9 } }, -{ "pushaw", {"aw", 0xfb } }, -{ "casel", {"rlrlrl", 0xfc } }, -{ "pushal", {"al", 0xfd } }, -{ "callf", {"rbab", 0xfe } }, -{ "" , "" } /* empty is end sentinel */ - -}; diff --git a/include/opcode/tic30.h b/include/opcode/tic30.h deleted file mode 100644 index 198e04e1759..00000000000 --- a/include/opcode/tic30.h +++ /dev/null @@ -1,691 +0,0 @@ -/* tic30.h -- Header file for TI TMS320C30 opcode table - Copyright 1998 Free Software Foundation, Inc. - Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA -02110-1301, USA. */ - -/* FIXME: The opcode table should be in opcodes/tic30-opc.c, not in a - header file. */ - -#ifndef _TMS320_H_ -#define _TMS320_H_ - -struct _register -{ - char *name; - unsigned char opcode; - unsigned char regtype; -}; - -typedef struct _register reg; - -#define REG_Rn 0x01 -#define REG_ARn 0x02 -#define REG_DP 0x03 -#define REG_OTHER 0x04 - -static const reg tic30_regtab[] = { - { "r0", 0x00, REG_Rn }, - { "r1", 0x01, REG_Rn }, - { "r2", 0x02, REG_Rn }, - { "r3", 0x03, REG_Rn }, - { "r4", 0x04, REG_Rn }, - { "r5", 0x05, REG_Rn }, - { "r6", 0x06, REG_Rn }, - { "r7", 0x07, REG_Rn }, - { "ar0",0x08, REG_ARn }, - { "ar1",0x09, REG_ARn }, - { "ar2",0x0A, REG_ARn }, - { "ar3",0x0B, REG_ARn }, - { "ar4",0x0C, REG_ARn }, - { "ar5",0x0D, REG_ARn }, - { "ar6",0x0E, REG_ARn }, - { "ar7",0x0F, REG_ARn }, - { "dp", 0x10, REG_DP }, - { "ir0",0x11, REG_OTHER }, - { "ir1",0x12, REG_OTHER }, - { "bk", 0x13, REG_OTHER }, - { "sp", 0x14, REG_OTHER }, - { "st", 0x15, REG_OTHER }, - { "ie", 0x16, REG_OTHER }, - { "if", 0x17, REG_OTHER }, - { "iof",0x18, REG_OTHER }, - { "rs", 0x19, REG_OTHER }, - { "re", 0x1A, REG_OTHER }, - { "rc", 0x1B, REG_OTHER }, - { "R0", 0x00, REG_Rn }, - { "R1", 0x01, REG_Rn }, - { "R2", 0x02, REG_Rn }, - { "R3", 0x03, REG_Rn }, - { "R4", 0x04, REG_Rn }, - { "R5", 0x05, REG_Rn }, - { "R6", 0x06, REG_Rn }, - { "R7", 0x07, REG_Rn }, - { "AR0",0x08, REG_ARn }, - { "AR1",0x09, REG_ARn }, - { "AR2",0x0A, REG_ARn }, - { "AR3",0x0B, REG_ARn }, - { "AR4",0x0C, REG_ARn }, - { "AR5",0x0D, REG_ARn }, - { "AR6",0x0E, REG_ARn }, - { "AR7",0x0F, REG_ARn }, - { "DP", 0x10, REG_DP }, - { "IR0",0x11, REG_OTHER }, - { "IR1",0x12, REG_OTHER }, - { "BK", 0x13, REG_OTHER }, - { "SP", 0x14, REG_OTHER }, - { "ST", 0x15, REG_OTHER }, - { "IE", 0x16, REG_OTHER }, - { "IF", 0x17, REG_OTHER }, - { "IOF",0x18, REG_OTHER }, - { "RS", 0x19, REG_OTHER }, - { "RE", 0x1A, REG_OTHER }, - { "RC", 0x1B, REG_OTHER }, - { "", 0, 0 } -}; - -static const reg *const tic30_regtab_end - = tic30_regtab + sizeof(tic30_regtab)/sizeof(tic30_regtab[0]); - -/* Indirect Addressing Modes Modification Fields */ -/* Indirect Addressing with Displacement */ -#define PreDisp_Add 0x00 -#define PreDisp_Sub 0x01 -#define PreDisp_Add_Mod 0x02 -#define PreDisp_Sub_Mod 0x03 -#define PostDisp_Add_Mod 0x04 -#define PostDisp_Sub_Mod 0x05 -#define PostDisp_Add_Circ 0x06 -#define PostDisp_Sub_Circ 0x07 -/* Indirect Addressing with Index Register IR0 */ -#define PreIR0_Add 0x08 -#define PreIR0_Sub 0x09 -#define PreIR0_Add_Mod 0x0A -#define PreIR0_Sub_Mod 0x0B -#define PostIR0_Add_Mod 0x0C -#define PostIR0_Sub_Mod 0x0D -#define PostIR0_Add_Circ 0x0E -#define PostIR0_Sub_Circ 0x0F -/* Indirect Addressing with Index Register IR1 */ -#define PreIR1_Add 0x10 -#define PreIR1_Sub 0x11 -#define PreIR1_Add_Mod 0x12 -#define PreIR1_Sub_Mod 0x13 -#define PostIR1_Add_Mod 0x14 -#define PostIR1_Sub_Mod 0x15 -#define PostIR1_Add_Circ 0x16 -#define PostIR1_Sub_Circ 0x17 -/* Indirect Addressing (Special Cases) */ -#define IndirectOnly 0x18 -#define PostIR0_Add_BitRev 0x19 - -typedef struct { - char *syntax; - unsigned char modfield; - unsigned char displacement; -} ind_addr_type; - -#define IMPLIED_DISP 0x01 -#define DISP_REQUIRED 0x02 -#define NO_DISP 0x03 - -static const ind_addr_type tic30_indaddr_tab[] = { - { "*+ar", PreDisp_Add, IMPLIED_DISP }, - { "*-ar", PreDisp_Sub, IMPLIED_DISP }, - { "*++ar", PreDisp_Add_Mod, IMPLIED_DISP }, - { "*--ar", PreDisp_Sub_Mod, IMPLIED_DISP }, - { "*ar++", PostDisp_Add_Mod, IMPLIED_DISP }, - { "*ar--", PostDisp_Sub_Mod, IMPLIED_DISP }, - { "*ar++%", PostDisp_Add_Circ, IMPLIED_DISP }, - { "*ar--%", PostDisp_Sub_Circ, IMPLIED_DISP }, - { "*+ar()", PreDisp_Add, DISP_REQUIRED }, - { "*-ar()", PreDisp_Sub, DISP_REQUIRED }, - { "*++ar()", PreDisp_Add_Mod, DISP_REQUIRED }, - { "*--ar()", PreDisp_Sub_Mod, DISP_REQUIRED }, - { "*ar++()", PostDisp_Add_Mod, DISP_REQUIRED }, - { "*ar--()", PostDisp_Sub_Mod, DISP_REQUIRED }, - { "*ar++()%", PostDisp_Add_Circ, DISP_REQUIRED }, - { "*ar--()%", PostDisp_Sub_Circ, DISP_REQUIRED }, - { "*+ar(ir0)", PreIR0_Add, NO_DISP }, - { "*-ar(ir0)", PreIR0_Sub, NO_DISP }, - { "*++ar(ir0)", PreIR0_Add_Mod, NO_DISP }, - { "*--ar(ir0)", PreIR0_Sub_Mod, NO_DISP }, - { "*ar++(ir0)", PostIR0_Add_Mod, NO_DISP }, - { "*ar--(ir0)", PostIR0_Sub_Mod, NO_DISP }, - { "*ar++(ir0)%",PostIR0_Add_Circ, NO_DISP }, - { "*ar--(ir0)%",PostIR0_Sub_Circ, NO_DISP }, - { "*+ar(ir1)", PreIR1_Add, NO_DISP }, - { "*-ar(ir1)", PreIR1_Sub, NO_DISP }, - { "*++ar(ir1)", PreIR1_Add_Mod, NO_DISP }, - { "*--ar(ir1)", PreIR1_Sub_Mod, NO_DISP }, - { "*ar++(ir1)", PostIR1_Add_Mod, NO_DISP }, - { "*ar--(ir1)", PostIR1_Sub_Mod, NO_DISP }, - { "*ar++(ir1)%",PostIR1_Add_Circ, NO_DISP }, - { "*ar--(ir1)%",PostIR1_Sub_Circ, NO_DISP }, - { "*ar", IndirectOnly, NO_DISP }, - { "*ar++(ir0)b",PostIR0_Add_BitRev, NO_DISP }, - { "", 0,0 } -}; - -static const ind_addr_type *const tic30_indaddrtab_end - = tic30_indaddr_tab + sizeof(tic30_indaddr_tab)/sizeof(tic30_indaddr_tab[0]); - -/* Possible operand types */ -/* Register types */ -#define Rn 0x0001 -#define ARn 0x0002 -#define DPReg 0x0004 -#define OtherReg 0x0008 -/* Addressing mode types */ -#define Direct 0x0010 -#define Indirect 0x0020 -#define Imm16 0x0040 -#define Disp 0x0080 -#define Imm24 0x0100 -#define Abs24 0x0200 -/* 3 operand addressing mode types */ -#define op3T1 0x0400 -#define op3T2 0x0800 -/* Interrupt vector */ -#define IVector 0x1000 -/* Not required */ -#define NotReq 0x2000 - -#define GAddr1 Rn | Direct | Indirect | Imm16 -#define GAddr2 GAddr1 | AllReg -#define TAddr1 op3T1 | Rn | Indirect -#define TAddr2 op3T2 | Rn | Indirect -#define Reg Rn | ARn -#define AllReg Reg | DPReg | OtherReg - -typedef struct _template -{ - char *name; - unsigned int operands; /* how many operands */ - unsigned int base_opcode; /* base_opcode is the fundamental opcode byte */ - /* the bits in opcode_modifier are used to generate the final opcode from - the base_opcode. These bits also are used to detect alternate forms of - the same instruction */ - unsigned int opcode_modifier; - - /* opcode_modifier bits: */ -#define AddressMode 0x00600000 -#define PCRel 0x02000000 -#define StackOp 0x001F0000 -#define Rotate StackOp - - /* operand_types[i] describes the type of operand i. This is made - by OR'ing together all of the possible type masks. (e.g. - 'operand_types[i] = Reg|Imm' specifies that operand i can be - either a register or an immediate operand */ - unsigned int operand_types[3]; - /* This defines the number type of an immediate argument to an instruction. */ - int imm_arg_type; -#define Imm_None 0 -#define Imm_Float 1 -#define Imm_SInt 2 -#define Imm_UInt 3 -} -template; - -static const template tic30_optab[] = { - { "absf" ,2,0x00000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "absi" ,2,0x00800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "addc" ,2,0x01000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "addc3" ,3,0x20000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, - { "addf" ,2,0x01800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "addf3" ,3,0x20800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None }, - { "addi" ,2,0x02000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "addi3" ,3,0x21000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, - { "and" ,2,0x02800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, - { "and3" ,3,0x21800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, - { "andn" ,2,0x03000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, - { "andn3" ,3,0x22000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, - { "ash" ,2,0x03800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ash3" ,3,0x22800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, - { "b" ,1,0x68000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bu" ,1,0x68000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "blo" ,1,0x68010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bls" ,1,0x68020000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bhi" ,1,0x68030000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bhs" ,1,0x68040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "beq" ,1,0x68050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bne" ,1,0x68060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "blt" ,1,0x68070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "ble" ,1,0x68080000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bgt" ,1,0x68090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bge" ,1,0x680A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bz" ,1,0x68050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnz" ,1,0x68060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bp" ,1,0x68090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bn" ,1,0x68070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnn" ,1,0x680A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnv" ,1,0x680C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bv" ,1,0x680D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnuf" ,1,0x680E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "buf" ,1,0x680F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnc" ,1,0x68040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bc" ,1,0x68010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnlv" ,1,0x68100000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "blv" ,1,0x68110000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnluf" ,1,0x68120000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bluf" ,1,0x68130000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bzuf" ,1,0x68140000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bd" ,1,0x68200000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bud" ,1,0x68200000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "blod" ,1,0x68210000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "blsd" ,1,0x68220000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bhid" ,1,0x68230000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bhsd" ,1,0x68240000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "beqd" ,1,0x68250000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bned" ,1,0x68260000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bltd" ,1,0x68270000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bled" ,1,0x68280000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bgtd" ,1,0x68290000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bged" ,1,0x682A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bzd" ,1,0x68250000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnzd" ,1,0x68260000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bpd" ,1,0x68290000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnd" ,1,0x68270000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnnd" ,1,0x682A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnvd" ,1,0x682C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bvd" ,1,0x682D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnufd" ,1,0x682E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bufd" ,1,0x682F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bncd" ,1,0x68240000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bcd" ,1,0x68210000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnlvd" ,1,0x68300000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "blvd" ,1,0x68310000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bnlufd" ,1,0x68320000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "blufd" ,1,0x68330000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "bzufd" ,1,0x68340000,PCRel, { AllReg|Disp, 0, 0 }, Imm_None }, - { "br" ,1,0x60000000,0, { Imm24, 0, 0 }, Imm_UInt }, - { "brd" ,1,0x61000000,0, { Imm24, 0, 0 }, Imm_UInt }, - { "call" ,1,0x62000000,0, { Imm24, 0, 0 }, Imm_UInt }, - { "callu" ,1,0x70000000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "calllo" ,1,0x70010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callls" ,1,0x70020000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callhi" ,1,0x70030000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callhs" ,1,0x70040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "calleq" ,1,0x70050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callne" ,1,0x70060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "calllt" ,1,0x70070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callle" ,1,0x70080000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callgt" ,1,0x70090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callge" ,1,0x700A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callz" ,1,0x70050000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callnz" ,1,0x70060000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callp" ,1,0x70090000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "calln" ,1,0x70070000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callnn" ,1,0x700A0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callnv" ,1,0x700C0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callv" ,1,0x700D0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callnuf",1,0x700E0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "calluf" ,1,0x700F0000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callnc" ,1,0x70040000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callc" ,1,0x70010000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callnlv",1,0x70100000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "calllv" ,1,0x70110000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callnluf",1,0x70120000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callluf",1,0x70130000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "callzuf",1,0x70140000,PCRel, { AllReg|Disp, 0, 0 }, Imm_UInt }, - { "cmpf" ,2,0x04000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "cmpf3" ,2,0x23000000,AddressMode, { TAddr1, TAddr2, 0 }, Imm_None }, - { "cmpi" ,2,0x04800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "cmpi3" ,2,0x23800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, 0 }, Imm_None }, - { "db" ,2,0x6C000000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbu" ,2,0x6C000000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dblo" ,2,0x6C010000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbls" ,2,0x6C020000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbhi" ,2,0x6C030000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbhs" ,2,0x6C040000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbeq" ,2,0x6C050000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbne" ,2,0x6C060000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dblt" ,2,0x6C070000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dble" ,2,0x6C080000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbgt" ,2,0x6C090000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbge" ,2,0x6C0A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbz" ,2,0x6C050000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnz" ,2,0x6C060000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbp" ,2,0x6C090000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbn" ,2,0x6C070000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnn" ,2,0x6C0A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnv" ,2,0x6C0C0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbv" ,2,0x6C0D0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnuf" ,2,0x6C0E0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbuf" ,2,0x6C0F0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnc" ,2,0x6C040000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbc" ,2,0x6C010000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnlv" ,2,0x6C100000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dblv" ,2,0x6C110000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnluf" ,2,0x6C120000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbluf" ,2,0x6C130000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbzuf" ,2,0x6C140000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbd" ,2,0x6C200000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbud" ,2,0x6C200000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dblod" ,2,0x6C210000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dblsd" ,2,0x6C220000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbhid" ,2,0x6C230000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbhsd" ,2,0x6C240000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbeqd" ,2,0x6C250000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbned" ,2,0x6C260000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbltd" ,2,0x6C270000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbled" ,2,0x6C280000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbgtd" ,2,0x6C290000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbged" ,2,0x6C2A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbzd" ,2,0x6C250000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnzd" ,2,0x6C260000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbpd" ,2,0x6C290000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnd" ,2,0x6C270000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnnd" ,2,0x6C2A0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnvd" ,2,0x6C2C0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbvd" ,2,0x6C2D0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnufd" ,2,0x6C2E0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbufd" ,2,0x6C2F0000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbncd" ,2,0x6C240000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbcd" ,2,0x6C210000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnlvd" ,2,0x6C300000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dblvd" ,2,0x6C310000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbnlufd",2,0x6C320000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dblufd" ,2,0x6C330000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "dbzufd" ,2,0x6C340000,PCRel, { ARn, AllReg|Disp, 0 }, Imm_None }, - { "fix" ,2,0x05000000,AddressMode, { GAddr1, AllReg, 0 }, Imm_Float }, - { "float" ,2,0x05800000,AddressMode, { GAddr2, Rn, 0 }, Imm_SInt }, - { "iack" ,1,0x1B000000,AddressMode, { Direct|Indirect, 0, 0 }, Imm_None }, - { "idle" ,0,0x06000000,0, { 0, 0, 0 }, Imm_None }, - { "idle2" ,0,0x06000001,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */ - { "lde" ,2,0x06800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldf" ,2,0x07000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfu" ,2,0x40000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldflo" ,2,0x40800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfls" ,2,0x41000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfhi" ,2,0x41800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfhs" ,2,0x42000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfeq" ,2,0x42800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfne" ,2,0x43000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldflt" ,2,0x43800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfle" ,2,0x44000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfgt" ,2,0x44800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfge" ,2,0x45000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfz" ,2,0x42800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfnz" ,2,0x43000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfp" ,2,0x44800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfn" ,2,0x43800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfnn" ,2,0x45000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfnv" ,2,0x46000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfv" ,2,0x46800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfnuf" ,2,0x47000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfuf" ,2,0x47800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfnc" ,2,0x42000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfc" ,2,0x40800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfnlv" ,2,0x48000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldflv" ,2,0x48800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfnluf",2,0x49000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfluf" ,2,0x49800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfzuf" ,2,0x4A000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldfi" ,2,0x07800000,AddressMode, { Direct|Indirect, Rn, 0 }, Imm_None }, - { "ldi" ,2,0x08000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldiu" ,2,0x50000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldilo" ,2,0x50800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldils" ,2,0x51000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldihi" ,2,0x51800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldihs" ,2,0x52000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldieq" ,2,0x52800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldine" ,2,0x53000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldilt" ,2,0x53800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldile" ,2,0x54000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldigt" ,2,0x54800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldige" ,2,0x55000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldiz" ,2,0x52800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldinz" ,2,0x53000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldip" ,2,0x54800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldin" ,2,0x53800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldinn" ,2,0x55000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldinv" ,2,0x56000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldiv" ,2,0x56800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldinuf" ,2,0x57000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldiuf" ,2,0x57800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldinc" ,2,0x52000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldic" ,2,0x50800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldinlv" ,2,0x58000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldilv" ,2,0x58800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldinluf",2,0x59000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldiluf" ,2,0x59800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldizuf" ,2,0x5A000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "ldii" ,2,0x08800000,AddressMode, { Direct|Indirect, AllReg, 0 }, Imm_None }, - { "ldm" ,2,0x09000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "ldp" ,2,0x08700000,0, { Abs24|Direct, DPReg|NotReq, 0 }, Imm_UInt }, - { "lopower",0,0x10800001,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */ - { "lsh" ,2,0x09800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, - { "lsh3" ,3,0x24000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, - { "maxspeed",0,0x10800000,0, { 0, 0, 0 }, Imm_None }, /* LC31 Only */ - { "mpyf" ,2,0x0A000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "mpyf3" ,3,0x24800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None }, - { "mpyi" ,2,0x0A800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "mpyi3" ,3,0x25000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, - { "negb" ,2,0x0B000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "negf" ,2,0x0B800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "negi" ,2,0x0C000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "nop" ,1,0x0C800000,AddressMode, { AllReg|Indirect|NotReq, 0, 0 }, Imm_None }, - { "norm" ,2,0x0D000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, /*Check another source*/ - { "not" ,2,0x0D800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, - { "or" ,2,0x10000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, - { "or3" ,3,0x25800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, - { "pop" ,1,0x0E200000,StackOp, { AllReg, 0, 0 }, Imm_None }, - { "popf" ,1,0x0EA00000,StackOp, { Rn, 0, 0 }, Imm_None }, - { "push" ,1,0x0F200000,StackOp, { AllReg, 0, 0 }, Imm_None }, - { "pushf" ,1,0x0FA00000,StackOp, { Rn, 0, 0 }, Imm_None }, - { "reti" ,0,0x78000000,0, { 0, 0, 0 }, Imm_None }, - { "retiu" ,0,0x78000000,0, { 0, 0, 0 }, Imm_None }, - { "retilo" ,0,0x78010000,0, { 0, 0, 0 }, Imm_None }, - { "retils" ,0,0x78020000,0, { 0, 0, 0 }, Imm_None }, - { "retihi" ,0,0x78030000,0, { 0, 0, 0 }, Imm_None }, - { "retihs" ,0,0x78040000,0, { 0, 0, 0 }, Imm_None }, - { "retieq" ,0,0x78050000,0, { 0, 0, 0 }, Imm_None }, - { "retine" ,0,0x78060000,0, { 0, 0, 0 }, Imm_None }, - { "retilt" ,0,0x78070000,0, { 0, 0, 0 }, Imm_None }, - { "retile" ,0,0x78080000,0, { 0, 0, 0 }, Imm_None }, - { "retigt" ,0,0x78090000,0, { 0, 0, 0 }, Imm_None }, - { "retige" ,0,0x780A0000,0, { 0, 0, 0 }, Imm_None }, - { "retiz" ,0,0x78050000,0, { 0, 0, 0 }, Imm_None }, - { "retinz" ,0,0x78060000,0, { 0, 0, 0 }, Imm_None }, - { "retip" ,0,0x78090000,0, { 0, 0, 0 }, Imm_None }, - { "retin" ,0,0x78070000,0, { 0, 0, 0 }, Imm_None }, - { "retinn" ,0,0x780A0000,0, { 0, 0, 0 }, Imm_None }, - { "retinv" ,0,0x780C0000,0, { 0, 0, 0 }, Imm_None }, - { "retiv" ,0,0x780D0000,0, { 0, 0, 0 }, Imm_None }, - { "retinuf",0,0x780E0000,0, { 0, 0, 0 }, Imm_None }, - { "retiuf" ,0,0x780F0000,0, { 0, 0, 0 }, Imm_None }, - { "retinc" ,0,0x78040000,0, { 0, 0, 0 }, Imm_None }, - { "retic" ,0,0x78010000,0, { 0, 0, 0 }, Imm_None }, - { "retinlv",0,0x78100000,0, { 0, 0, 0 }, Imm_None }, - { "retilv" ,0,0x78110000,0, { 0, 0, 0 }, Imm_None }, - { "retinluf",0,0x78120000,0, { 0, 0, 0 }, Imm_None }, - { "retiluf",0,0x78130000,0, { 0, 0, 0 }, Imm_None }, - { "retizuf",0,0x78140000,0, { 0, 0, 0 }, Imm_None }, - { "rets" ,0,0x78800000,0, { 0, 0, 0 }, Imm_None }, - { "retsu" ,0,0x78800000,0, { 0, 0, 0 }, Imm_None }, - { "retslo" ,0,0x78810000,0, { 0, 0, 0 }, Imm_None }, - { "retsls" ,0,0x78820000,0, { 0, 0, 0 }, Imm_None }, - { "retshi" ,0,0x78830000,0, { 0, 0, 0 }, Imm_None }, - { "retshs" ,0,0x78840000,0, { 0, 0, 0 }, Imm_None }, - { "retseq" ,0,0x78850000,0, { 0, 0, 0 }, Imm_None }, - { "retsne" ,0,0x78860000,0, { 0, 0, 0 }, Imm_None }, - { "retslt" ,0,0x78870000,0, { 0, 0, 0 }, Imm_None }, - { "retsle" ,0,0x78880000,0, { 0, 0, 0 }, Imm_None }, - { "retsgt" ,0,0x78890000,0, { 0, 0, 0 }, Imm_None }, - { "retsge" ,0,0x788A0000,0, { 0, 0, 0 }, Imm_None }, - { "retsz" ,0,0x78850000,0, { 0, 0, 0 }, Imm_None }, - { "retsnz" ,0,0x78860000,0, { 0, 0, 0 }, Imm_None }, - { "retsp" ,0,0x78890000,0, { 0, 0, 0 }, Imm_None }, - { "retsn" ,0,0x78870000,0, { 0, 0, 0 }, Imm_None }, - { "retsnn" ,0,0x788A0000,0, { 0, 0, 0 }, Imm_None }, - { "retsnv" ,0,0x788C0000,0, { 0, 0, 0 }, Imm_None }, - { "retsv" ,0,0x788D0000,0, { 0, 0, 0 }, Imm_None }, - { "retsnuf",0,0x788E0000,0, { 0, 0, 0 }, Imm_None }, - { "retsuf" ,0,0x788F0000,0, { 0, 0, 0 }, Imm_None }, - { "retsnc" ,0,0x78840000,0, { 0, 0, 0 }, Imm_None }, - { "retsc" ,0,0x78810000,0, { 0, 0, 0 }, Imm_None }, - { "retsnlv",0,0x78900000,0, { 0, 0, 0 }, Imm_None }, - { "retslv" ,0,0x78910000,0, { 0, 0, 0 }, Imm_None }, - { "retsnluf",0,0x78920000,0, { 0, 0, 0 }, Imm_None }, - { "retsluf",0,0x78930000,0, { 0, 0, 0 }, Imm_None }, - { "retszuf",0,0x78940000,0, { 0, 0, 0 }, Imm_None }, - { "rnd" ,2,0x11000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "rol" ,1,0x11E00001,Rotate, { AllReg, 0, 0 }, Imm_None }, - { "rolc" ,1,0x12600001,Rotate, { AllReg, 0, 0 }, Imm_None }, - { "ror" ,1,0x12E0FFFF,Rotate, { AllReg, 0, 0 }, Imm_None }, - { "rorc" ,1,0x1360FFFF,Rotate, { AllReg, 0, 0 }, Imm_None }, - { "rptb" ,1,0x64000000,0, { Imm24, 0, 0 }, Imm_UInt }, - { "rpts" ,1,0x139B0000,AddressMode, { GAddr2, 0, 0 }, Imm_UInt }, - { "sigi" ,0,0x16000000,0, { 0, 0, 0 }, Imm_None }, - { "stf" ,2,0x14000000,AddressMode, { Rn, Direct|Indirect, 0 }, Imm_Float }, - { "stfi" ,2,0x14800000,AddressMode, { Rn, Direct|Indirect, 0 }, Imm_Float }, - { "sti" ,2,0x15000000,AddressMode, { AllReg, Direct|Indirect, 0 }, Imm_SInt }, - { "stii" ,2,0x15800000,AddressMode, { AllReg, Direct|Indirect, 0 }, Imm_SInt }, - { "subb" ,2,0x16800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "subb3" ,3,0x26000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, - { "subc" ,2,0x17000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, - { "subf" ,2,0x17800000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "subf3" ,3,0x26800000,AddressMode, { TAddr1, TAddr2, Rn }, Imm_None }, - { "subi" ,2,0x18000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "subi3" ,3,0x27000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, - { "subrb" ,2,0x18800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "subrf" ,2,0x19000000,AddressMode, { GAddr1, Rn, 0 }, Imm_Float }, - { "subri" ,2,0x19800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_SInt }, - { "swi" ,0,0x66000000,0, { 0, 0, 0 }, Imm_None }, - { "trap" ,1,0x74800020,0, { IVector, 0, 0 }, Imm_None }, - { "trapu" ,1,0x74800020,0, { IVector, 0, 0 }, Imm_None }, - { "traplo" ,1,0x74810020,0, { IVector, 0, 0 }, Imm_None }, - { "trapls" ,1,0x74820020,0, { IVector, 0, 0 }, Imm_None }, - { "traphi" ,1,0x74830020,0, { IVector, 0, 0 }, Imm_None }, - { "traphs" ,1,0x74840020,0, { IVector, 0, 0 }, Imm_None }, - { "trapeq" ,1,0x74850020,0, { IVector, 0, 0 }, Imm_None }, - { "trapne" ,1,0x74860020,0, { IVector, 0, 0 }, Imm_None }, - { "traplt" ,1,0x74870020,0, { IVector, 0, 0 }, Imm_None }, - { "traple" ,1,0x74880020,0, { IVector, 0, 0 }, Imm_None }, - { "trapgt" ,1,0x74890020,0, { IVector, 0, 0 }, Imm_None }, - { "trapge" ,1,0x748A0020,0, { IVector, 0, 0 }, Imm_None }, - { "trapz" ,1,0x74850020,0, { IVector, 0, 0 }, Imm_None }, - { "trapnz" ,1,0x74860020,0, { IVector, 0, 0 }, Imm_None }, - { "trapp" ,1,0x74890020,0, { IVector, 0, 0 }, Imm_None }, - { "trapn" ,1,0x74870020,0, { IVector, 0, 0 }, Imm_None }, - { "trapnn" ,1,0x748A0020,0, { IVector, 0, 0 }, Imm_None }, - { "trapnv" ,1,0x748C0020,0, { IVector, 0, 0 }, Imm_None }, - { "trapv" ,1,0x748D0020,0, { IVector, 0, 0 }, Imm_None }, - { "trapnuf",1,0x748E0020,0, { IVector, 0, 0 }, Imm_None }, - { "trapuf" ,1,0x748F0020,0, { IVector, 0, 0 }, Imm_None }, - { "trapnc" ,1,0x74840020,0, { IVector, 0, 0 }, Imm_None }, - { "trapc" ,1,0x74810020,0, { IVector, 0, 0 }, Imm_None }, - { "trapnlv",1,0x74900020,0, { IVector, 0, 0 }, Imm_None }, - { "traplv" ,1,0x74910020,0, { IVector, 0, 0 }, Imm_None }, - { "trapnluf",1,0x74920020,0, { IVector, 0, 0 }, Imm_None }, - { "trapluf",1,0x74930020,0, { IVector, 0, 0 }, Imm_None }, - { "trapzuf",1,0x74940020,0, { IVector, 0, 0 }, Imm_None }, - { "tstb" ,2,0x1A000000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, - { "tstb3" ,2,0x27800000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, 0 }, Imm_None }, - { "xor" ,2,0x1A800000,AddressMode, { GAddr2, AllReg, 0 }, Imm_UInt }, - { "xor3" ,3,0x28000000,AddressMode, { TAddr1|AllReg, TAddr2|AllReg, AllReg }, Imm_None }, - { "" ,0,0x00000000,0, { 0, 0, 0 }, 0 } -}; - -static const template *const tic30_optab_end = - tic30_optab + sizeof(tic30_optab)/sizeof(tic30_optab[0]); - -typedef struct { - char *name; - unsigned int operands_1; - unsigned int operands_2; - unsigned int base_opcode; - unsigned int operand_types[2][3]; - /* Which operand fits into which part of the final opcode word. */ - int oporder; -} partemplate; - -/* oporder defines - not very descriptive. */ -#define OO_4op1 0 -#define OO_4op2 1 -#define OO_4op3 2 -#define OO_5op1 3 -#define OO_5op2 4 -#define OO_PField 5 - -static const partemplate tic30_paroptab[] = { - { "q_absf_stf", 2,2,0xC8000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, - OO_4op1 }, - { "q_absi_sti", 2,2,0xCA000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, - OO_4op1 }, - { "q_addf3_stf", 3,2,0xCC000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, - OO_5op1 }, - { "q_addi3_sti", 3,2,0xCE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, - OO_5op1 }, - { "q_and3_sti", 3,2,0xD0000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, - OO_5op1 }, - { "q_ash3_sti", 3,2,0xD2000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, - OO_5op2 }, - { "q_fix_sti", 2,2,0xD4000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, - OO_4op1 }, - { "q_float_stf", 2,2,0xD6000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, - OO_4op1 }, - { "q_ldf_ldf", 2,2,0xC4000000, { { Indirect, Rn, 0 }, { Indirect, Rn, 0 } }, - OO_4op2 }, - { "q_ldf_stf", 2,2,0xD8000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, - OO_4op1 }, - { "q_ldi_ldi", 2,2,0xC6000000, { { Indirect, Rn, 0 }, { Indirect, Rn, 0 } }, - OO_4op2 }, - { "q_ldi_sti", 2,2,0xDA000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, - OO_4op1 }, - { "q_lsh3_sti", 3,2,0xDC000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, - OO_5op2 }, - { "q_mpyf3_addf3",3,3,0x80000000, { { Rn | Indirect, Rn | Indirect, Rn }, - { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, - { "q_mpyf3_stf", 3,2,0xDE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, - OO_5op1 }, - { "q_mpyf3_subf3",3,3,0x84000000, { { Rn | Indirect, Rn | Indirect, Rn }, - { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, - { "q_mpyi3_addi3",3,3,0x88000000, { { Rn | Indirect, Rn | Indirect, Rn }, - { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, - { "q_mpyi3_sti", 3,2,0xE0000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, - OO_5op1 }, - { "q_mpyi3_subi3",3,3,0x8C000000, { { Rn | Indirect, Rn | Indirect, Rn }, - { Rn | Indirect, Rn | Indirect, Rn } }, OO_PField }, - { "q_negf_stf", 2,2,0xE2000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, - OO_4op1 }, - { "q_negi_sti", 2,2,0xE4000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, - OO_4op1 }, - { "q_not_sti", 2,2,0xE6000000, { { Indirect, Rn, 0 }, { Rn, Indirect, 0 } }, - OO_4op1 }, - { "q_or3_sti", 3,2,0xE8000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, - OO_5op1 }, - { "q_stf_stf", 2,2,0xC0000000, { { Rn, Indirect, 0 }, { Rn, Indirect, 0 } }, - OO_4op3 }, - { "q_sti_sti", 2,2,0xC2000000, { { Rn, Indirect, 0 }, { Rn, Indirect, 0 } }, - OO_4op3 }, - { "q_subf3_stf", 3,2,0xEA000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, - OO_5op2 }, - { "q_subi3_sti", 3,2,0xEC000000, { { Rn, Indirect, Rn }, { Rn, Indirect, 0 } }, - OO_5op2 }, - { "q_xor3_sti", 3,2,0xEE000000, { { Indirect, Rn, Rn }, { Rn, Indirect, 0 } }, - OO_5op1 }, - { "", 0,0,0x00000000, { { 0, 0, 0 }, { 0, 0, 0 } }, 0 } -}; - -static const partemplate *const tic30_paroptab_end = - tic30_paroptab + sizeof(tic30_paroptab)/sizeof(tic30_paroptab[0]); - -#endif diff --git a/include/opcode/tic4x.h b/include/opcode/tic4x.h deleted file mode 100644 index 8830a7df161..00000000000 --- a/include/opcode/tic4x.h +++ /dev/null @@ -1,1079 +0,0 @@ -/* Table of opcodes for the Texas Instruments TMS320C[34]X family. - - Copyright (C) 2002, 2003 Free Software Foundation. - - Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz) - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -*/ - -#define IS_CPU_TIC3X(v) ((v) == 30 || (v) == 31 || (v) == 32 || (v) == 33) -#define IS_CPU_TIC4X(v) ((v) == 0 || (v) == 40 || (v) == 44) - -/* Define some bitfield extraction/insertion macros. */ -#define EXTR(inst, m, l) ((inst) << (31 - (m)) >> (31 - ((m) - (l)))) -#define EXTRU(inst, m, l) EXTR ((unsigned long)(inst), (m), (l)) -#define EXTRS(inst, m, l) EXTR ((long)(inst), (m), (l)) -#define INSERTU(inst, val, m, l) (inst |= ((val) << (l))) -#define INSERTS(inst, val, m, l) INSERTU (inst, ((val) & ((1 << ((m) - (l) + 1)) - 1)), m, l) - -/* Define register numbers. */ -typedef enum - { - REG_R0, REG_R1, REG_R2, REG_R3, - REG_R4, REG_R5, REG_R6, REG_R7, - REG_AR0, REG_AR1, REG_AR2, REG_AR3, - REG_AR4, REG_AR5, REG_AR6, REG_AR7, - REG_DP, REG_IR0, REG_IR1, REG_BK, - REG_SP, REG_ST, REG_DIE, REG_IIE, - REG_IIF, REG_RS, REG_RE, REG_RC, - REG_R8, REG_R9, REG_R10, REG_R11, - REG_IVTP, REG_TVTP - } -c4x_reg_t; - -/* Note that the actual register numbers for IVTP is 0 and TVTP is 1. */ - -#define REG_IE REG_DIE /* C3x only */ -#define REG_IF REG_IIE /* C3x only */ -#define REG_IOF REG_IIF /* C3x only */ - -#define TIC3X_REG_MAX REG_RC -#define TIC4X_REG_MAX REG_TVTP - -/* Register table size including C4x expansion regs. */ -#define REG_TABLE_SIZE (TIC4X_REG_MAX + 1) - -struct tic4x_register -{ - char * name; - unsigned long regno; -}; - -typedef struct tic4x_register tic4x_register_t; - -/* We could store register synonyms here. */ -static const tic4x_register_t tic3x_registers[] = -{ - {"f0", REG_R0}, - {"r0", REG_R0}, - {"f1", REG_R1}, - {"r1", REG_R1}, - {"f2", REG_R2}, - {"r2", REG_R2}, - {"f3", REG_R3}, - {"r3", REG_R3}, - {"f4", REG_R4}, - {"r4", REG_R4}, - {"f5", REG_R5}, - {"r5", REG_R5}, - {"f6", REG_R6}, - {"r6", REG_R6}, - {"f7", REG_R7}, - {"r7", REG_R7}, - {"ar0", REG_AR0}, - {"ar1", REG_AR1}, - {"ar2", REG_AR2}, - {"ar3", REG_AR3}, - {"ar4", REG_AR4}, - {"ar5", REG_AR5}, - {"ar6", REG_AR6}, - {"ar7", REG_AR7}, - {"dp", REG_DP}, - {"ir0", REG_IR0}, - {"ir1", REG_IR1}, - {"bk", REG_BK}, - {"sp", REG_SP}, - {"st", REG_ST}, - {"ie", REG_IE}, - {"if", REG_IF}, - {"iof", REG_IOF}, - {"rs", REG_RS}, - {"re", REG_RE}, - {"rc", REG_RC}, - {"", 0} -}; - -const unsigned int tic3x_num_registers = (((sizeof tic3x_registers) / (sizeof tic3x_registers[0])) - 1); - -/* Define C4x registers in addition to C3x registers. */ -static const tic4x_register_t tic4x_registers[] = -{ - {"die", REG_DIE}, /* Clobbers C3x REG_IE */ - {"iie", REG_IIE}, /* Clobbers C3x REG_IF */ - {"iif", REG_IIF}, /* Clobbers C3x REG_IOF */ - {"f8", REG_R8}, - {"r8", REG_R8}, - {"f9", REG_R9}, - {"r9", REG_R9}, - {"f10", REG_R10}, - {"r10", REG_R10}, - {"f11", REG_R11}, - {"r11", REG_R11}, - {"ivtp", REG_IVTP}, - {"tvtp", REG_TVTP}, - {"", 0} -}; - -const unsigned int tic4x_num_registers = (((sizeof tic4x_registers) / (sizeof tic4x_registers[0])) - 1); - -struct tic4x_cond -{ - char * name; - unsigned long cond; -}; - -typedef struct tic4x_cond tic4x_cond_t; - -/* Define conditional branch/load suffixes. Put desired form for - disassembler last. */ -static const tic4x_cond_t tic4x_conds[] = -{ - { "u", 0x00 }, - { "c", 0x01 }, { "lo", 0x01 }, - { "ls", 0x02 }, - { "hi", 0x03 }, - { "nc", 0x04 }, { "hs", 0x04 }, - { "z", 0x05 }, { "eq", 0x05 }, - { "nz", 0x06 }, { "ne", 0x06 }, - { "n", 0x07 }, { "l", 0x07 }, { "lt", 0x07 }, - { "le", 0x08 }, - { "p", 0x09 }, { "gt", 0x09 }, - { "nn", 0x0a }, { "ge", 0x0a }, - { "nv", 0x0c }, - { "v", 0x0d }, - { "nuf", 0x0e }, - { "uf", 0x0f }, - { "nlv", 0x10 }, - { "lv", 0x11 }, - { "nluf", 0x12 }, - { "luf", 0x13 }, - { "zuf", 0x14 }, - /* Dummy entry, not included in num_conds. This - lets code examine entry i+1 without checking - if we've run off the end of the table. */ - { "", 0x0} -}; - -const unsigned int tic4x_num_conds = (((sizeof tic4x_conds) / (sizeof tic4x_conds[0])) - 1); - -struct tic4x_indirect -{ - char * name; - unsigned long modn; -}; - -typedef struct tic4x_indirect tic4x_indirect_t; - -/* Define indirect addressing modes where: - d displacement (signed) - y ir0 - z ir1 */ - -static const tic4x_indirect_t tic4x_indirects[] = -{ - { "*+a(d)", 0x00 }, - { "*-a(d)", 0x01 }, - { "*++a(d)", 0x02 }, - { "*--a(d)", 0x03 }, - { "*a++(d)", 0x04 }, - { "*a--(d)", 0x05 }, - { "*a++(d)%", 0x06 }, - { "*a--(d)%", 0x07 }, - { "*+a(y)", 0x08 }, - { "*-a(y)", 0x09 }, - { "*++a(y)", 0x0a }, - { "*--a(y)", 0x0b }, - { "*a++(y)", 0x0c }, - { "*a--(y)", 0x0d }, - { "*a++(y)%", 0x0e }, - { "*a--(y)%", 0x0f }, - { "*+a(z)", 0x10 }, - { "*-a(z)", 0x11 }, - { "*++a(z)", 0x12 }, - { "*--a(z)", 0x13 }, - { "*a++(z)", 0x14 }, - { "*a--(z)", 0x15 }, - { "*a++(z)%", 0x16 }, - { "*a--(z)%", 0x17 }, - { "*a", 0x18 }, - { "*a++(y)b", 0x19 }, - /* Dummy entry, not included in num_indirects. This - lets code examine entry i+1 without checking - if we've run off the end of the table. */ - { "", 0x0} -}; - -#define TIC3X_MODN_MAX 0x19 - -const unsigned int tic4x_num_indirects = (((sizeof tic4x_indirects) / (sizeof tic4x_indirects[0])) - 1); - -/* Instruction template. */ -struct tic4x_inst -{ - char * name; - unsigned long opcode; - unsigned long opmask; - char * args; - unsigned long oplevel; -}; - -typedef struct tic4x_inst tic4x_inst_t; - -/* Opcode infix - B condition 16--20 U,C,Z,LO,HI, etc. - C condition 23--27 U,C,Z,LO,HI, etc. - - Arguments - , required arg follows - ; optional arg follows - - Argument types bits [classes] - example - ----------------------------------------------------------- - * indirect (all) 0--15 [A,AB,AU,AF,A2,A3,A6,A7,AY,B,BA,BB,BI,B6,B7] - *+AR0(5), *++AR0(IR0) - # direct (for LDP) 0--15 [Z] - @start, start - @ direct 0--15 [A,AB,AU,AF,A3,A6,A7,AY,B,BA,BB,BI,B6,B7] - @start, start - A address register 22--24 [D] - AR0, AR7 - B unsigned integer 0--23 [I,I2] - @start, start (absolute on C3x, relative on C4x) - C indirect (disp - C4x) 0--7 [S,SC,S2,T,TC,T2,T2C] - *+AR0(5) - E register (all) 0--7 [T,TC,T2,T2C] - R0, R7, R11, AR0, DP - e register (0-11) 0--7 [S,SC,S2] - R0, R7, R11 - F short float immediate 0--15 [AF,B,BA,BB] - 3.5, 0e-3.5e-1 - G register (all) 8--15 [T,TC,T2,T2C] - R0, R7, R11, AR0, DP - g register (0-11) 0--7 [S,SC,S2] - R0, R7, R11 - H register (0-7) 18--16 [LS,M,P,Q] - R0, R7 - I indirect (no disp) 0--7 [S,SC,S2,T,TC,T2,T2C] - *+AR0(1), *+AR0(IR0) - i indirect (enhanced) 0--7 [LL,LS,M,P,Q,QC] - *+AR0(1), R5 - J indirect (no disp) 8--15 [LL,LS,P,Q,QC,S,SC,S2,T,TC,T2,T2C] - *+AR0(1), *+AR0(IR0) - j indirect (enhanced) 8--15 [M] - *+AR0(1), R5 - K register 19--21 [LL,M,Q,QC] - R0, R7 - L register 22--24 [LL,LS,P,Q,QC] - R0, R7 - M register (R2,R3) 22--22 [M] R2, R3 - N register (R0,R1) 23--23 [M] R0, R1 - O indirect(disp - C4x) 8--15 [S,SC,S2,T,TC,T2] - *+AR0(5) - P displacement (PC Rel) 0--15 [D,J,JS] - @start, start - Q register (all) 0--15 [A,AB,AU,A2,A3,AY,BA,BI,D,I2,J,JS] - R0, AR0, DP, SP - q register (0-11) 0--15 [AF,B,BB] - R0, R7, R11 - R register (all) 16--20 [A,AB,AU,AF,A6,A7,R,T,TC] - R0, AR0, DP, SP - r register (0-11) 16--20 [B,BA,BB,BI,B6,B7,RF,S,SC] - R0, R1, R11 - S short int immediate 0--15 [A,AB,AY,BI] - -5, 5 - T integer (C4x) 16--20 [Z] - -5, 12 - U unsigned integer 0--15 [AU,A3] - 0, 65535 - V vector (C4x: 0--8) 0--4 [Z] - 25, 7 - W short int (C4x) 0--7 [T,TC,T2,T2C] - -3, 5 - X expansion reg (C4x) 0--4 [Z] - IVTP, TVTP - Y address reg (C4x) 16--20 [Z] - AR0, DP, SP, IR0 - Z expansion reg (C4x) 16--20 [Z] - IVTP, TVTP -*/ - -#define TIC4X_OPERANDS_MAX 7 /* Max number of operands for an inst. */ -#define TIC4X_NAME_MAX 16 /* Max number of chars in parallel name. */ - -/* Define the instruction level */ -#define OP_C3X 0x1 /* C30 support - supported by all */ -#define OP_C4X 0x2 /* C40 support - C40, C44 */ -#define OP_ENH 0x4 /* Class LL,LS,M,P,Q,QC enhancements. Argument type - I and J is enhanced in these classes - C31>=6.0, - C32>=2.0, C33 */ -#define OP_LPWR 0x8 /* Low power support (LOPOWER, MAXSPEED) - C30>=7.0, - LC31, C31>=5.0, C32 */ -#define OP_IDLE2 0x10 /* Idle2 support (IDLE2) - C30>=7.0, LC31, C31>=5.0, - C32, C33, C40>=5.0, C44 */ - -/* The following class definition is a classification scheme for - putting instructions with similar type of arguments together. It - simplifies the op-code definitions significantly, as we then only - need to use the class macroes for 95% of the DSP's opcodes. -*/ - -/* A: General 2-operand integer operations - Syntax: src, dst - src = Register (Q), Direct (@), Indirect (*), Signed immediate (S) - dst = Register (R) - Instr: 15/8 - ABSI, ADDC, ADDI, ASH, CMPI, LDI, LSH, MPYI, NEGB, NEGI, - SUBB, SUBC, SUBI, SUBRB, SUBRI, C4x: LBn, LHn, LWLn, LWRn, - MBn, MHn, MPYSHI, MPYUHI -*/ -#define A_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00000000, 0xffe00000, "Q;R", level }, \ - { name, opcode|0x00200000, 0xffe00000, "@,R", level }, \ - { name, opcode|0x00400000, 0xffe00000, "*,R", level }, \ - { name, opcode|0x00600000, 0xffe00000, "S,R", level } - -/* AB: General 2-operand integer operation with condition - Syntax: c src, dst - c = Condition - src = Register (Q), Direct (@), Indirect (*), Signed immediate (S) - dst = Register (R) - Instr: 1/0 - LDIc -*/ -#define AB_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x40000000, 0xf0600000, "Q;R", level }, \ - { name, opcode|0x40200000, 0xf0600000, "@,R", level }, \ - { name, opcode|0x40400000, 0xf0600000, "*,R", level }, \ - { name, opcode|0x40600000, 0xf0600000, "S,R", level } - -/* AU: General 2-operand unsigned integer operation - Syntax: src, dst - src = Register (Q), Direct (@), Indirect (*), Unsigned immediate (U) - dst = Register (R) - Instr: 6/2 - AND, ANDN, NOT, OR, TSTB, XOR, C4x: LBUn, LHUn -*/ -#define AU_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00000000, 0xffe00000, "Q;R", level }, \ - { name, opcode|0x00200000, 0xffe00000, "@,R", level }, \ - { name, opcode|0x00400000, 0xffe00000, "*,R", level }, \ - { name, opcode|0x00600000, 0xffe00000, "U,R", level } - -/* AF: General 2-operand float to integer operation - Syntax: src, dst - src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F) - dst = Register (R) - Instr: 1/0 - FIX -*/ -#define AF_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00000000, 0xffe00000, "q;R", level }, \ - { name, opcode|0x00200000, 0xffe00000, "@,R", level }, \ - { name, opcode|0x00400000, 0xffe00000, "*,R", level }, \ - { name, opcode|0x00600000, 0xffe00000, "F,R", level } - -/* A2: Limited 1-operand (integer) operation - Syntax: src - src = Register (Q), Indirect (*), None - Instr: 1/0 - NOP -*/ -#define A2_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00000000, 0xffe00000, "Q", level }, \ - { name, opcode|0x00400000, 0xffe00000, "*", level }, \ - { name, opcode|0x00000000, 0xffe00000, "" , level } - -/* A3: General 1-operand unsigned integer operation - Syntax: src - src = Register (Q), Direct (@), Indirect (*), Unsigned immediate (U) - Instr: 1/0 - RPTS -*/ -#define A3_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00000000, 0xffff0000, "Q", level }, \ - { name, opcode|0x00200000, 0xffff0000, "@", level }, \ - { name, opcode|0x00400000, 0xffff0000, "*", level }, \ - { name, opcode|0x00600000, 0xffff0000, "U", level } - -/* A6: Limited 2-operand integer operation - Syntax: src, dst - src = Direct (@), Indirect (*) - dst = Register (R) - Instr: 1/1 - LDII, C4x: SIGI -*/ -#define A6_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00200000, 0xffe00000, "@,R", level }, \ - { name, opcode|0x00400000, 0xffe00000, "*,R", level } - -/* A7: Limited 2-operand integer store operation - Syntax: src, dst - src = Register (R) - dst = Direct (@), Indirect (*) - Instr: 2/0 - STI, STII -*/ -#define A7_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00200000, 0xffe00000, "R,@", level }, \ - { name, opcode|0x00400000, 0xffe00000, "R,*", level } - -/* AY: General 2-operand signed address load operation - Syntax: src, dst - src = Register (Q), Direct (@), Indirect (*), Signed immediate (S) - dst = Address register - ARx, IRx, DP, BK, SP (Y) - Instr: 0/1 - C4x: LDA - Note: Q and Y should *never* be the same register -*/ -#define AY_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00000000, 0xffe00000, "Q,Y", level }, \ - { name, opcode|0x00200000, 0xffe00000, "@,Y", level }, \ - { name, opcode|0x00400000, 0xffe00000, "*,Y", level }, \ - { name, opcode|0x00600000, 0xffe00000, "S,Y", level } - -/* B: General 2-operand float operation - Syntax: src, dst - src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F) - dst = Register 0-11 (r) - Instr: 12/2 - ABSF, ADDF, CMPF, LDE, LDF, LDM, MPYF, NEGF, NORM, RND, - SUBF, SUBRF, C4x: RSQRF, TOIEEE -*/ -#define B_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00000000, 0xffe00000, "q;r", level }, \ - { name, opcode|0x00200000, 0xffe00000, "@,r", level }, \ - { name, opcode|0x00400000, 0xffe00000, "*,r", level }, \ - { name, opcode|0x00600000, 0xffe00000, "F,r", level } - -/* BA: General 2-operand integer to float operation - Syntax: src, dst - src = Register (Q), Direct (@), Indirect (*), Float immediate (F) - dst = Register 0-11 (r) - Instr: 0/1 - C4x: CRCPF -*/ -#define BA_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00000000, 0xffe00000, "Q;r", level }, \ - { name, opcode|0x00200000, 0xffe00000, "@,r", level }, \ - { name, opcode|0x00400000, 0xffe00000, "*,r", level }, \ - { name, opcode|0x00600000, 0xffe00000, "F,r", level } - -/* BB: General 2-operand conditional float operation - Syntax: c src, dst - c = Condition - src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F) - dst = Register 0-11 (r) - Instr: 1/0 - LDFc -*/ -#define BB_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x40000000, 0xf0600000, "q;r", level }, \ - { name, opcode|0x40200000, 0xf0600000, "@,r", level }, \ - { name, opcode|0x40400000, 0xf0600000, "*,r", level }, \ - { name, opcode|0x40600000, 0xf0600000, "F,r", level } - -/* BI: General 2-operand integer to float operation (yet different to BA) - Syntax: src, dst - src = Register (Q), Direct (@), Indirect (*), Signed immediate (S) - dst = Register 0-11 (r) - Instr: 1/0 - FLOAT -*/ -#define BI_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00000000, 0xffe00000, "Q;r", level }, \ - { name, opcode|0x00200000, 0xffe00000, "@,r", level }, \ - { name, opcode|0x00400000, 0xffe00000, "*,r", level }, \ - { name, opcode|0x00600000, 0xffe00000, "S,r", level } - -/* B6: Limited 2-operand float operation - Syntax: src, dst - src = Direct (@), Indirect (*) - dst = Register 0-11 (r) - Instr: 1/1 - LDFI, C4x: FRIEEE -*/ -#define B6_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00200000, 0xffe00000, "@,r", level }, \ - { name, opcode|0x00400000, 0xffe00000, "*,r", level } - -/* B7: Limited 2-operand float store operation - Syntax: src, dst - src = Register 0-11 (r) - dst = Direct (@), Indirect (*) - Instr: 2/0 - STF, STFI -*/ -#define B7_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x00200000, 0xffe00000, "r,@", level }, \ - { name, opcode|0x00400000, 0xffe00000, "r,*", level } - -/* D: Decrement and brach operations - Syntax: c ARn, dst - c = condition - ARn = AR register 0-7 (A) - dst = Register (Q), PC-relative (P) - Instr: 2/0 - DBc, DBcD - Alias: -*/ -#define D_CLASS_INSN(name1, name2, opcode, level) \ - { name1, opcode|0x00000000, 0xfe200000, "A,Q", level }, \ - { name1, opcode|0x02000000, 0xfe200000, "A,P", level }, \ - { name2, opcode|0x00000000, 0xfe200000, "A,Q", level }, \ - { name2, opcode|0x02000000, 0xfe200000, "A,P", level } - -/* I: General branch operations - Syntax: dst - dst = Address (B) - Instr: 3/1 - BR, BRD, CALL, C4x: LAJ -*/ - -/* I2: General branch operations (C4x addition) - Syntax: dst - dst = Address (B), C4x: Register (Q) - Instr: 2/0 - RPTB, RPTBD -*/ - -/* J: General conditional branch operations - Syntax: c dst - c = Condition - dst = Register (Q), PC-relative (P) - Instr: 2/3 - Bc, BcD, C4x: BcAF, BcAT, LAJc - Alias: -*/ -#define J_CLASS_INSN(name1, name2, opcode, level) \ - { name1, opcode|0x00000000, 0xffe00000, "Q", level }, \ - { name1, opcode|0x02000000, 0xffe00000, "P", level }, \ - { name2, opcode|0x00000000, 0xffe00000, "Q", level }, \ - { name2, opcode|0x02000000, 0xffe00000, "P", level } - -/* JS: General conditional branch operations - Syntax: c dst - c = Condition - dst = Register (Q), PC-relative (P) - Instr: 1/1 - CALLc, C4X: LAJc -*/ - -/* LL: Load-load parallell operation - Syntax: src2, dst2 || src1, dst1 - src1 = Indirect 0,1,IR0,IR1 (J) - dst1 = Register 0-7 (K) - src2 = Indirect 0,1,IR0,IR1, ENH: Register (i) - dst2 = Register 0-7 (L) - Instr: 2/0 - LDF||LDF, LDI||LDI - Alias: i||i, i1||i2, i2||i1 -*/ -#define LL_CLASS_INSN(name, opcode, level) \ - { name "_" name , opcode, 0xfe000000, "i;L|J,K", level }, \ - { name "2_" name "1", opcode, 0xfe000000, "i;L|J,K", level }, \ - { name "1_" name "2", opcode, 0xfe000000, "J,K|i;L", level } - -/* LS: Store-store parallell operation - Syntax: src2, dst2 || src1, dst1 - src1 = Register 0-7 (H) - dst1 = Indirect 0,1,IR0,IR1 (J) - src2 = Register 0-7 (L) - dst2 = Indirect 0,1,IR0,IR1, ENH: register (i) - Instr: 2/0 - STF||STF, STI||STI - Alias: i||i, i1||i2, i2||i1. -*/ -#define LS_CLASS_INSN(name, opcode, level) \ - { name "_" name , opcode, 0xfe000000, "L;i|H,J", level }, \ - { name "2_" name "1", opcode, 0xfe000000, "L;i|H,J", level }, \ - { name "1_" name "2", opcode, 0xfe000000, "H,J|L;i", level } - -/* M: General multiply and add/sub operations - Syntax: src3,src4,dst1 || src2,src1,dst2 [00] - Manual - src3,src1,dst1 || src2,src4,dst2 [01] - Manual - src1,src3,dst1 || src2,src4,dst2 [01] - src1,src2,dst1 || src4,src3,dst2 [02] - Manual - src3,src1,dst1 || src4,src2,dst2 [03] - Manual - src1,src3,dst1 || src4,src2,dst2 [03] - src1 = Register 0-7 (K) - src2 = Register 0-7 (H) - src3 = Indirect 0,1,IR0,IR1, ENH: register (j) - src4 = Indirect 0,1,IR0,IR1, ENH: register (i) - dst1 = Register 0-1 (N) - dst2 = Register 2-3 (M) - Instr: 4/0 - MPYF3||ADDF3, MPYF3||SUBF3, MPYI3||ADDI3, MPYI3||SUBI3 - Alias: a||b, a3||n, a||b3, a3||b3, b||a, b3||a, b||a3, b3||a3 -*/ -#define M_CLASS_INSN(namea, nameb, opcode, level) \ - { namea "_" nameb, opcode|0x00000000, 0xff000000, "i;j;N|H;K;M", level }, \ - { namea "_" nameb, opcode|0x01000000, 0xff000000, "j;K;N|H;i;M", level }, \ - { namea "_" nameb, opcode|0x01000000, 0xff000000, "K;j;N|H;i;M", level }, \ - { namea "_" nameb, opcode|0x02000000, 0xff000000, "H;K;N|i;j;M", level }, \ - { namea "_" nameb, opcode|0x03000000, 0xff000000, "j;K;N|i;H;M", level }, \ - { namea "_" nameb, opcode|0x03000000, 0xff000000, "K;j;N|i;H;M", level }, \ - { namea "3_" nameb, opcode|0x00000000, 0xff000000, "i;j;N|H;K;M", level }, \ - { namea "3_" nameb, opcode|0x01000000, 0xff000000, "j;K;N|H;i;M", level }, \ - { namea "3_" nameb, opcode|0x01000000, 0xff000000, "K;j;N|H;i;M", level }, \ - { namea "3_" nameb, opcode|0x02000000, 0xff000000, "H;K;N|i;j;M", level }, \ - { namea "3_" nameb, opcode|0x03000000, 0xff000000, "j;K;N|i;H;M", level }, \ - { namea "3_" nameb, opcode|0x03000000, 0xff000000, "K;j;N|i;H;M", level }, \ - { namea "_" nameb "3", opcode|0x00000000, 0xff000000, "i;j;N|H;K;M", level }, \ - { namea "_" nameb "3", opcode|0x01000000, 0xff000000, "j;K;N|H;i;M", level }, \ - { namea "_" nameb "3", opcode|0x01000000, 0xff000000, "K;j;N|H;i;M", level }, \ - { namea "_" nameb "3", opcode|0x02000000, 0xff000000, "H;K;N|i;j;M", level }, \ - { namea "_" nameb "3", opcode|0x03000000, 0xff000000, "j;K;N|i;H;M", level }, \ - { namea "_" nameb "3", opcode|0x03000000, 0xff000000, "K;j;N|i;H;M", level }, \ - { namea "3_" nameb "3", opcode|0x00000000, 0xff000000, "i;j;N|H;K;M", level }, \ - { namea "3_" nameb "3", opcode|0x01000000, 0xff000000, "j;K;N|H;i;M", level }, \ - { namea "3_" nameb "3", opcode|0x01000000, 0xff000000, "K;j;N|H;i;M", level }, \ - { namea "3_" nameb "3", opcode|0x02000000, 0xff000000, "H;K;N|i;j;M", level }, \ - { namea "3_" nameb "3", opcode|0x03000000, 0xff000000, "j;K;N|i;H;M", level }, \ - { namea "3_" nameb "3", opcode|0x03000000, 0xff000000, "K;j;N|i;H;M", level }, \ - { nameb "_" namea, opcode|0x00000000, 0xff000000, "H;K;M|i;j;N", level }, \ - { nameb "_" namea, opcode|0x01000000, 0xff000000, "H;i;M|j;K;N", level }, \ - { nameb "_" namea, opcode|0x01000000, 0xff000000, "H;i;M|K;j;N", level }, \ - { nameb "_" namea, opcode|0x02000000, 0xff000000, "i;j;M|H;K;N", level }, \ - { nameb "_" namea, opcode|0x03000000, 0xff000000, "i;H;M|j;K;N", level }, \ - { nameb "_" namea, opcode|0x03000000, 0xff000000, "i;H;M|K;j;N", level }, \ - { nameb "3_" namea, opcode|0x00000000, 0xff000000, "H;K;M|i;j;N", level }, \ - { nameb "3_" namea, opcode|0x01000000, 0xff000000, "H;i;M|j;K;N", level }, \ - { nameb "3_" namea, opcode|0x01000000, 0xff000000, "H;i;M|K;j;N", level }, \ - { nameb "3_" namea, opcode|0x02000000, 0xff000000, "i;j;M|H;K;N", level }, \ - { nameb "3_" namea, opcode|0x03000000, 0xff000000, "i;H;M|j;K;N", level }, \ - { nameb "3_" namea, opcode|0x03000000, 0xff000000, "i;H;M|K;j;N", level }, \ - { nameb "_" namea "3", opcode|0x00000000, 0xff000000, "H;K;M|i;j;N", level }, \ - { nameb "_" namea "3", opcode|0x01000000, 0xff000000, "H;i;M|j;K;N", level }, \ - { nameb "_" namea "3", opcode|0x01000000, 0xff000000, "H;i;M|K;j;N", level }, \ - { nameb "_" namea "3", opcode|0x02000000, 0xff000000, "i;j;M|H;K;N", level }, \ - { nameb "_" namea "3", opcode|0x03000000, 0xff000000, "i;H;M|j;K;N", level }, \ - { nameb "_" namea "3", opcode|0x03000000, 0xff000000, "i;H;M|K;j;N", level }, \ - { nameb "3_" namea "3", opcode|0x00000000, 0xff000000, "H;K;M|i;j;N", level }, \ - { nameb "3_" namea "3", opcode|0x01000000, 0xff000000, "H;i;M|j;K;N", level }, \ - { nameb "3_" namea "3", opcode|0x01000000, 0xff000000, "H;i;M|K;j;N", level }, \ - { nameb "3_" namea "3", opcode|0x02000000, 0xff000000, "i;j;M|H;K;N", level }, \ - { nameb "3_" namea "3", opcode|0x03000000, 0xff000000, "i;H;M|j;K;N", level }, \ - { nameb "3_" namea "3", opcode|0x03000000, 0xff000000, "i;H;M|K;j;N", level } - -/* P: General 2-operand operation with parallell store - Syntax: src2, dst1 || src3, dst2 - src2 = Indirect 0,1,IR0,IR1, ENH: register (i) - dst1 = Register 0-7 (L) - src3 = Register 0-7 (H) - dst2 = Indirect 0,1,IR0,IR1 (J) - Instr: 9/2 - ABSF||STF, ABSI||STI, FIX||STI, FLOAT||STF, LDF||STF, - LDI||STI, NEGF||STF, NEGI||STI, NOT||STI, C4x: FRIEEE||STF, - TOIEEE||STF - Alias: a||b, b||a -*/ -#define P_CLASS_INSN(namea, nameb, opcode, level) \ - { namea "_" nameb, opcode, 0xfe000000, "i;L|H,J", level }, \ - { nameb "_" namea, opcode, 0xfe000000, "H,J|i;L", level } - -/* Q: General 3-operand operation with parallell store - Syntax: src1, src2, dst1 || src3, dst2 - src1 = Register 0-7 (K) - src2 = Indirect 0,1,IR0,IR1, ENH: register (i) - dst1 = Register 0-7 (L) - src3 = Register 0-7 (H) - dst2 = Indirect 0,1,IR0,IR1 (J) - Instr: 4/0 - ASH3||STI, LSH3||STI, SUBF3||STF, SUBI3||STI - Alias: a||b, b||a, a3||b, b||a3 -*/ -#define Q_CLASS_INSN(namea, nameb, opcode, level) \ - { namea "_" nameb , opcode, 0xfe000000, "K,i;L|H,J", level }, \ - { nameb "_" namea , opcode, 0xfe000000, "H,J|K,i;L", level }, \ - { namea "3_" nameb , opcode, 0xfe000000, "K,i;L|H,J", level }, \ - { nameb "_" namea "3", opcode, 0xfe000000, "H,J|K,i;L", level } - -/* QC: General commutative 3-operand operation with parallell store - Syntax: src2, src1, dst1 || src3, dst2 - src1, src2, dst1 || src3, dst2 - Manual - src1 = Register 0-7 (K) - src2 = Indirect 0,1,IR0,IR1, ENH: register (i) - dst1 = Register 0-7 (L) - src3 = Register 0-7 (H) - dst2 = Indirect 0,1,IR0,IR1 (J) - Instr: 7/0 - ADDF3||STF, ADDI3||STI, AND3||STI, MPYF3||STF, MPYI3||STI, - OR3||STI, XOR3||STI - Alias: a||b, b||a, a3||b, b||a3 -*/ -#define QC_CLASS_INSN(namea, nameb, opcode, level) \ - { namea "_" nameb , opcode, 0xfe000000, "i;K;L|H,J", level }, \ - { namea "_" nameb , opcode, 0xfe000000, "K;i;L|H,J", level }, \ - { nameb "_" namea , opcode, 0xfe000000, "H,J|i;K;L", level }, \ - { nameb "_" namea , opcode, 0xfe000000, "H,J|K;i;L", level }, \ - { namea "3_" nameb , opcode, 0xfe000000, "i;K;L|H,J", level }, \ - { namea "3_" nameb , opcode, 0xfe000000, "K;i;L|H,J", level }, \ - { nameb "_" namea "3", opcode, 0xfe000000, "H,J|i;K;L", level }, \ - { nameb "_" namea "3", opcode, 0xfe000000, "H,J|K;i;L", level } - -/* R: General register integer operation - Syntax: dst - dst = Register (R) - Instr: 6/0 - POP, PUSH, ROL, ROLC, ROR, RORC -*/ -#define R_CLASS_INSN(name, opcode, level) \ - { name, opcode, 0xffe0ffff, "R", level } - -/* RF: General register float operation - Syntax: dst - dst = Register 0-11 (r) - Instr: 2/0 - POPF, PUSHF -*/ -#define RF_CLASS_INSN(name, opcode, level) \ - { name, opcode, 0xffe0ffff, "r", level } - -/* S: General 3-operand float operation - Syntax: src2, src1, dst - src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C) - src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O) - dst = Register 0-11 (r) - Instr: 1/0 - SUBF3 - Alias: i, i3 -*/ -#define S_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x20000000, 0xffe00000, "e,g;r", level }, \ - { name, opcode|0x20200000, 0xffe00000, "e,J,r", level }, \ - { name, opcode|0x20400000, 0xffe00000, "I,g;r", level }, \ - { name, opcode|0x20600000, 0xffe00000, "I,J,r", level }, \ - { name, opcode|0x30200000, 0xffe00000, "C,g;r", OP_C4X }, \ - { name, opcode|0x30600000, 0xffe00000, "C,O,r", OP_C4X }, \ - { name "3", opcode|0x20000000, 0xffe00000, "e,g;r", level }, \ - { name "3", opcode|0x20200000, 0xffe00000, "e,J,r", level }, \ - { name "3", opcode|0x20400000, 0xffe00000, "I,g;r", level }, \ - { name "3", opcode|0x20600000, 0xffe00000, "I,J,r", level }, \ - { name "3", opcode|0x30200000, 0xffe00000, "C,g;r", OP_C4X }, \ - { name "3", opcode|0x30600000, 0xffe00000, "C,O,r", OP_C4X } - -/* SC: General commutative 3-operand float operation - Syntax: src2, src1, dst - Manual - src1, src2, dst - src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C) - src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O) - dst = Register 0-11 (r) - Instr: 2/0 - ADDF3, MPYF3 - Alias: i, i3 -*/ -#define SC_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x20000000, 0xffe00000, "e,g;r", level }, \ - { name, opcode|0x20200000, 0xffe00000, "e,J,r", level }, \ - { name, opcode|0x20400000, 0xffe00000, "I,g;r", level }, \ - { name, opcode|0x20600000, 0xffe00000, "I,J,r", level }, \ - { name, opcode|0x30200000, 0xffe00000, "C,g;r", OP_C4X }, \ - { name, opcode|0x30200000, 0xffe00000, "g,C,r", OP_C4X }, \ - { name, opcode|0x30600000, 0xffe00000, "C,O,r", OP_C4X }, \ - { name "3", opcode|0x20000000, 0xffe00000, "e,g;r", level }, \ - { name "3", opcode|0x20200000, 0xffe00000, "e,J,r", level }, \ - { name "3", opcode|0x20400000, 0xffe00000, "I,g;r", level }, \ - { name "3", opcode|0x20600000, 0xffe00000, "I,J,r", level }, \ - { name "3", opcode|0x30200000, 0xffe00000, "g,C,r", OP_C4X }, \ - { name "3", opcode|0x30200000, 0xffe00000, "C,g;r", OP_C4X }, \ - { name "3", opcode|0x30600000, 0xffe00000, "C,O,r", OP_C4X } - -/* S2: General 3-operand float operation with 2 args - Syntax: src2, src1 - src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C) - src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O) - Instr: 1/0 - CMPF3 - Alias: i, i3 -*/ -#define S2_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x20000000, 0xffe00000, "e,g", level }, \ - { name, opcode|0x20200000, 0xffe00000, "e,J", level }, \ - { name, opcode|0x20400000, 0xffe00000, "I,g", level }, \ - { name, opcode|0x20600000, 0xffe00000, "I,J", level }, \ - { name, opcode|0x30200000, 0xffe00000, "C,g", OP_C4X }, \ - { name, opcode|0x30600000, 0xffe00000, "C,O", OP_C4X }, \ - { name "3", opcode|0x20000000, 0xffe00000, "e,g", level }, \ - { name "3", opcode|0x20200000, 0xffe00000, "e,J", level }, \ - { name "3", opcode|0x20400000, 0xffe00000, "I,g", level }, \ - { name "3", opcode|0x20600000, 0xffe00000, "I,J", level }, \ - { name "3", opcode|0x30200000, 0xffe00000, "C,g", OP_C4X }, \ - { name "3", opcode|0x30600000, 0xffe00000, "C,O", OP_C4X } - -/* T: General 3-operand integer operand - Syntax: src2, src1, dst - src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W) - src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O) - dst = Register (R) - Instr: 5/0 - ANDN3, ASH3, LSH3, SUBB3, SUBI3 - Alias: i, i3 -*/ -#define T_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x20000000, 0xffe00000, "E,G;R", level }, \ - { name, opcode|0x20200000, 0xffe00000, "E,J,R", level }, \ - { name, opcode|0x20400000, 0xffe00000, "I,G;R", level }, \ - { name, opcode|0x20600000, 0xffe00000, "I,J,R", level }, \ - { name, opcode|0x30000000, 0xffe00000, "W,G;R", OP_C4X }, \ - { name, opcode|0x30200000, 0xffe00000, "C,G;R", OP_C4X }, \ - { name, opcode|0x30400000, 0xffe00000, "W,O,R", OP_C4X }, \ - { name, opcode|0x30600000, 0xffe00000, "C,O,R", OP_C4X }, \ - { name "3", opcode|0x20000000, 0xffe00000, "E,G;R", level }, \ - { name "3", opcode|0x20200000, 0xffe00000, "E,J,R", level }, \ - { name "3", opcode|0x20400000, 0xffe00000, "I,G;R", level }, \ - { name "3", opcode|0x20600000, 0xffe00000, "I,J,R", level }, \ - { name "3", opcode|0x30000000, 0xffe00000, "W,G;R", OP_C4X }, \ - { name "3", opcode|0x30200000, 0xffe00000, "C,G;R", OP_C4X }, \ - { name "3", opcode|0x30400000, 0xffe00000, "W,O,R", OP_C4X }, \ - { name "3", opcode|0x30600000, 0xffe00000, "C,O,R", OP_C4X } - -/* TC: General commutative 3-operand integer operation - Syntax: src2, src1, dst - src1, src2, dst - src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W) - src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O) - dst = Register (R) - Instr: 6/2 - ADDC3, ADDI3, AND3, MPYI3, OR3, XOR3, C4x: MPYSHI, MPYUHI - Alias: i, i3 -*/ -#define TC_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x20000000, 0xffe00000, "E,G;R", level }, \ - { name, opcode|0x20200000, 0xffe00000, "E,J,R", level }, \ - { name, opcode|0x20400000, 0xffe00000, "I,G;R", level }, \ - { name, opcode|0x20600000, 0xffe00000, "I,J,R", level }, \ - { name, opcode|0x30000000, 0xffe00000, "W,G;R", OP_C4X }, \ - { name, opcode|0x30000000, 0xffe00000, "G,W,R", OP_C4X }, \ - { name, opcode|0x30200000, 0xffe00000, "C,G;R", OP_C4X }, \ - { name, opcode|0x30200000, 0xffe00000, "G,C,R", OP_C4X }, \ - { name, opcode|0x30400000, 0xffe00000, "W,O,R", OP_C4X }, \ - { name, opcode|0x30400000, 0xffe00000, "O,W,R", OP_C4X }, \ - { name, opcode|0x30600000, 0xffe00000, "C,O,R", OP_C4X }, \ - { name "3", opcode|0x20000000, 0xffe00000, "E,G;R", level }, \ - { name "3", opcode|0x20200000, 0xffe00000, "E,J,R", level }, \ - { name "3", opcode|0x20400000, 0xffe00000, "I,G;R", level }, \ - { name "3", opcode|0x20600000, 0xffe00000, "I,J,R", level }, \ - { name "3", opcode|0x30000000, 0xffe00000, "W,G;R", OP_C4X }, \ - { name "3", opcode|0x30000000, 0xffe00000, "G,W,R", OP_C4X }, \ - { name "3", opcode|0x30200000, 0xffe00000, "C,G;R", OP_C4X }, \ - { name "3", opcode|0x30200000, 0xffe00000, "G,C,R", OP_C4X }, \ - { name "3", opcode|0x30400000, 0xffe00000, "W,O,R", OP_C4X }, \ - { name "3", opcode|0x30400000, 0xffe00000, "O,W,R", OP_C4X }, \ - { name "3", opcode|0x30600000, 0xffe00000, "C,O,R", OP_C4X } - -/* T2: General 3-operand integer operation with 2 args - Syntax: src2, src1 - src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W) - src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O) - Instr: 1/0 - CMPI3 - Alias: i, i3 -*/ -#define T2_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x20000000, 0xffe00000, "E,G", level }, \ - { name, opcode|0x20200000, 0xffe00000, "E,J", level }, \ - { name, opcode|0x20400000, 0xffe00000, "I,G", level }, \ - { name, opcode|0x20600000, 0xffe00000, "I,J", level }, \ - { name, opcode|0x30000000, 0xffe00000, "W,G", OP_C4X }, \ - { name, opcode|0x30200000, 0xffe00000, "C,G", OP_C4X }, \ - { name, opcode|0x30400000, 0xffe00000, "W,O", OP_C4X }, \ - { name, opcode|0x30600000, 0xffe00000, "C,O", OP_C4X }, \ - { name "3", opcode|0x20000000, 0xffe00000, "E,G", level }, \ - { name "3", opcode|0x20200000, 0xffe00000, "E,J", level }, \ - { name "3", opcode|0x20400000, 0xffe00000, "I,G", level }, \ - { name "3", opcode|0x20600000, 0xffe00000, "I,J", level }, \ - { name "3", opcode|0x30000000, 0xffe00000, "W,G", OP_C4X }, \ - { name "3", opcode|0x30200000, 0xffe00000, "C,G", OP_C4X }, \ - { name "3", opcode|0x30400000, 0xffe00000, "W,O", OP_C4X }, \ - { name "3", opcode|0x30600000, 0xffe00000, "C,O", OP_C4X } - -/* T2C: General commutative 3-operand integer operation with 2 args - Syntax: src2, src1 - Manual - src1, src2 - src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W) - src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (0) - Instr: 1/0 - TSTB3 - Alias: i, i3 -*/ -#define T2C_CLASS_INSN(name, opcode, level) \ - { name, opcode|0x20000000, 0xffe00000, "E,G", level }, \ - { name, opcode|0x20200000, 0xffe00000, "E,J", level }, \ - { name, opcode|0x20400000, 0xffe00000, "I,G", level }, \ - { name, opcode|0x20600000, 0xffe00000, "I,J", level }, \ - { name, opcode|0x30000000, 0xffe00000, "W,G", OP_C4X }, \ - { name, opcode|0x30000000, 0xffe00000, "G,W", OP_C4X }, \ - { name, opcode|0x30200000, 0xffe00000, "C,G", OP_C4X }, \ - { name, opcode|0x30200000, 0xffe00000, "G,C", OP_C4X }, \ - { name, opcode|0x30400000, 0xffe00000, "W,O", OP_C4X }, \ - { name, opcode|0x30400000, 0xffe00000, "O,W", OP_C4X }, \ - { name, opcode|0x30600000, 0xffe00000, "C,O", OP_C4X }, \ - { name "3", opcode|0x20000000, 0xffe00000, "E,G", level }, \ - { name "3", opcode|0x20200000, 0xffe00000, "E,J", level }, \ - { name "3", opcode|0x20400000, 0xffe00000, "I,G", level }, \ - { name "3", opcode|0x20600000, 0xffe00000, "I,J", level }, \ - { name "3", opcode|0x30000000, 0xffe00000, "W,G", OP_C4X }, \ - { name "3", opcode|0x30000000, 0xffe00000, "G,W", OP_C4X }, \ - { name "3", opcode|0x30200000, 0xffe00000, "C,G", OP_C4X }, \ - { name "3", opcode|0x30200000, 0xffe00000, "G,C", OP_C4X }, \ - { name "3", opcode|0x30400000, 0xffe00000, "W,O", OP_C4X }, \ - { name "3", opcode|0x30400000, 0xffe00000, "O,W", OP_C4X }, \ - { name "3", opcode|0x30600000, 0xffe00000, "C,O", OP_C4X } - -/* Z: Misc operations with or without arguments - Syntax: ,... - Instr: 16 - RETIc, RETSc, SIGI(c3X), SWI, IDLE, IDLE2, RETIcD, - TRAPc, LATc, LDEP, LDEHI, LDEPE, LDPK, STIK, LDP, IACK -*/ - - -/* Define tic4x opcodes for assembler and disassembler. */ -static const tic4x_inst_t tic4x_insts[] = -{ - /* Put synonyms after the desired forms in table so that they get - overwritten in the lookup table. The disassembler will thus - print the `proper' mnemonics. Note that the disassembler - only decodes the 11 MSBs, so instructions like ldp @0x500 will - be printed as ldiu 5, dp. Note that with parallel instructions, - the second part is executed before the first part, unless - the sti1||sti2 form is used. We also allow sti2||sti1 - which is equivalent to the default sti||sti form. - */ - B_CLASS_INSN( "absf", 0x00000000, OP_C3X ), - P_CLASS_INSN( "absf", "stf", 0xc8000000, OP_C3X ), - A_CLASS_INSN( "absi", 0x00800000, OP_C3X ), - P_CLASS_INSN( "absi", "sti", 0xca000000, OP_C3X ), - A_CLASS_INSN( "addc", 0x01000000, OP_C3X ), - TC_CLASS_INSN( "addc", 0x00000000, OP_C3X ), - B_CLASS_INSN( "addf", 0x01800000, OP_C3X ), - SC_CLASS_INSN( "addf", 0x00800000, OP_C3X ), - QC_CLASS_INSN( "addf", "stf", 0xcc000000, OP_C3X ), - A_CLASS_INSN( "addi", 0x02000000, OP_C3X ), - TC_CLASS_INSN( "addi", 0x01000000, OP_C3X ), - QC_CLASS_INSN( "addi", "sti", 0xce000000, OP_C3X ), - AU_CLASS_INSN( "and", 0x02800000, OP_C3X ), - TC_CLASS_INSN( "and", 0x01800000, OP_C3X ), - QC_CLASS_INSN( "and", "sti", 0xd0000000, OP_C3X ), - AU_CLASS_INSN( "andn", 0x03000000, OP_C3X ), - T_CLASS_INSN( "andn", 0x02000000, OP_C3X ), - A_CLASS_INSN( "ash", 0x03800000, OP_C3X ), - T_CLASS_INSN( "ash", 0x02800000, OP_C3X ), - Q_CLASS_INSN( "ash", "sti", 0xd2000000, OP_C3X ), - J_CLASS_INSN( "bB", "b", 0x68000000, OP_C3X ), - J_CLASS_INSN( "bBd", "bd", 0x68200000, OP_C3X ), - J_CLASS_INSN( "bBaf", "baf", 0x68a00000, OP_C4X ), - J_CLASS_INSN( "bBat", "bat", 0x68600000, OP_C4X ), - { "br", 0x60000000, 0xff000000, "B" , OP_C3X }, /* I_CLASS */ - { "brd", 0x61000000, 0xff000000, "B" , OP_C3X }, /* I_CLASS */ - { "call", 0x62000000, 0xff000000, "B" , OP_C3X }, /* I_CLASS */ - { "callB", 0x70000000, 0xffe00000, "Q" , OP_C3X }, /* JS_CLASS */ - { "callB", 0x72000000, 0xffe00000, "P" , OP_C3X }, /* JS_CLASS */ - B_CLASS_INSN( "cmpf", 0x04000000, OP_C3X ), - S2_CLASS_INSN( "cmpf", 0x03000000, OP_C3X ), - A_CLASS_INSN( "cmpi", 0x04800000, OP_C3X ), - T2_CLASS_INSN( "cmpi", 0x03800000, OP_C3X ), - D_CLASS_INSN( "dbB", "db", 0x6c000000, OP_C3X ), - D_CLASS_INSN( "dbBd", "dbd", 0x6c200000, OP_C3X ), - AF_CLASS_INSN( "fix", 0x05000000, OP_C3X ), - P_CLASS_INSN( "fix", "sti", 0xd4000000, OP_C3X ), - BI_CLASS_INSN( "float", 0x05800000, OP_C3X ), - P_CLASS_INSN( "float", "stf", 0xd6000000, OP_C3X ), - B6_CLASS_INSN( "frieee", 0x1c000000, OP_C4X ), - P_CLASS_INSN( "frieee","stf", 0xf2000000, OP_C4X ), - { "iack", 0x1b200000, 0xffe00000, "@" , OP_C3X }, /* Z_CLASS */ - { "iack", 0x1b400000, 0xffe00000, "*" , OP_C3X }, /* Z_CLASS */ - { "idle", 0x06000000, 0xffffffff, "" , OP_C3X }, /* Z_CLASS */ - { "idlez", 0x06000000, 0xffffffff, "" , OP_C3X }, /* Z_CLASS */ - { "idle2", 0x06000001, 0xffffffff, "" , OP_IDLE2 }, /* Z_CLASS */ - { "laj", 0x63000000, 0xff000000, "B" , OP_C4X }, /* I_CLASS */ - { "lajB", 0x70200000, 0xffe00000, "Q" , OP_C4X }, /* JS_CLASS */ - { "lajB", 0x72200000, 0xffe00000, "P" , OP_C4X }, /* JS_CLASS */ - { "latB", 0x74800000, 0xffe00000, "V" , OP_C4X }, /* Z_CLASS */ - A_CLASS_INSN( "lb0", 0xb0000000, OP_C4X ), - A_CLASS_INSN( "lb1", 0xb0800000, OP_C4X ), - A_CLASS_INSN( "lb2", 0xb1000000, OP_C4X ), - A_CLASS_INSN( "lb3", 0xb1800000, OP_C4X ), - AU_CLASS_INSN( "lbu0", 0xb2000000, OP_C4X ), - AU_CLASS_INSN( "lbu1", 0xb2800000, OP_C4X ), - AU_CLASS_INSN( "lbu2", 0xb3000000, OP_C4X ), - AU_CLASS_INSN( "lbu3", 0xb3800000, OP_C4X ), - AY_CLASS_INSN( "lda", 0x1e800000, OP_C4X ), - B_CLASS_INSN( "lde", 0x06800000, OP_C3X ), - { "ldep", 0x76000000, 0xffe00000, "X,R" , OP_C4X }, /* Z_CLASS */ - B_CLASS_INSN( "ldf", 0x07000000, OP_C3X ), - LL_CLASS_INSN( "ldf", 0xc4000000, OP_C3X ), - P_CLASS_INSN( "ldf", "stf", 0xd8000000, OP_C3X ), - BB_CLASS_INSN( "ldfC", 0x00000000, OP_C3X ), - B6_CLASS_INSN( "ldfi", 0x07800000, OP_C3X ), - { "ldhi", 0x1fe00000, 0xffe00000, "U,R" , OP_C4X }, /* Z_CLASS */ - { "ldhi", 0x1fe00000, 0xffe00000, "#,R" , OP_C4X }, /* Z_CLASS */ - A_CLASS_INSN( "ldi", 0x08000000, OP_C3X ), - LL_CLASS_INSN( "ldi", 0xc6000000, OP_C3X ), - P_CLASS_INSN( "ldi", "sti", 0xda000000, OP_C3X ), - AB_CLASS_INSN( "ldiC", 0x10000000, OP_C3X ), - A6_CLASS_INSN( "ldii", 0x08800000, OP_C3X ), - { "ldp", 0x50700000, 0xffff0000, "#" , OP_C3X }, /* Z_CLASS - synonym for ldiu #,dp */ - B_CLASS_INSN( "ldm", 0x09000000, OP_C3X ), - { "ldpe", 0x76800000, 0xffe00000, "Q,Z" , OP_C4X }, /* Z_CLASS */ - { "ldpk", 0x1F700000, 0xffff0000, "#" , OP_C4X }, /* Z_CLASS */ - A_CLASS_INSN( "lh0", 0xba000000, OP_C4X ), - A_CLASS_INSN( "lh1", 0xba800000, OP_C4X ), - AU_CLASS_INSN( "lhu0", 0xbb000000, OP_C4X ), - AU_CLASS_INSN( "lhu1", 0xbb800000, OP_C4X ), - { "lopower", 0x10800001,0xffffffff, "" , OP_LPWR }, /* Z_CLASS */ - A_CLASS_INSN( "lsh", 0x09800000, OP_C3X ), - T_CLASS_INSN( "lsh", 0x04000000, OP_C3X ), - Q_CLASS_INSN( "lsh", "sti", 0xdc000000, OP_C3X ), - A_CLASS_INSN( "lwl0", 0xb4000000, OP_C4X ), - A_CLASS_INSN( "lwl1", 0xb4800000, OP_C4X ), - A_CLASS_INSN( "lwl2", 0xb5000000, OP_C4X ), - A_CLASS_INSN( "lwl3", 0xb5800000, OP_C4X ), - A_CLASS_INSN( "lwr0", 0xb6000000, OP_C4X ), - A_CLASS_INSN( "lwr1", 0xb6800000, OP_C4X ), - A_CLASS_INSN( "lwr2", 0xb7000000, OP_C4X ), - A_CLASS_INSN( "lwr3", 0xb7800000, OP_C4X ), - { "maxspeed",0x10800000,0xffffffff, "" , OP_LPWR }, /* Z_CLASS */ - A_CLASS_INSN( "mb0", 0xb8000000, OP_C4X ), - A_CLASS_INSN( "mb1", 0xb8800000, OP_C4X ), - A_CLASS_INSN( "mb2", 0xb9000000, OP_C4X ), - A_CLASS_INSN( "mb3", 0xb9800000, OP_C4X ), - A_CLASS_INSN( "mh0", 0xbc000000, OP_C4X ), - A_CLASS_INSN( "mh1", 0xbc800000, OP_C4X ), - A_CLASS_INSN( "mh2", 0xbd000000, OP_C4X ), - A_CLASS_INSN( "mh3", 0xbd800000, OP_C4X ), - B_CLASS_INSN( "mpyf", 0x0a000000, OP_C3X ), - SC_CLASS_INSN( "mpyf", 0x04800000, OP_C3X ), - M_CLASS_INSN( "mpyf", "addf", 0x80000000, OP_C3X ), - QC_CLASS_INSN( "mpyf", "stf", 0xde000000, OP_C3X ), - M_CLASS_INSN( "mpyf", "subf", 0x84000000, OP_C3X ), - A_CLASS_INSN( "mpyi", 0x0a800000, OP_C3X ), - TC_CLASS_INSN( "mpyi", 0x05000000, OP_C3X ), - M_CLASS_INSN( "mpyi", "addi", 0x88000000, OP_C3X ), - QC_CLASS_INSN( "mpyi", "sti", 0xe0000000, OP_C3X ), - M_CLASS_INSN( "mpyi", "subi", 0x8c000000, OP_C3X ), - A_CLASS_INSN( "mpyshi", 0x1d800000, OP_C4X ), - TC_CLASS_INSN( "mpyshi", 0x28800000, OP_C4X ), - A_CLASS_INSN( "mpyuhi", 0x1e000000, OP_C4X ), - TC_CLASS_INSN( "mpyuhi", 0x29000000, OP_C4X ), - A_CLASS_INSN( "negb", 0x0b000000, OP_C3X ), - B_CLASS_INSN( "negf", 0x0b800000, OP_C3X ), - P_CLASS_INSN( "negf", "stf", 0xe2000000, OP_C3X ), - A_CLASS_INSN( "negi", 0x0c000000, OP_C3X ), - P_CLASS_INSN( "negi", "sti", 0xe4000000, OP_C3X ), - A2_CLASS_INSN( "nop", 0x0c800000, OP_C3X ), - B_CLASS_INSN( "norm", 0x0d000000, OP_C3X ), - AU_CLASS_INSN( "not", 0x0d800000, OP_C3X ), - P_CLASS_INSN( "not", "sti", 0xe6000000, OP_C3X ), - AU_CLASS_INSN( "or", 0x10000000, OP_C3X ), - TC_CLASS_INSN( "or", 0x05800000, OP_C3X ), - QC_CLASS_INSN( "or", "sti", 0xe8000000, OP_C3X ), - R_CLASS_INSN( "pop", 0x0e200000, OP_C3X ), - RF_CLASS_INSN( "popf", 0x0ea00000, OP_C3X ), - R_CLASS_INSN( "push", 0x0f200000, OP_C3X ), - RF_CLASS_INSN( "pushf", 0x0fa00000, OP_C3X ), - BA_CLASS_INSN( "rcpf", 0x1d000000, OP_C4X ), - { "retiB", 0x78000000, 0xffe00000, "" , OP_C3X }, /* Z_CLASS */ - { "reti", 0x78000000, 0xffe00000, "" , OP_C3X }, /* Z_CLASS - Alias for retiu */ - { "retiBd", 0x78200000, 0xffe00000, "" , OP_C4X }, /* Z_CLASS */ - { "retid", 0x78200000, 0xffe00000, "" , OP_C4X }, /* Z_CLASS - Alias for retiud */ - { "retsB", 0x78800000, 0xffe00000, "" , OP_C3X }, /* Z_CLASS */ - { "rets", 0x78800000, 0xffe00000, "" , OP_C3X }, /* Z_CLASS - Alias for retsu */ - B_CLASS_INSN( "rnd", 0x11000000, OP_C3X ), - R_CLASS_INSN( "rol", 0x11e00001, OP_C3X ), - R_CLASS_INSN( "rolc", 0x12600001, OP_C3X ), - R_CLASS_INSN( "ror", 0x12e0ffff, OP_C3X ), - R_CLASS_INSN( "rorc", 0x1360ffff, OP_C3X ), - { "rptb", 0x64000000, 0xff000000, "B" , OP_C3X }, /* I2_CLASS */ - { "rptb", 0x79000000, 0xff000000, "Q" , OP_C4X }, /* I2_CLASS */ - { "rptbd", 0x65000000, 0xff000000, "B" , OP_C4X }, /* I2_CLASS */ - { "rptbd", 0x79800000, 0xff000000, "Q" , OP_C4X }, /* I2_CLASS */ - A3_CLASS_INSN( "rpts", 0x139b0000, OP_C3X ), - B_CLASS_INSN( "rsqrf", 0x1c800000, OP_C4X ), - { "sigi", 0x16000000, 0xffe00000, "" , OP_C3X }, /* Z_CLASS */ - A6_CLASS_INSN( "sigi", 0x16000000, OP_C4X ), - B7_CLASS_INSN( "stf", 0x14000000, OP_C3X ), - LS_CLASS_INSN( "stf", 0xc0000000, OP_C3X ), - B7_CLASS_INSN( "stfi", 0x14800000, OP_C3X ), - A7_CLASS_INSN( "sti", 0x15000000, OP_C3X ), - { "sti", 0x15000000, 0xffe00000, "T,@" , OP_C4X }, /* Class A7 - Alias for stik */ - { "sti", 0x15600000, 0xffe00000, "T,*" , OP_C4X }, /* Class A7 */ - LS_CLASS_INSN( "sti", 0xc2000000, OP_C3X ), - A7_CLASS_INSN( "stii", 0x15800000, OP_C3X ), - { "stik", 0x15000000, 0xffe00000, "T,@" , OP_C4X }, /* Z_CLASS */ - { "stik", 0x15600000, 0xffe00000, "T,*" , OP_C4X }, /* Z_CLASS */ - A_CLASS_INSN( "subb", 0x16800000, OP_C3X ), - T_CLASS_INSN( "subb", 0x06000000, OP_C3X ), - A_CLASS_INSN( "subc", 0x17000000, OP_C3X ), - B_CLASS_INSN( "subf", 0x17800000, OP_C3X ), - S_CLASS_INSN( "subf", 0x06800000, OP_C3X ), - Q_CLASS_INSN( "subf", "stf", 0xea000000, OP_C3X ), - A_CLASS_INSN( "subi", 0x18000000, OP_C3X ), - T_CLASS_INSN( "subi", 0x07000000, OP_C3X ), - Q_CLASS_INSN( "subi", "sti", 0xec000000, OP_C3X ), - A_CLASS_INSN( "subrb", 0x18800000, OP_C3X ), - B_CLASS_INSN( "subrf", 0x19000000, OP_C3X ), - A_CLASS_INSN( "subri", 0x19800000, OP_C3X ), - { "swi", 0x66000000, 0xffffffff, "" , OP_C3X }, /* Z_CLASS */ - B_CLASS_INSN( "toieee", 0x1b800000, OP_C4X ), - P_CLASS_INSN( "toieee","stf", 0xf0000000, OP_C4X ), - { "trapB", 0x74000000, 0xffe00000, "V" , OP_C3X }, /* Z_CLASS */ - { "trap", 0x74000000, 0xffe00000, "V" , OP_C3X }, /* Z_CLASS - Alias for trapu */ - AU_CLASS_INSN( "tstb", 0x1a000000, OP_C3X ), - T2C_CLASS_INSN("tstb", 0x07800000, OP_C3X ), - AU_CLASS_INSN( "xor", 0x1a800000, OP_C3X ), - TC_CLASS_INSN( "xor", 0x08000000, OP_C3X ), - QC_CLASS_INSN( "xor", "sti", 0xee000000, OP_C3X ), - - /* Dummy entry, not included in tic4x_num_insts. This - lets code examine entry i + 1 without checking - if we've run off the end of the table. */ - { "", 0x0, 0x00, "", 0 } -}; - -const unsigned int tic4x_num_insts = (((sizeof tic4x_insts) / (sizeof tic4x_insts[0])) - 1); diff --git a/include/opcode/tic54x.h b/include/opcode/tic54x.h deleted file mode 100644 index a37ae33a838..00000000000 --- a/include/opcode/tic54x.h +++ /dev/null @@ -1,163 +0,0 @@ -/* tic54x.h -- Header file for TI TMS320C54X opcode table - Copyright 1999, 2000, 2001 Free Software Foundation, Inc. - Written by Timothy Wall (twall@cygnus.com) - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA -02110-1301, USA. */ - -#ifndef _opcode_tic54x_h_ -#define _opcode_tic54x_h_ - -typedef struct _symbol -{ - const char *name; - unsigned short value; -} symbol; - -enum optype { - OPT = 0x8000, - OP_None = 0x0, - - OP_Xmem, /* AR3 or AR4, indirect */ - OP_Ymem, /* AR3 or AR4, indirect */ - OP_pmad, /* PROG mem, direct */ - OP_dmad, /* DATA mem, direct */ - OP_Smem, - OP_Lmem, /* 32-bit single-addressed (direct/indirect) */ - OP_MMR, - OP_PA, - OP_Sind, - OP_xpmad, - OP_xpmad_ms7, - OP_MMRX, - OP_MMRY, - - OP_SRC1, /* src accumulator in bit 8 */ - OP_SRC, /* src accumulator in bit 9 */ - OP_RND, /* rounded result dst accumulator, opposite of bit 8 */ - OP_DST, /* dst accumulator in bit 8 */ - OP_ARX, /* arX in bits 0-3 */ - OP_SHIFT, /* -16 to 15 (SHIFT), bits 0-4 */ - OP_SHFT, /* 0 to 15 (SHIFT1 in summary), bits 0-3 */ - OP_B, /* ACC B only */ - OP_A, /* ACC A only */ - - OP_lk, /* 16-bit immediate, '#' optional */ - OP_TS, - OP_k8, /* -128 <= k <= 128 */ - OP_16, /* literal "16" */ - OP_BITC, /* 0 to 16 */ - OP_CC, /* condition code */ - OP_CC2, /* 4-bit condition code */ - OP_CC3, /* 2-bit condition code */ - OP_123, /* 1, 2, or 3 */ - OP_031, /* 0-31, numeric */ - OP_k5, /* 0 to 31 */ - OP_k8u, /* 0 to 255 */ - OP_ASM, /* "ASM" */ - OP_T, /* "T" */ - OP_DP, /* "DP" */ - OP_ARP, /* "ARP" */ - OP_k3, /* 0-7 */ - OP_lku, /* 0 to 65535 */ - OP_N, /* 0/1 or ST0/ST1 */ - OP_SBIT, /* status bit or 0-15 */ - OP_12, /* one or two */ - OP_k9, /* 9 bits of data page (DP) address */ - OP_TRN, /* "TRN" */ - -}; - -typedef struct _template -{ - /* The opcode mnemonic */ - const char *name; - unsigned int words; /* insn size in words */ - int minops, maxops; /* min/max operand count */ - /* The significant bits in the opcode. Other bits are zero. - Instructions with more than 16 bits of opcode store the rest in the upper - 16 bits. - */ - unsigned short opcode; -#define INDIRECT(OP) ((OP)&0x80) -#define MOD(OP) (((OP)>>3)&0xF) -#define ARF(OP) ((OP)&0x7) -#define IS_LKADDR(OP) (INDIRECT(OP) && MOD(OP)>=12) -#define SRC(OP) ((OP)&0x200) -#define DST(OP) ((OP)&0x100) -#define SRC1(OP) ((OP)&0x100) -#define SHIFT(OP) (((OP)&0x10)?(((OP)&0x1F)-32):((OP)&0x1F)) -#define SHFT(OP) ((OP)&0xF) -#define ARX(OP) ((OP)&0x7) -#define XMEM(OP) (((OP)&0x00F0)>>4) -#define YMEM(OP) ((OP)&0x000F) -#define XMOD(C) (((C)&0xC)>>2) -#define XARX(C) (((C)&0x3)+2) -#define CC3(OP) (((OP)>>8)&0x3) -#define SBIT(OP) ((OP)&0xF) -#define MMR(OP) ((OP)&0x7F) -#define MMRX(OP) ((((OP)>>4)&0xF)+16) -#define MMRY(OP) (((OP)&0xF)+16) - -#define OPTYPE(X) ((X)&~OPT) - - /* Ones in this mask indicate which bits must match the opcode field. - Zeroes indicate don't care bits (operands and/or opcode options) */ - unsigned short mask; - - /* An array of operand codes (at most 4 operands) */ -#define MAX_OPERANDS 4 - enum optype operand_types[MAX_OPERANDS]; - - /* Special purpose flags (e.g. branch type, parallel, delay, etc) - */ - unsigned short flags; -#define B_NEXT 0 /* normal execution, next insn is next address */ -#define B_BRANCH 1 /* next insn is in opcode */ -#define B_RET 2 /* next insn is on stack */ -#define B_BACC 3 /* next insn is in acc */ -#define B_REPEAT 4 /* next insn repeats */ -#define FL_BMASK 0x07 - -#define FL_DELAY 0x10 /* instruction uses delay slots */ -#define FL_EXT 0x20 /* instruction takes two words */ -#define FL_FAR 0x40 /* far mode addressing */ -#define FL_LP 0x80 /* LP-only instruction */ -#define FL_NR 0x100 /* no repeat allowed */ -#define FL_SMR 0x200 /* Smem read (for flagging write-only *+ARx */ - -#define FL_PAR 0x400 /* Parallel instruction. */ - - unsigned short opcode2, mask2; /* some insns have an extended opcode */ - - const char* parname; - enum optype paroperand_types[MAX_OPERANDS]; - -} template; - -extern const template tic54x_unknown_opcode; -extern const template tic54x_optab[]; -extern const template tic54x_paroptab[]; -extern const symbol mmregs[], regs[]; -extern const symbol condition_codes[], cc2_codes[], status_bits[]; -extern const symbol cc3_codes[]; -extern const char *misc_symbols[]; -struct disassemble_info; -extern const template* tic54x_get_insn (struct disassemble_info *, - bfd_vma, unsigned short, int *); - -#endif /* _opcode_tic54x_h_ */ diff --git a/include/opcode/tic80.h b/include/opcode/tic80.h deleted file mode 100644 index c89b81c6d70..00000000000 --- a/include/opcode/tic80.h +++ /dev/null @@ -1,282 +0,0 @@ -/* tic80.h -- Header file for TI TMS320C80 (MV) opcode table - Copyright 1996, 1997, 2003 Free Software Foundation, Inc. - Written by Fred Fish (fnf@cygnus.com), Cygnus Support - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef TIC80_H -#define TIC80_H - -/* The opcode table is an array of struct tic80_opcode. */ - -struct tic80_opcode -{ - /* The opcode name. */ - - const char *name; - - /* The opcode itself. Those bits which will be filled in with operands - are zeroes. */ - - unsigned long opcode; - - /* The opcode mask. This is used by the disassembler. This is a mask - containing ones indicating those bits which must match the opcode - field, and zeroes indicating those bits which need not match (and are - presumably filled in by operands). */ - - unsigned long mask; - - /* Special purpose flags for this opcode. */ - - unsigned char flags; - - /* An array of operand codes. Each code is an index into the operand - table. They appear in the order which the operands must appear in - assembly code, and are terminated by a zero. FIXME: Adjust size to - match actual requirements when TIc80 support is complete */ - - unsigned char operands[8]; -}; - -/* The table itself is sorted by major opcode number, and is otherwise in - the order in which the disassembler should consider instructions. - FIXME: This isn't currently true. */ - -extern const struct tic80_opcode tic80_opcodes[]; -extern const int tic80_num_opcodes; - - -/* The operands table is an array of struct tic80_operand. */ - -struct tic80_operand -{ - /* The number of bits in the operand. */ - - int bits; - - /* How far the operand is left shifted in the instruction. */ - - int shift; - - /* Insertion function. This is used by the assembler. To insert an - operand value into an instruction, check this field. - - If it is NULL, execute - i |= (op & ((1 << o->bits) - 1)) << o->shift; - (i is the instruction which we are filling in, o is a pointer to - this structure, and op is the opcode value; this assumes twos - complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction and the operand value. It will return the new value - of the instruction. If the ERRMSG argument is not NULL, then if - the operand value is illegal, *ERRMSG will be set to a warning - string (the operand will be inserted in any case). If the - operand value is legal, *ERRMSG will be unchanged (most operands - can accept any value). */ - - unsigned long (*insert) - (unsigned long instruction, long op, const char **errmsg); - - /* Extraction function. This is used by the disassembler. To - extract this operand type from an instruction, check this field. - - If it is NULL, compute - op = ((i) >> o->shift) & ((1 << o->bits) - 1); - if ((o->flags & TIC80_OPERAND_SIGNED) != 0 - && (op & (1 << (o->bits - 1))) != 0) - op -= 1 << o->bits; - (i is the instruction, o is a pointer to this structure, and op - is the result; this assumes twos complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction value. It will return the value of the operand. If - the INVALID argument is not NULL, *INVALID will be set to - non-zero if this operand type can not actually be extracted from - this operand (i.e., the instruction does not match). If the - operand is valid, *INVALID will not be changed. */ - - long (*extract) (unsigned long instruction, int *invalid); - - /* One bit syntax flags. */ - - unsigned long flags; -}; - -/* Elements in the table are retrieved by indexing with values from - the operands field of the tic80_opcodes table. */ - -extern const struct tic80_operand tic80_operands[]; - - -/* Values defined for the flags field of a struct tic80_operand. - - Note that flags for all predefined symbols, such as the general purpose - registers (ex: r10), control registers (ex: FPST), condition codes (ex: - eq0.b), bit numbers (ex: gt.b), etc are large enough that they can be - or'd into an int where the lower bits contain the actual numeric value - that correponds to this predefined symbol. This way a single int can - contain both the value of the symbol and it's type. - */ - -/* This operand must be an even register number. Floating point numbers - for example are stored in even/odd register pairs. */ - -#define TIC80_OPERAND_EVEN (1 << 0) - -/* This operand must be an odd register number and must be one greater than - the register number of the previous operand. I.E. the second register in - an even/odd register pair. */ - -#define TIC80_OPERAND_ODD (1 << 1) - -/* This operand takes signed values. */ - -#define TIC80_OPERAND_SIGNED (1 << 2) - -/* This operand may be either a predefined constant name or a numeric value. - An example would be a condition code like "eq0.b" which has the numeric - value 0x2. */ - -#define TIC80_OPERAND_NUM (1 << 3) - -/* This operand should be wrapped in parentheses rather than separated - from the previous one by a comma. This is used for various - instructions, like the load and store instructions, which want - their operands to look like "displacement(reg)" */ - -#define TIC80_OPERAND_PARENS (1 << 4) - -/* This operand is a PC relative branch offset. The disassembler prints - these symbolically if possible. Note that the offsets are taken as word - offsets. */ - -#define TIC80_OPERAND_PCREL (1 << 5) - -/* This flag is a hint to the disassembler for using hex as the prefered - printing format, even for small positive or negative immediate values. - Normally values in the range -999 to 999 are printed as signed decimal - values and other values are printed in hex. */ - -#define TIC80_OPERAND_BITFIELD (1 << 6) - -/* This operand may have a ":m" modifier specified by bit 17 in a short - immediate form instruction. */ - -#define TIC80_OPERAND_M_SI (1 << 7) - -/* This operand may have a ":m" modifier specified by bit 15 in a long - immediate or register form instruction. */ - -#define TIC80_OPERAND_M_LI (1 << 8) - -/* This operand may have a ":s" modifier specified in bit 11 in a long - immediate or register form instruction. */ - -#define TIC80_OPERAND_SCALED (1 << 9) - -/* This operand is a floating point value */ - -#define TIC80_OPERAND_FLOAT (1 << 10) - -/* This operand is an byte offset from a base relocation. The lower - two bits of the final relocated address are ignored when the value is - written to the program counter. */ - -#define TIC80_OPERAND_BASEREL (1 << 11) - -/* This operand is an "endmask" field for a shift instruction. - It is treated special in that it can have values of 0-32, - where 0 and 32 result in the same instruction. The assembler - must be able to accept both endmask values. This disassembler - has no way of knowing from the instruction which value was - given at assembly time, so it just uses '0'. */ - -#define TIC80_OPERAND_ENDMASK (1 << 12) - -/* This operand is one of the 32 general purpose registers. - The disassembler prints these with a leading 'r'. */ - -#define TIC80_OPERAND_GPR (1 << 27) - -/* This operand is a floating point accumulator register. - The disassembler prints these with a leading 'a'. */ - -#define TIC80_OPERAND_FPA ( 1 << 28) - -/* This operand is a control register number, either numeric or - symbolic (like "EIF", "EPC", etc). - The disassembler prints these symbolically. */ - -#define TIC80_OPERAND_CR (1 << 29) - -/* This operand is a condition code, either numeric or - symbolic (like "eq0.b", "ne0.w", etc). - The disassembler prints these symbolically. */ - -#define TIC80_OPERAND_CC (1 << 30) - -/* This operand is a bit number, either numeric or - symbolic (like "eq.b", "or.f", etc). - The disassembler prints these symbolically. - Note that they appear in the instruction in 1's complement relative - to the values given in the manual. */ - -#define TIC80_OPERAND_BITNUM (1 << 31) - -/* This mask is used to strip operand bits from an int that contains - both operand bits and a numeric value in the lsbs. */ - -#define TIC80_OPERAND_MASK (TIC80_OPERAND_GPR | TIC80_OPERAND_FPA | TIC80_OPERAND_CR | TIC80_OPERAND_CC | TIC80_OPERAND_BITNUM) - - -/* Flag bits for the struct tic80_opcode flags field. */ - -#define TIC80_VECTOR 01 /* Is a vector instruction */ -#define TIC80_NO_R0_DEST 02 /* Register r0 cannot be a destination register */ - - -/* The opcodes library contains a table that allows translation from predefined - symbol names to numeric values, and vice versa. */ - -/* Structure to hold information about predefined symbols. */ - -struct predefined_symbol -{ - char *name; /* name to recognize */ - int value; -}; - -#define PDS_NAME(pdsp) ((pdsp) -> name) -#define PDS_VALUE(pdsp) ((pdsp) -> value) - -/* Translation array. */ -extern const struct predefined_symbol tic80_predefined_symbols[]; -/* How many members in the array. */ -extern const int tic80_num_predefined_symbols; - -/* Translate value to symbolic name. */ -const char *tic80_value_to_symbol (int val, int class); - -/* Translate symbolic name to value. */ -int tic80_symbol_to_value (char *name, int class); - -const struct predefined_symbol *tic80_next_predefined_symbol - (const struct predefined_symbol *); - -#endif /* TIC80_H */ diff --git a/include/opcode/v850.h b/include/opcode/v850.h deleted file mode 100644 index 436ff399684..00000000000 --- a/include/opcode/v850.h +++ /dev/null @@ -1,166 +0,0 @@ -/* v850.h -- Header file for NEC V850 opcode table - Copyright 1996, 1997, 2001, 2003 Free Software Foundation, Inc. - Written by J.T. Conklin, Cygnus Support - -This file is part of GDB, GAS, and the GNU binutils. - -GDB, GAS, and the GNU binutils are free software; you can redistribute -them and/or modify them under the terms of the GNU General Public -License as published by the Free Software Foundation; either version -1, or (at your option) any later version. - -GDB, GAS, and the GNU binutils are distributed in the hope that they -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 file; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef V850_H -#define V850_H - -/* The opcode table is an array of struct v850_opcode. */ - -struct v850_opcode -{ - /* The opcode name. */ - const char *name; - - /* The opcode itself. Those bits which will be filled in with - operands are zeroes. */ - unsigned long opcode; - - /* The opcode mask. This is used by the disassembler. This is a - mask containing ones indicating those bits which must match the - opcode field, and zeroes indicating those bits which need not - match (and are presumably filled in by operands). */ - unsigned long mask; - - /* An array of operand codes. Each code is an index into the - operand table. They appear in the order which the operands must - appear in assembly code, and are terminated by a zero. */ - unsigned char operands[8]; - - /* Which (if any) operand is a memory operand. */ - unsigned int memop; - - /* Target processor(s). A bit field of processors which support - this instruction. Note a bit field is used as some instructions - are available on multiple, different processor types, whereas - other instructions are only available on one specific type. */ - unsigned int processors; -}; - -/* Values for the processors field in the v850_opcode structure. */ -#define PROCESSOR_V850 (1 << 0) /* Just the V850. */ -#define PROCESSOR_ALL -1 /* Any processor. */ -#define PROCESSOR_V850E (1 << 1) /* Just the V850E. */ -#define PROCESSOR_NOT_V850 (~ PROCESSOR_V850) /* Any processor except the V850. */ -#define PROCESSOR_V850EA (1 << 2) /* Just the V850EA. */ -#define PROCESSOR_V850E1 (1 << 3) /* Just the V850E1. */ - -/* The table itself is sorted by major opcode number, and is otherwise - in the order in which the disassembler should consider - instructions. */ -extern const struct v850_opcode v850_opcodes[]; -extern const int v850_num_opcodes; - - -/* The operands table is an array of struct v850_operand. */ - -struct v850_operand -{ - /* The number of bits in the operand. */ - /* If this value is -1 then the operand's bits are in a discontinous distribution in the instruction. */ - int bits; - - /* (bits >= 0): How far the operand is left shifted in the instruction. */ - /* (bits == -1): Bit mask of the bits in the operand. */ - int shift; - - /* Insertion function. This is used by the assembler. To insert an - operand value into an instruction, check this field. - - If it is NULL, execute - i |= (op & ((1 << o->bits) - 1)) << o->shift; - (i is the instruction which we are filling in, o is a pointer to - this structure, and op is the opcode value; this assumes twos - complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction and the operand value. It will return the new value - of the instruction. If the ERRMSG argument is not NULL, then if - the operand value is illegal, *ERRMSG will be set to a warning - string (the operand will be inserted in any case). If the - operand value is legal, *ERRMSG will be unchanged (most operands - can accept any value). */ - unsigned long (* insert) - (unsigned long instruction, long op, const char ** errmsg); - - /* Extraction function. This is used by the disassembler. To - extract this operand type from an instruction, check this field. - - If it is NULL, compute - op = o->bits == -1 ? ((i) & o->shift) : ((i) >> o->shift) & ((1 << o->bits) - 1); - if (o->flags & V850_OPERAND_SIGNED) - op = (op << (32 - o->bits)) >> (32 - o->bits); - (i is the instruction, o is a pointer to this structure, and op - is the result; this assumes twos complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction value. It will return the value of the operand. If - the INVALID argument is not NULL, *INVALID will be set to - non-zero if this operand type can not actually be extracted from - this operand (i.e., the instruction does not match). If the - operand is valid, *INVALID will not be changed. */ - unsigned long (* extract) (unsigned long instruction, int * invalid); - - /* One bit syntax flags. */ - int flags; -}; - -/* Elements in the table are retrieved by indexing with values from - the operands field of the v850_opcodes table. */ - -extern const struct v850_operand v850_operands[]; - -/* Values defined for the flags field of a struct v850_operand. */ - -/* This operand names a general purpose register */ -#define V850_OPERAND_REG 0x01 - -/* This operand names a system register */ -#define V850_OPERAND_SRG 0x02 - -/* This operand names a condition code used in the setf instruction */ -#define V850_OPERAND_CC 0x04 - -/* This operand takes signed values */ -#define V850_OPERAND_SIGNED 0x08 - -/* This operand is the ep register. */ -#define V850_OPERAND_EP 0x10 - -/* This operand is a PC displacement */ -#define V850_OPERAND_DISP 0x20 - -/* This is a relaxable operand. Only used for D9->D22 branch relaxing - right now. We may need others in the future (or maybe handle them like - promoted operands on the mn10300?) */ -#define V850_OPERAND_RELAX 0x40 - -/* The register specified must not be r0 */ -#define V850_NOT_R0 0x80 - -/* push/pop type instruction, V850E specific. */ -#define V850E_PUSH_POP 0x100 - -/* 16 bit immediate follows instruction, V850E specific. */ -#define V850E_IMMEDIATE16 0x200 - -/* 32 bit immediate follows instruction, V850E specific. */ -#define V850E_IMMEDIATE32 0x400 - -#endif /* V850_H */ diff --git a/include/opcode/vax.h b/include/opcode/vax.h deleted file mode 100644 index a521303960f..00000000000 --- a/include/opcode/vax.h +++ /dev/null @@ -1,382 +0,0 @@ -/* Vax opcde list. - Copyright 1989, 1991, 1992, 1995 Free Software Foundation, Inc. - -This file is part of GDB and GAS. - -GDB and GAS are 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 1, or (at your option) -any later version. - -GDB and GAS are 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 GDB or GAS; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef vax_opcodeT -#define vax_opcodeT int -#endif /* no vax_opcodeT */ - -struct vot_wot /* vax opcode table: wot to do with this */ - /* particular opcode */ -{ - const char *args; /* how to compile said opcode */ - vax_opcodeT code; /* op-code (may be > 8 bits!) */ -}; - -struct vot /* vax opcode text */ -{ - const char *name; /* opcode name: lowercase string [key] */ - struct vot_wot detail; /* rest of opcode table [datum] */ -}; - -#define vot_how args -#define vot_code code -#define vot_detail detail -#define vot_name name - -static const struct vot -votstrs[] = -{ -{ "halt", {"", 0x00 } }, -{ "nop", {"", 0x01 } }, -{ "rei", {"", 0x02 } }, -{ "bpt", {"", 0x03 } }, -{ "ret", {"", 0x04 } }, -{ "rsb", {"", 0x05 } }, -{ "ldpctx", {"", 0x06 } }, -{ "svpctx", {"", 0x07 } }, -{ "cvtps", {"rwabrwab", 0x08 } }, -{ "cvtsp", {"rwabrwab", 0x09 } }, -{ "index", {"rlrlrlrlrlwl", 0x0a } }, -{ "crc", {"abrlrwab", 0x0b } }, -{ "prober", {"rbrwab", 0x0c } }, -{ "probew", {"rbrwab", 0x0d } }, -{ "insque", {"abab", 0x0e } }, -{ "remque", {"abwl", 0x0f } }, -{ "bsbb", {"bb", 0x10 } }, -{ "brb", {"bb", 0x11 } }, -{ "bneq", {"bb", 0x12 } }, -{ "bnequ", {"bb", 0x12 } }, -{ "beql", {"bb", 0x13 } }, -{ "beqlu", {"bb", 0x13 } }, -{ "bgtr", {"bb", 0x14 } }, -{ "bleq", {"bb", 0x15 } }, -{ "jsb", {"ab", 0x16 } }, -{ "jmp", {"ab", 0x17 } }, -{ "bgeq", {"bb", 0x18 } }, -{ "blss", {"bb", 0x19 } }, -{ "bgtru", {"bb", 0x1a } }, -{ "blequ", {"bb", 0x1b } }, -{ "bvc", {"bb", 0x1c } }, -{ "bvs", {"bb", 0x1d } }, -{ "bcc", {"bb", 0x1e } }, -{ "bgequ", {"bb", 0x1e } }, -{ "blssu", {"bb", 0x1f } }, -{ "bcs", {"bb", 0x1f } }, -{ "addp4", {"rwabrwab", 0x20 } }, -{ "addp6", {"rwabrwabrwab", 0x21 } }, -{ "subp4", {"rwabrwab", 0x22 } }, -{ "subp6", {"rwabrwabrwab", 0x23 } }, -{ "cvtpt", {"rwababrwab", 0x24 } }, -{ "mulp", {"rwabrwabrwab", 0x25 } }, -{ "cvttp", {"rwababrwab", 0x26 } }, -{ "divp", {"rwabrwabrwab", 0x27 } }, -{ "movc3", {"rwabab", 0x28 } }, -{ "cmpc3", {"rwabab", 0x29 } }, -{ "scanc", {"rwababrb", 0x2a } }, -{ "spanc", {"rwababrb", 0x2b } }, -{ "movc5", {"rwabrbrwab", 0x2c } }, -{ "cmpc5", {"rwabrbrwab", 0x2d } }, -{ "movtc", {"rwabrbabrwab", 0x2e } }, -{ "movtuc", {"rwabrbabrwab", 0x2f } }, -{ "bsbw", {"bw", 0x30 } }, -{ "brw", {"bw", 0x31 } }, -{ "cvtwl", {"rwwl", 0x32 } }, -{ "cvtwb", {"rwwb", 0x33 } }, -{ "movp", {"rwabab", 0x34 } }, -{ "cmpp3", {"rwabab", 0x35 } }, -{ "cvtpl", {"rwabwl", 0x36 } }, -{ "cmpp4", {"rwabrwab", 0x37 } }, -{ "editpc", {"rwababab", 0x38 } }, -{ "matchc", {"rwabrwab", 0x39 } }, -{ "locc", {"rbrwab", 0x3a } }, -{ "skpc", {"rbrwab", 0x3b } }, -{ "movzwl", {"rwwl", 0x3c } }, -{ "acbw", {"rwrwmwbw", 0x3d } }, -{ "movaw", {"awwl", 0x3e } }, -{ "pushaw", {"aw", 0x3f } }, -{ "addf2", {"rfmf", 0x40 } }, -{ "addf3", {"rfrfwf", 0x41 } }, -{ "subf2", {"rfmf", 0x42 } }, -{ "subf3", {"rfrfwf", 0x43 } }, -{ "mulf2", {"rfmf", 0x44 } }, -{ "mulf3", {"rfrfwf", 0x45 } }, -{ "divf2", {"rfmf", 0x46 } }, -{ "divf3", {"rfrfwf", 0x47 } }, -{ "cvtfb", {"rfwb", 0x48 } }, -{ "cvtfw", {"rfww", 0x49 } }, -{ "cvtfl", {"rfwl", 0x4a } }, -{ "cvtrfl", {"rfwl", 0x4b } }, -{ "cvtbf", {"rbwf", 0x4c } }, -{ "cvtwf", {"rwwf", 0x4d } }, -{ "cvtlf", {"rlwf", 0x4e } }, -{ "acbf", {"rfrfmfbw", 0x4f } }, -{ "movf", {"rfwf", 0x50 } }, -{ "cmpf", {"rfrf", 0x51 } }, -{ "mnegf", {"rfwf", 0x52 } }, -{ "tstf", {"rf", 0x53 } }, -{ "emodf", {"rfrbrfwlwf", 0x54 } }, -{ "polyf", {"rfrwab", 0x55 } }, -{ "cvtfd", {"rfwd", 0x56 } }, - /* opcode 57 is not defined yet */ -{ "adawi", {"rwmw", 0x58 } }, - /* opcode 59 is not defined yet */ - /* opcode 5a is not defined yet */ - /* opcode 5b is not defined yet */ -{ "insqhi", {"abaq", 0x5c } }, -{ "insqti", {"abaq", 0x5d } }, -{ "remqhi", {"aqwl", 0x5e } }, -{ "remqti", {"aqwl", 0x5f } }, -{ "addd2", {"rdmd", 0x60 } }, -{ "addd3", {"rdrdwd", 0x61 } }, -{ "subd2", {"rdmd", 0x62 } }, -{ "subd3", {"rdrdwd", 0x63 } }, -{ "muld2", {"rdmd", 0x64 } }, -{ "muld3", {"rdrdwd", 0x65 } }, -{ "divd2", {"rdmd", 0x66 } }, -{ "divd3", {"rdrdwd", 0x67 } }, -{ "cvtdb", {"rdwb", 0x68 } }, -{ "cvtdw", {"rdww", 0x69 } }, -{ "cvtdl", {"rdwl", 0x6a } }, -{ "cvtrdl", {"rdwl", 0x6b } }, -{ "cvtbd", {"rbwd", 0x6c } }, -{ "cvtwd", {"rwwd", 0x6d } }, -{ "cvtld", {"rlwd", 0x6e } }, -{ "acbd", {"rdrdmdbw", 0x6f } }, -{ "movd", {"rdwd", 0x70 } }, -{ "cmpd", {"rdrd", 0x71 } }, -{ "mnegd", {"rdwd", 0x72 } }, -{ "tstd", {"rd", 0x73 } }, -{ "emodd", {"rdrbrdwlwd", 0x74 } }, -{ "polyd", {"rdrwab", 0x75 } }, -{ "cvtdf", {"rdwf", 0x76 } }, - /* opcode 77 is not defined yet */ -{ "ashl", {"rbrlwl", 0x78 } }, -{ "ashq", {"rbrqwq", 0x79 } }, -{ "emul", {"rlrlrlwq", 0x7a } }, -{ "ediv", {"rlrqwlwl", 0x7b } }, -{ "clrd", {"wd", 0x7c } }, -{ "clrg", {"wg", 0x7c } }, -{ "clrq", {"wd", 0x7c } }, -{ "movq", {"rqwq", 0x7d } }, -{ "movaq", {"aqwl", 0x7e } }, -{ "movad", {"adwl", 0x7e } }, -{ "pushaq", {"aq", 0x7f } }, -{ "pushad", {"ad", 0x7f } }, -{ "addb2", {"rbmb", 0x80 } }, -{ "addb3", {"rbrbwb", 0x81 } }, -{ "subb2", {"rbmb", 0x82 } }, -{ "subb3", {"rbrbwb", 0x83 } }, -{ "mulb2", {"rbmb", 0x84 } }, -{ "mulb3", {"rbrbwb", 0x85 } }, -{ "divb2", {"rbmb", 0x86 } }, -{ "divb3", {"rbrbwb", 0x87 } }, -{ "bisb2", {"rbmb", 0x88 } }, -{ "bisb3", {"rbrbwb", 0x89 } }, -{ "bicb2", {"rbmb", 0x8a } }, -{ "bicb3", {"rbrbwb", 0x8b } }, -{ "xorb2", {"rbmb", 0x8c } }, -{ "xorb3", {"rbrbwb", 0x8d } }, -{ "mnegb", {"rbwb", 0x8e } }, -{ "caseb", {"rbrbrb", 0x8f } }, -{ "movb", {"rbwb", 0x90 } }, -{ "cmpb", {"rbrb", 0x91 } }, -{ "mcomb", {"rbwb", 0x92 } }, -{ "bitb", {"rbrb", 0x93 } }, -{ "clrb", {"wb", 0x94 } }, -{ "tstb", {"rb", 0x95 } }, -{ "incb", {"mb", 0x96 } }, -{ "decb", {"mb", 0x97 } }, -{ "cvtbl", {"rbwl", 0x98 } }, -{ "cvtbw", {"rbww", 0x99 } }, -{ "movzbl", {"rbwl", 0x9a } }, -{ "movzbw", {"rbww", 0x9b } }, -{ "rotl", {"rbrlwl", 0x9c } }, -{ "acbb", {"rbrbmbbw", 0x9d } }, -{ "movab", {"abwl", 0x9e } }, -{ "pushab", {"ab", 0x9f } }, -{ "addw2", {"rwmw", 0xa0 } }, -{ "addw3", {"rwrwww", 0xa1 } }, -{ "subw2", {"rwmw", 0xa2 } }, -{ "subw3", {"rwrwww", 0xa3 } }, -{ "mulw2", {"rwmw", 0xa4 } }, -{ "mulw3", {"rwrwww", 0xa5 } }, -{ "divw2", {"rwmw", 0xa6 } }, -{ "divw3", {"rwrwww", 0xa7 } }, -{ "bisw2", {"rwmw", 0xa8 } }, -{ "bisw3", {"rwrwww", 0xa9 } }, -{ "bicw2", {"rwmw", 0xaa } }, -{ "bicw3", {"rwrwww", 0xab } }, -{ "xorw2", {"rwmw", 0xac } }, -{ "xorw3", {"rwrwww", 0xad } }, -{ "mnegw", {"rwww", 0xae } }, -{ "casew", {"rwrwrw", 0xaf } }, -{ "movw", {"rwww", 0xb0 } }, -{ "cmpw", {"rwrw", 0xb1 } }, -{ "mcomw", {"rwww", 0xb2 } }, -{ "bitw", {"rwrw", 0xb3 } }, -{ "clrw", {"ww", 0xb4 } }, -{ "tstw", {"rw", 0xb5 } }, -{ "incw", {"mw", 0xb6 } }, -{ "decw", {"mw", 0xb7 } }, -{ "bispsw", {"rw", 0xb8 } }, -{ "bicpsw", {"rw", 0xb9 } }, -{ "popr", {"rw", 0xba } }, -{ "pushr", {"rw", 0xbb } }, -{ "chmk", {"rw", 0xbc } }, -{ "chme", {"rw", 0xbd } }, -{ "chms", {"rw", 0xbe } }, -{ "chmu", {"rw", 0xbf } }, -{ "addl2", {"rlml", 0xc0 } }, -{ "addl3", {"rlrlwl", 0xc1 } }, -{ "subl2", {"rlml", 0xc2 } }, -{ "subl3", {"rlrlwl", 0xc3 } }, -{ "mull2", {"rlml", 0xc4 } }, -{ "mull3", {"rlrlwl", 0xc5 } }, -{ "divl2", {"rlml", 0xc6 } }, -{ "divl3", {"rlrlwl", 0xc7 } }, -{ "bisl2", {"rlml", 0xc8 } }, -{ "bisl3", {"rlrlwl", 0xc9 } }, -{ "bicl2", {"rlml", 0xca } }, -{ "bicl3", {"rlrlwl", 0xcb } }, -{ "xorl2", {"rlml", 0xcc } }, -{ "xorl3", {"rlrlwl", 0xcd } }, -{ "mnegl", {"rlwl", 0xce } }, -{ "casel", {"rlrlrl", 0xcf } }, -{ "movl", {"rlwl", 0xd0 } }, -{ "cmpl", {"rlrl", 0xd1 } }, -{ "mcoml", {"rlwl", 0xd2 } }, -{ "bitl", {"rlrl", 0xd3 } }, -{ "clrf", {"wf", 0xd4 } }, -{ "clrl", {"wl", 0xd4 } }, -{ "tstl", {"rl", 0xd5 } }, -{ "incl", {"ml", 0xd6 } }, -{ "decl", {"ml", 0xd7 } }, -{ "adwc", {"rlml", 0xd8 } }, -{ "sbwc", {"rlml", 0xd9 } }, -{ "mtpr", {"rlrl", 0xda } }, -{ "mfpr", {"rlwl", 0xdb } }, -{ "movpsl", {"wl", 0xdc } }, -{ "pushl", {"rl", 0xdd } }, -{ "moval", {"alwl", 0xde } }, -{ "movaf", {"afwl", 0xde } }, -{ "pushal", {"al", 0xdf } }, -{ "pushaf", {"af", 0xdf } }, -{ "bbs", {"rlvbbb", 0xe0 } }, -{ "bbc", {"rlvbbb", 0xe1 } }, -{ "bbss", {"rlvbbb", 0xe2 } }, -{ "bbcs", {"rlvbbb", 0xe3 } }, -{ "bbsc", {"rlvbbb", 0xe4 } }, -{ "bbcc", {"rlvbbb", 0xe5 } }, -{ "bbssi", {"rlvbbb", 0xe6 } }, -{ "bbcci", {"rlvbbb", 0xe7 } }, -{ "blbs", {"rlbb", 0xe8 } }, -{ "blbc", {"rlbb", 0xe9 } }, -{ "ffs", {"rlrbvbwl", 0xea } }, -{ "ffc", {"rlrbvbwl", 0xeb } }, -{ "cmpv", {"rlrbvbrl", 0xec } }, -{ "cmpzv", {"rlrbvbrl", 0xed } }, -{ "extv", {"rlrbvbwl", 0xee } }, -{ "extzv", {"rlrbvbwl", 0xef } }, -{ "insv", {"rlrlrbvb", 0xf0 } }, -{ "acbl", {"rlrlmlbw", 0xf1 } }, -{ "aoblss", {"rlmlbb", 0xf2 } }, -{ "aobleq", {"rlmlbb", 0xf3 } }, -{ "sobgeq", {"mlbb", 0xf4 } }, -{ "sobgtr", {"mlbb", 0xf5 } }, -{ "cvtlb", {"rlwb", 0xf6 } }, -{ "cvtlw", {"rlww", 0xf7 } }, -{ "ashp", {"rbrwabrbrwab", 0xf8 } }, -{ "cvtlp", {"rlrwab", 0xf9 } }, -{ "callg", {"abab", 0xfa } }, -{ "calls", {"rlab", 0xfb } }, -{ "xfc", {"", 0xfc } }, - /* undefined opcodes here */ -{ "cvtdh", {"rdwh", 0x32fd } }, -{ "cvtgf", {"rgwh", 0x33fd } }, -{ "addg2", {"rgmg", 0x40fd } }, -{ "addg3", {"rgrgwg", 0x41fd } }, -{ "subg2", {"rgmg", 0x42fd } }, -{ "subg3", {"rgrgwg", 0x43fd } }, -{ "mulg2", {"rgmg", 0x44fd } }, -{ "mulg3", {"rgrgwg", 0x45fd } }, -{ "divg2", {"rgmg", 0x46fd } }, -{ "divg3", {"rgrgwg", 0x47fd } }, -{ "cvtgb", {"rgwb", 0x48fd } }, -{ "cvtgw", {"rgww", 0x49fd } }, -{ "cvtgl", {"rgwl", 0x4afd } }, -{ "cvtrgl", {"rgwl", 0x4bfd } }, -{ "cvtbg", {"rbwg", 0x4cfd } }, -{ "cvtwg", {"rwwg", 0x4dfd } }, -{ "cvtlg", {"rlwg", 0x4efd } }, -{ "acbg", {"rgrgmgbw", 0x4ffd } }, -{ "movg", {"rgwg", 0x50fd } }, -{ "cmpg", {"rgrg", 0x51fd } }, -{ "mnegg", {"rgwg", 0x52fd } }, -{ "tstg", {"rg", 0x53fd } }, -{ "emodg", {"rgrwrgwlwg", 0x54fd } }, -{ "polyg", {"rgrwab", 0x55fd } }, -{ "cvtgh", {"rgwh", 0x56fd } }, - /* undefined opcodes here */ -{ "addh2", {"rhmh", 0x60fd } }, -{ "addh3", {"rhrhwh", 0x61fd } }, -{ "subh2", {"rhmh", 0x62fd } }, -{ "subh3", {"rhrhwh", 0x63fd } }, -{ "mulh2", {"rhmh", 0x64fd } }, -{ "mulh3", {"rhrhwh", 0x65fd } }, -{ "divh2", {"rhmh", 0x66fd } }, -{ "divh3", {"rhrhwh", 0x67fd } }, -{ "cvthb", {"rhwb", 0x68fd } }, -{ "cvthw", {"rhww", 0x69fd } }, -{ "cvthl", {"rhwl", 0x6afd } }, -{ "cvtrhl", {"rhwl", 0x6bfd } }, -{ "cvtbh", {"rbwh", 0x6cfd } }, -{ "cvtwh", {"rwwh", 0x6dfd } }, -{ "cvtlh", {"rlwh", 0x6efd } }, -{ "acbh", {"rhrhmhbw", 0x6ffd } }, -{ "movh", {"rhwh", 0x70fd } }, -{ "cmph", {"rhrh", 0x71fd } }, -{ "mnegh", {"rhwh", 0x72fd } }, -{ "tsth", {"rh", 0x73fd } }, -{ "emodh", {"rhrwrhwlwh", 0x74fd } }, -{ "polyh", {"rhrwab", 0x75fd } }, -{ "cvthg", {"rhwg", 0x76fd } }, - /* undefined opcodes here */ -{ "clrh", {"wh", 0x7cfd } }, -{ "clro", {"wo", 0x7cfd } }, -{ "movo", {"rowo", 0x7dfd } }, -{ "movah", {"ahwl", 0x7efd } }, -{ "movao", {"aowl", 0x7efd } }, -{ "pushah", {"ah", 0x7ffd } }, -{ "pushao", {"ao", 0x7ffd } }, - /* undefined opcodes here */ -{ "cvtfh", {"rfwh", 0x98fd } }, -{ "cvtfg", {"rfwg", 0x99fd } }, - /* undefined opcodes here */ -{ "cvthf", {"rhwf", 0xf6fd } }, -{ "cvthd", {"rhwd", 0xf7fd } }, - /* undefined opcodes here */ -{ "bugl", {"rl", 0xfdff } }, -{ "bugw", {"rw", 0xfeff } }, - /* undefined opcodes here */ - -{ "", {"", 0} } /* empty is end sentinel */ - -}; /* votstrs */ - -/* end: vax.opcode.h */ diff --git a/include/os9k.h b/include/os9k.h deleted file mode 100644 index e8baee17f1f..00000000000 --- a/include/os9k.h +++ /dev/null @@ -1,181 +0,0 @@ -/* os9k.h - OS-9000 i386 module header definitions - Copyright 2000 Free Software Foundation, Inc. - -This file is part of GNU CC. - -GNU CC 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, or (at your option) -any later version. - -GNU CC 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 GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#if !defined(_MODULE_H) -#define _MODULE_H - -#define _MPF386 - -/* Size of common header less parity field. */ -#define N_M_PARITY (sizeof(mh_com)-sizeof(unisgned short)) -#define OLD_M_PARITY 46 -#define M_PARITY N_M_PARITY - -#ifdef _MPF68K -#define MODSYNC 0x4afc /* Module header sync code for 680x0 processors. */ -#endif - -#ifdef _MPF386 -#define MODSYNC 0x4afc /* Module header sync code for 80386 processors. */ -#endif - -#define MODREV 1 /* Module format revision 1. */ -#define CRCCON 0x800063 /* CRC polynomial constant. */ - -/* Module access permission values. */ -#define MP_OWNER_READ 0x0001 -#define MP_OWNER_WRITE 0x0002 -#define MP_OWNER_EXEC 0x0004 -#define MP_GROUP_READ 0x0010 -#define MP_GROUP_WRITE 0x0020 -#define MP_GROUP_EXEC 0x0040 -#define MP_WORLD_READ 0x0100 -#define MP_WORLD_WRITE 0x0200 -#define MP_WORLD_EXEC 0x0400 -#define MP_WORLD_ACCESS 0x0777 -#define MP_OWNER_MASK 0x000f -#define MP_GROUP_MASK 0x00f0 -#define MP_WORLD_MASK 0x0f00 -#define MP_SYSTM_MASK 0xf000 - -/* Module Type/Language values. */ -#define MT_ANY 0 -#define MT_PROGRAM 0x0001 -#define MT_SUBROUT 0x0002 -#define MT_MULTI 0x0003 -#define MT_DATA 0x0004 -#define MT_TRAPLIB 0x000b -#define MT_SYSTEM 0x000c -#define MT_FILEMAN 0x000d -#define MT_DEVDRVR 0x000e -#define MT_DEVDESC 0x000f -#define MT_MASK 0xff00 - -#define ML_ANY 0 -#define ML_OBJECT 1 -#define ML_ICODE 2 -#define ML_PCODE 3 -#define ML_CCODE 4 -#define ML_CBLCODE 5 -#define ML_FRTNCODE 6 -#define ML_MASK 0x00ff - -#define mktypelang(type, lang) (((type) << 8) | (lang)) - -/* Module Attribute values. */ -#define MA_REENT 0x80 -#define MA_GHOST 0x40 -#define MA_SUPER 0x20 -#define MA_MASK 0xff00 -#define MR_MASK 0x00ff - -#define mkattrevs(attr, revs) (((attr) << 8) | (revs)) - -#define m_user m_owner.grp_usr.usr -#define m_group m_owner.grp_usr.grp -#define m_group_user m_owner.group_user - -/* Macro definitions for accessing module header fields. */ -#define MODNAME(mod) ((u_char*)((u_char*)mod + ((Mh_com)mod)->m_name)) -#if 0 -/* Appears not to be used, and the u_int32 typedef is gone (because it - conflicted with a Mach header. */ -#define MODSIZE(mod) ((u_int32)((Mh_com)mod)->m_size) -#endif /* 0 */ -#define MHCOM_BYTES_SIZE 80 -#define N_BADMAG(a) (((a).a_info) != MODSYNC) - -typedef struct mh_com -{ - /* Sync bytes ($4afc). */ - unsigned char m_sync[2]; - unsigned char m_sysrev[2]; /* System revision check value. */ - unsigned char m_size[4]; /* Module size. */ - unsigned char m_owner[4]; /* Group/user id. */ - unsigned char m_name[4]; /* Offset to module name. */ - unsigned char m_access[2]; /* Access permissions. */ - unsigned char m_tylan[2]; /* Type/lang. */ - unsigned char m_attrev[2]; /* Rev/attr. */ - unsigned char m_edit[2]; /* Edition. */ - unsigned char m_needs[4]; /* Module hardware requirements flags. (reserved). */ - unsigned char m_usage[4]; /* Comment string offset. */ - unsigned char m_symbol[4]; /* Symbol table offset. */ - unsigned char m_exec[4]; /* Offset to execution entry point. */ - unsigned char m_excpt[4]; /* Offset to exception entry point. */ - unsigned char m_data[4]; /* Data storage requirement. */ - unsigned char m_stack[4]; /* Stack size. */ - unsigned char m_idata[4]; /* Offset to initialized data. */ - unsigned char m_idref[4]; /* Offset to data reference lists. */ - unsigned char m_init[4]; /* Initialization routine offset. */ - unsigned char m_term[4]; /* Termination routine offset. */ - unsigned char m_ident[2]; /* Ident code for ident program. */ - char m_spare[8]; /* Reserved bytes. */ - unsigned char m_parity[2]; /* Header parity. */ -} mh_com,*Mh_com; - -/* Executable memory module. */ -typedef mh_com *Mh_exec,mh_exec; - -/* Data memory module. */ -typedef mh_com *Mh_data,mh_data; - -/* File manager memory module. */ -typedef mh_com *Mh_fman,mh_fman; - -/* Device driver module. */ -typedef mh_com *Mh_drvr,mh_drvr; - -/* Trap handler module. */ -typedef mh_com mh_trap, *Mh_trap; - -/* Device descriptor module. */ -typedef mh_com *Mh_dev,mh_dev; - -/* Configuration module. */ -typedef mh_com *Mh_config, mh_config; - -#if 0 - -#if !defined(_MODDIR_H) -/* Go get _os_fmod (and others). */ -#include -#endif - -error_code _os_crc (void *, u_int32, int *); -error_code _os_datmod (char *, u_int32, u_int16 *, u_int16 *, u_int32, void **, mh_data **); -error_code _os_get_moddir (void *, u_int32 *); -error_code _os_initdata (mh_com *, void *); -error_code _os_link (char **, mh_com **, void **, u_int16 *, u_int16 *); -error_code _os_linkm (mh_com *, void **, u_int16 *, u_int16 *); -error_code _os_load (char *, mh_com **, void **, u_int32, u_int16 *, u_int16 *, u_int32); -error_code _os_mkmodule (char *, u_int32, u_int16 *, u_int16 *, u_int32, void **, mh_com **, u_int32); -error_code _os_modaddr (void *, mh_com **); -error_code _os_setcrc (mh_com *); -error_code _os_slink (u_int32, char *, void **, void **, mh_com **); -error_code _os_slinkm (u_int32, mh_com *, void **, void **); -error_code _os_unlink (mh_com *); -error_code _os_unload (char *, u_int32); -error_code _os_tlink (u_int32, char *, void **, mh_trap **, void *, u_int32); -error_code _os_tlinkm (u_int32, mh_com *, void **, void *, u_int32); -error_code _os_iodel (mh_com *); -error_code _os_vmodul (mh_com *, mh_com *, u_int32); -#endif /* 0 */ - -#endif diff --git a/include/partition.h b/include/partition.h deleted file mode 100644 index d8b554f8f9a..00000000000 --- a/include/partition.h +++ /dev/null @@ -1,82 +0,0 @@ -/* List implementation of a partition of consecutive integers. - Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. - Contributed by CodeSourcery, LLC. - - This file is part of GCC. - - GCC 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, or (at your option) - any later version. - - GCC 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 GCC; see the file COPYING. If not, write to - the Free Software Foundation, 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - -/* This package implements a partition of consecutive integers. The - elements are partitioned into classes. Each class is represented - by one of its elements, the canonical element, which is chosen - arbitrarily from elements in the class. The principal operations - on a partition are FIND, which takes an element, determines its - class, and returns the canonical element for that class, and UNION, - which unites the two classes that contain two given elements into a - single class. - - The list implementation used here provides constant-time finds. By - storing the size of each class with the class's canonical element, - it is able to perform unions over all the classes in the partition - in O (N log N) time. */ - -#ifndef _PARTITION_H -#define _PARTITION_H - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#include "ansidecl.h" -#include - -struct partition_elem -{ - /* The canonical element that represents the class containing this - element. */ - int class_element; - /* The next element in this class. Elements in each class form a - circular list. */ - struct partition_elem* next; - /* The number of elements in this class. Valid only if this is the - canonical element for its class. */ - unsigned class_count; -}; - -typedef struct partition_def -{ - /* The number of elements in this partition. */ - int num_elements; - /* The elements in the partition. */ - struct partition_elem elements[1]; -} *partition; - -extern partition partition_new (int); -extern void partition_delete (partition); -extern int partition_union (partition, int, int); -extern void partition_print (partition, FILE*); - -/* Returns the canonical element corresponding to the class containing - ELEMENT__ in PARTITION__. */ - -#define partition_find(partition__, element__) \ - ((partition__)->elements[(element__)].class_element) - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _PARTITION_H */ diff --git a/include/progress.h b/include/progress.h deleted file mode 100644 index 53e0199ef91..00000000000 --- a/include/progress.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Default definitions for progress macros. - Copyright 1994 Free Software Foundation, Inc. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* The default definitions below are intended to be replaced by real - definitions, if building the tools for an interactive programming - environment. */ - -#ifndef _PROGRESS_H -#define _PROGRESS_H - -#ifndef START_PROGRESS -#define START_PROGRESS(STR,N) -#endif - -#ifndef PROGRESS -#define PROGRESS(X) -#endif - -#ifndef END_PROGRESS -#define END_PROGRESS(STR) -#endif - -#endif /* _PROGRESS_H */ diff --git a/include/safe-ctype.h b/include/safe-ctype.h deleted file mode 100644 index e59b357ccfb..00000000000 --- a/include/safe-ctype.h +++ /dev/null @@ -1,119 +0,0 @@ -/* replacement macros. - - Copyright (C) 2000, 2001 Free Software Foundation, Inc. - Contributed by Zack Weinberg . - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* This is a compatible replacement of the standard C library's - with the following properties: - - - Implements all isxxx() macros required by C99. - - Also implements some character classes useful when - parsing C-like languages. - - Does not change behavior depending on the current locale. - - Behaves properly for all values in the range of a signed or - unsigned char. - - To avoid conflicts, this header defines the isxxx functions in upper - case, e.g. ISALPHA not isalpha. */ - -#ifndef SAFE_CTYPE_H -#define SAFE_CTYPE_H - -#ifdef isalpha - #error "safe-ctype.h and ctype.h may not be used simultaneously" -#endif - -/* Determine host character set. */ -#define HOST_CHARSET_UNKNOWN 0 -#define HOST_CHARSET_ASCII 1 -#define HOST_CHARSET_EBCDIC 2 - -#if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \ - && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21 -# define HOST_CHARSET HOST_CHARSET_ASCII -#else -# if '\n' == 0x15 && ' ' == 0x40 && '0' == 0xF0 \ - && 'A' == 0xC1 && 'a' == 0x81 && '!' == 0x5A -# define HOST_CHARSET HOST_CHARSET_EBCDIC -# else -# define HOST_CHARSET HOST_CHARSET_UNKNOWN -# endif -#endif - -/* Categories. */ - -enum { - /* In C99 */ - _sch_isblank = 0x0001, /* space \t */ - _sch_iscntrl = 0x0002, /* nonprinting characters */ - _sch_isdigit = 0x0004, /* 0-9 */ - _sch_islower = 0x0008, /* a-z */ - _sch_isprint = 0x0010, /* any printing character including ' ' */ - _sch_ispunct = 0x0020, /* all punctuation */ - _sch_isspace = 0x0040, /* space \t \n \r \f \v */ - _sch_isupper = 0x0080, /* A-Z */ - _sch_isxdigit = 0x0100, /* 0-9A-Fa-f */ - - /* Extra categories useful to cpplib. */ - _sch_isidst = 0x0200, /* A-Za-z_ */ - _sch_isvsp = 0x0400, /* \n \r */ - _sch_isnvsp = 0x0800, /* space \t \f \v \0 */ - - /* Combinations of the above. */ - _sch_isalpha = _sch_isupper|_sch_islower, /* A-Za-z */ - _sch_isalnum = _sch_isalpha|_sch_isdigit, /* A-Za-z0-9 */ - _sch_isidnum = _sch_isidst|_sch_isdigit, /* A-Za-z0-9_ */ - _sch_isgraph = _sch_isalnum|_sch_ispunct, /* isprint and not space */ - _sch_iscppsp = _sch_isvsp|_sch_isnvsp, /* isspace + \0 */ - _sch_isbasic = _sch_isprint|_sch_iscppsp /* basic charset of ISO C - (plus ` and @) */ -}; - -/* Character classification. */ -extern const unsigned short _sch_istable[256]; - -#define _sch_test(c, bit) (_sch_istable[(c) & 0xff] & (unsigned short)(bit)) - -#define ISALPHA(c) _sch_test(c, _sch_isalpha) -#define ISALNUM(c) _sch_test(c, _sch_isalnum) -#define ISBLANK(c) _sch_test(c, _sch_isblank) -#define ISCNTRL(c) _sch_test(c, _sch_iscntrl) -#define ISDIGIT(c) _sch_test(c, _sch_isdigit) -#define ISGRAPH(c) _sch_test(c, _sch_isgraph) -#define ISLOWER(c) _sch_test(c, _sch_islower) -#define ISPRINT(c) _sch_test(c, _sch_isprint) -#define ISPUNCT(c) _sch_test(c, _sch_ispunct) -#define ISSPACE(c) _sch_test(c, _sch_isspace) -#define ISUPPER(c) _sch_test(c, _sch_isupper) -#define ISXDIGIT(c) _sch_test(c, _sch_isxdigit) - -#define ISIDNUM(c) _sch_test(c, _sch_isidnum) -#define ISIDST(c) _sch_test(c, _sch_isidst) -#define IS_ISOBASIC(c) _sch_test(c, _sch_isbasic) -#define IS_VSPACE(c) _sch_test(c, _sch_isvsp) -#define IS_NVSPACE(c) _sch_test(c, _sch_isnvsp) -#define IS_SPACE_OR_NUL(c) _sch_test(c, _sch_iscppsp) - -/* Character transformation. */ -extern const unsigned char _sch_toupper[256]; -extern const unsigned char _sch_tolower[256]; -#define TOUPPER(c) _sch_toupper[(c) & 0xff] -#define TOLOWER(c) _sch_tolower[(c) & 0xff] - -#endif /* SAFE_CTYPE_H */ diff --git a/include/sort.h b/include/sort.h deleted file mode 100644 index 582af81623b..00000000000 --- a/include/sort.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Sorting algorithms. - Copyright (C) 2000, 2002 Free Software Foundation, Inc. - Contributed by Mark Mitchell . - -This file is part of GCC. - -GCC 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, or (at your option) -any later version. - -GCC 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 GCC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#ifndef SORT_H -#define SORT_H - -#include /* For size_t */ -#ifdef __STDC__ -#include -#endif /* __STDC__ */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#include "ansidecl.h" - -/* Sort an array of pointers. */ - -extern void sort_pointers (size_t, void **, void **); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* SORT_H */ - - - - diff --git a/include/splay-tree.h b/include/splay-tree.h deleted file mode 100644 index 78d8f71c09f..00000000000 --- a/include/splay-tree.h +++ /dev/null @@ -1,144 +0,0 @@ -/* A splay-tree datatype. - Copyright 1998, 1999, 2000, 2002 Free Software Foundation, Inc. - Contributed by Mark Mitchell (mark@markmitchell.com). - -This file is part of GCC. - -GCC 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, or (at your option) -any later version. - -GCC 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 GCC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* For an easily readable description of splay-trees, see: - - Lewis, Harry R. and Denenberg, Larry. Data Structures and Their - Algorithms. Harper-Collins, Inc. 1991. - - The major feature of splay trees is that all basic tree operations - are amortized O(log n) time for a tree with n nodes. */ - -#ifndef _SPLAY_TREE_H -#define _SPLAY_TREE_H - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#include "ansidecl.h" - -#ifndef GTY -#define GTY(X) -#endif - -/* Use typedefs for the key and data types to facilitate changing - these types, if necessary. These types should be sufficiently wide - that any pointer or scalar can be cast to these types, and then - cast back, without loss of precision. */ -typedef unsigned long int splay_tree_key; -typedef unsigned long int splay_tree_value; - -/* Forward declaration for a node in the tree. */ -typedef struct splay_tree_node_s *splay_tree_node; - -/* The type of a function which compares two splay-tree keys. The - function should return values as for qsort. */ -typedef int (*splay_tree_compare_fn) (splay_tree_key, splay_tree_key); - -/* The type of a function used to deallocate any resources associated - with the key. */ -typedef void (*splay_tree_delete_key_fn) (splay_tree_key); - -/* The type of a function used to deallocate any resources associated - with the value. */ -typedef void (*splay_tree_delete_value_fn) (splay_tree_value); - -/* The type of a function used to iterate over the tree. */ -typedef int (*splay_tree_foreach_fn) (splay_tree_node, void*); - -/* The type of a function used to allocate memory for tree root and - node structures. The first argument is the number of bytes needed; - the second is a data pointer the splay tree functions pass through - to the allocator. This function must never return zero. */ -typedef void *(*splay_tree_allocate_fn) (int, void *); - -/* The type of a function used to free memory allocated using the - corresponding splay_tree_allocate_fn. The first argument is the - memory to be freed; the latter is a data pointer the splay tree - functions pass through to the freer. */ -typedef void (*splay_tree_deallocate_fn) (void *, void *); - -/* The nodes in the splay tree. */ -struct splay_tree_node_s GTY(()) -{ - /* The key. */ - splay_tree_key GTY ((use_param1)) key; - - /* The value. */ - splay_tree_value GTY ((use_param2)) value; - - /* The left and right children, respectively. */ - splay_tree_node GTY ((use_params)) left; - splay_tree_node GTY ((use_params)) right; -}; - -/* The splay tree itself. */ -struct splay_tree_s GTY(()) -{ - /* The root of the tree. */ - splay_tree_node GTY ((use_params)) root; - - /* The comparision function. */ - splay_tree_compare_fn comp; - - /* The deallocate-key function. NULL if no cleanup is necessary. */ - splay_tree_delete_key_fn delete_key; - - /* The deallocate-value function. NULL if no cleanup is necessary. */ - splay_tree_delete_value_fn delete_value; - - /* Allocate/free functions, and a data pointer to pass to them. */ - splay_tree_allocate_fn allocate; - splay_tree_deallocate_fn deallocate; - void * GTY((skip)) allocate_data; - -}; -typedef struct splay_tree_s *splay_tree; - -extern splay_tree splay_tree_new (splay_tree_compare_fn, - splay_tree_delete_key_fn, - splay_tree_delete_value_fn); -extern splay_tree splay_tree_new_with_allocator (splay_tree_compare_fn, - splay_tree_delete_key_fn, - splay_tree_delete_value_fn, - splay_tree_allocate_fn, - splay_tree_deallocate_fn, - void *); -extern void splay_tree_delete (splay_tree); -extern splay_tree_node splay_tree_insert (splay_tree, - splay_tree_key, - splay_tree_value); -extern void splay_tree_remove (splay_tree, splay_tree_key); -extern splay_tree_node splay_tree_lookup (splay_tree, splay_tree_key); -extern splay_tree_node splay_tree_predecessor (splay_tree, splay_tree_key); -extern splay_tree_node splay_tree_successor (splay_tree, splay_tree_key); -extern splay_tree_node splay_tree_max (splay_tree); -extern splay_tree_node splay_tree_min (splay_tree); -extern int splay_tree_foreach (splay_tree, splay_tree_foreach_fn, void*); -extern int splay_tree_compare_ints (splay_tree_key, splay_tree_key); -extern int splay_tree_compare_pointers (splay_tree_key, splay_tree_key); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _SPLAY_TREE_H */ diff --git a/include/symcat.h b/include/symcat.h deleted file mode 100644 index 03a12921042..00000000000 --- a/include/symcat.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Symbol concatenation utilities. - - Copyright (C) 1998, 2000 Free Software Foundation, Inc. - - This program 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., - 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef SYM_CAT_H -#define SYM_CAT_H - -#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) -#define CONCAT2(a,b) a##b -#define CONCAT3(a,b,c) a##b##c -#define CONCAT4(a,b,c,d) a##b##c##d -#define STRINGX(s) #s -#else -/* Note one should never pass extra whitespace to the CONCATn macros, - e.g. CONCAT2(foo, bar) because traditonal C will keep the space between - the two labels instead of concatenating them. Instead, make sure to - write CONCAT2(foo,bar). */ -#define CONCAT2(a,b) a/**/b -#define CONCAT3(a,b,c) a/**/b/**/c -#define CONCAT4(a,b,c,d) a/**/b/**/c/**/d -#define STRINGX(s) "s" -#endif - -#define XCONCAT2(a,b) CONCAT2(a,b) -#define XCONCAT3(a,b,c) CONCAT3(a,b,c) -#define XCONCAT4(a,b,c,d) CONCAT4(a,b,c,d) - -/* Note the layer of indirection here is typically used to allow - stringification of the expansion of macros. I.e. "#define foo - bar", "XSTRING(foo)", to yield "bar". Be aware that this only - works for __STDC__, not for traditional C which will still resolve - to "foo". */ -#define XSTRING(s) STRINGX(s) - -#endif /* SYM_CAT_H */ diff --git a/include/ternary.h b/include/ternary.h deleted file mode 100644 index 31c1fcef6ad..00000000000 --- a/include/ternary.h +++ /dev/null @@ -1,51 +0,0 @@ -/* ternary.h - Ternary Search Trees - Copyright 2001 Free Software Foundation, Inc. - - Contributed by Daniel Berlin (dan@cgsoftware.com) - - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, - USA. */ -#ifndef TERNARY_H_ -#define TERNARY_H_ -/* Ternary search trees */ - -typedef struct ternary_node_def *ternary_tree; - -typedef struct ternary_node_def -{ - char splitchar; - ternary_tree lokid; - ternary_tree eqkid; - ternary_tree hikid; -} -ternary_node; - -/* Insert string S into tree P, associating it with DATA. - Return the data in the tree associated with the string if it's - already there, and replace is 0. - Otherwise, replaces if it it exists, inserts if it doesn't, and - returns the data you passed in. */ -void *ternary_insert (ternary_tree *p, const char *s, - void *data, int replace); - -/* Delete the ternary search tree rooted at P. - Does NOT delete the data you associated with the strings. */ -void ternary_cleanup (ternary_tree p); - -/* Search the ternary tree for string S, returning the data associated - with it if found. */ -void *ternary_search (const ternary_node *p, const char *s); -#endif diff --git a/include/xregex.h b/include/xregex.h deleted file mode 100644 index 645195bbceb..00000000000 --- a/include/xregex.h +++ /dev/null @@ -1,28 +0,0 @@ -/* This file redefines all regex external names before including - a renamed copy of glibc's regex.h. */ - -#ifndef _XREGEX_H -#define _XREGEX_H 1 - -# define regfree xregfree -# define regexec xregexec -# define regcomp xregcomp -# define regerror xregerror -# define re_set_registers xre_set_registers -# define re_match_2 xre_match_2 -# define re_match xre_match -# define re_search xre_search -# define re_compile_pattern xre_compile_pattern -# define re_set_syntax xre_set_syntax -# define re_search_2 xre_search_2 -# define re_compile_fastmap xre_compile_fastmap -# define re_syntax_options xre_syntax_options -# define re_max_failures xre_max_failures - -# define _REGEX_RE_COMP -# define re_comp xre_comp -# define re_exec xre_exec - -#include "xregex2.h" - -#endif /* xregex.h */ diff --git a/include/xregex2.h b/include/xregex2.h deleted file mode 100644 index d3d0da14a98..00000000000 --- a/include/xregex2.h +++ /dev/null @@ -1,565 +0,0 @@ -/* Definitions for data structures and routines for the regular - expression library, version 0.12. - - Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993, 1995, 1996, 1997, - 1998, 2000, 2005 Free Software Foundation, Inc. - - This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301 USA. */ - -#ifndef _REGEX_H -#define _REGEX_H 1 - -/* Allow the use in C++ code. */ -#ifdef __cplusplus -extern "C" { -#endif - -/* POSIX says that must be included (by the caller) before - . */ - -#if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS -/* VMS doesn't have `size_t' in , even though POSIX says it - should be there. */ -# include -#endif - -/* The following two types have to be signed and unsigned integer type - wide enough to hold a value of a pointer. For most ANSI compilers - ptrdiff_t and size_t should be likely OK. Still size of these two - types is 2 for Microsoft C. Ugh... */ -typedef long int s_reg_t; -typedef unsigned long int active_reg_t; - -/* The following bits are used to determine the regexp syntax we - recognize. The set/not-set meanings are chosen so that Emacs syntax - remains the value 0. The bits are given in alphabetical order, and - the definitions shifted by one from the previous bit; thus, when we - add or remove a bit, only one other definition need change. */ -typedef unsigned long int reg_syntax_t; - -/* If this bit is not set, then \ inside a bracket expression is literal. - If set, then such a \ quotes the following character. */ -#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) - -/* If this bit is not set, then + and ? are operators, and \+ and \? are - literals. - If set, then \+ and \? are operators and + and ? are literals. */ -#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) - -/* If this bit is set, then character classes are supported. They are: - [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], - [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. - If not set, then character classes are not supported. */ -#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) - -/* If this bit is set, then ^ and $ are always anchors (outside bracket - expressions, of course). - If this bit is not set, then it depends: - ^ is an anchor if it is at the beginning of a regular - expression or after an open-group or an alternation operator; - $ is an anchor if it is at the end of a regular expression, or - before a close-group or an alternation operator. - - This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because - POSIX draft 11.2 says that * etc. in leading positions is undefined. - We already implemented a previous draft which made those constructs - invalid, though, so we haven't changed the code back. */ -#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) - -/* If this bit is set, then special characters are always special - regardless of where they are in the pattern. - If this bit is not set, then special characters are special only in - some contexts; otherwise they are ordinary. Specifically, - * + ? and intervals are only special when not after the beginning, - open-group, or alternation operator. */ -#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) - -/* If this bit is set, then *, +, ?, and { cannot be first in an re or - immediately after an alternation or begin-group operator. */ -#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) - -/* If this bit is set, then . matches newline. - If not set, then it doesn't. */ -#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) - -/* If this bit is set, then . doesn't match NUL. - If not set, then it does. */ -#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) - -/* If this bit is set, nonmatching lists [^...] do not match newline. - If not set, they do. */ -#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) - -/* If this bit is set, either \{...\} or {...} defines an - interval, depending on RE_NO_BK_BRACES. - If not set, \{, \}, {, and } are literals. */ -#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) - -/* If this bit is set, +, ? and | aren't recognized as operators. - If not set, they are. */ -#define RE_LIMITED_OPS (RE_INTERVALS << 1) - -/* If this bit is set, newline is an alternation operator. - If not set, newline is literal. */ -#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) - -/* If this bit is set, then `{...}' defines an interval, and \{ and \} - are literals. - If not set, then `\{...\}' defines an interval. */ -#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) - -/* If this bit is set, (...) defines a group, and \( and \) are literals. - If not set, \(...\) defines a group, and ( and ) are literals. */ -#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) - -/* If this bit is set, then \ matches . - If not set, then \ is a back-reference. */ -#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) - -/* If this bit is set, then | is an alternation operator, and \| is literal. - If not set, then \| is an alternation operator, and | is literal. */ -#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) - -/* If this bit is set, then an ending range point collating higher - than the starting range point, as in [z-a], is invalid. - If not set, then when ending range point collates higher than the - starting range point, the range is ignored. */ -#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) - -/* If this bit is set, then an unmatched ) is ordinary. - If not set, then an unmatched ) is invalid. */ -#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) - -/* If this bit is set, succeed as soon as we match the whole pattern, - without further backtracking. */ -#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) - -/* If this bit is set, do not process the GNU regex operators. - If not set, then the GNU regex operators are recognized. */ -#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) - -/* If this bit is set, turn on internal regex debugging. - If not set, and debugging was on, turn it off. - This only works if regex.c is compiled -DDEBUG. - We define this bit always, so that all that's needed to turn on - debugging is to recompile regex.c; the calling code can always have - this bit set, and it won't affect anything in the normal case. */ -#define RE_DEBUG (RE_NO_GNU_OPS << 1) - -/* If this bit is set, a syntactically invalid interval is treated as - a string of ordinary characters. For example, the ERE 'a{1' is - treated as 'a\{1'. */ -#define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) - -/* This global variable defines the particular regexp syntax to use (for - some interfaces). When a regexp is compiled, the syntax used is - stored in the pattern buffer, so changing this does not affect - already-compiled regexps. */ -extern reg_syntax_t re_syntax_options; - -/* Define combinations of the above bits for the standard possibilities. - (The [[[ comments delimit what gets put into the Texinfo file, so - don't delete them!) */ -/* [[[begin syntaxes]]] */ -#define RE_SYNTAX_EMACS 0 - -#define RE_SYNTAX_AWK \ - (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ - | RE_NO_BK_PARENS | RE_NO_BK_REFS \ - | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ - | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ - | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) - -#define RE_SYNTAX_GNU_AWK \ - ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \ - & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS)) - -#define RE_SYNTAX_POSIX_AWK \ - (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ - | RE_INTERVALS | RE_NO_GNU_OPS) - -#define RE_SYNTAX_GREP \ - (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ - | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ - | RE_NEWLINE_ALT) - -#define RE_SYNTAX_EGREP \ - (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ - | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ - | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ - | RE_NO_BK_VBAR) - -#define RE_SYNTAX_POSIX_EGREP \ - (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES \ - | RE_INVALID_INTERVAL_ORD) - -/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ -#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC - -#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC - -/* Syntax bits common to both basic and extended POSIX regex syntax. */ -#define _RE_SYNTAX_POSIX_COMMON \ - (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ - | RE_INTERVALS | RE_NO_EMPTY_RANGES) - -#define RE_SYNTAX_POSIX_BASIC \ - (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) - -/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes - RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this - isn't minimal, since other operators, such as \`, aren't disabled. */ -#define RE_SYNTAX_POSIX_MINIMAL_BASIC \ - (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) - -#define RE_SYNTAX_POSIX_EXTENDED \ - (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ - | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ - | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ - | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) - -/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is - removed and RE_NO_BK_REFS is added. */ -#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ - (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ - | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ - | RE_NO_BK_PARENS | RE_NO_BK_REFS \ - | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) -/* [[[end syntaxes]]] */ - -/* Maximum number of duplicates an interval can allow. Some systems - (erroneously) define this in other header files, but we want our - value, so remove any previous define. */ -#ifdef RE_DUP_MAX -# undef RE_DUP_MAX -#endif -/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */ -#define RE_DUP_MAX (0x7fff) - - -/* POSIX `cflags' bits (i.e., information for `regcomp'). */ - -/* If this bit is set, then use extended regular expression syntax. - If not set, then use basic regular expression syntax. */ -#define REG_EXTENDED 1 - -/* If this bit is set, then ignore case when matching. - If not set, then case is significant. */ -#define REG_ICASE (REG_EXTENDED << 1) - -/* If this bit is set, then anchors do not match at newline - characters in the string. - If not set, then anchors do match at newlines. */ -#define REG_NEWLINE (REG_ICASE << 1) - -/* If this bit is set, then report only success or fail in regexec. - If not set, then returns differ between not matching and errors. */ -#define REG_NOSUB (REG_NEWLINE << 1) - - -/* POSIX `eflags' bits (i.e., information for regexec). */ - -/* If this bit is set, then the beginning-of-line operator doesn't match - the beginning of the string (presumably because it's not the - beginning of a line). - If not set, then the beginning-of-line operator does match the - beginning of the string. */ -#define REG_NOTBOL 1 - -/* Like REG_NOTBOL, except for the end-of-line. */ -#define REG_NOTEOL (1 << 1) - - -/* If any error codes are removed, changed, or added, update the - `re_error_msg' table in regex.c. */ -typedef enum -{ -#ifdef _XOPEN_SOURCE - REG_ENOSYS = -1, /* This will never happen for this implementation. */ -#endif - - REG_NOERROR = 0, /* Success. */ - REG_NOMATCH, /* Didn't find a match (for regexec). */ - - /* POSIX regcomp return error codes. (In the order listed in the - standard.) */ - REG_BADPAT, /* Invalid pattern. */ - REG_ECOLLATE, /* Not implemented. */ - REG_ECTYPE, /* Invalid character class name. */ - REG_EESCAPE, /* Trailing backslash. */ - REG_ESUBREG, /* Invalid back reference. */ - REG_EBRACK, /* Unmatched left bracket. */ - REG_EPAREN, /* Parenthesis imbalance. */ - REG_EBRACE, /* Unmatched \{. */ - REG_BADBR, /* Invalid contents of \{\}. */ - REG_ERANGE, /* Invalid range end. */ - REG_ESPACE, /* Ran out of memory. */ - REG_BADRPT, /* No preceding re for repetition op. */ - - /* Error codes we've added. */ - REG_EEND, /* Premature end. */ - REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */ - REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ -} reg_errcode_t; - -/* This data structure represents a compiled pattern. Before calling - the pattern compiler, the fields `buffer', `allocated', `fastmap', - `translate', and `no_sub' can be set. After the pattern has been - compiled, the `re_nsub' field is available. All other fields are - private to the regex routines. */ - -#ifndef RE_TRANSLATE_TYPE -# define RE_TRANSLATE_TYPE char * -#endif - -struct re_pattern_buffer -{ -/* [[[begin pattern_buffer]]] */ - /* Space that holds the compiled pattern. It is declared as - `unsigned char *' because its elements are - sometimes used as array indexes. */ - unsigned char *buffer; - - /* Number of bytes to which `buffer' points. */ - unsigned long int allocated; - - /* Number of bytes actually used in `buffer'. */ - unsigned long int used; - - /* Syntax setting with which the pattern was compiled. */ - reg_syntax_t syntax; - - /* Pointer to a fastmap, if any, otherwise zero. re_search uses - the fastmap, if there is one, to skip over impossible - starting points for matches. */ - char *fastmap; - - /* Either a translate table to apply to all characters before - comparing them, or zero for no translation. The translation - is applied to a pattern when it is compiled and to a string - when it is matched. */ - RE_TRANSLATE_TYPE translate; - - /* Number of subexpressions found by the compiler. */ - size_t re_nsub; - - /* Zero if this pattern cannot match the empty string, one else. - Well, in truth it's used only in `re_search_2', to see - whether or not we should use the fastmap, so we don't set - this absolutely perfectly; see `re_compile_fastmap' (the - `duplicate' case). */ - unsigned can_be_null : 1; - - /* If REGS_UNALLOCATED, allocate space in the `regs' structure - for `max (RE_NREGS, re_nsub + 1)' groups. - If REGS_REALLOCATE, reallocate space if necessary. - If REGS_FIXED, use what's there. */ -#define REGS_UNALLOCATED 0 -#define REGS_REALLOCATE 1 -#define REGS_FIXED 2 - unsigned regs_allocated : 2; - - /* Set to zero when `regex_compile' compiles a pattern; set to one - by `re_compile_fastmap' if it updates the fastmap. */ - unsigned fastmap_accurate : 1; - - /* If set, `re_match_2' does not return information about - subexpressions. */ - unsigned no_sub : 1; - - /* If set, a beginning-of-line anchor doesn't match at the - beginning of the string. */ - unsigned not_bol : 1; - - /* Similarly for an end-of-line anchor. */ - unsigned not_eol : 1; - - /* If true, an anchor at a newline matches. */ - unsigned newline_anchor : 1; - -/* [[[end pattern_buffer]]] */ -}; - -typedef struct re_pattern_buffer regex_t; - -/* Type for byte offsets within the string. POSIX mandates this. */ -typedef int regoff_t; - - -/* This is the structure we store register match data in. See - regex.texinfo for a full description of what registers match. */ -struct re_registers -{ - unsigned num_regs; - regoff_t *start; - regoff_t *end; -}; - - -/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer, - `re_match_2' returns information about at least this many registers - the first time a `regs' structure is passed. */ -#ifndef RE_NREGS -# define RE_NREGS 30 -#endif - - -/* POSIX specification for registers. Aside from the different names than - `re_registers', POSIX uses an array of structures, instead of a - structure of arrays. */ -typedef struct -{ - regoff_t rm_so; /* Byte offset from string's start to substring's start. */ - regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ -} regmatch_t; - -/* Declarations for routines. */ - -/* To avoid duplicating every routine declaration -- once with a - prototype (if we are ANSI), and once without (if we aren't) -- we - use the following macro to declare argument types. This - unfortunately clutters up the declarations a bit, but I think it's - worth it. */ - -/* Sets the current default syntax to SYNTAX, and return the old syntax. - You can also simply assign to the `re_syntax_options' variable. */ -extern reg_syntax_t re_set_syntax (reg_syntax_t syntax); - -/* Compile the regular expression PATTERN, with length LENGTH - and syntax given by the global `re_syntax_options', into the buffer - BUFFER. Return NULL if successful, and an error string if not. */ -extern const char *re_compile_pattern (const char *pattern, size_t length, - struct re_pattern_buffer *buffer); - - -/* Compile a fastmap for the compiled pattern in BUFFER; used to - accelerate searches. Return 0 if successful and -2 if was an - internal error. */ -extern int re_compile_fastmap (struct re_pattern_buffer *buffer); - - -/* Search in the string STRING (with length LENGTH) for the pattern - compiled into BUFFER. Start searching at position START, for RANGE - characters. Return the starting position of the match, -1 for no - match, or -2 for an internal error. Also return register - information in REGS (if REGS and BUFFER->no_sub are nonzero). */ -extern int re_search (struct re_pattern_buffer *buffer, const char *string, - int length, int start, int range, - struct re_registers *regs); - - -/* Like `re_search', but search in the concatenation of STRING1 and - STRING2. Also, stop searching at index START + STOP. */ -extern int re_search_2 (struct re_pattern_buffer *buffer, const char *string1, - int length1, const char *string2, int length2, - int start, int range, struct re_registers *regs, - int stop); - - -/* Like `re_search', but return how many characters in STRING the regexp - in BUFFER matched, starting at position START. */ -extern int re_match (struct re_pattern_buffer *buffer, const char *string, - int length, int start, struct re_registers *regs); - - -/* Relates to `re_match' as `re_search_2' relates to `re_search'. */ -extern int re_match_2 (struct re_pattern_buffer *buffer, const char *string1, - int length1, const char *string2, int length2, - int start, struct re_registers *regs, int stop); - - -/* Set REGS to hold NUM_REGS registers, storing them in STARTS and - ENDS. Subsequent matches using BUFFER and REGS will use this memory - for recording register information. STARTS and ENDS must be - allocated with malloc, and must each be at least `NUM_REGS * sizeof - (regoff_t)' bytes long. - - If NUM_REGS == 0, then subsequent matches should allocate their own - register data. - - Unless this function is called, the first search or match using - PATTERN_BUFFER will allocate its own register data, without - freeing the old data. */ -extern void re_set_registers (struct re_pattern_buffer *buffer, - struct re_registers *regs, - unsigned num_regs, regoff_t *starts, - regoff_t *ends); - -#if defined _REGEX_RE_COMP || defined _LIBC -# ifndef _CRAY -/* 4.2 bsd compatibility. */ -extern char *re_comp (const char *); -extern int re_exec (const char *); -# endif -#endif - -/* GCC 2.95 and later have "__restrict"; C99 compilers have - "restrict", and "configure" may have defined "restrict". */ -#ifndef __restrict -# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)) -# if defined restrict || 199901L <= __STDC_VERSION__ -# define __restrict restrict -# else -# define __restrict -# endif -# endif -#endif - -/* GCC 3.1 and later support declaring arrays as non-overlapping - using the syntax array_name[restrict] */ -#ifndef __restrict_arr -# if ! (3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) || defined (__GNUG__) -# define __restrict_arr -# else -# define __restrict_arr __restrict -# endif -#endif - -/* POSIX compatibility. */ -extern int regcomp (regex_t *__restrict __preg, - const char *__restrict __pattern, - int __cflags); - -#if (__GNUC__) -__extension__ -#endif -extern int regexec (const regex_t *__restrict __preg, - const char *__restrict __string, size_t __nmatch, - regmatch_t __pmatch[__restrict_arr], - int __eflags); - -extern size_t regerror (int __errcode, const regex_t *__preg, - char *__errbuf, size_t __errbuf_size); - -extern void regfree (regex_t *__preg); - - -#ifdef __cplusplus -} -#endif /* C++ */ - -#endif /* regex.h */ - -/* -Local variables: -make-backup-files: t -version-control: t -trim-versions-without-asking: nil -End: -*/ diff --git a/include/xtensa-config.h b/include/xtensa-config.h deleted file mode 100644 index 5c0315d6198..00000000000 --- a/include/xtensa-config.h +++ /dev/null @@ -1,148 +0,0 @@ -/* Xtensa configuration settings. - Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica. - - This program 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, 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, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef XTENSA_CONFIG_H -#define XTENSA_CONFIG_H - -/* The macros defined here match those with the same names in the Xtensa - compile-time HAL (Hardware Abstraction Layer). Please refer to the - Xtensa System Software Reference Manual for documentation of these - macros. */ - -#undef XCHAL_HAVE_BE -#define XCHAL_HAVE_BE 1 - -#undef XCHAL_HAVE_DENSITY -#define XCHAL_HAVE_DENSITY 1 - -#undef XCHAL_HAVE_CONST16 -#define XCHAL_HAVE_CONST16 0 - -#undef XCHAL_HAVE_ABS -#define XCHAL_HAVE_ABS 1 - -#undef XCHAL_HAVE_ADDX -#define XCHAL_HAVE_ADDX 1 - -#undef XCHAL_HAVE_L32R -#define XCHAL_HAVE_L32R 1 - -#undef XSHAL_USE_ABSOLUTE_LITERALS -#define XSHAL_USE_ABSOLUTE_LITERALS 0 - -#undef XCHAL_HAVE_MAC16 -#define XCHAL_HAVE_MAC16 0 - -#undef XCHAL_HAVE_MUL16 -#define XCHAL_HAVE_MUL16 0 - -#undef XCHAL_HAVE_MUL32 -#define XCHAL_HAVE_MUL32 0 - -#undef XCHAL_HAVE_MUL32_HIGH -#define XCHAL_HAVE_MUL32_HIGH 0 - -#undef XCHAL_HAVE_DIV32 -#define XCHAL_HAVE_DIV32 0 - -#undef XCHAL_HAVE_NSA -#define XCHAL_HAVE_NSA 1 - -#undef XCHAL_HAVE_MINMAX -#define XCHAL_HAVE_MINMAX 0 - -#undef XCHAL_HAVE_SEXT -#define XCHAL_HAVE_SEXT 0 - -#undef XCHAL_HAVE_LOOPS -#define XCHAL_HAVE_LOOPS 1 - -#undef XCHAL_HAVE_BOOLEANS -#define XCHAL_HAVE_BOOLEANS 0 - -#undef XCHAL_HAVE_FP -#define XCHAL_HAVE_FP 0 - -#undef XCHAL_HAVE_FP_DIV -#define XCHAL_HAVE_FP_DIV 0 - -#undef XCHAL_HAVE_FP_RECIP -#define XCHAL_HAVE_FP_RECIP 0 - -#undef XCHAL_HAVE_FP_SQRT -#define XCHAL_HAVE_FP_SQRT 0 - -#undef XCHAL_HAVE_FP_RSQRT -#define XCHAL_HAVE_FP_RSQRT 0 - -#undef XCHAL_HAVE_WINDOWED -#define XCHAL_HAVE_WINDOWED 1 - -#undef XCHAL_HAVE_WIDE_BRANCHES -#define XCHAL_HAVE_WIDE_BRANCHES 0 - -#undef XCHAL_HAVE_PREDICTED_BRANCHES -#define XCHAL_HAVE_PREDICTED_BRANCHES 0 - - -#undef XCHAL_ICACHE_SIZE -#define XCHAL_ICACHE_SIZE 8192 - -#undef XCHAL_DCACHE_SIZE -#define XCHAL_DCACHE_SIZE 8192 - -#undef XCHAL_ICACHE_LINESIZE -#define XCHAL_ICACHE_LINESIZE 16 - -#undef XCHAL_DCACHE_LINESIZE -#define XCHAL_DCACHE_LINESIZE 16 - -#undef XCHAL_ICACHE_LINEWIDTH -#define XCHAL_ICACHE_LINEWIDTH 4 - -#undef XCHAL_DCACHE_LINEWIDTH -#define XCHAL_DCACHE_LINEWIDTH 4 - -#undef XCHAL_DCACHE_IS_WRITEBACK -#define XCHAL_DCACHE_IS_WRITEBACK 0 - - -#undef XCHAL_HAVE_MMU -#define XCHAL_HAVE_MMU 1 - -#undef XCHAL_MMU_MIN_PTE_PAGE_SIZE -#define XCHAL_MMU_MIN_PTE_PAGE_SIZE 12 - - -#undef XCHAL_HAVE_DEBUG -#define XCHAL_HAVE_DEBUG 1 - -#undef XCHAL_NUM_IBREAK -#define XCHAL_NUM_IBREAK 2 - -#undef XCHAL_NUM_DBREAK -#define XCHAL_NUM_DBREAK 2 - -#undef XCHAL_DEBUGLEVEL -#define XCHAL_DEBUGLEVEL 4 - - -#undef XCHAL_INST_FETCH_WIDTH -#define XCHAL_INST_FETCH_WIDTH 4 - -#endif /* !XTENSA_CONFIG_H */ diff --git a/include/xtensa-isa-internal.h b/include/xtensa-isa-internal.h deleted file mode 100644 index 9ea23e44069..00000000000 --- a/include/xtensa-isa-internal.h +++ /dev/null @@ -1,232 +0,0 @@ -/* Internal definitions for configurable Xtensa ISA support. - Copyright 2003, 2004, 2005 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef XTENSA_ISA_INTERNAL_H -#define XTENSA_ISA_INTERNAL_H - -/* Flags. */ - -#define XTENSA_OPERAND_IS_REGISTER 0x00000001 -#define XTENSA_OPERAND_IS_PCRELATIVE 0x00000002 -#define XTENSA_OPERAND_IS_INVISIBLE 0x00000004 -#define XTENSA_OPERAND_IS_UNKNOWN 0x00000008 - -#define XTENSA_OPCODE_IS_BRANCH 0x00000001 -#define XTENSA_OPCODE_IS_JUMP 0x00000002 -#define XTENSA_OPCODE_IS_LOOP 0x00000004 -#define XTENSA_OPCODE_IS_CALL 0x00000008 - -#define XTENSA_STATE_IS_EXPORTED 0x00000001 - -#define XTENSA_INTERFACE_HAS_SIDE_EFFECT 0x00000001 - -/* Function pointer typedefs */ -typedef void (*xtensa_format_encode_fn) (xtensa_insnbuf); -typedef void (*xtensa_get_slot_fn) (const xtensa_insnbuf, xtensa_insnbuf); -typedef void (*xtensa_set_slot_fn) (xtensa_insnbuf, const xtensa_insnbuf); -typedef int (*xtensa_opcode_decode_fn) (const xtensa_insnbuf); -typedef uint32 (*xtensa_get_field_fn) (const xtensa_insnbuf); -typedef void (*xtensa_set_field_fn) (xtensa_insnbuf, uint32); -typedef int (*xtensa_immed_decode_fn) (uint32 *); -typedef int (*xtensa_immed_encode_fn) (uint32 *); -typedef int (*xtensa_do_reloc_fn) (uint32 *, uint32); -typedef int (*xtensa_undo_reloc_fn) (uint32 *, uint32); -typedef void (*xtensa_opcode_encode_fn) (xtensa_insnbuf); -typedef int (*xtensa_format_decode_fn) (const xtensa_insnbuf); -typedef int (*xtensa_length_decode_fn) (const unsigned char *); - -typedef struct xtensa_format_internal_struct -{ - const char *name; /* Instruction format name. */ - int length; /* Instruction length in bytes. */ - xtensa_format_encode_fn encode_fn; - int num_slots; - int *slot_id; /* Array[num_slots] of slot IDs. */ -} xtensa_format_internal; - -typedef struct xtensa_slot_internal_struct -{ - const char *name; /* Not necessarily unique. */ - const char *format; - int position; - xtensa_get_slot_fn get_fn; - xtensa_set_slot_fn set_fn; - xtensa_get_field_fn *get_field_fns; /* Array[field_id]. */ - xtensa_set_field_fn *set_field_fns; /* Array[field_id]. */ - xtensa_opcode_decode_fn opcode_decode_fn; - const char *nop_name; -} xtensa_slot_internal; - -typedef struct xtensa_operand_internal_struct -{ - const char *name; - int field_id; - xtensa_regfile regfile; /* Register file. */ - int num_regs; /* Usually 1; 2 for reg pairs, etc. */ - uint32 flags; /* See XTENSA_OPERAND_* flags. */ - xtensa_immed_encode_fn encode; /* Encode the operand value. */ - xtensa_immed_decode_fn decode; /* Decode the value from the field. */ - xtensa_do_reloc_fn do_reloc; /* Perform a PC-relative reloc. */ - xtensa_undo_reloc_fn undo_reloc; /* Undo a PC-relative relocation. */ -} xtensa_operand_internal; - -typedef struct xtensa_arg_internal_struct -{ - union { - int operand_id; /* For normal operands. */ - xtensa_state state; /* For stateOperands. */ - } u; - char inout; /* Direction: 'i', 'o', or 'm'. */ -} xtensa_arg_internal; - -typedef struct xtensa_iclass_internal_struct -{ - int num_operands; /* Size of "operands" array. */ - xtensa_arg_internal *operands; /* Array[num_operands]. */ - - int num_stateOperands; /* Size of "stateOperands" array. */ - xtensa_arg_internal *stateOperands; /* Array[num_stateOperands]. */ - - int num_interfaceOperands; /* Size of "interfaceOperands". */ - xtensa_interface *interfaceOperands; /* Array[num_interfaceOperands]. */ -} xtensa_iclass_internal; - -typedef struct xtensa_opcode_internal_struct -{ - const char *name; /* Opcode mnemonic. */ - int iclass_id; /* Iclass for this opcode. */ - uint32 flags; /* See XTENSA_OPCODE_* flags. */ - xtensa_opcode_encode_fn *encode_fns; /* Array[slot_id]. */ - int num_funcUnit_uses; /* Number of funcUnit_use entries. */ - xtensa_funcUnit_use *funcUnit_uses; /* Array[num_funcUnit_uses]. */ -} xtensa_opcode_internal; - -typedef struct xtensa_regfile_internal_struct -{ - const char *name; /* Full name of the regfile. */ - const char *shortname; /* Abbreviated name. */ - xtensa_regfile parent; /* View parent (or identity). */ - int num_bits; /* Width of the registers. */ - int num_entries; /* Number of registers. */ -} xtensa_regfile_internal; - -typedef struct xtensa_interface_internal_struct -{ - const char *name; /* Interface name. */ - int num_bits; /* Width of the interface. */ - uint32 flags; /* See XTENSA_INTERFACE_* flags. */ - int class_id; /* Class of related interfaces. */ - char inout; /* "i" or "o". */ -} xtensa_interface_internal; - -typedef struct xtensa_funcUnit_internal_struct -{ - const char *name; /* Functional unit name. */ - int num_copies; /* Number of instances. */ -} xtensa_funcUnit_internal; - -typedef struct xtensa_state_internal_struct -{ - const char *name; /* State name. */ - int num_bits; /* Number of state bits. */ - uint32 flags; /* See XTENSA_STATE_* flags. */ -} xtensa_state_internal; - -typedef struct xtensa_sysreg_internal_struct -{ - const char *name; /* Register name. */ - int number; /* Register number. */ - int is_user; /* Non-zero if a "user register". */ -} xtensa_sysreg_internal; - -typedef struct xtensa_lookup_entry_struct -{ - const char *key; - union - { - xtensa_opcode opcode; /* Internal opcode number. */ - xtensa_sysreg sysreg; /* Internal sysreg number. */ - xtensa_state state; /* Internal state number. */ - xtensa_interface intf; /* Internal interface number. */ - xtensa_funcUnit fun; /* Internal funcUnit number. */ - } u; -} xtensa_lookup_entry; - -typedef struct xtensa_isa_internal_struct -{ - int is_big_endian; /* Endianness. */ - int insn_size; /* Maximum length in bytes. */ - int insnbuf_size; /* Number of insnbuf_words. */ - - int num_formats; - xtensa_format_internal *formats; - xtensa_format_decode_fn format_decode_fn; - xtensa_length_decode_fn length_decode_fn; - - int num_slots; - xtensa_slot_internal *slots; - - int num_fields; - - int num_operands; - xtensa_operand_internal *operands; - - int num_iclasses; - xtensa_iclass_internal *iclasses; - - int num_opcodes; - xtensa_opcode_internal *opcodes; - xtensa_lookup_entry *opname_lookup_table; - - int num_regfiles; - xtensa_regfile_internal *regfiles; - - int num_states; - xtensa_state_internal *states; - xtensa_lookup_entry *state_lookup_table; - - int num_sysregs; - xtensa_sysreg_internal *sysregs; - xtensa_lookup_entry *sysreg_lookup_table; - - /* The current Xtensa ISA only supports 256 of each kind of sysreg so - we can get away with implementing lookups with tables indexed by - the register numbers. If we ever allow larger sysreg numbers, this - may have to be reimplemented. The first entry in the following - arrays corresponds to "special" registers and the second to "user" - registers. */ - int max_sysreg_num[2]; - xtensa_sysreg *sysreg_table[2]; - - int num_interfaces; - xtensa_interface_internal *interfaces; - xtensa_lookup_entry *interface_lookup_table; - - int num_funcUnits; - xtensa_funcUnit_internal *funcUnits; - xtensa_lookup_entry *funcUnit_lookup_table; - -} xtensa_isa_internal; - -extern int xtensa_isa_name_compare (const void *, const void *); - -extern xtensa_isa_status xtisa_errno; -extern char xtisa_error_msg[]; - -#endif /* !XTENSA_ISA_INTERNAL_H */ diff --git a/include/xtensa-isa.h b/include/xtensa-isa.h deleted file mode 100644 index 6abf205978a..00000000000 --- a/include/xtensa-isa.h +++ /dev/null @@ -1,808 +0,0 @@ -/* Interface definition for configurable Xtensa ISA support. - Copyright 2003, 2004, 2005 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#ifndef XTENSA_LIBISA_H -#define XTENSA_LIBISA_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Use the statically-linked version for the GNU tools. */ -#define STATIC_LIBISA 1 - -/* Version number: This is intended to help support code that works with - versions of this library from multiple Xtensa releases. */ - -#define XTENSA_ISA_VERSION 7000 - -#ifndef uint32 -#define uint32 unsigned int -#endif - -/* This file defines the interface to the Xtensa ISA library. This - library contains most of the ISA-specific information for a - particular Xtensa processor. For example, the set of valid - instructions, their opcode encodings and operand fields are all - included here. - - This interface basically defines a number of abstract data types. - - . an instruction buffer - for holding the raw instruction bits - . ISA info - information about the ISA as a whole - . instruction formats - instruction size and slot structure - . opcodes - information about individual instructions - . operands - information about register and immediate instruction operands - . stateOperands - information about processor state instruction operands - . interfaceOperands - information about interface instruction operands - . register files - register file information - . processor states - internal processor state information - . system registers - "special registers" and "user registers" - . interfaces - TIE interfaces that are external to the processor - . functional units - TIE shared functions - - The interface defines a set of functions to access each data type. - With the exception of the instruction buffer, the internal - representations of the data structures are hidden. All accesses must - be made through the functions defined here. */ - -typedef struct xtensa_isa_opaque { int unused; } *xtensa_isa; - - -/* Most of the Xtensa ISA entities (e.g., opcodes, regfiles, etc.) are - represented here using sequential integers beginning with 0. The - specific values are only fixed for a particular instantiation of an - xtensa_isa structure, so these values should only be used - internally. */ - -typedef int xtensa_opcode; -typedef int xtensa_format; -typedef int xtensa_regfile; -typedef int xtensa_state; -typedef int xtensa_sysreg; -typedef int xtensa_interface; -typedef int xtensa_funcUnit; - - -/* Define a unique value for undefined items. */ - -#define XTENSA_UNDEFINED -1 - - -/* Overview of using this interface to decode/encode instructions: - - Each Xtensa instruction is associated with a particular instruction - format, where the format defines a fixed number of slots for - operations. The formats for the core Xtensa ISA have only one slot, - but FLIX instructions may have multiple slots. Within each slot, - there is a single opcode and some number of associated operands. - - The encoding and decoding functions operate on instruction buffers, - not on the raw bytes of the instructions. The same instruction - buffer data structure is used for both entire instructions and - individual slots in those instructions -- the contents of a slot need - to be extracted from or inserted into the buffer for the instruction - as a whole. - - Decoding an instruction involves first finding the format, which - identifies the number of slots, and then decoding each slot - separately. A slot is decoded by finding the opcode and then using - the opcode to determine how many operands there are. For example: - - xtensa_insnbuf_from_chars - xtensa_format_decode - for each slot { - xtensa_format_get_slot - xtensa_opcode_decode - for each operand { - xtensa_operand_get_field - xtensa_operand_decode - } - } - - Encoding an instruction is roughly the same procedure in reverse: - - xtensa_format_encode - for each slot { - xtensa_opcode_encode - for each operand { - xtensa_operand_encode - xtensa_operand_set_field - } - xtensa_format_set_slot - } - xtensa_insnbuf_to_chars -*/ - - -/* Error handling. */ - -/* Error codes. The code for the most recent error condition can be - retrieved with the "errno" function. For any result other than - xtensa_isa_ok, an error message containing additional information - about the problem can be retrieved using the "error_msg" function. - The error messages are stored in an internal buffer, which should not - should be freed and may be overwritten by subsequent operations. */ - -typedef enum xtensa_isa_status_enum -{ - xtensa_isa_ok = 0, - xtensa_isa_bad_format, - xtensa_isa_bad_slot, - xtensa_isa_bad_opcode, - xtensa_isa_bad_operand, - xtensa_isa_bad_field, - xtensa_isa_bad_iclass, - xtensa_isa_bad_regfile, - xtensa_isa_bad_sysreg, - xtensa_isa_bad_state, - xtensa_isa_bad_interface, - xtensa_isa_bad_funcUnit, - xtensa_isa_wrong_slot, - xtensa_isa_no_field, - xtensa_isa_out_of_memory, - xtensa_isa_buffer_overflow, - xtensa_isa_internal_error, - xtensa_isa_bad_value -} xtensa_isa_status; - -extern xtensa_isa_status -xtensa_isa_errno (xtensa_isa isa); - -extern char * -xtensa_isa_error_msg (xtensa_isa isa); - - - -/* Instruction buffers. */ - -typedef uint32 xtensa_insnbuf_word; -typedef xtensa_insnbuf_word *xtensa_insnbuf; - - -/* Get the size in "insnbuf_words" of the xtensa_insnbuf array. */ - -extern int -xtensa_insnbuf_size (xtensa_isa isa); - - -/* Allocate an xtensa_insnbuf of the right size. */ - -extern xtensa_insnbuf -xtensa_insnbuf_alloc (xtensa_isa isa); - - -/* Release an xtensa_insnbuf. */ - -extern void -xtensa_insnbuf_free (xtensa_isa isa, xtensa_insnbuf buf); - - -/* Conversion between raw memory (char arrays) and our internal - instruction representation. This is complicated by the Xtensa ISA's - variable instruction lengths. When converting to chars, the buffer - must contain a valid instruction so we know how many bytes to copy; - thus, the "to_chars" function returns the number of bytes copied or - XTENSA_UNDEFINED on error. The "from_chars" function first reads the - minimal number of bytes required to decode the instruction length and - then proceeds to copy the entire instruction into the buffer; if the - memory does not contain a valid instruction, it copies the maximum - number of bytes required for the longest Xtensa instruction. The - "num_chars" argument may be used to limit the number of bytes that - can be read or written. Otherwise, if "num_chars" is zero, the - functions may read or write past the end of the code. */ - -extern int -xtensa_insnbuf_to_chars (xtensa_isa isa, const xtensa_insnbuf insn, - unsigned char *cp, int num_chars); - -extern void -xtensa_insnbuf_from_chars (xtensa_isa isa, xtensa_insnbuf insn, - const unsigned char *cp, int num_chars); - - - -/* ISA information. */ - -/* Initialize the ISA information. */ - -extern xtensa_isa -xtensa_isa_init (xtensa_isa_status *errno_p, char **error_msg_p); - - -/* Deallocate an xtensa_isa structure. */ - -extern void -xtensa_isa_free (xtensa_isa isa); - - -/* Get the maximum instruction size in bytes. */ - -extern int -xtensa_isa_maxlength (xtensa_isa isa); - - -/* Decode the length in bytes of an instruction in raw memory (not an - insnbuf). This function reads only the minimal number of bytes - required to decode the instruction length. Returns - XTENSA_UNDEFINED on error. */ - -extern int -xtensa_isa_length_from_chars (xtensa_isa isa, const unsigned char *cp); - - -/* Get the number of stages in the processor's pipeline. The pipeline - stage values returned by other functions in this library will range - from 0 to N-1, where N is the value returned by this function. - Note that the stage numbers used here may not correspond to the - actual processor hardware, e.g., the hardware may have additional - stages before stage 0. Returns XTENSA_UNDEFINED on error. */ - -extern int -xtensa_isa_num_pipe_stages (xtensa_isa isa); - - -/* Get the number of various entities that are defined for this processor. */ - -extern int -xtensa_isa_num_formats (xtensa_isa isa); - -extern int -xtensa_isa_num_opcodes (xtensa_isa isa); - -extern int -xtensa_isa_num_regfiles (xtensa_isa isa); - -extern int -xtensa_isa_num_states (xtensa_isa isa); - -extern int -xtensa_isa_num_sysregs (xtensa_isa isa); - -extern int -xtensa_isa_num_interfaces (xtensa_isa isa); - -extern int -xtensa_isa_num_funcUnits (xtensa_isa isa); - - - -/* Instruction formats. */ - -/* Get the name of a format. Returns null on error. */ - -extern const char * -xtensa_format_name (xtensa_isa isa, xtensa_format fmt); - - -/* Given a format name, return the format number. Returns - XTENSA_UNDEFINED if the name is not a valid format. */ - -extern xtensa_format -xtensa_format_lookup (xtensa_isa isa, const char *fmtname); - - -/* Decode the instruction format from a binary instruction buffer. - Returns XTENSA_UNDEFINED if the format is not recognized. */ - -extern xtensa_format -xtensa_format_decode (xtensa_isa isa, const xtensa_insnbuf insn); - - -/* Set the instruction format field(s) in a binary instruction buffer. - All the other fields are set to zero. Returns non-zero on error. */ - -extern int -xtensa_format_encode (xtensa_isa isa, xtensa_format fmt, xtensa_insnbuf insn); - - -/* Find the length (in bytes) of an instruction. Returns - XTENSA_UNDEFINED on error. */ - -extern int -xtensa_format_length (xtensa_isa isa, xtensa_format fmt); - - -/* Get the number of slots in an instruction. Returns XTENSA_UNDEFINED - on error. */ - -extern int -xtensa_format_num_slots (xtensa_isa isa, xtensa_format fmt); - - -/* Get the opcode for a no-op in a particular slot. - Returns XTENSA_UNDEFINED on error. */ - -extern xtensa_opcode -xtensa_format_slot_nop_opcode (xtensa_isa isa, xtensa_format fmt, int slot); - - -/* Get the bits for a specified slot out of an insnbuf for the - instruction as a whole and put them into an insnbuf for that one - slot, and do the opposite to set a slot. Return non-zero on error. */ - -extern int -xtensa_format_get_slot (xtensa_isa isa, xtensa_format fmt, int slot, - const xtensa_insnbuf insn, xtensa_insnbuf slotbuf); - -extern int -xtensa_format_set_slot (xtensa_isa isa, xtensa_format fmt, int slot, - xtensa_insnbuf insn, const xtensa_insnbuf slotbuf); - - - -/* Opcode information. */ - -/* Translate a mnemonic name to an opcode. Returns XTENSA_UNDEFINED if - the name is not a valid opcode mnemonic. */ - -extern xtensa_opcode -xtensa_opcode_lookup (xtensa_isa isa, const char *opname); - - -/* Decode the opcode for one instruction slot from a binary instruction - buffer. Returns the opcode or XTENSA_UNDEFINED if the opcode is - illegal. */ - -extern xtensa_opcode -xtensa_opcode_decode (xtensa_isa isa, xtensa_format fmt, int slot, - const xtensa_insnbuf slotbuf); - - -/* Set the opcode field(s) for an instruction slot. All other fields - in the slot are set to zero. Returns non-zero if the opcode cannot - be encoded. */ - -extern int -xtensa_opcode_encode (xtensa_isa isa, xtensa_format fmt, int slot, - xtensa_insnbuf slotbuf, xtensa_opcode opc); - - -/* Get the mnemonic name for an opcode. Returns null on error. */ - -extern const char * -xtensa_opcode_name (xtensa_isa isa, xtensa_opcode opc); - - -/* Check various properties of opcodes. These functions return 0 if - the condition is false, 1 if the condition is true, and - XTENSA_UNDEFINED on error. The instructions are classified as - follows: - - branch: conditional branch; may fall through to next instruction (B*) - jump: unconditional branch (J, JX, RET*, RF*) - loop: zero-overhead loop (LOOP*) - call: unconditional call; control returns to next instruction (CALL*) - - For the opcodes that affect control flow in some way, the branch - target may be specified by an immediate operand or it may be an - address stored in a register. You can distinguish these by - checking if the instruction has a PC-relative immediate - operand. */ - -extern int -xtensa_opcode_is_branch (xtensa_isa isa, xtensa_opcode opc); - -extern int -xtensa_opcode_is_jump (xtensa_isa isa, xtensa_opcode opc); - -extern int -xtensa_opcode_is_loop (xtensa_isa isa, xtensa_opcode opc); - -extern int -xtensa_opcode_is_call (xtensa_isa isa, xtensa_opcode opc); - - -/* Find the number of ordinary operands, state operands, and interface - operands for an instruction. These return XTENSA_UNDEFINED on - error. */ - -extern int -xtensa_opcode_num_operands (xtensa_isa isa, xtensa_opcode opc); - -extern int -xtensa_opcode_num_stateOperands (xtensa_isa isa, xtensa_opcode opc); - -extern int -xtensa_opcode_num_interfaceOperands (xtensa_isa isa, xtensa_opcode opc); - - -/* Get functional unit usage requirements for an opcode. Each "use" - is identified by a pair. The - "num_funcUnit_uses" function returns the number of these "uses" or - XTENSA_UNDEFINED on error. The "funcUnit_use" function returns - a pointer to a "use" pair or null on error. */ - -typedef struct xtensa_funcUnit_use_struct -{ - xtensa_funcUnit unit; - int stage; -} xtensa_funcUnit_use; - -extern int -xtensa_opcode_num_funcUnit_uses (xtensa_isa isa, xtensa_opcode opc); - -extern xtensa_funcUnit_use * -xtensa_opcode_funcUnit_use (xtensa_isa isa, xtensa_opcode opc, int u); - - - -/* Operand information. */ - -/* Get the name of an operand. Returns null on error. */ - -extern const char * -xtensa_operand_name (xtensa_isa isa, xtensa_opcode opc, int opnd); - - -/* Some operands are "invisible", i.e., not explicitly specified in - assembly language. When assembling an instruction, you need not set - the values of invisible operands, since they are either hardwired or - derived from other field values. The values of invisible operands - can be examined in the same way as other operands, but remember that - an invisible operand may get its value from another visible one, so - the entire instruction must be available before examining the - invisible operand values. This function returns 1 if an operand is - visible, 0 if it is invisible, or XTENSA_UNDEFINED on error. Note - that whether an operand is visible is orthogonal to whether it is - "implicit", i.e., whether it is encoded in a field in the - instruction. */ - -extern int -xtensa_operand_is_visible (xtensa_isa isa, xtensa_opcode opc, int opnd); - - -/* Check if an operand is an input ('i'), output ('o'), or inout ('m') - operand. Note: The output operand of a conditional assignment - (e.g., movnez) appears here as an inout ('m') even if it is declared - in the TIE code as an output ('o'); this allows the compiler to - properly handle register allocation for conditional assignments. - Returns 0 on error. */ - -extern char -xtensa_operand_inout (xtensa_isa isa, xtensa_opcode opc, int opnd); - - -/* Get and set the raw (encoded) value of the field for the specified - operand. The "set" function does not check if the value fits in the - field; that is done by the "encode" function below. Both of these - functions return non-zero on error, e.g., if the field is not defined - for the specified slot. */ - -extern int -xtensa_operand_get_field (xtensa_isa isa, xtensa_opcode opc, int opnd, - xtensa_format fmt, int slot, - const xtensa_insnbuf slotbuf, uint32 *valp); - -extern int -xtensa_operand_set_field (xtensa_isa isa, xtensa_opcode opc, int opnd, - xtensa_format fmt, int slot, - xtensa_insnbuf slotbuf, uint32 val); - - -/* Encode and decode operands. The raw bits in the operand field may - be encoded in a variety of different ways. These functions hide - the details of that encoding. The result values are returned through - the argument pointer. The return value is non-zero on error. */ - -extern int -xtensa_operand_encode (xtensa_isa isa, xtensa_opcode opc, int opnd, - uint32 *valp); - -extern int -xtensa_operand_decode (xtensa_isa isa, xtensa_opcode opc, int opnd, - uint32 *valp); - - -/* An operand may be either a register operand or an immediate of some - sort (e.g., PC-relative or not). The "is_register" function returns - 0 if the operand is an immediate, 1 if it is a register, and - XTENSA_UNDEFINED on error. The "regfile" function returns the - regfile for a register operand, or XTENSA_UNDEFINED on error. */ - -extern int -xtensa_operand_is_register (xtensa_isa isa, xtensa_opcode opc, int opnd); - -extern xtensa_regfile -xtensa_operand_regfile (xtensa_isa isa, xtensa_opcode opc, int opnd); - - -/* Register operands may span multiple consecutive registers, e.g., a - 64-bit data type may occupy two 32-bit registers. Only the first - register is encoded in the operand field. This function specifies - the number of consecutive registers occupied by this operand. For - non-register operands, the return value is undefined. Returns - XTENSA_UNDEFINED on error. */ - -extern int -xtensa_operand_num_regs (xtensa_isa isa, xtensa_opcode opc, int opnd); - - -/* Some register operands do not completely identify the register being - accessed. For example, the operand value may be added to an internal - state value. By definition, this implies that the corresponding - regfile is not allocatable. Unknown registers should generally be - treated with worst-case assumptions. The function returns 0 if the - register value is unknown, 1 if known, and XTENSA_UNDEFINED on - error. */ - -extern int -xtensa_operand_is_known_reg (xtensa_isa isa, xtensa_opcode opc, int opnd); - - -/* Check if an immediate operand is PC-relative. Returns 0 for register - operands and non-PC-relative immediates, 1 for PC-relative - immediates, and XTENSA_UNDEFINED on error. */ - -extern int -xtensa_operand_is_PCrelative (xtensa_isa isa, xtensa_opcode opc, int opnd); - - -/* For PC-relative offset operands, the interpretation of the offset may - vary between opcodes, e.g., is it relative to the current PC or that - of the next instruction? The following functions are defined to - perform PC-relative relocations and to undo them (as in the - disassembler). The "do_reloc" function takes the desired address - value and the PC of the current instruction and sets the value to the - corresponding PC-relative offset (which can then be encoded and - stored into the operand field). The "undo_reloc" function takes the - unencoded offset value and the current PC and sets the value to the - appropriate address. The return values are non-zero on error. Note - that these functions do not replace the encode/decode functions; the - operands must be encoded/decoded separately and the encode functions - are responsible for detecting invalid operand values. */ - -extern int -xtensa_operand_do_reloc (xtensa_isa isa, xtensa_opcode opc, int opnd, - uint32 *valp, uint32 pc); - -extern int -xtensa_operand_undo_reloc (xtensa_isa isa, xtensa_opcode opc, int opnd, - uint32 *valp, uint32 pc); - - - -/* State Operands. */ - -/* Get the state accessed by a state operand. Returns XTENSA_UNDEFINED - on error. */ - -extern xtensa_state -xtensa_stateOperand_state (xtensa_isa isa, xtensa_opcode opc, int stOp); - - -/* Check if a state operand is an input ('i'), output ('o'), or inout - ('m') operand. Returns 0 on error. */ - -extern char -xtensa_stateOperand_inout (xtensa_isa isa, xtensa_opcode opc, int stOp); - - - -/* Interface Operands. */ - -/* Get the external interface accessed by an interface operand. - Returns XTENSA_UNDEFINED on error. */ - -extern xtensa_interface -xtensa_interfaceOperand_interface (xtensa_isa isa, xtensa_opcode opc, - int ifOp); - - - -/* Register Files. */ - -/* Regfiles include both "real" regfiles and "views", where a view - allows a group of adjacent registers in a real "parent" regfile to be - viewed as a single register. A regfile view has all the same - properties as its parent except for its (long) name, bit width, number - of entries, and default ctype. You can use the parent function to - distinguish these two classes. */ - -/* Look up a regfile by either its name or its abbreviated "short name". - Returns XTENSA_UNDEFINED on error. The "lookup_shortname" function - ignores "view" regfiles since they always have the same shortname as - their parents. */ - -extern xtensa_regfile -xtensa_regfile_lookup (xtensa_isa isa, const char *name); - -extern xtensa_regfile -xtensa_regfile_lookup_shortname (xtensa_isa isa, const char *shortname); - - -/* Get the name or abbreviated "short name" of a regfile. - Returns null on error. */ - -extern const char * -xtensa_regfile_name (xtensa_isa isa, xtensa_regfile rf); - -extern const char * -xtensa_regfile_shortname (xtensa_isa isa, xtensa_regfile rf); - - -/* Get the parent regfile of a "view" regfile. If the regfile is not a - view, the result is the same as the input parameter. Returns - XTENSA_UNDEFINED on error. */ - -extern xtensa_regfile -xtensa_regfile_view_parent (xtensa_isa isa, xtensa_regfile rf); - - -/* Get the bit width of a regfile or regfile view. - Returns XTENSA_UNDEFINED on error. */ - -extern int -xtensa_regfile_num_bits (xtensa_isa isa, xtensa_regfile rf); - - -/* Get the number of regfile entries. Returns XTENSA_UNDEFINED on - error. */ - -extern int -xtensa_regfile_num_entries (xtensa_isa isa, xtensa_regfile rf); - - - -/* Processor States. */ - -/* Look up a state by name. Returns XTENSA_UNDEFINED on error. */ - -extern xtensa_state -xtensa_state_lookup (xtensa_isa isa, const char *name); - - -/* Get the name for a processor state. Returns null on error. */ - -extern const char * -xtensa_state_name (xtensa_isa isa, xtensa_state st); - - -/* Get the bit width for a processor state. - Returns XTENSA_UNDEFINED on error. */ - -extern int -xtensa_state_num_bits (xtensa_isa isa, xtensa_state st); - - -/* Check if a state is exported from the processor core. Returns 0 if - the condition is false, 1 if the condition is true, and - XTENSA_UNDEFINED on error. */ - -extern int -xtensa_state_is_exported (xtensa_isa isa, xtensa_state st); - - - -/* Sysregs ("special registers" and "user registers"). */ - -/* Look up a register by its number and whether it is a "user register" - or a "special register". Returns XTENSA_UNDEFINED if the sysreg does - not exist. */ - -extern xtensa_sysreg -xtensa_sysreg_lookup (xtensa_isa isa, int num, int is_user); - - -/* Check if there exists a sysreg with a given name. - If not, this function returns XTENSA_UNDEFINED. */ - -extern xtensa_sysreg -xtensa_sysreg_lookup_name (xtensa_isa isa, const char *name); - - -/* Get the name of a sysreg. Returns null on error. */ - -extern const char * -xtensa_sysreg_name (xtensa_isa isa, xtensa_sysreg sysreg); - - -/* Get the register number. Returns XTENSA_UNDEFINED on error. */ - -extern int -xtensa_sysreg_number (xtensa_isa isa, xtensa_sysreg sysreg); - - -/* Check if a sysreg is a "special register" or a "user register". - Returns 0 for special registers, 1 for user registers and - XTENSA_UNDEFINED on error. */ - -extern int -xtensa_sysreg_is_user (xtensa_isa isa, xtensa_sysreg sysreg); - - - -/* Interfaces. */ - -/* Find an interface by name. The return value is XTENSA_UNDEFINED if - the specified interface is not found. */ - -extern xtensa_interface -xtensa_interface_lookup (xtensa_isa isa, const char *ifname); - - -/* Get the name of an interface. Returns null on error. */ - -extern const char * -xtensa_interface_name (xtensa_isa isa, xtensa_interface intf); - - -/* Get the bit width for an interface. - Returns XTENSA_UNDEFINED on error. */ - -extern int -xtensa_interface_num_bits (xtensa_isa isa, xtensa_interface intf); - - -/* Check if an interface is an input ('i') or output ('o') with respect - to the Xtensa processor core. Returns 0 on error. */ - -extern char -xtensa_interface_inout (xtensa_isa isa, xtensa_interface intf); - - -/* Check if accessing an interface has potential side effects. - Currently "data" interfaces have side effects and "control" - interfaces do not. Returns 1 if there are side effects, 0 if not, - and XTENSA_UNDEFINED on error. */ - -extern int -xtensa_interface_has_side_effect (xtensa_isa isa, xtensa_interface intf); - - -/* Some interfaces may be related such that accessing one interface - has side effects on a set of related interfaces. The interfaces - are partitioned into equivalence classes of related interfaces, and - each class is assigned a unique identifier number. This function - returns the class identifier for an interface, or XTENSA_UNDEFINED - on error. These identifiers can be compared to determine if two - interfaces are related; the specific values of the identifiers have - no particular meaning otherwise. */ - -extern int -xtensa_interface_class_id (xtensa_isa isa, xtensa_interface intf); - - - -/* Functional Units. */ - -/* Find a functional unit by name. The return value is XTENSA_UNDEFINED if - the specified unit is not found. */ - -extern xtensa_funcUnit -xtensa_funcUnit_lookup (xtensa_isa isa, const char *fname); - - -/* Get the name of a functional unit. Returns null on error. */ - -extern const char * -xtensa_funcUnit_name (xtensa_isa isa, xtensa_funcUnit fun); - - -/* Functional units may be replicated. See how many instances of a - particular function unit exist. Returns XTENSA_UNDEFINED on error. */ - -extern int -xtensa_funcUnit_num_copies (xtensa_isa isa, xtensa_funcUnit fun); - - -#ifdef __cplusplus -} -#endif -#endif /* XTENSA_LIBISA_H */ diff --git a/libiberty/COPYING.LIB b/libiberty/COPYING.LIB deleted file mode 100644 index ae23fcfda2d..00000000000 --- a/libiberty/COPYING.LIB +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - 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 Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -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 and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -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 other code 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. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - 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, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser 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 combine 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) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) 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. - - d) 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. - - e) 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 materials to be 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 with -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 Lesser 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser 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 - -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! - - diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog deleted file mode 100644 index 00c3089f8c7..00000000000 --- a/libiberty/ChangeLog +++ /dev/null @@ -1,7232 +0,0 @@ -2006-07-04 Peter O'Gorman - - * Makefile.in: chmod 644 before ranlib during install. - -2006-06-02 Mark Shinwell - - * pex-unix.c (pex_unix_exec_child): Insert cast when assigning - to environ. - -2006-06-01 Mark Shinwell - - * pex-common.c: New function pex_run_in_environment. - * pex-common.h: Add environment parameter to exec_child. - * pex-msdos.c: Add environment parameter to pex_msdos_exec_child. - * pex-djgpp.c: Add environment parameter to pex_djgpp_exec_child. - (pex_djgpp_exec_child): Pass environment to child process. - * pex-unix.c: Add environment parameter to pex_unix_exec_child. - (pex_unix_exec_child): Pass environment to child process. - * pex-win32.c: Add environment parameter to pex_win32_exec_child. - New function env_compare for comparing VAR=VALUE pairs. - (win32_spawn): Assemble environment block and pass to CreateProcess. - (spawn_script): Pass environment through to win32_spawn. - (pex_win32_exec_child): Pass environment through to spawn_script and - win32_spawn. - * functions.texi: Regenerate. - * pexecute.txh: Document pex_run_in_environment. - -2006-05-28 Mark Shinwell - - * mkstemps.c: Open temporary files in binary mode. - -2006-05-12 Anton Blanchard - - * cplus-dem.c (demangle_fund_type): Ensure buf is large enough to - hold "int%u_t". - -2006-04-24 Julian Brown - - * floatformat.c (floatformat_to_double): Fix (biased) exponent=0 case. - -2006-03-29 Jim Blandy - - * pex-common.c (pex_input_file, pex_input_pipe): New functions. - (pex_init_common): Initialize obj->input_file. - (pex_run): Close any file opened by pex_input_file. - * pexecute.txh (pex_input_file, pex_input_pipe): New docs. - * pex-common.h (struct pex_obj): New field input_file. - (struct pex_funcs): New function ptr fdopenw. - * pex-unix.c (pex_unix_fdopenw): New function. - (funcs): List it as our fdopenw function. - * pex-win32.c (pex_win32_fdopenw): New function. - (funcs): List it as our fdopenw function. - * pex-djgpp.c (funcs): Leave fdopenw null. - * pex-msdos (funcs): Same. - * functions.texi: Regenerated. - -2006-04-10 Jim Blandy - - * pex-common.c (temp_file): New function, containing guts of - pex-style temporary file name generation. - (pex_run): Use it. - -2006-04-06 Carlos O'Donell - - * Makefile.in: Add install-html, install-html-am, and - install-html-recursive targets. Define mkdir_p and - NORMAL_INSTALL. - * configure.ac: AC_SUBST datarootdir, docdir, htmldir. - * configure: Regenerate. - * testsuite/Makefile.in: Add install-html and html targets. - -2006-03-31 Mark Mitchell - - * pex-win32.c (): Include. - (fix_argv): Remove. - (argv_to_cmdline): New function. - (std_suffixes): New variable. - (no_suffixes): Likewise. - (find_executable): New function. - (win32_spawn): Likewise. - (spawn_script): Use win32_spawn instead of _spawnv[p]. - (pex_win32_exec_child): Replace MSVCRT calls with Win32 API calls. - (pex_win32_wait): Likewise. - -2006-03-24 Jim Blandy - - * pex-common.c (pex_run): Simplify output name handling. - -2006-03-12 Jim Blandy - - * pex-common.h (struct pex_obj): Doc fixes. - -2006-03-11 Jim Blandy - - * functions.texi: Regenerate. - -2006-02-21 Ben Elliston - - * pexecute.c (pwait): Syntax fix for previous change. - -2006-02-17 Uttam Pawar - - * pexecute.c (pwait): Free vector pointer. - * partition.c (partition_print): Free class_elements pointer. - -2006-02-11 Roger Sayle - R. Scott Bailey - Bill Northcott - - PR bootstrap/16787 - * floatformat.c: Include where available. - (NAN): Use value of DBL_QNAN if defined, and NAN isn't. - -2006-01-29 Gabriel Dos Reis - - * configure.ac: Add -Wc++-compat to ac_libibety_warn_cflags where - supported. - * configure: Regenerated. - -2006-01-20 Carlos O'Donell - - * testsuite/Makefile.in: Add test-expandargv test. - * testsuite/test-expandargv.c: New test. - * argv.c (expandargv): Check for errors with ferror, - rather than just by looking at return value from fread. - -2005-12-17 Gabriel Dos Reis - - * floatformat.c (floatformat_i387_ext_is_valid): Use explicit cast - to convert from "from". - (floatformat_to_double): Likewise. - (floatformat_from_double): Use explicit cast to convert from "to". - -2005-12-10 Terry Laurenzo - - PR java/9861 - * cp-demangle.c (d_bare_function_type): Recognize new 'J' qualifer - and include return type when found. - (d_print_comp)[DEMANGLE_COMPONENT_FUNCTION_TYPE]: Add - conditional logic to change printing order of return type.when - the DMGL_RET_POSTFIX option is present. - (java_demangle_v3): Add DMGL_RET_POSTFIX option to d_demangle - call. - * testsuite/test-demangle.c (main): Recognize option --ret-postfix - * testsuite/demangle-expected: Test cases to verify extended encoding. - Updated comment to document --ret-postfix option. - -2005-11-06 Richard Guenther - - * splay-tree.c (rotate_left): New function. - (rotate_right): Likewise. - (splay_tree_splay_helper): Remove. - (splay_tree_splay): Re-implement. - -2005-10-31 Mark Kettenis - - * floatformat.c (floatformat_vax_aingle, floatformat_vax_double): - New variables. - -2005-10-07 Mark Mitchell - - * at-file.texi: Fix typo. - -2005-10-03 Mark Mitchell - - * at-file.texi: New file. - -2005-09-27 Mark Mitchell - - * argv.c (expandargv): Do not use xmalloc_failed. - -2005-09-26 Mark Mitchell - - * argv.c (safe-ctype.h): Include it. - (ISBLANK): Remove. - (stdio.h): Include. - (buildargv): Use ISSPACE instead of ISBLANK. - (expandargv): New function. - * Makefile.in: Regenerated. - -2005-09-14 Christopher Faylor - - * pex-win32.c: Include "windows.h". - (backslashify): New function. - (fix_argv): Use backslashify to convert path to windows format. - Allocate one more place in new argv for potential executable from '#!' - parsing. - (tack_on_executable): New function. Conditional on USE_MINGW_MSYS - (openkey): Ditto. - (mingw_rootify): Ditto. - (msys_rootify): Ditto. - (spawn_script): New function. - (pex_win32_exec_child): Save translated argv in newargv. Pass to - spawn_script if spawnv* fails. - (main): New function. Conditional on MAIN. Useful for testing. - -2005-08-17 Mark Kettenis - - * floatformat.c (floatformat_always_valid): Change type of last - argument to `void *'. - (floatformat_i387_ext_is_valid): Likewise. - (floatformat_to_double): Change type of second argument to `const - void *'. - (floatformat_from_double): Change type of last argument to `void - *'. - (floatformat_is_valid): Change type of last argument to `const - void *'. - (ieee_test): Remove redundant casts. - -2005-08-17 Kelley Cook - - * strverscmp.c: Update FSF address. - * testsuite/Makefile.in: Likewise. - * testsuite/test-demangle.c: Likewise. - * testsuite/test-pexecute.c: Likewise. - -2005-07-23 Kaveh R. Ghazi - - * getopt.c: Include ansidecl.h before system headers. - -2005-07-22 Ben Elliston - - * getopt.c: Include "ansidecl.h". - (_getopt_initialize): Mark argc and argv parameters as unused. - -2005-07-22 Ben Elliston - - * regex.c (regcomp): Change type of `i' from unsigned to int. - -2005-07-22 Ben Elliston - - Recover patch lost in the sourceware repository: - 2005-07-09 Ben Elliston - * memcpy.c: Remove ANSI_PROTOTYPES conditional code. - * memmove.c: Likewise. - * objalloc.c: Likewise. - -2005-07-22 Ben Elliston - - * configure.ac: Check for a getopt(3) declaration. - * configure, config.in: Regenerate. - -2005-07-15 Ben Elliston - - * regex.c (TRANSLATE): Cast rhs of ternary expression to char. - -2005-07-12 Ben Elliston - - * floatformat.c (floatformat_to_double): Add a comment about a - potential source of warnings when compiling this file. - -2005-07-12 Ben Elliston - - * pexecute.c (pexecute): Cast string litrals to char *. - * regex.c (re_comp): Cast a call to gettext() to char *. - -2005-07-07 Kelley Cook - - * config.table: Delete file. Move former contents into ... - * configure.ac: ... here and escape any brackets for m4. - * Makefile.in (config.status): Remove dependency on config.table. - * configure: Regenerate. - -2005-07-07 Kelley Cook - - * config.in: Regenerate for 6/20 change. - -2005-07-03 Steve Ellcey - - PR other/13906 - * md5.c (md5_process_bytes): Check alignment. - -2005-07-01 Ian Lance Taylor - - PR other/22268 - * cp-demangle.c (d_expr_primary): Don't run off the end of the - string while looking for the end of a literal value. - * testsuite/demangle-expected: Add test case. - -2005-06-30 Daniel Berlin - - * hashtab.c (EMPTY_ENTRY): Moved and renamed. - (DELETED_ENTRY): Ditto. - -2005-06-20 Geoffrey Keating - - * strverscmp.c: New. - * Makefile.in (CFILES): Add strverscmp.c. - (CONFIGURED_OFILES): Add strverscmp.o. - (strverscmp.o): New rule. - (stamp-functions): Add $(srcdir) to files in source directory. - * configure.ac (funcs): Add strverscmp. - (AC_CHECK_FUNCS): Add strverscmp. - * configure: Regenerate. - * functions.texi: Regenerate. - -2005-05-28 Eli Zaretskii - - * configure.ac: Add snprintf and vsnprintf to AC_CHEK_DECLS. - * config.in, configure: Regenerate. - -2005-05-25 Richard Henderson - - * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_HIDDEN_ALIAS. - (d_make_comp, d_print_comp): Likewise. - (d_special_name): Generate one. - * testsuite/demangle-expected: Add a hidden alias test. - -2005-05-24 Gabriel Dos Reis - - * configure.ac: Check declarations for calloc(), getenv(), - malloc(), realloc() and sbrk(). - * config.in: Regenerate. - * configure: Likewise. - - * alloca.c (C_alloca): Change "new" to "new_storage". Use XNEWVEC - instead of xmalloc. - * choose-temp.c (choose_temp_base): Use XNEWVEC instea od xmalloc. - * concat.c (liiberty_concat_ptr): Surround definition with an - extern "C" block, if __cplusplus. - (concat): Use XNEWVEC instead of xmalloc. - (reconcat): Likewise. - * cp-demangle.c (struct d_print_template): Rename member - "template" to "template_decl". Adjust use throughout the file. - (d_print_resize): Properly cast return value of realloc(). - (cplus_demangle_print): Same for malloc(). - (d_demangle): Likewise. - * cp-demint.c (cplus_demangle_fill_builtin_type): Rename parameter - "typename" to "type_name". - * cplus-dem.c (grow_vect): Use XRESIZEVEC instead of xrealloc(). - (work_stuff_copy_to_from): Use XNEWVEC insteand of xmalloc(). - (demangle_template_value_parm): Likewise. - (demangle_template): Likewise. - (recursively_demangle): Likewise. - (do_hpacc_template_literal): Likewise. - (do_arg): Likewise. - (remember_type): Likewise. - (remember_Ktype): Likewise. - (register_Btype): Likewise. - (string_need): Use XRESIZEVEC instead of xrealloc(). - * dyn-string.c (dyn_string_init): Use XNEWVEC. - (dyn_string_new): Use XNEW. - (dyn_string_resize): Use XRESIZEVEC. - * fnmatch.c (fnmatch): Rename local variable "not" to "negate". - * getopt.c (getenv): Declare only if !__cplusplus and !getenv. - Otherwise include . - (exchange): Cast return value of malloc(). - * hashtab.c (htab_size): Define as both macro and non-inline - function. - (htab_elements): Likewise. - * getpwd.c (getpwd): Use XNEWVEC. - (htab_create_alloc_ex): Use C90 prototype-style. - * lrealpath.c (lrealpath): Appropriately cast return value of - malloc(). - * make-relative-prefix.c (save_string): Likewise. - * make-temp-file.c (try_dir): Rename from "try". Adjust use in - the file. - (choose_tmpdir): Use XNEWVEC. - * mkstemps.c (mkstemps): Rename parameter "template" to "pattern". - * pex-common.c (pex_init_common): Use XNEW. - (pex_add_remove): Use XRESIZEVEC. - (pex_run): Likewise. - (pex_get_status_and_time): Likewise. - * pex-djgpp.c (pex_djgpp_exec_child): Likewise. - * pex-msdos.c (pex_init): Use XNEW. - (pex_msdos_exec_child): Likewise. - (pex_msdos_exec_child): Use XRESIZEVEC. - * pex-unix.c (pex_wait): Use XNEW. - * pex-win32.c (fix_argv): Use XNEWVEC. - * pexecute.c (pwait): Likewise. - * setenv.c (setenv): Properly cast return value of malloc(). - * sigsetmask.c (sigsetmask): Rename local variables "old" and - "new" to "old_sig" and "new_sig". - * sort.c (main): Use XNEWVEC. - * spaces.c (spaces): Cast return value of malloc(). - * strndup.c (strndup): Likewise. - * ternary.c (ternary_insert): Use XNEW. - * xmalloc.c (malloc, realloc, calloc, sbrk): Surround declaration - with an extern "C" block if __cplusplus. - * xstrdup.c (xstrdup): Cast return value of memcpy(). - * xstrerror.c (strerror): Enclose declaration in an extern "C" - block if __cplusplus. - * xstrndup.c (xstrndup): Use XNEW. Cast return value of memcpy(). - -2005-05-16 Andreas Jaeger - - * getpwd.c: Remove unneeded prototype getcwd and move getwd so - that it's only declared if needed. - - * getopt1.c: Change order of includes so that __GNU_LIBRARY__ is - defined. - -2005-05-15 Andreas Jaeger - - * functions.texi: Regenerated. - -2005-05-15 Eli Zaretskii - - * pexecute.txh: Enclose multi-word data types in @deftypefn in - braces. Minor wording fixes. Use --- for em-dash. Use - @enumerate in enumerated lists. - - * fopen_unlocked.c: Enclose multi-word data types in @deftypefn in - braces. - -2005-05-11 Eli Zaretskii - - * pex-djgpp.c: Include string.h, fcntl.h, unistd.h, and - sys/stat.h. - (pex_init): Fix last argument to pex_init_common. - (pex_djgpp_exec_child): Remove leading underscore from _open, - _dup, _dup2, _close, and _spawnv/_spawnvp. Replace `program', - which is undeclared, with `executable', which was unused. Remove - unused variable `e'. Fix casting of last arg to spawnv/spawnvp. - (pex_djgpp_wait): Declare arguments with ATTRIBUTE_UNUSED. - -2005-05-11 Paul Brook - - * Makefile.in: Regenerate dependencies. - -2005-05-10 Nick Clifton - - * Update the address and phone number of the FSF organization in - the GPL notices in the following files: - COPYING.LIB, Makefile.in, _doprnt.c, argv.c, asprintf.c, - choose-temp.c, clock.c, concat.c, copying-lib.texi, cp-demangle.c, - cp-demangle.h, cp-demint.c, cplus-dem.c, dyn-string.c, fdmatch.c, - fibheap.c, floatformat.c, fnmatch.c, fopen_unlocked.c, - gather-docs, getopt.c, getopt1.c, getruntime.c, hashtab.c, hex.c, - lbasename.c, lrealpath.c, maint-tool, make-relative-prefix.c, - make-temp-file.c, md5.c, mempcpy.c, mkstemps.c, objalloc.c, - obstack.c, partition.c, pex-common.c, pex-common.h, pex-djgpp.c, - pex-msdos.c, pex-one.c, pex-unix.c, pex-win32.c, pexecute.c, - physmem.c, putenv.c, regex.c, safe-ctype.c, setenv.c, snprintf.c, - sort.c, spaces.c, splay-tree.c, stpcpy.c, stpncpy.c, strndup.c, - strtod.c, ternary.c, unlink-if-ordinary.c, vasprintf.c, - vsnprintf.c, vsprintf.c, xexit.c, xmalloc.c, xstrndup.c - -2005-05-06 Kelley Cook - - * aclocal.m4 (AC_DEFINE_NOAUTOHEADER): Remove. - * configure.ac: Replace any AC_DEFINE_NOAUTOHEADER with AC_DEFINE. - * configure: Regenerate. - -2005-05-06 Kelley Cook - - * configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS. - Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF. - * aclocal.m4: Don't include accross.m4. - * configure, config.in: Regenerate. - -2005-04-25 Kaveh R. Ghazi - - * fopen_unlocked.c (unlock_std_streams): New. - - * functions.texi: Regenerate. - -2005-04-16 Kaveh R. Ghazi - - * fopen_unlocked.c (unlock_stream): New. - Consolidate unlocking code into a helper function. - - * functions.texi: Regenerate. - -2005-04-13 Gabriel Dos Reis - - * asprintf.c: Include config.h. - * basename.c: Likewise. - * fdmatch.c: Likewise. - * hex.c: Likewise. - * lbasename.c: Likewise. - * spaces.c: Likewise. - * xatexit.c:Likewise. - * configure.ac: Do check declarations for basename, ffs, asprintf - and vasprintf for real. - * configure: Regenerate. - -2005-04-13 Gabriel Dos Reis - - * argv.c (dupargv): Allocate space of argv[argc], not - sizeof(char *) of that amount. Cast result to char *. - -2005-04-12 Gabriel Dos Reis - - * regex.c (wcs_re_match_2_internal, byte_re_match_2_internal): - Replace not with negate. - -2005-04-12 Gabriel Dos Reis - - * configure.ac: Check declarations for basename, ffs, asprintf, - vasprintf. - * configure: Regenerate. - * config.in: Likewise. - -2005-04-11 Kaveh R. Ghazi - - * Makefile.in (CFILES): Add fopen_unlocked.c. - (REQUIRED_OFILES): Add ./fopen_unlocked.o. - Regenerate dependencies. - - * configure.ac: Check for stdio_ext.h and __fsetlocking. - - * fopen_unlocked.c: New file. - - * functions.texi, configure, config.in: Regenerate. - -2005-04-04 Ian Lance Taylor - - * testsuite/test-pexecute.c (TEST_PEX_RUN): Move variable - declaration before statement. - -2005-04-02 Kaveh R. Ghazi - - * bcmp.c: Fix warnings and implement using memcmp. - * bcopy.c: Fix warnings. - * bzero.c: Fix warnings and implement using memset. - - * configure.ac (ac_libiberty_warn_cflags): Add -Wwrite-strings - -Wstrict-prototypes. - * configure, config.in: Regenerate. - - * bsearch.c, index.c, rindex.c, strstr.c, strtol.c, waitpid.c: Fix - warnings and reconcile interfaces with relevant standards. - -2005-04-02 Ian Lance Taylor - - * cp-demangle.c: Update copyright. - -2005-03-31 Joseph S. Myers - - * gettimeofday.c: Add "Supplemental" to @deftypefn. - * functions.texi: Regenerate. - -2005-03-28 Ian Lance Taylor - - * pex-common.c: New file. - * pex-one.c: New file. - * pexecute.c: New file. - * pex-common.h: Include . - (struct pex_obj): Define. - (struct pex_funcs): Define. - (pex_init_common): Declare. - * pex-unix.c: Rewrite. - * pex-win32.c: Rewrite. - * pex-djgpp.c: Rewrite. - * pex-msdos.c: Rewrite. - * testsuite/text-pexecute.c: New file. - * pexecute.txh: Rewrite. - * configure.ac: Check for wait3 and wait4. Set CHECK to - really-check rather than check-cplus-dem. - * functions.texi: Rebuild. - * Makefile.in: Rebuild dependencies. - (CFILES): Add pexecute.c, pex-common.c, pex-one.c. - (REQUIRED_OFILES): Add pexecute.o, pex-common.o, pex-one.o. - * testsuite/Makefile.in (really-check): New target. - (check-pexecute, test-pexecute): New targets. - * configure: Rebuild. - -2005-03-28 Mark Kettenis - - * unlink-if-ordinary.c: Include . - -2005-03-27 Gabriel Dos Reis - - Convert libiberty to use ISO C prototype style 7/n. - * regex.c (PARAMS): Remove definition. - (PREFIX): Unconditionaly define using ISO C ## operator. - (init_syntax_once, extract_number, extract_number_and_incr, - print_fastmap, print_partial_compiled_pattern, - print_compiled_pattern, print_double_string, printchar, - convert_mbs_to_wcs, re_set_syntax, regex_grow_registers, - regex_compile, store_op1, store_op2, insert_op1, insert_op2, - at_begline_loc_p, at_endline_p, group_in_compile_stack, - insert_space, wcs_compile_range, byte_compile_range, - truncate_wchar, re_compile_fastmap, re_compile_fastmap, - re_set_registers, re_search, re_search_2, re_search_3, re_match, - re_match_2, count_mbs_length, wcs_re_match_2_internal, - byte_re_match_2_internal, group_match_null_string_p, - alt_match_null_string_p, common_op_match_null_string_p, - bcmp_translate, re_compile_pattern, re_comp, re_exec, regcomp, - regexec, regerror, regfree): Use ISO C prototype style. - * partition.c: (elem_compare): Likewise. - * cp-demangle.c (print_usage): Likewise. - -2005-03-27 Gabriel Dos Reis - - Convert libiberty to use ISO C prototype style 5/n. - * random.c (srandom, initstate, setstate, random): Use ISO C - prototypes. - * putenv.c (putenv): Likewise. - * physmem.c (physmem_available, physmem_total, main): Likewise. - * pex-win32.c (fix_argv, pexecute, pwait): Likewise. - * pex-unix.c (pexecute, pwait): Likewise. - * pex-msdos.c (pexecute, pwait): Likewise. - * pex-djgpp.c (pexecute, pwait): Likewise. - * partition.c (partition_new, partition_delete, partition_union) - (elem_compare, partition_print): Likewise. - * obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk, - _obstack_allocated_p, _obstack_free, obstack_free, - _obstack_memory_used, print_and_abort, obstack_next_free, - obstack_object_size, obstack_base): Likewise. Remove codes - predicated on !defined(__STDC__). - * objalloc.c (objalloc_create, _objalloc_alloc, objalloc_free, - objalloc_free_block): Use ISO C prototypes. - * mkstemps.c (mkstemps): Likewise. - * memset.c (memset): Likewise. - * mempcpy.c (mempcpy): Likewise. - * rename.c (rename): Likewise. - * rindex.c (rindex): Likewise. - * setenv.c (setenv, unsetenv): Likewise. - * sigsetmask.c (sigsetmask): Likewise. - * snprintf.c (snprintf): Likewise. - * sort.c (sort_pointers, xmalloc): Likewise. - * spaces.c (spaces): Likewise. - * splay-tree.c (splay_tree_delete_helper, - splay_tree_splay_helper, splay_tree_splay, - splay_tree_foreach_helper, splay_tree_xmalloc_allocate, - splay_tree_new, splay_tree_xmalloc_allocate, - splay_tree_new_with_allocator, splay_tree_delete, - splay_tree_insert, splay_tree_remove, splay_tree_lookup, - splay_tree_max, splay_tree_min, splay_tree_predecessor, - splay_tree_successor, splay_tree_foreach, - splay_tree_compare_ints, splay_tree_compare_pointers): Likewise. - * stpcpy.c (stpcpy): Likewise. - * stpncpy.c (stpncpy): Likewise. - * strcasecmp.c (strcasecmp): Likewise. - * strchr.c (strchr): Likewise. - * strdup.c (strdup): Likewise. - -2005-03-27 Gabriel Dos Reis - - Convert libiberty to use ISO C prototype style 6/n. - * strerror.c (init_error_tables, errno_max, strerror, strerrno, - strtoerrno, main): Use ISO C prototype style. - * strncasecmp.c (strncasecmp): Likewise. - * strncmp.c (strncmp): Likewise. - * strndup.c (strndup): Likewise. - * strrchr.c (strrchr): Likewise. - * strsignal.c (init_signal_tables, signo_max, strsignal, - strsigno, strtosigno, psignal, main): Likewise. - * strstr.c (strstr): Likewise. - * strtod.c (strtod, atof): Likewise. - * strtol.c (strtol): Likewise. - * strtoul.c (strtoul): Likewise. - * ternary.c (ternary_insert, ternary_cleanup, ternary_search, - ternary_recursivesearch): Likewise. - * tmpnam.c (tmpnam): Likewise. - * unlink-if-ordinary.c (unlink_if_ordinary): Likewise. - * vasprintf.c (int_vasprintf, vasprintf, checkit, main): Likewise. - * vfork.c (vfork): Likewise. - * vfprintf.c (vfprintf): Likewise. - * vprintf.c (vprintf): Likewise. - * vsnprintf.c (vsnprintf, checkit, main): Likewise. - * vsprintf.c (vsprintf): Likewise. - * waitpid.c (waitpid): Likewise. - * xatexit.c (xatexit, xatexit_cleanup): Likewise. - * xexit.c (xexit): Likewise. - * xmalloc.c (xmalloc_set_program_name, xmalloc_failed, xmalloc, - xcalloc, xrealloc): Likewise. - * xmemdup.c (xmemdup): Likewise. - * xstrdup.c (xstrdup): Likewise. - * xstrerror.c (xstrerror): Likewise. - * xstrndup.c (xstrndup): Likewise. - -2005-03-27 Andreas Jaeger - - * configure.ac (ac_c_preproc_warn_flag): Remove -Wtraditional - flags. - * configure: Regenerated. - -2005-03-27 Gabriel Dos Reis - - * getopt1.c (getopt_long_only): Fix thinko. - -2005-03-27 Gabriel Dos Reis - - Convert libiberty to use ISO C prototype style 4/n. - * hashtab.c (higher_prime_index, hash_pointer, eq_pointer, - htab_size, htab_elements, htab_mod_1, htab_mod, htab_mod_m2, - htab_create_alloc, htab_set_functions_ex, htab_create, - htab_try_create, htab_delete, htab_empty, - find_empty_slot_for_expand, htab_expand, htab_find_with_hash, - htab_find, htab_find_slot_with_hash, htab_find_slot, - htab_remove_elt, htab_remove_elt_with_hash, htab_clear_slot, - htab_traverse_noresize, htab_traverse, htab_collisions, - htab_hash_string, iterative_hash): Use ISO C prototype. - * hex.c (hex_init): Likewise. - * index.c (index): Likewise. - * insque.c (insque, remque): Likewise. - * lbasename.c (lbasename): Likewise. - * lrealpath.c (lrealpath): Likewise. - * make-relative-prefix.c (save_string, split_directories, - free_split_directories, make_relative_prefix): Likewise. - * make-temp-file.c (try, choose_tmpdir, make_temp_file): Likewise. - * md5.c (md5_init_ctx, md5_read_ctx, md5_finish_ctx, md5_stream, - md5_buffer, md5_process_bytes, md5_process_block): Likewise. - * memchr.c (memchr): Likewise. - * memcpy.c (memcpy): Likewise. - * memmove.c (memmove): Likewise. - * gettimeofday.c (gettimeofday): Likewise. - * getruntime.c (get_run_time): Likewise. - * getpwd.c (getpwd, getpwd): Likewise. - * getpagesize.c (getpagesize): Likewise. - * getopt1.c (getopt_long, getopt_long_only, main): Likewise. - * getopt.c (my_index, exchange, _getopt_initialize, - _getopt_internal, getopt, main): Likewise. - * getcwd.c (getcwd): Likewise. - * fnmatch.c (fnmatch): Likewise. - * floatformat.c (floatformat_always_valid, - floatformat_i387_ext_is_valid, get_field, floatformat_to_double, - put_field, floatformat_from_double, floatformat_is_valid, - ieee_test, main): Likewise. - * fibheap.c (fibheap_new, fibnode_new, fibheap_compare, - fibheap_comp_data, fibheap_insert, fibheap_min, fibheap_min_key, - fibheap_union, fibheap_extract_min, fibheap_replace_key_data, - fibheap_replace_key, fibheap_replace_data, fibheap_delete_node, - fibheap_delete, fibheap_empty, fibheap_extr_min_node, - fibheap_ins_root, fibheap_rem_root, fibheap_consolidate, - fibheap_link, fibheap_cut, fibheap_cascading_cut, - fibnode_insert_after, fibnode_remove): Likewise. - * ffs.c (ffs): Likewise. - * fdmatch.c (fdmatch): Likewise. - * dyn-string.c (dyn_string_init, dyn_string_new, - dyn_string_delete, dyn_string_release, dyn_string_resize, - dyn_string_clear, dyn_string_copy, dyn_string_copy_cstr, - dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert, - dyn_string_insert_cstr, dyn_string_insert_char, - dyn_string_append, dyn_string_append_cstr, - dyn_string_append_char, dyn_string_substring, dyn_string_eq): - Likewise. - -2005-03-27 Gabriel Dos Reis - - Convert libiberty to use ISO C prototype style 3/n. - * cplus-dem.c (set_cplus_marker_for_demangling, consume_count, - consume_count_with_underscores, code_for_qualifier, - qualifier_string, demangle_qualifier, cplus_demangle_opname, - cplus_mangle_opname, cplus_demangle_set_style, - cplus_demangle_name_to_style, cplus_demangle, grow_vect, - ada_demangle, internal_cplus_demangle, squangle_mop_up, - work_stuff_copy_to_from, delete_non_B_K_work_stuff, - delete_work_stuff, mop_up, demangle_signature, - demangle_method_args, demangle_template_template_parm, - demangle_expression, demangle_integral_value, - demangle_real_value, demangle_template_value_parm, - demangle_template, arm_pt, demangle_arm_hp_template, - demangle_class_name, demangle_class, iterate_demangle_function, - demangle_prefix, gnu_special, recursively_demangle, arm_special, - demangle_qualified, get_count, do_type, demangle_fund_type, - do_hpacc_template_const_value, do_hpacc_template_literal, - snarf_numeric_literal, do_arg, remember_type, remember_Ktype, - register_Btype, remember_Btype, forget_B_and_K_types, - forget_types, demangle_args, demangle_nested_args, - demangle_function_name, string_need, string_delete, string_init, - string_clear, string_empty, string_append, string_appends, - string_appendn, string_prepend, string_prepends, string_prependn, - string_append_template_idx): Use ISO C prootype style. - * cp-demint.c (cplus_demangle_fill_component, - cplus_demangle_fill_builtin_type, cplus_demangle_fill_operator, - cplus_demangle_v3_components): Likewise. - -2005-03-26 Gabriel Dos Reis - - Convert libiberty to use ISO C prototype style 2/n. - * cp-demangle.h: Remove uses of PARAMS. - * cp-demangle.c: Likewise. - (d_dump, cplus_demangle_fill_name, - cplus_demangle_fill_extended_operator, cplus_demangle_fill_ctor, - cplus_demangle_fill_dtor, d_make_empty, d_make_comp, d_make_name, - d_make_builtin_type, d_make_operator, d_make_extended_operator, - d_make_ctor, d_make_dtor, d_make_template_param, d_make_sub, - cplus_demangle_mangled_name, has_return_type, - is_ctor_dtor_or_conversion, d_encoding, d_name, d_nested_name, - d_prefix, d_unqualified_name, d_source_name, d_number, - d_identifier, d_operator_name, d_special_name, d_call_offset, - d_ctor_dtor_name, cplus_demangle_type, d_cv_qualifiers, - d_function_type, d_bare_function_type, d_class_enum_type, - d_array_type, d_pointer_to_member_type, d_template_param, - d_template_args, d_template_arg, d_expression, d_expr_primary, - d_local_name, d_discriminator, d_add_substitution, - d_substitution, d_print_resize, d_print_append_char, - d_print_append_buffer, d_print_error, cplus_demangle_print, - d_print_comp, d_print_java_identifier, d_print_mod_list, - d_print_mod, d_print_function_type, d_print_array_type, - d_print_expr_op, d_print_cast, cplus_demangle_init_info, - d_demangle, __cxa_demangle, cplus_demangle_v3, java_demangle_v3, - is_ctor_or_dtor, is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor, - print_usage, main): - -2005-03-26 Gabriel Dos Reis - - Convert libiberty to ISO C prototype style 1/n. - * _doprnt.c: Remove conditional #include on - ANSI_PROTOTYPES as the latter is always assumed. - (_doprnt, checkit, main): Use ISO C prototype. - * alloca.c (find_stack_direction, C_alloca): Use ISO C prototype. - * argv.c: Remove conditional #includes on ANSI_PROTOTYPES. - (dupargv, freeargv, buildargv, main): Use ISO C prototype. - * atexit.c (atexit): Likewise - * asprintf.c: Remove conditional include on ANSI_PROTOTYPES. - (asprintf): Use ISO C prototype. - * basename.c (basename): Likewise - * bcmp.c (bcmp): Likewise. - * bcopy.c (bcopy): Likewise. - * bzero.c (bzero): Likewise. - * bsearch.c (bsearch): Likewise. Improve const-correctness. - * choose-temp.c (choose_temp_base): Likewise. - * calloc.c: Remove conditional #include on ANSI_PROTOTYPES. - (calloc): Use ISO C prototype. - * clock.c (clock): Likewise. - * concat.c: Remove conditional #include on ANSI_PROTOTYPES. - (vconcat_length, vconcat_copy, concat_length, concat_copy, - concat_copy2, concat, reconcat, main): Use ISO C prototype. - * copysign.c (copysign): Likewise. - -2005-03-24 Kaveh R. Ghazi - - * Makefile.in (CFILES): Add strndup.c and xstrndup.c. - (REQUIRED_OFILES): Add xstrndup.o. - (CONFIGURED_OFILES): Add strndup.o. - Regenerate dependencies. - - * configure.ac (funcs, AC_CHECK_FUNCS): Add strndup. - - * strndup.c, xstrndup.c: New. - - * config.in, configure, functions.texi: Regenerate. - -2005-03-24 Kaveh R. Ghazi - - * xmemdup.c, xstrdup.c: Expose the tail call. - -2005-03-09 Mark Mitchell - - * configure.ac (funcs): Add gettimeofday. - * configure: Regenerated. - * gettimeofday.c: New file. - * Makefile.in (CFILES): Add gettimeofday. - (CONFIGURED_OFILES): Add gettimeofday.o. - (./gettimeofday.o): New rule. - -2005-03-09 Ian Lance Taylor - - * pex-os2.c: Remove. - * configure.ac: Remove *-*-os2-emx* case when setting pexecute. - * Makefile.in (CFILES): Remove pex-os2.c. - (CONFIGURED_OFILES): Remove pex-os2.o. - (pex-os2.o): Remove target. - * configure: Rebuild. - -2005-03-07 Ian Lance Taylor - - * mpw-config.in: Remove. - * mpw-make.sed: Remove. - * mpw.c: Remove. - * Makefile.in (CFILES): Remove pex-mpw.c. - (CONFIGURED_OFILES): Remove pex-mpw.o. - (mpw.o, pex-mpw.o): Remove targets. - * maint-tool (undoc): Remove reference to mpw.c. - -2005-03-06 DJ Delorie - - * configure.ac (target_header_dir): vfork is a stub under djgpp. - * configure: Regenerated. - -2005-03-01 Jan Beulich - - * Makefile.in (CFILES): Add unlink-if-ordinary.c - (REQUIRED_OFILES): Add unlink-if-ordinary.o. - Add dependencies and rule for unlink-if-ordinary.o. - * unlink-if-ordinary.c: New. - -2005-03-01 Ben Elliston - - * hashtab.c (htab_find_slot_with_hash): Make function - documentation clearer. - -2005-02-13 Jason Merrill - - * cp-demangle.c (__cxa_demangle): Change resolution of ambiguous - arguments. - -2005-01-11 Tobias Schl"uter - - * hex.c (hex_value): Group 'unsigned int' together to get correct - markup. - * functions.texi: Regenerated. - -2004-12-27 H.J. Lu - - * Makefile.in: Undo to 2004-12-17. - * aclocal.m4: Likewise. - * config.table: Likewise. - * configure.ac: Likewise. - * maint-tool: Likewise. - * configure: Likewise. - -2004-12-19 H.J. Lu - - PR bootstrap/19072 - * Makefile.in (enable_shared): New substitute. - (LTTARGETLIB): New. - (PREFIXTARGETLIB): New. - (LTTESTLIB): New. - (PREFIXTESTLIB): New. - (CCLD): New. - (LINK): New. - ($(TARGETLIB)): Use $(LINK) to create libraries and create - targets by hand. - ($(TESTLIB)): Likewise. - (mostlyclean): Don't remove .libs. Remove the libtool object - directory. - - * config.table (enable_shared): Removed. - - * configure.ac (enable_static): Set to yes. - (AC_PROG_LIBTOOL): Removed. - (AM_DISABLE_SHARED): Uncommented. - (AM_PROG_LIBTOOL): Likewise. - (LIBOBJS): Add `./' to avoid VPATH. - (LTLIBOBJS): Likewise. - (enable_shared): Substitute. - * configure: Regenerated. - -2004-12-18 H.J. Lu - - * Makefile.in (top_builddir): Set to `.'. - (OUTPUT_OPTION): Removed. - (LIBTOOL): New. - (LTLIBOBJS): New. - (EXTRA_LTOFILES): New. - (FLAGS_TO_PASS): Add EXTRA_LTOFILES. - (all): Remove stamp-picdir. - (LTCOMPILE): New. - (.c.lo): New rule. - (REQUIRED_LTOFILES): New. - (CONFIGURED_LTOFILES): New. - ($(TARGETLIB)): Check .libs for PIC object files. Depend on - $(REQUIRED_LTOFILES) $(EXTRA_LTOFILES) $(LTLIBOBJS). - (stamp-picdir): Completely removed. - (maint-missing): Pass $(REQUIRED_LTOFILES) - $(CONFIGURED_LTOFILES) instead of (REQUIRED_OFILES) - $(CONFIGURED_OFILES) - (maint-buildall): Depend on $(REQUIRED_LTOFILES) - $(CONFIGURED_LTOFILES). - (mostlyclean): Also remove *.lo .libs. - Run "make maint-deps". - - * aclocal.m4: Include ../libtool.m4. - - * config.table: Don't check --enable-shared. - - * configure.ac (AC_PROG_LIBTOOL): Add. - (AC_PROG_CC_C_O): Removed. - (OUTPUT_OPTION): Removed. - (NO_MINUS_C_MINUS_O): Removed. - (ltpexecute): New substitute. - (LIBOBJS): Cleanup. - * configure: Regenerated. - - * maint-tool: Updated for .lo/libtool. - -2004-12-11 Ben Elliston - - * configure.ac: Invoke AC_CHECK_SIZEOF for sizeof (int). - * configure: Regenerate. - * config.in: Likewise. - -2004-12-07 DJ Delorie - - * splay-tree.c (splay_tree_delete_helper): Redesign the logic so - that recursion (and thus large stack space) is not needed. - -2004-11-29 Matt Kraai - - * pex-unix.c: Fix the spelling of longjmp. - -2004-11-23 Ian Lance Taylor - - PR other/18623 - * cp-demangle.c (d_call_offset): Remove useless local variables - offset and virtual_offset. - * cplus-dem.c (ada_demangle): Remove useless local variable - at_start_name. - (demangle_template): Remove useless local variable start. - -2004-11-19 Roger Sayle - - * objalloc.c, strsignal.c, xstrerror.c: Include "config.h" before - "ansidecl.h" to avoid redeclaration errors with native compilers. - * regex.c: Protect config.h from multiple inclusion. - -2004-11-12 Mike Stump - - * Makefile.in (libiberty.html): Fix html generation. - -2004-09-08 Adam Nemet - - * vasprintf.c: Accept __va_copy in addition to va_copy. - -2004-09-03 Paolo Bonzini - - * configure: Regenerate. - -2004-09-02 Paolo Bonzini - - * configure.ac: Do not enable multilibs for build-side libiberty. - -2004-06-29 Danny Smith - - * lrealpath.c (lrealpath): Add _WIN32 support. - -2004-06-28 Zack Weinberg - - * cp-demangle.h: Declare cplus_demangle_operators, - cplus_demangle_builtin_types, cplus_demangle_mangled_name, and - cplus_demangle_type as static if IN_GLIBCPP_V3. - -2004-06-28 Ian Lance Taylor - - PR other/16240 - * cp-demangle.c (d_expr_primary): Check for a failure return from - cplus_demangle_type. - * testsuite/demangle-expected: Add test case. - -2004-05-31 Danny Smith - - * pex-win32.c (fix_argv): Expand comment. - -2004-05-25 Daniel Jacobowitz - - * Makefile.in: Add .NOEXPORT. - -2004-04-29 Douglas B Rupp - - * mkstemps.c (mkstemps) [VMS]: Remove special open option. Update - copyright. - -2004-04-26 Maciej W. Rozycki - - * configure.ac (UNSIGNED_64BIT_TYPE): Unquote the definition. - * configure: Regenerate. - -2004-04-22 Richard Henderson - - * hashtab.c: Include limits.h, stdint.h, ansidecl.h. - (CHAR_BIT): Provide default. - (struct prime_ent, prime_tab): New. - (higher_prime_index): Rename from higher_prime_number, return index. - (htab_mod_1): New. - (htab_mod, htab_mod_m2): Use it. - (htab_create_alloc, htab_create_alloc_ex): Store prime index. - (htab_expand): Likewise. - * configure.ac: Check for stdint.h. - (UNSIGNED_64BIT_TYPE): New define and checks to fill it in. - * config.in, configure: Rebuild. - -2004-04-13 Ian Lance Taylor - - * strerror.c: Include config.h, and redefine sys_nerr and - sys_errlist, before including ansidecl.h and libiberty.h. - -2004-04-13 Jeff Law - - * hashtab.c (htab_remove_elt_with_hash): New function. - (htab_remove_elt): Implement in terms of htab_remove_elt_with_hash. - -2004-03-31 Richard Henderson - - * hashtab.c (htab_size): Move to top of file; mark inline. - (htab_elements): Likewise. - (htab_mod, htab_mod_m2): New. - (htab_delete): Refactor htab->size and htab->entries. - (htab_empty): Likewise. - (find_empty_slot_for_expand): Use htab_size, htab_mod, htab_mod_m2. - (htab_find_with_hash, htab_find_slot_with_hash): Likewise. - (htab_clear_slot): Use htab_size, htab_elements. - (htab_traverse_noresize, htab_traverse): Likewise. - -2004-03-17 Ian Lance Taylor - - * pex-unix.c (pexecute): Use vfork instead of fork, with - appropriate changes to make this safe. - * pex-common.h (STDERR_FILE_NO): Define. - - * Makefile.in: Clean up REQUIRED_OFILES and CONFIGURED_OFILES for - an 80 column screen. Run maint-deps. - -2004-03-09 Kelley Cook - - * configure.ac: Bump version to 2.59. Apply suggested autoupdates. - * acconfig.h: Delete redundant file. - * config.in: Regenerate. - * configure: Regenerate. - -2004-03-09 Hans-Peter Nilsson - - * configure: Regenerate for config/accross.m4 correction. - -2004-03-07 Andreas Jaeger - - * testsuite/test-demangle.c: Include and for - prototypes. - (main): Initialize style. - -2004-02-24 Ian Lance Taylor - - * cp-demangle.h (enum d_builtin_type_print): Add D_PRINT_UNSIGNED, - D_PRINT_UNSIGNED_LONG, D_PRINT_LONG_LONG, - D_PRINT_UNSIGNED_LONG_LONG, D_PRINT_FLOAT. - * cp-demangle.c (cplus_demangle_builtin_types): Change char and - short types to D_PRINT_DEFAULT. Change other integer types to use - new D_PRINT_* values where appropriate. Change float types to - D_PRINT_FLOAT. - (d_print_comp) [LITERAL, LITERAL_NEG]: Handle new D_PRINT_* - values. - * testsuite/demangle-expected: Adjust two test cases. - - * cp-demangle.c (d_print_function_type): Print a space before the - parenthesis around the function type in more cases. - * testsuite/demangle-expected: Adjust one test case. - - * cp-demangle.c (d_print_comp) [UNARY]: Don't emit extra - parentheses around a cast. - * testsuite/demangle-expected: Adjust two test cases to match new - output. - - * cp-demangle.c (__cxa_demangle): Pass DMGL_PARAMS to d_demangle. - - * cp-demangle.c (d_print_comp) [RESTRICT, VOLATILE, CONST]: Don't - push more than one of the same CV-qualifier on the top of the - stack. - (d_print_comp) [ARRAY_TYPE]: If the array itself is CV-qualified, - move the CV-qualifiers to apply to the element type instead. - (d_print_array_type): When checking the modifiers, keep looking - past ones which have been printed already. - * testsuite/demangle-expected: Add three test cases. - -2004-02-23 Ian Lance Taylor - - * cp-demangle.c (__cxa_demangle): Adjust last patch to handle - empty string correctly. - - * cp-demangle.c (__cxa_demangle): It is not an error if status is - not NULL. It is an error if the mangled name is the same as a - built-in type name. - (main): If IN_GLIBCPP_V3 is defined, test __cxa_demangle rather - than cplus_demangle_v3. - - * dyn-string.c: Remove test of IN_LIBGCC2 and IN_GLIBCPP_V3 and - the associated #define of RETURN_ON_ALLOCATION_FAILURE. - -2004-02-16 Matt Kraai - - * regex.c: Include . - (regcomp): Cast i to int. - (regerror): Add ATTRIBUTE_UNUSED to parameter preg. - -2004-01-25 Ian Lance Taylor - - * configure.ac: Add m4_pattern_allow(LIBOBJS). - * configure: Regenerate. - -2004-01-22 DJ Delorie - - * Makefile.in: Convert to ./ throughout. Rebuild dependencies - with explicit build rules. - (VPATH): Remove. - (.c.o): Poison. - * configure.ac (pexecute, LIBOBJS): Add ./ . - * maint-tool: Build dependencies with explicit rules. - -2004-01-15 Kazu Hirata - - * strdup.c (strdup): Constify the argument. - -2004-01-14 Loren J. Rittle - - * Makefile.in (distclean): Remove config.cache. - -2004-01-13 Daniel Jacobowitz - - * cp-demangle.c (d_make_comp): DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE - takes two parameters. - * cp-demint.c (cplus_demangle_fill_component): Likewise. - -2004-01-12 Ian Lance Taylor - - * cp-demangle.c: Include "cp-demangle.h". If IN_GLIBCPP_V3 is - defined, rename some functions which are to become static via - #define. - (CP_STATIC_IF_GLIBCPP_V3): Define. - (struct d_operator_info): Move definition to cp-demangle.h, and - rename to demangle_operator_info. Change all uses. - (enum d_builtin_type_print): Move definition to cp-demangle.h. - (struct d_builtin_type_info): Move definition to cp-demangle.h, - and rename to demangle_builtin_type_info. Change all uses. - (enum d_comp_type): Move definition to include/demangle.h, and - rename to demangle_component_type, and change all enums to start - with DEMANGLE_COMPONENT_ instead of D_. Change all uses. - (struct d_comp): Move definition to include/demangle.h, and rename - to demangle_component. Change all uses. - (struct d_info): Move definition to cp-demangle.h. - (cplus_demangle_fill_name): New function. - (cplus_demangle_fill_extended_operator): New function. - (cplus_demangle_fill_ctor): New function. - (cplus_demangle_fill_dtor): New function. - (d_make_empty): Remove type parameter. Change all callers. - (d_make_name): Use cplus_demangle_fill_name. - (d_make_extended_operator): Use - cplus_demangle_fill_extended_operator. - (d_make_ctor): Use cplus_demangle_fill_ctor. - (d_make_dtor): Use cplus_demangle_fill_dtor. - (cplus_demangle_mangled_name): Rename from d_mangled_name. Make - non-static by default. Change all callers. - (cplus_demangle_operators): Rename from d_operators. Change all - uses. Make non-static by default. Add sentinel at end of array. - (d_operator_name): Adjust initialization of high for new sentinel - in cplus_demangle_operators. - (cplus_demangle_builtin_types): Rename from d_builtin_types. - Change all uses. Make non-static by default. Change initializer - to use D_BUILTIN_TYPE_COUNT instead of magic number 26. - (cplus_demangle_type): Rename from d_type. Make non-static by - default. Change all callers. - (cplus_demangle_init_info): Rename from d_init_info. Make - non-static by default. Change all callers. - * cp-demangle.h: New file. - * cp-demint.c: New file. - * Makefile.in: Rebuild dependencies. - (CFILES): Add cp-demint.c. - (REQUIRED_OFILES): Add cp-demint.o. - -2004-01-09 Kelley Cook - - * configure.in: Rename file to ... - * configure.ac: ... this. - * Makefile.in: Update a comment for above change. - * README: Likewise. - * config.in: Regenerate. - -2004-01-02 Ian Lance Taylor - - * cp-demangle.c (d_encoding): When DMGL_PARAMS is not set, strip - CV-qualifiers from D_COMP_LOCAL_NAME right subtree. - * cplus-dem.c (demangle_arm_hp_template): Set DMGL_PARAMS when - demangling template parameters. - * testsuite/test-demangle.c (fail): New static function. - (main): Support new options in input file: --no-params, - --is-v3-ctor, and --is-v3-dtor. - * testsuite/demangle-expected: Add --no-params to most tests, and - add the correct result when parameters are not demangled. Add - some simple tests for V3 constructor/destructor recognition. - -2003-12-25 Kaveh R. Ghazi - - * cp-demangle.c (is_ctor_or_dtor): Fix error in last change. - -2003-12-22 Daniel Jacobowitz - - PR debug/13272 - * Makefile.in (lbasename.o): Depend on filenames.h. - * lbasename.c: Include "filenames.h" instead of defining - its macros locally. - -2003-12-22 Ian Lance Taylor - - * cp-demangle.c (CP_DYNAMIC_ARRAYS): Define if compiler supports - dynamic arrays. - (struct d_operator_info): Add len field. - (struct d_builtin_type_info): Add len and java_len fields. - (struct d_standard_sub_info): Add simple_len, full_len, and - set_last_name_len fields. - (struct d_comp): Add len field to s_string. - (struct d_info): Add send, did_subs, and expansion fields. - (d_append_string_constant): Define. - (d_append_string): Remove. Change all users to use - d_append_string_constant or d_append_buffer instead. - (d_make_sub): Add len parameter. Change all callers. - (d_name): Increase expansion when substituting std::. - (d_unqualified_name): Increase expansion for an operator. - (d_number): Don't use multiplication for negative numbers. - (d_identifier): Make sure there are enough characters in the - string for the specified length. Adjust expansion for an - anonymous namespace. - (d_operators): Initialize len field. - (d_special_name, d_ctor_dtor_name): Increase expansion. - (d_builtin_types): Initialize len and java_len fields. - (d_type): Increase expansion for a builtin type. - (d_cv_qualifiers): Increase expansion for each qualifier. - (d_bare_function_type): Decrease expansion when removing single - void parameter. - (d_template_param): Increment did_subs. - (d_expression): Increase expansion for an operator. - (d_expr_primary): Decrease expansion for a type we will print - specially. - (standard_subs): Initialize new fields. - (d_substitution): Increment did_subs when doing a normal - substitution. Increase expansion for a special substitution. - (d_print): Add estimate parameter. Change all callers. - (d_print_comp) [D_COMP_NAME]: Handle C++ case inline. - (d_print_comp) [D_COMP_BINARY]: Use length to avoid strcmp call. - (d_print_java_identifier): Rename from d_print_identifier. Handle - only Java case. Change caller. - (d_init_info): Change return type to void. Change all callers. - Initialize send, did_subs, and expansion fields. Do not - initialize comps and subs fields. - (d_demangle): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and subs - arrays on stack. Make an estimate of the length of the demangled - name. Ifdef CP_DEMANGLE_DEBUG, print estimation failures. - (is_ctor_or_dtor): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and - subs arrays on stack. - -2003-12-20 Ian Lance Taylor - - * cp-demangle.c (d_identifier): In Java mode, skip an optional '$' - after the identifier. - * testsuite/demangle-expected: Add test case. - -2003-12-19 Ian Lance Taylor - - Fix for PR c++/13447: - * cp-demangle.c (enum d_comp_type): Add D_COMP_LOCAL_NAME. - (d_dump, d_make_comp): Handle D_COMP_LOCAL_NAME. - (is_ctor_dtor_or_conversion): Handle D_COMP_LOCAL_NAME like - D_COMP_QUAL_NAME. - (is_ctor_or_dtor): Likewise. - (d_local_name): Use D_COMP_LOCAL_NAME rather than - D_COMP_QUAL_NAME. - (d_print_comp) [D_COMP_LOCAL_NAME]: New. - (d_prinT_comp) [D_COMP_TYPED_NAME]: If the left tree is - D_COMP_LOCAL_NAME, pull any qualifiers off its right subtree. - (d_print_mod_list): Handle D_COMP_LOCAL_NAME. - * testsuite/demangle-expected: Add two test cases. - - * cp-demangle.c (d_print_function_type): Clear the global modifier - list when printing the modifiers, not just when printing the - function parameters. - * testsuite/demangle-expected: Add two test cases. - -2003-12-15 Ian Lance Taylor - - * cp-demangle.c (d_print_function_type): Print the function - parameters with no modifiers. - * testsuite/demangle-expected: Add test case. - - * cp-demangle.c (d_demangle): If DMGL_PARAMS is not set, don't - expect that we've read the entire string. - (is_ctor_or_dtor): Don't expect that we've read the entire - string--reverse patch of 2003-11-29. - -2003-12-15 Brendan Kehoe - - * libiberty/Makefile.in (floatformat.o): Add dependency on - config.h to accompany change of 2003-12-03. - -2003-12-15 Ian Lance Taylor - - Fix handling of constructor/destructor of standard substitution: - * cp-demangle.c (struct d_standard_sub_info): Define. - (d_substitution): Add prefix argument. Change all callers. - Rework handling of standard substitutions to print full name when - qualifying a constructor/destructor, or when DMGL_VERBOSE is set. - * testsuite/demangle-expected: Add test case. - - Fix handling of negative literal constants: - * cp-demangle.c (enum d_comp_type): Add D_COMP_LITERAL_NEG. - (d_dump, d_make_comp): Handle D_COMP_LITERAL_NEG. - (d_expr_primary): Use D_COMP_LITERAL_NEG for a negative number. - (d_print_comp): Handle D_COMP_LITERAL_NEG. - * testsuite/demangle-expected: Add test case. - -2003-12-04 Ian Lance Taylor - - * cp-demangle.c (IS_UPPER, IS_LOWER): Define. - (d_last_char): Define new macro. - (d_make_name): Reject an empty name. - (d_prefix, d_unqualified_name, d_type): Use new IS_* macros. - (d_substitution, d_print_identifier): Likewise. - (d_print_comp) [D_COMP_OPERATOR]: Likewise. - (d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro. - (d_print_mod) Use new d_last_char macro. - (d_print_cast): Use new d_last_char macro. - (is_ctor_or_dtor): Don't leak memory. - - Fix handling of member function modifiers: - * cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS, - D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS. - (d_dump): Dump new d_comp_type values. - (d_make_comp): Accept new d_comp_type values. - (has_return_type): Only accept _THIS variants of qualifiers. - (d_encoding): Without DMGL_PARAMS, only remove _THIS variants of - qualifiers. - (d_cv_qualifiers): Add member_fn parameter. Change all callers. - (d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing - qualifiers and printing them at the end, add _THIS qualifiers to - the modifier list. - (d_print_comp) [D_COMP_*_THIS]: New cases. - (d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of - qualifiers. - (d_print_mod_list): Add suffix parameter. Change all callers. - Keep walking the list even if the current modifier has been - printed. - (d_print_mod): Handle new _THIS qualifiers. - (d_print_function_type): Handle new _THIS qualifiers when deciding - whether to print a parenthesis. Put a space before the - parenthesis in some cases. Call d_print_mod_list again at the - end, passing suffix as 1. - (is_ctor_or_dtor): Look for new _THIS qualifiers. - * testsuite/demangle-expected: Add test case. - - Fix for PR gcc/13304: - * cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character - before the '<' is itself a '<', insert a space. - (d_print_cast): Likewise. - * testsuite/demangle-expected: Add test case. - - Fix for PR gcc/13244: - * cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression - which uses the '>' operator in an extra layer of parens. - * testsuite/demangle-expected: Add test case. - -2003-12-03 Ian Lance Taylor - - * floatformat.c: Include "config.h" and if available. - (INFINITY, NAN): Define if not defined by . - (floatformat_to_double): Handle NaN, infinity, and denormalized - numbers. - (floatformat_from_double): Likewise. - (ieee_test): In debugging code, use little endian rather than big - endian. Correct tests to handle NaN and to check correct sign of - zero. Omit m68k extended test. - (main): Add more debugging cases. - -2003-11-29 Ian Lance Taylor - - * cp-demangle.c (d_demangle): Only return success if we consumed - the entire demangled string. - (is_ctor_or_dtor): Likewise. - - * testsuite/demangle-expected: Revert one part of 2003-06-26 patch - to restore expected result of EDG test case to original expected - result. - -2003-11-26 Ian Lance Taylor - - * cp-demangle.c (struct d_print_mod): Add templates field. - (d_make_builtin_type): Check for NULL type. - (d_make_extended_operator): Check for NULL name. - (d_make_ctor, d_make_dtor): Likewise. - (d_mangled_name): Add top_level parameter. Change all callers. - (d_encoding): If DMGL_PARAMS is not set, strip off initial - CV-qualifiers. - (d_type): Check some return values we rely on. - (d_bare_function_type, d_array_type): Likewise. - (d_pointer_to_member_type, d_template_args): Likewise. - (d_add_substitution): Fail if argument is NULL. - (d_print_resize): Check whether buf is NULL. - (d_print_comp): Save current templates list with each modifier. - Don't pass the modifier list down when printing a template. - (d_print_cast): Don't pass the modifier list down when printing a - template. - (d_print_mod_list): Temporarily set templates list while printing - a modifier. - (d_print_mod): Check that buf is not NULL before using it. - (d_print_function_type): Print parens if there is no modifier. - (d_init_info): Permit as many substitutions as there are - characters in the mangled name. - * testsuite/demangle-expected: Add two new test cases. - -2003-11-25 Ian Lance Taylor - - * cp-demangle.c (java_demangle_v3): Pass DMGL_PARAMS to - d_demangle. - -2003-11-22 Ian Lance Taylor - - * cp-demangle.c (d_encoding): Add top_level parameter. Change all - callers. - (print_usage): Display new -p option. - (long_options): Add --no-params. - (main): Accept and handle -p. - -2003-11-21 Ian Lance Taylor - - * cp-demangle.c (has_return_type): Skip qualifiers when checking - whether we have a template. - * testsuite/demangle-expected: Add four new tests. - -2003-11-20 Ian Lance Taylor - - * testsuite/demangle-expected: Minor changes to match output of - new demangler: adjust whitespace in four tests, and change order - of qualifiers in one test. - - * cp-demangle.c: Complete rewrite. - -2003-11-19 Mark Mitchell - - * cp-demangle.c (demangle_type): Correct thinko in substitution - processing. - -2003-11-18 Ian Lance Taylor - - * cp-demangle.c (demangle_operator_name): Remove space before - "sizeof". - (demangle_type_ptr): Put qualifiers in the right place. Handle - qualifiers in pointer to member specially. - (demangle_type): Handle qualifiers for pointer or reference - specially. Handle function type. - (demangle_local_name): Save and restore caret around demangling of - initial encoding. - - * testsuite/test-demangle.c (main): Don't pass DMGL_VERBOSE to - cplus_demangle. - - * testsuite/Makefile.in (test-demangle): Depend upon libiberty.a. - -2003-10-31 Andreas Jaeger - - * floatformat.c (floatformat_always_valid): Add unused attribute. - -2003-10-30 Josef Zlomek - - Jan Hubicka - * vasprintf.c (int_vasprintf): Pass va_list by value. - Use va_copy for copying va_list. - (vasprintf): Pass va_list by value. - -2003-10-30 Josef Zlomek - - * hashtab.c (htab_find_slot_with_hash): Decrease n_deleted - instead of increasing n_elements when inserting to deleted slot. - -2003-10-20 J. Brobecker - - * cplus-dem.c (demangle_template): Register a new Btype only - when needed. - * testsuite/demangle-expected: Add a new test. - -2003-10-16 H.J. Lu - - * testsuite/demangle-expected: Update the expected output of - _GLOBAL__I__Z2fnv. - -2003-10-02 Daniel Jacobowitz - - * strerror.c: Revert last change. Declare static sys_nerr - and sys_errlist using different names. - -2003-10-01 Daniel Jacobowitz - - * strerror.c: Don't provide or reference sys_errlist if - strerror is available. - -2003-10-01 H.J. Lu - - * configure.in: Check if $MAKEINFO is missing. - * configure: Regenerated. - -2003-09-24 Daniel Jacobowitz - - * configure.in: Use AC_PROG_CPP_WERROR. - * configure: Regenerated. - -2003-09-22 Andrew Cagney - - * floatformat.c (floatformat_i387_ext_is_valid): New function. - (floatformat_always_valid): New function. - (floatformat_i387_ext): Initialize new "is_valid" field to - "floatformat_i387_ext_is_valid". - (floatformat_ieee_single_little): Initialize "is_valid" field to - floatformat_always_valid. - (floatformat_ieee_double_big): Ditto. - (floatformat_ieee_double_little): Ditto. - (floatformat_ieee_double_little): Ditto. - (floatformat_ieee_double_littlebyte_bigword): Ditto. - (floatformat_i960_ext): Ditto. - (floatformat_m88110_ext): Ditto. - (floatformat_m88110_harris_ext): Ditto. - (floatformat_arm_ext_big): Ditto. - (floatformat_arm_ext_littlebyte_bigword): Ditto. - (floatformat_ia64_spill_big): Ditto. - (floatformat_ia64_spill_little): Ditto. - (floatformat_ia64_quad_big): Ditto. - (floatformat_ia64_quad_little): Ditto. - (floatformat_ia64_quad_little): Ditto. - (floatformat_is_valid): Call "is_valid". - -2003-09-15 Andrew Cagney - - * floatformat.c (get_field): Make "data" constant. - (floatformat_is_valid, floatformat_to_double): Make "from" - constant, fix casts. - (floatformat_from_double): Make "from" constant. - -2003-09-15 Daniel Jacobowitz - - * floatformat.c (floatformat_is_valid): New function. - (get_field, put_field): Correct comments. - -2003-09-06 Josef Zlomek - - * fibheap.c (fibheap_replace_key_data): Change type of OKEY to - FIBHEAPKEY_T. - -2003-09-02 John David Anglin - - PR bootstrap/12100 - * aclocal.m4 (AC_LANG_FUNC_LINK_TRY): Define. - * configure: Rebuilt. - -2003-08-27 Daniel Jacobowitz - - * aclocal.m4: Include acx.m4 and no-executables.m4. - (libiberty_AC_FUNC_STRNCMP): Use AC_LIBOBJ. - (LIB_AC_PROG_CC): Remove. - * configure.in: Update AC_PREREQ to 2.57. Use GCC_NO_EXECUTABLES. - Use AC_PROG_CC and set ac_libiberty_warn_cflags instead of using - LIB_AC_PROG_CC. Use AC_LIBOBJ. Call AC_ISC_POSIX later, only if - performing link tests. - * configure: Regenerated. - -2003-08-12 Nathanael Nerode - - * cp-demangle.c: Clarify what package(s) this is part of. - -2003-07-05 Danny Smith - - * pex-win32.c (pexecute): Mark parameters this_pname and - temp_base as unused. Remove unused variables retries, - sleep_interval. Initialize org_stdin, org_stdout. - (pwait): Mark parameter flags as unused. - -2003-07-02 Danny Smith - - * pex-win32.c (fix_argv): Ensure that the executable pathname - uses Win32 backslashes. - (pexecute): Cast away constness when assigning *errmsg_arg. - -2003-06-26 H.J. Lu - - * testsuite/demangle-expected: Add more GNU V3 testcases. - -2003-06-22 Zack Weinberg - - * safe-ctype.c: Use HOST_CHARSET_ASCII and HOST_CHARSET_EBCDIC, - not HC_ASCII and HC_EBCDIC. - Add documentation in form expected by gather-docs. - * hex.c: Use HOST_CHARSET, not hand-coded check of character set. - * Makefile.in, functions.texi: Regenerate. - -2003-06-21 Zack Weinberg - - * safe-ctype.c: Separate out EOF==-1 check. Use HOST_CHARSET - for charset determination. - -2003-06-19 Dara Hazeghi - - * configure.in: Add check for malloc.h needed by - m68k for function free(). - * configure: Regenerated. - * config.in: Add HAVE_MALLOC_H. - * hashtab.c: include malloc.h were available for - free(). - -2003-06-09 Albert Chin-A-Young - - PR bootstrap/10974 - * physmem.c: Update comment. - * configure.in: Modify test for _system_configuration for older - AIX systems. - - * config.in, configure: Regenerated. - -2003-06-05 John David Anglin - - PR other/10810 - * test-demangle.c (getline): Fix fence-post error. - -2003-06-03 Nick Clifton - - * asprintf.c: Change comment to note that -1 is returned upon - error. - * vasprintf.c: Likewise. - (vasprintf): Return -1 upon error. - * functions.texi: Document changes to asprintf and vasprintf. - -2003-05-19 Kelley Cook - - * config.table: Accept i[345867]86 variant. - -2003-05-15 Jim Blandy - - * hex.c (_hex_value): Make this unsigned. - (hex_value): Update documentation for new return type. hex_value - now expands to an unsigned int expression, to avoid unexpected - sign extension when we store it in a bfd_vma, which is larger than - int on some platforms. - * functions.texi: Regenerated. - -2003-05-07 Josef Zlomek - - * splay-tree.c (splay_tree_predecessor): Fix comment. - (splay_tree_successor): Fix comment. - -2003-05-07 Jason Merrill - - * hashtab.c (iterative_hash): New fn. - * configure.in: Add AC_C_BIGENDIAN_CROSS. - * aclocal.m4: Include accross.m4. - * configure, config.in: Regenerate. - -2003-05-04 Kaveh R. Ghazi - - * configure.in (AC_CHECK_FUNCS): Don't make multiple calls. - * configure: Regenerate. - -2003-05-03 Carlo Wood - - * cp-demangle.c: Fix typo in "char_traints" string-literal. - -2003-04-22 Kaveh R. Ghazi - - * vsnprintf.c (vsnprintf): Don't pad string with extra nulls. - (main): Test that we don't write too much data. - -2003-04-16 Kaveh R. Ghazi - - * configure.in (funcs, AC_CHECK_FUNCS): Add snprintf and - vsnprintf. - * snprintf.c, vsnprintf.c: New files. - * Makefile.in (CFILES): Add snprintf.c and vsnprintf.c. - (CONFIGURED_OFILES): Add snprintf.o and vsnprintf.o. - Regenerate dependencies. - - * functions.texi, configure, config.in: Regenerated. - -2003-04-15 Kaveh R. Ghazi - - * mempcpy.c, stpcpy.c, stpncpy.c: New files. - * configure.in (funcs, AC_CHECK_FUNCS): Add mempcpy, stpcpy - and stpncpy. - * Makefile.in (CFILES): Add mempcpy.c, stpcpy.c and stpncpy.c. - (CONFIGURED_OFILES): Add mempcpy.o, stpcpy.o and stpncpy.o. - Regenerate dependencies. - - * functions.texi, configure, config.in: Regenerated. - -2003-04-15 Kaveh R. Ghazi - - * argv.c: Fix comments. - * calloc.c: Don't unnecessarily include "libiberty.h". - (bzero): Add prototype. - * floatformat.c: Include "ansidecl.h", rely on ANSI_PROTOTYPES. - * getcwd.c (getcwd): Use standard definition to avoid conflicts - with system headers. - * hashtab.c (htab_traverse): Delete unused variables. - * rename.c: Include "ansidecl.h". - (rename): Use standard definition to avoid conflicts with system - headers. - * strsignal.c: Rely on ANSI_PROTOTYPES. - * strstr.c: Check GNUC >= 2, not GNUC == 2. - * vfprintf.c: Include "ansidecl.h", rely on ANSI_PROTOTYPES. - * vprintf.c: Include "ansidecl.h" earlier, rely on - ANSI_PROTOTYPES. - * vsprintf.c: Include "ansidecl.h" earlier, rely on - ANSI_PROTOTYPES and possibly include . - - * Makefile.in: Regenerate dependencies. - -2003-04-15 DJ Delorie - - * maint-tool (deps): Scan for headers in $srcdir also. - -2003-04-15 Kaveh R. Ghazi - - PR target/10338 - PR bootstrap/10198 - PR bootstrap/10140 - * getopt.c (exchange, _getopt_initialize): Use mempcpy not - __mempcpy. - * regex.c (regerror): Likewise. - -2003-04-14 Roger Sayle - - * argv.c: Use ANSI_PROTOTYPES instead of __STDC__. - * memchr.c: Likewise. - * strcasecmp.c: Likewise. - * strncasecmp.c: Likewise. - * strncmp.c: Likewise. - * xatexit.c: Likewise. - * xmalloc.c: Likewise. - - * copysign.c: Use traditional function declaration instead of DEFUN. - * sigsetmask.c: Likewise. - - * memcmp.c: Both of the above, ANSI_PROTOTYPES and DEFUN. - * memset.c: Likewise. - - * memcpy.c: ANSI_PROTOTYPES, DEFUN and prototype bcopy. - * memmove.c: Likewise. - -2003-04-14 Roger Sayle - - * strdup.c (strdup): Tweak implementation to use memcpy. - -2003-04-14 Kaveh R. Ghazi - - * configure.in (HAVE_UINTPTR_T): Always define. - * configure: Regenerated. - -2003-03-23 Alexandre Oliva - - * Makefile.in (MULTIOSDIR): New macro. Use $(CC) $(LIBCFLAGS) - instead of $$CC alone. - (install_to_tooldir): Use it. - -2003-17-03 Jan Hubicka - - * hashtab.c (htab_traverse_noresize): Break out from ... - * hashtab.c (htab_traverse): ... here. - -2003-12-03 Jan Hubicka - - * hashtab.c (htab_expand): Fix warning. - - * hashtab.c (htab_expand): Compute the size of hashtable based - on the number of elements actually used. - (htab_traverse): Call htab_expand when table is too empty. - -2003-03-11 Carlo Wood - - * cplus-dem.c (demangle_integral_value): Correction to reflect - patch of 2002-01-10 in order to also make negative multi-digits - without leading underscore work. - -2003-03-03 Mark Mitchell - - * cplus-dem.c: Add license exception to copyright notice. - -2003-02-27 Kaveh R. Ghazi - - * physmem.c: Formatting changes from upstream. - -2003-02-24 Danny Smith - - * physmem.c (physmem_total): Add _WIN32 support. - (physmem_available): Likewise. - -2003-02-24 Rainer Orth - - * physmem.c (physmem_total) [HAVE_GETSYSINFO]: Test for - GSI_PHYSMEM. - (physmem_available) [HAVE_TABLE]: Test for TBL_VMSTATS. - -2003-02-22 Kaveh R. Ghazi - - * configure.in: Check for sys/systemcfg.h and - _system_configuration. - * physmem.c: Add support for AIX. Tweek formatting as per - upstream coreutils beta. - -2003-02-22 Kaveh R. Ghazi - Richard Earnshaw - Geoffrey Keating - - * configure.in: Check for sys/sysctl.h and sysctl. - * physmem.c: Add support for *bsd and darwin. - * Makefile.in: Generate depedency for physmem.o. - -2003-02-21 Rainer Orth - - * physmem.c (physmem_total) [HAVE_GETSYSINFO]: Use getsysinfo on - Tru64 UNIX. - (physmem_available) [HAVE_TABLE && HAVE_SYS_TABLE_H]: Use table on - Tru64 UNIX. - - * configure.in (AC_CHECK_HEADERS): Check for sys/sysinfo.h, - machine/hal_sysinfo.h, sys/table.h. - (checkfuncs, AC_CHECKFUNCS): Check for getsysinfo, table. - * configure, config.in: Regenerate. - -2003-02-21 Kaveh R. Ghazi - - * configure.in: Check for sys/sysmp.h and sysmp. - * physmem.c: Pull upstream copy, add support for irix6. - - * config.in, configure: Regenerated. - -2003-02-21 Kaveh R. Ghazi - - * physmem.c (physmem_total, physmem_available): De-ANSI-fy. - * configure.in (AC_CHECK_FUNCS): Add pstat_getstatic and - pstat_getdynamic. - -2003-02-20 Kaveh R. Ghazi - - * Makefile.in (CFILES): Add physmem.c. - (REQUIRED_OFILES): Add physmem.o. - * configure.in: Check for sys/pstat.h. - (checkfuncs): Add pstat_getstatic and pstat_getdynamic. - * physmem.c: New file, copied from textutils. - - * config.in, configure: Regenerated. - -2003-02-20 Daniel Jacobowitz - - * Makefile.in (CFILES): Add lrealpath.c. - (REQUIRED_OFILES): Add lrealpath.o. - (lrealpath.o): Add rule. - * aclocal.m4 (libiberty_NEED_DECLARATION): Add. - * configure.in: Add realpath and canonicalize_file_name to - checkfuncs and AC_CHECK_FUNCS. Use libiberty_NEED_DECLARATION - for canonicalize_file_name. - * lrealpath.c: New file. - * make-relative-prefix.c: Update documentation. - (make_relative_prefix): Simplify. Use lbasename and lrealpath. - * config.in: Regenerated. - * configure: Regenerated. - * functions.texi: Regenerated. - -2003-02-20 jmc - - * cplus_dem.c: Fix typo: intializes -> initializes. - -2003-02-20 Alexandre Oliva - - * configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to - config.status. - * configure: Rebuilt. - -2003-02-13 Daniel Jacobowitz - - Fix PR c++/7612. - * cplus-dem.c (demangle_signature): Call string_delete. - Remove extra string_init. - (demangle_arm_hp_template): Call string_delete instead of - string_clear. Add missing string_delete call. - (demangle_qualified): Add missing string_delete call. - (do_type): Remove unused variable btype. Add missing string_delete - call. Call string_delete instead of string_clear. - (demangle_fund_type): Move variable btype inside of the switch - statement. Add missing string_delete call. - (do_arg): Call string_delete instead of string_clear. Remove extra - string_init. - (demangle_nested_args): Free work->previous_argument. - -2003-02-12 Kaveh R. Ghazi - - * acconfig.h: New file. Add uintptr_t. - * config.in: Regenerated. - -2003-02-04 Joseph S. Myers - - * libiberty.texi: Update to GFDL 1.2. - -2003-01-30 Christian Cornelssen - - * Makefile.in (libiberty_topdir): New subst. - (mkinstalldirs): Redefine in terms of the above. - * configure.in: AC_SUBST it. - * configure: Regenerate. - -2003-01-28 Christian Cornelssen - - * Makefile.in (all-subdir, check-subdir, installcheck-subdir) - (info-subdir, install-info-subdir, clean-info-subdir) - (dvi-subdir, install-subdir, etags-subdir, mostlyclean-subdir) - (clean-subdir, distclean-subdir, maintainer-clean-subdir): - Pass $(FLAGS_TO_PASS). - -2003-01-27 Alexandre Oliva - - * Makefile.in (install_to_tooldir): Instead of $(MULTISUBDIR), use - /`$$CC -print-multi-os-directory`. - -2003-01-26 Daniel Jacobowitz - - * hashtab.c (htab_create_alloc_ex): New function. - (hatab_set_functions_ex): New function. - (htab_delete, htab_expand): Support alternate allocation functions. - -2003-01-24 Christopher Faylor - - * configure.in: Remove special pex-cygwin consideration. - * configure: Regenerate. - * pex-cygwin.c: Remove. - * Makefile.in: Remove pex-cygwin.[co] lines. - -2003-01-24 Zack Weinberg - - * Makefile.in (CFILES): Add pex-*.c. - (REQUIRED_OFILES): Change pexecute.o to @pexecute@ - (CONFIGURED_OFILES): Add pex-*.o. - (TEXIFILES): Add pexecute.txh. - (pexecute.o): Delete rule. - (pex-cygwin.o, pex-djgpp.o, pex-mpw.o, pex-msdos.o, pex-os2.o, - pex-unix.o, pex-win32.o): New rules. - * configure.in: Change AC_INIT argument to xmalloc.c. - Compute appropriate pexecute implementation and substitute it - as @pexecute@. - - * pexecute.c: Split up into... - * pex-cygwin.c, pex-djgpp.c, pex-mpw.c, pex-msdos.c, pex-os2.c, - pex-unix.c, pex-win32.c, pex-common.h, pexecute.txh: ... these - new files. - - * functions.texi: Regenerate. - * configure: Regenerate. - -2003-01-20 Josef Zlomek - - * hashtab.c (htab_expand): Fix allocation of new entries. - -2003-01-09 Christian Cornelssen - - * Makefile.in (FLAGS_TO_PASS): Also pass DESTDIR. - - * Makefile.in (install_to_libdir, install_to_tooldir): Add a - mkinstalldirs command. - -2002-12-04 Danny Smith - - * make-relative-prefix.c (HAVE_HOST_EXECUTABLE_SUFFIX): - Define for hosts with HOST_EXECUTABLE_SUFFIX. - -2002-11-24 Nick Clifton - - * make-relative-prefix.c (make_relative_prefix): Ensure return - string is empty before using strcat to construct it. - -2002-11-22 Daniel Jacobowitz - - * Makefile.in: Add make-relative-prefix.c. - * make-relative-prefix.c: New file. - * functions.texi: Rebuilt. - -2002-11-16 Jakub Jelinek - - * md5.c (md5_process_block): Avoid `function-like macro "F{G,H,I}" must be - used with arguments in traditional C' warnings. - -2002-10-16 Jakub Jelinek - - * config.table: Use mh-s390pic for s390x too. - -2002-10-06 Andreas Jaeger - - * libiberty/cplus-dem.c (ada_demangle): Get rid of unneeded - variable and of strict-aliasing warning. - (grow_vect): Use char as first parameter. - -2002-09-22 Kaveh R. Ghazi - - * Makefile.in (all): Fix multilib parallel build. - -2002-09-19 John David Anglin - - * cp-demangle.c (demangling_new): Cast 0 to enum. - (demangle_char): Cast return of strdup to char *. - (is_gnu_v3_mangled_ctor): Cast 0 to enum. - (is_gnu_v3_mangled_dtor): Likewise. - * cplus-dem.c (grow_vect): Cast return of xrealloc to void *. - (work_stuff_copy_to_from): Cast return of xmalloc to char **. - * fibheap.c (fibnode_new): Cast return of xcalloc to fibnode_t. - * md5.c (md5_process_bytes): Cast results back to const void *. - (md5_process_block): Add cast to const md5_uint32 *. - * regex.c (re_compile_fastmap): Cast enum to UCHAR_T. - * safe-ctype.c (L, XL, U, XU, D, P, _, C, Z, M, V, T, S): Add cast to - unsigned short. - * splay-tree.c (splay_tree_xmalloc_allocate): Cast return of xmalloc - to void *. - * vasprintf.c (int_vasprintf): Cast return of malloc to char *. - -2002-09-19 Nick Clifton - - * README: Update email addresses for bugs and patches. - -2002-09-10 Mike Stump - - * splay-tree.c (splay_tree_successor): Fix comments. - -2002-09-11 Zack Weinberg - - * cplus-dem.c: Code under #ifdef MAIN moved to gcc/cp/cxxfilt.c. - * testsuite/Makefile.in: Adjust for test-demangle. - * testsuite/regress-demangle: Deleted. - * testsuite/test-demangle.c: New file. - * testsuite/demangle-expected: Change \$ to $ throughout, now that - this file is not being read by a shell script. - -2002-09-05 Roger Sayle - - * regex.c: Only use "#pragma alloca" on AIX when not using gcc. - -2002-08-07 DJ Delorie - - * regex.c (re_error_msgid): Just use a simple array of strings. - (re_compile_pattern): Compensate. - (re_comp): Likewise. - (re_comp): Likewise. - (regerror): Likewise. - -2002-07-29 Neil Booth - - * cplus-dem.c (PREPEND_BLANK): Remove. - -2002-07-10 Jason Merrill - - * cp-demangle.c (demangle_identifier): Support extended Unicode - characters. - -2002-07-08 Kaveh R. Ghazi - - * cp-demangle.c (demangle_v3_with_details): Wrap in - !defined IN_GLIBCPP_V3. - -2002-07-01 Mark Mitchell - - * cp-demangle.c (demangle_operator_name): Add type_arg parameter. - Set it for the "st" operator. - (demangle_expression): Handle expressions with types as arguments. - -2002-06-30 Douglas Rupp - - * configure.in (OUTPUT_OPTION,NO_MINUS_C_MINUS_O): Configure. - * Makefile.in (OUTPUT_OPTION): Use. - -2002-06-22 Peter Breitenlohner - - * Makefile.in (install_to_libdir): Add $(DESTDIR). - (install_to_tooldir): Likewise. - -2002-06-17 Douglas Rupp - - * lbasename.c: Add 2002 to copyright. - (IS_DIR_SEPARATOR): Remove VMS junk. - -2002-06-05 Geoffrey Keating - - * hashtab.c (htab_create): New stub function for backward - compatibility. - (htab_try_create): Likewise. - -2002-06-03 Geoffrey Keating - - * hashtab.c (htab_create): Delete. - (htab_try_create): Delete. - (htab_create_alloc): New. - (htab_delete): Support user-specified memory allocation. - (htab_expand): Likewise. - -2002-05-22 Roman Lechtchinsky - - * configure.in: Fix typo in the code checking for sys_errlist. - * configure: Regenerated. - -2002-05-13 Andreas Schwab - - * config.table: Use mh-x86pic also for x86-64. - -2002-05-08 Alexandre Oliva - - * configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at - script entry, and set LD to it when configuring multilibs. - * configure: Rebuilt. - -2002-05-07 Mark Mitchell - - * configure.in (AC_TYPE_PID_T): Use it. - * configure: Regenerated. - * getruntime.c: Include . - * waitpid.c: Likewise. Use pid_t, not int, as the type of "pid". - -2002-04-09 Richard Henderson - - * hashtab.c (higher_prime_number): Use 7 as minimum. - (find_empty_slot_for_expand): Don't compute hash2 unless needed. - (htab_find_slot_with_hash): Likewise. - -2002-04-01 Phil Edwards - - * cp-demangle.c (__cxa_demangle): Also protect with IN_GLIBCPP_V3. - (is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_ctor): Conditionally - not compile if IN_GLIBCPP_V3 defined. - * dyn-string.c: Also allow IN_GLIBCPP_V3 to change allocation scheme. - -2002-03-30 Bryce McKinlay - - * cp-demangle.c (java_demangle_v3): Don't try to release "demangled" - if it is NULL. - -2002-03-27 DJ Delorie - - * hex.c: Add documentation. - (_hex_value): Provide non-ASCII empty table. - (hex_init): Initialize the non-ASCII table. - * functions.texi: Regenerate. - -2002-03-27 Mark Mitchell - - * dyn-string.c: Add libgcc exception to copyright notice. - -2002-03-26 H.J. Lu (hjl@gnu.org) - - * config.table: Support --with-build-subdir. - * configure.in: Likewise. - * configure: Rebuild. - -2002-03-18 Stuart Griffith - - * strtod.c (strtod): Increment 8 chars, not 7, when `infinity' - seen. - -2002-03-12 Mark Mitchell - - * cp-demangle.c: Add libgcc exception to cp-demangle.c copyright - notice. - -2002-03-11 Douglas B Rupp - - * xatexit.c [VMS]: Include stdlib.h and unixlib.h. - -2002-03-06 Jim Blandy - - * splay-tree.c (splay_tree_xmalloc_allocate, - splay_tree_xmalloc_deallocate): Use K&R-style definitions, not - prototyped definitions. Mark `data' arguments as unused. - -2002-03-06 Andrew Cagney - - * floatformat.c (floatformat_arm_ext_big): Delete definition. - -2002-03-04 Phil Edwards - - * configure.in: Add --enable-install-libiberty option. - * Makefile.in (INSTALLED_HEADERS): New variable. - (install_to_libdir): Possibly also copy headers. - * configure: Regenerated. - -2002-03-04 Neil Booth - - * xmalloc.c (xmalloc_fail): Clarify error message further. - -2002-03-03 Neil Booth - - * xmalloc.c (xmalloc_fail): Clarify error message. - -2002-02-22 Jim Blandy - - * splay-tree.c (splay_tree_xmalloc_allocate, - splay_tree_xmalloc_deallocate): New functions. - (splay_tree_new): Call splay_tree_new_with_allocator, passing the - above functions and a dummy data pointer. - (splay_tree_new_with_allocator): New function. - (splay_tree_delete_helper, splay_tree_delete, splay_tree_insert, - splay_tree_remove): Use the splay tree's allocation and - deallocation functions. - -2002-02-19 Scott Snyder - - * testsuite/demangle-expected: Add test case for infinite loop in - demangler. - * cplus-dem.c (demangle_arm_hp_template): Stop trying to demangle - if do_type() doesn't make any progress --- prevents an infinite - loop. - -2002-02-18 Carlo Wood - - PR c++/5390 - * cplus-dem.c (demangle_integral_value): Accept multi-digit - numbers that do not start with an underscore; This is needed - for integer template parameters. This doesn't break anything - because multi-digit numbers are never followed by a digit. - * testsuite/demangle-expected: Corrected all mangled test - cases with multi-digit template parameters: g++ 2.95.x does - not generate underscores around these parameters. - -2002-02-05 Jason Merrill - - * cplus-dem.c (flags): Add DMGL_VERBOSE - (cplus_demangle_v3_p): Remove. - (demangle_it): Add DMGL_TYPES to passed flags. - * cp-demangle.c (cplus_demangle_v3_all): Remove. - (cplus_demangle_v3_type): Remove. - (cplus_demangle_v3): Add options parm. - -2002-02-02 H.J. Lu (hjl@gnu.org) - - * cp-demangle.c (cp_demangle_type): Do not protect with - IN_LIBGCC2. - (cplus_demangle_v3_all): New. - (cplus_demangle_v3): Call cplus_demangle_v3_all. - (cplus_demangle_v3_type): Call cplus_demangle_v3_all. - - * cplus-dem.c (cplus_demangle_v3_p): New function pointer. - Initialized to cplus_demangle_v3. - (cplus_demangle_with_style): Call cplus_demangle_v3_p instead - of cplus_demangle_v3. - (main): Set cplus_demangle_v3_p to cplus_demangle_v3_type for - command line symbol. - - * testsuite/regress-demangle: Pass the mangled name at the - command line. - -2002-02-01 H.J. Lu - - * cp-demangle.c (cp_demangle_type): Call demangling_new with - DMGL_GNU_V3. - -2002-01-31 Phil Edwards - - * cp-demangle.c: Revert yesterday's change. - -2002-01-31 Adam Megacz - - * gcc/libiberty/configure.in: Treat mingw the same as cywin - wrt HAVE_SYS_ERRLIST. - -2002-01-30 Phil Edwards - - * cp-demangle.c (cp_demangle_type): Do not protect with IN_LIBGCC2. - (cplus_demangle_v3): Mimic __cxa_demangle and fall back on - cp_demangle_type. - * testsuite/demangle-expected: New gnu-v3 test. - -2002-01-22 Momchil Velikov - - * configure.in (variable detection): Use arrays of unspecified - size instead of plain integers. - -2002-01-18 DJ Delorie - - * Makefile.in (TESTLIB): New. This library is for future - testsuites. - (CFILES, REQUIRED_OFILES, CONFIGURED_OFILES): Re-alphabetize, - break down by letter. - (REQUIRED_OFILES): List long-to-compile files first. - (maint-deps): New, target for updating dependencies. - (dependencies): Update. - * maint-tool: Add dependency-generating option. - * configure.in: Check for _doprnt even if we're not providing it. - * configure: Regenerate. - - * _doprnt.c: Modifications to allow compiling on any platform. - * copysign.c: Likewise. - * putenv.c: Likewise. - * setenv.c: Likewise. - * vsprintf.c: Likewise. - -2002-01-15 Douglas B Rupp - - * mkstemps.c (mkstemps): On VMS, open temp file with option - that causes it to be deleted when closed. - -2002-01-02 Kaveh R. Ghazi - - * cp-demangle.c (long_options): Const-ify. - * cplus-dem.c (long_options): Likewise. - - * cplus-dem.c (mystrstr): Delete. All callers changed to use - strstr instead. - -2001-12-31 Ira Ruben - - * aclocal.m4 (libiberty_AC_FUNC_STRNCMP): Use anon mmap as 2nd try. - * configure: Regenerated. - -2001-12-24 Douglas B. Rupp - - * configure.in (uintptr_t): Use AC_CHECK_TYPE. - * configure: Regenerated. - -2001-12-12 Craig Rodrigues - - PR other/2719 - * cplus-dem.c (consume_count): Treat negative count as an error. - * testsuite/demangle-expected: Added testcase. - -Tue Dec 11 07:08:57 2001 Douglas B. Rupp - - * configure.in: Hardcode that vfork works on VMS host. - * configure: Regenerated. - -2001-12-06 Richard Henderson - - * cplus-dem.c (libiberty_demanglers): Add no_demangling case. - (cplus_demangle): Support no_demangling. - -2001-11-27 Zack Weinberg - - * _doprnt.c: Moved here from gcc/doprint.c. Adjust to build - in libiberty context. Fix typo in leading comment. - * configure.in: Fix various AC_DEFINEs so autoheader works. - If any of vprintf, vsprintf, vfprintf is missing from libc, - then AC_REPLACE_FUNCS(_doprnt). - -2001-11-26 DJ Delorie - Daniel Jacobowitz - - * Makefile.in (stamp-h): Depend on Makefile for proper - serialization. - (*-subdir): Depend on config.h for proper serialization. - -2001-11-26 DJ Delorie - - * configure.in: Check for alloca.h (for regex.c and putenv.c). - * configure: Regenerate. - * config.h: Add HAVE_ALLOCA_H. - -2001-11-16 Kaveh R. Ghazi - - * regex.c: Check defined(__STDC__) || defined(ALMOST_STDC) || - defined(HAVE_STRINGIZE) to determine whether ISO CPP token pasting - is available. - -Thu Nov 15 11:06:25 2001 Jeffrey A Law (law@cygnus.com) - - * config.in (HAVE_UINTPTR_T): Provide autoconf stub. - * configure.in (HAVE_UINTPTR_T): Test for system defining - uintptr_t and define HAVE_UINTPTR_T appropriately. - * regex.c (uintptr_t): Do not provide a definition if the - system provided one. - - * regex.c (PREFIX): Provide an alternate definition for - non-ANSI/ISO compilers. - (ARG_PREFIX): Likewise. - -2001-11-12 Jim Meyering - - * obstack.c (_): Honor the setting of ENABLE_NLS. Otherwise, - this code would end up calling gettext even in packages built - with --disable-nls. - * getopt.c (_): Likewise. - * regex.c (_): Likewise. - -2001-11-03 Alan Modra - - * configure.in: Cope with missing makeinfo. - * configure: Regenerate. - -2001-10-22 Kaveh R. Ghazi - - * hex.c (hex_init): Provide empty stub. - - * hex.c (hex_init): Delete. - (_hex_value): Const-ify and initialize at compile-time. - -2001-10-19 H.J. Lu - - * Makefile.in ($(TARGETLIB)): Also generate pic/$(TARGETLIB) if - necessary. - -2001-10-17 DJ Delorie - - * argv.c, asprintf.c, choose-temp.c, concat.c, cplus-dem.c, - ffs.c, fnmatch.txh, getruntime.c, make-temp-file.c, - mkstemps.c, pexecute.c, random.c, strsignal.c, vasprintf.c: - Improve manual formatting. - * functions.texi: Regenerate. - -2001-10-15 DJ Delorie - - * Makefile.in (TEXIFILES): Add fnmatch.txh. - (maint-undoc): New. - maint-tool: Add "undoc" tool. - * alloca.c, argv.c, asprintf.c, choose-temp.c, concat.c, - fdmatch.c, ffs.c, getruntime.c, insque.c, lbasename.c, - make-temp-file.c, mkstemps.c, pexecute.c, random.c, spaces.c, - strerror.s, strsignal.c, strtol.c, vasprintf.c: Add or update - documentation. - * fnmatch.txh: New. - * functions.texi: Regenerate. - -2001-10-10 Joseph S. Myers - - * bcmp.c, setenv.c: Use "nonzero" instead of "non-zero". - * strtod.c: Use "ISO C" instead of "ANSI C". - * functions.texi: Regenerate. - -2001-10-07 Joseph S. Myers - - * alloca.c, clock.c, getcwd.c, getpagesize.c, getpwd.c, index.c, - libiberty.texi, memchr.c, putenv.c, rindex.c, strchr.c, strdup.c, - strerror.c, strrchr.c, strstr.c, strtod.c, tmpnam.c, vfork.c, - xatexit.c, xmalloc.c, xstrerror.c: Improve manual formatting. Fix - spelling. Give names to function arguments in documentation. Use - (void) prototypes in documentation. - * functions.texi: Regenerate. - -2001-10-07 Kaveh R. Ghazi - - * argv.c (buildargv, tests, main): Const-ify. - * cp-demangle.c (operator_code): Likewise. - * cplus-dem.c (optable, libiberty_demanglers, - cplus_demangle_set_style, cplus_demangle_name_to_style, - print_demangler_list): Likewise. - * hashtab.c (higher_prime_number): Likewise. - * strcasecmp.c (charmap): Likewise. - * strerror.c (error_info, strerror, main): Likewise. - * strncasecmp.c (charmap): Likewise. - * strsignal.c (signal_info): Likewise. - -2001-09-29 DJ Delorie - - * configure: Regenerate. - -2001-09-28 Kaveh R. Ghazi - - * concat.c: Include stdlib.h. - -2001-09-27 Eli Zaretskii - - * libiberty.texi: (Top level): Add syncodeindex pg. Add - @dircategory and @direntry directives. Add @finalout. - (many nodes): Lose the next,prev,up pointers on the @nide line. - (Using, Supplemental Functions, Replacement Functions): Fix - markup. - (Functions): Move around, to allow makeinfo to build the manual - without next,prev,up pointers in thye node lines. - (Licenses): Fix typos. - - * index.c, rindex.c, strchr.c, strerror.c, strrchr.c, strstr.c, - strtol.c, xatexit.c, xexit.c, xmalloc.c: Fix spelling and markup. - * functions.texi: Regenerate. - - * copying-lib.texi: Lose the next,prev,up pointers on the @node - line. - -2001-09-27 DJ Delorie - - * configure.in: Don't use in-tree texinfo, because libiberty must - be built before it. Check for makeinfo version 4 or higher. - * functions.texi: Regenerate. - -2001-09-20 DJ Delorie - Phil Edwards - - * configure.in (MAKEINFO, PERL): Detect these. - (--enable-maintainer-mode): Add. - * configure: Regenerate. - * Makefile.in (MAKEINFO, PERL): Define. - (libiberty.info, libiberty.dvi, libiberty.html): New. - (CFILES): Add bsearch.c. - (CONFIGURED_OFILES): New, list of objects configure might add. - (maint-missing, maint-buildall): New, for maintainers only. - (clean, mostlyclean): Add info/dvi/html files. - * libiberty.texi, copying-lib.texi, obstacks.texi, functions.texi: New. - * gather-docs: New, for maintainers. - * maint-tool: New, for maintainers. - * alloca.c, atexit.c, basename.c, bcmp.c, bcopy.c, bsearch.c, - bzero.c, calloc.c, clock.c, configure.in, configure, getcwd.c, - getpagesize.c, getpwd.c, index.c, memchr.c, memcmp.c, memcpy.c, - memmove.c, memset.c, putenv.c, rename.c, rindex.c, setenv.c, - sigsetmask.c, strcasecmp.c, strchr.c, strdup.c, strerror.c, - strncasecmp.c, strncmp.c, strrchr.c, strstr.c, strtod.c, strtol.c, - tmpnam.c, vfork.c, vprintf.c, waitpid.c, xatexit.c, xexit.c, - xmalloc.c, xmemdup.c, xstrdup.c, xstrerror.c: Add or update - documentation. - -2001-09-25 Kaveh R. Ghazi - - * concat.c (reconcat): Fix for traditional C. - -2001-09-24 Kaveh R. Ghazi - - * concat.c (reconcat): New function. - -2001-09-17 Kaveh R. Ghazi - - * concat.c (vconcat_length, vconcat_copy, concat_length, - concat_copy, concat_copy2): New functions. - (concat): Use vconcat_length/vconcat_copy. - - * alloca.c (libiberty_optr, libiberty_nptr, libiberty_len): - Define. - -2001-09-04 Kaveh R. Ghazi - - * asprintf.c: Don't define USE_STDARG. Use VPARAMS, VA_OPEN, - VA_FIXEDARG & VA_CLOSE. - - * vasprintf.c: Check HAVE_STRING_H when including string.h. - (checkit): Delete redundant prototype. Add ATTRIBUTE_PRINTF_1. - Use VA_OPEN, VA_FIXEDARG & VA_CLOSE. Free allocated string. - -2001-08-27 Kaveh R. Ghazi - - * concat.c (concat): Use VPARAMS, VA_OPEN, VA_FIXEDARG & VA_CLOSE. - -2001-08-23 Ulrich Drepper - - * regex.c (truncate_wchar): Use wcrtomb not wctomb. - -2001-08-23 Ulrich Drepper - - * posix/regex.c [_LIBC] (convert_mbs_to_wcs): Use __mbrtowc - instead of mbrtowc. - [_LIBC]: Use __iswctype instead of iswctype, __wcslen instead of - wcslen, and __wcscoll instead of wcscoll. - -2001-08-22 Matt Kraai - - * fibheap.c (fibheap_init, fibnode_init): Remove. - (fibheap_new, fibnode_new): Use xcalloc to allocate and - initialize memory. - (fibheap_insert): Remove check for node allocation failure. - -2001-08-21 Richard Henderson - - * Makefile.in (fibheap.o): Depend on config.h. - * fibheap.c: Tidy formatting. Use config.h.` Rearrange some - functions for inlining. - -Tue Aug 21 12:35:04 2001 Christopher Faylor - - * configure.in: Need to set HAVE_SYS_ERRLIST and HAVE_SYS_NERR whenever - hosting on cygwin. - * configure: Regenerate. - -2001-08-20 Andrew Cagney - - * floatformat.c (floatformat_m88110_ext): Remove #ifdef - HARRIS_FLOAT_FORMAT. - (floatformat_ia64_spill_little, floatformat_ia64_quad_little) - (floatformat_ia64_spill_big, floatformat_ia64_quad_big) - (floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword) - (floatformat_m88110_harris_ext): New float formats. - -2001-08-20 Daniel Berlin - - * fibheap.c: New file. Fibonacci heap. - - * Makefile.in (CFILES): Add fibheap.c. - (REQUIRED_OFILES): Add fibheap.o. - (fibheap.o): Add dependencies for fibheap.o. - -2001-08-17 Christopher Faylor - - * configure.in: Always set HAVE_SYS_ERRLIST when targetting cygwin. - * configure: Regenerate. - -2001-08-16 Richard Henderson - - * hashtab.c (htab_hash_string): New. - -2001-08-13 Andrew Cagney - - * floatformat.c (floatformat_ieee_double_littlebyte_bigword): Fix - name. - -2001-08-12 Isamu Hasegawa - - * regex.c (wcs_regex_compile): Use appropriate string - to compare with collating element. - Fix the padding for the alignment. - -2001-08-10 Andrew Cagney - - * lbasename.c (lbasename): Change function definition to return a - const char pointer. - -2001-08-07 Jason Merrill - - * cp-demangle.c (demangle_special_name): "GR" -> "reference temporary - for". - -2001-08-03 Richard Henderson - - * Makefile.in (concat.o): Depend on config.h. - -2001-07-30 Andreas Jaeger - - * concat.c: Include "config.h". - -2001-07-30 Andreas Jaeger - - * regex.c: Declare wcs functions only if compiling with - MBS_SUPPORT. - Don't use #elif for traditional C. - -2001-07-23 Ulrich Drepper - - * regex.c: Revamp memory allocation for WCHAR functions to - not use too much stack. - -2001-07-30 Andreas Jaeger - - * regex.c: Declare wcs functions only if compiling with - MBS_SUPPORT. - Don't use #elif for traditional C. - -2001-07-25 Daniel Jacobowitz - - * Makefile.in (regex.o): Add dependency on config.h. - -2001-07-18 Andreas Schwab - - * regex.c (WORDCHAR_P) [WCHAR]: Also return true for the - underscore character. - -2001-07-18 Ulrich Drepper - - * regex.c: Limit string length printed in debug messages to 100 - chars. - -2001-07-18 Andreas Jaeger - - * regex.c: Place under LGPL version 2.1. - -2001-07-10 Jeff Johnston - - * Makefile.in: Add support for regex code. - * regex.c: New file. - -2001-07-05 Mark Klein - - * Makefile.in: Add ffs.c dependency. - * configure.in: Add ffs.c. - * ffs.c: New file. - -2001-06-18 Richard Henderson - - * concat.c: Include . - -2001-06-11 Loren J. Rittle - - bootstrap/3106 - * strerror.c (sys_nerr): Hide the OS header version. - * strsignal.c (sys_nsig): Likewise. - -2001-06-10 Richard Henderson - - * concat.c: Include string.h. Fix int vs size_t usage. - Simplify the iteration loops. Use memcpy. - -2001-05-16 Matt Kraai - - * partition.c: Fix misspelling of `implementation'. - -2001-05-09 Thiemo Seufer - - * md5.c (md5_init_ctx): Declare constants as unsigned. - (md5_process_block): Likewise. - -2001-05-07 Zack Weinberg - - * cp-demangle.c (demangle_v3_with_details, - is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor): Use K+R style - function definition. - * ternary.c: Use K+R style function definitions. Use PTR, not - void *. Make arguments constant where possible. - -2001-05-07 Mark Mitchell - - * splay-tree.h (splay_tree_max): New function. - (splay_tree_min): Likewise. - -2001-04-15 Daniel Berlin - - * ternary.c: New file - Ternary search tree implementation. - - * Makefile.in: Add ternary.o, and ternary.c dependencies. - -2001-04-03 Zack Weinberg - - * make-temp-file.c (try): Inline. - -2001-02-28 Richard Henderson - - * Makefile.in (make-temp-file.o): Depend on config.h. - -2001-03-27 Kaveh R. Ghazi - - * memchr.c (memchr): Adjust condition to avoid infinite loop. - -2001-03-23 Jakub Jelinek - - * cp-demangle.c (demangle_discriminator): `_0' is discriminator #1, - `_' not followed by a digit is invalid. - -2001-03-22 Jim Blandy - - * cp-demangle.c (string_list_delete): Use dyn_string_delete - instead of free, to free the contents as well as the string - structure. - -2001-03-21 Zack Weinberg - - * make-temp-file.c: Always default DIR_SEPARATOR to '/'. - Don't default P_tmpdir to anything. Try /var/tmp before - /usr/tmp. - -2001-03-20 Zack Weinberg - - * choose-temp.c: Split off make_temp_file, and the code - duplicated between it and choose_temp_base, into... - * make-temp-file.c: ... here; new file. - - * Makefile.in (CFILES): Add make-temp-file.c. - (REQUIRED_OFILES): Add make-temp-file.o. - -2001-03-20 Jim Blandy - - * cp-demangle.c (struct demangling_def): New fields: - is_constructor and is_destructor. - (demangling_new): Initialize them. - (demangle_ctor_dtor_name): Set them, if we detect a constructor - or destructor. - (demangle_v3_with_details, is_gnu_v3_mangled_ctor, - is_gnu_v3_mangled_dtor): New functions. - -2001-03-20 Jason Merrill - - * cplus-dem.c (main): Skip initial $. - -2001-03-15 Michael Meissner - - * hashtab.c (higher_prime_number): Silence warning that 4294967291 - might be a signed integer under pre-ISO C systems. - -2001-03-10 Neil Booth - John David Anglin - - * libiberty/lbasename.c: New file. - * libiberty/Makefile.in: Update for lbasename. - -2001-03-06 Zack Weinberg - - * aclocal.m4 (libiberty_AC_FUNC_C_ALLOCA): New. - * configure.in: Replace all alloca logic with a simple use of - the above new macro. - * config.table: Kill *-*-beos* entry. - * config/mh-beos: Delete. - * configure, config.in: Regenerate. - - * Makefile.in (ALLOCA, HFILES): Kill. - (REQUIRED_OFILES): Add alloca.o. - (alloca.o): Depend on libiberty.h. - (argv.o): Don't depend on alloca-conf.h. - * alloca-conf.h: Delete. - * alloca.c: Include libiberty.h. Kill all #ifdef emacs - blocks. Provide the C alloca unconditionally. Use PTR where - appropriate. Make i00afunc static. - * argv.c: Don't include alloca-conf.h. - -2001-03-04 John David Anglin - - * cplus-dem.c (main): Cast enum style to int. - -2001-02-16 Loren J. Rittle - - * cplus-dem.c (main): Initialize style. - -2001-02-02 Phil Edwards - - * COPYING.LIB: Update to LGPL 2.1 from the FSF. - -2001-01-31 Bryce McKinlay - - Add support for Java demangling under the v3 ABI: - * cp-demangle.c (NAMESPACE_SEPARATOR): New define. - (struct demangling_def): Add `style' field. - (demangling_new): New parameter `style'. Set it in demangling_t. - (demangle_prefix): Use NAMESPACE_SEPARATOR. - (demangle_type_ptr): Don't emit pointer symbol if doing Java output. - (cp_demangle): New parameter `style'. Pass it to demangling_new(). - (main): Call cp_demangle with extra parameter. - (java_demangle_v3): New function. - (java_builtin_type_names): New. Table of primitive type names used - for Java demangling. - (demangle_builtin_type): Look up in java_builtin_type_names if doing - Java output. - * cplus-dem.c (cplus_demangle): Use java_demangle_v3 to do Java - demangling. - (long_options): Remove obsolete `java' option. - (main): Remove explicit handling of `java' option. Instead, pass style - parameter in cplus_demangle flags as gdb does. - * testsuite/demangle.expected: Add some Java test cases. - -2000-12-29 DJ Delorie - - * fnmatch.c: Make the note about the origins of this file more - accurate, at least until we can sync with glibc. - * getopt.c: Ditto. - * getopt1.c: Ditto. - * md5.c: Ditto. - * obstack.c: Ditto. - -2000-12-26 Michael Sokolov - - * bsearch.c: New file. - * configure.in (funcs): Add bsearch. - (AC_CHECK_FUNCS): Likewise. - * configure, config.in: Regenerate. - -2000-12-13 Michael Sokolov - - * safe-ctype.c: #include "ansidecl.h". - * strtod.c: Likewise. - -2000-12-13 Michael Sokolov - - * strtoul.c: Include safe-ctype.h, not ctype.h. - -2000-12-07 Zack Weinberg - - * safe-ctype.c: New file. - * Makefile.in (CFILES): Add safe-ctype.c. - (REQUIRED_OFILES): Add safe-ctype.o. - - * argv.c: Define ISBLANK and use it, not isspace. - * basename.c, cplus-dem.c, fnmatch.c, pexecute.c, strtod.c, - strtol.c, strtoul.c: Include safe-ctype.h, not ctype.h. Use - uppercase ctype macros. Don't test ISUPPER(c)/ISLOWER(c) - before calling TOLOWER(c)/TOUPPER(c). - -2000-12-07 Mike Stump - - * Makefile.in (distclean): When cleaning, remove testsuite. - -2000-12-05 Jason Merrill - - * cp-demangle.c (cplus_demangle_v3): Check that it's a v3 mangled - name before allocating the dyn_string. - -2000-12-04 Jason Merrill - - * cp-demangle.c: s/new_abi/v3/. - * cplus-dem.c: Likewise. - (current_demangling_style): Now auto_demangling. - (cplus_demangle): Try v3 demangling if AUTO_DEMANGLING. - (main): Use standard symbol chars for auto_demangling. - -2000-11-26 Mark Mitchell - - * hashtab.c (higher_prime_number): Use a table, rather than a - seive, to find the next prime. - -2000-11-22 H.J. Lu - - * cplus-dem.c (main): Handle gnat_demangling. - -2000-11-22 Zack Weinberg - - * aclocal.m4 (LIB_AC_PROG_CC): Moved here from configure.in. - (AC_DEFINE_NOAUTOHEADER): New - work around bug in autoheader. - * configure.in: Call AC_C_INLINE and AC_C_CONST. Use three - argument form of AC_DEFINE in dummy definitions block. Use - AC_DEFINE_NOAUTOHEADER for real definitions of things defined - in dummy block. Preload cache variables instead of bypassing - tests, where possible. - * acconfig.h: Removed. - - * xmalloc.c (xmalloc_failed): New function, does error - reporting on failed allocation. - (xmalloc, xcalloc, xrealloc): Use it. - -2000-11-21 Hans-Peter Nilsson - - * cplus-dem.c (cplus_demangle): Fix formatting. - (grow_vect): Ditto. - (ada_demangle): Ditto. - (internal_cplus_demangle): Ditto. - (mop_up): Ditto. - -2000-11-21 H.J. Lu - - * cplus-dem.c (main): Handle java_demangling. - -2000-11-19 Kaveh R. Ghazi - - * cplus-dem.c (grow_vect): Prototype. - (ada_demangle): Cast the arg of ctype macros to unsigned char. - -2000-11-15 Hans-Peter Nilsson - - * cplus-dem.c (ada_demangle): Add back ATTRIBUTE_UNUSED for - parameter `option'. - -2000-11-15 Kenneth Block - - * cplus-dem.c: Eliminate use of DEFUN, it is obsolete and cannot - be used in GCC. - -2000-11-15 Kenneth Block - - * cplus-dem.c: Add gnat demangler. Add java to demangle style - list. - -2000-11-04 Hans-Peter Nilsson - - * hashtab.c (htab_expand): Change to return int. Use calloc or - xcalloc depending on htab->return_allocation_failure. Return zero - if calloc fails. - (htab_create): Update comment to cover memory allocation. - (htab_try_create): New. - (htab_find_slot_with_hash): Return NULL if htab_expand fails. - Update comment to cover this. - -2000-11-03 Hans-Peter Nilsson - - * hashtab.c: Change void * to PTR where necessary. - (htab_create, htab_expand): Correct formatting of comment before - function. - -2000-10-22 Alex Samuel - - * cp-demangle.c (string_list_def): Add caret_position and comments. - (result_caret_pos): New macro. - (result_append_string): Rename to... - (result_add_string): ... this, and insert at caret position. - Rename throughout. - (result_append): Rename to... - (result_add): ... this, and insert at caret position. Rename - throughout. - (result_append_char): Rename to... - (result_add_char): ... this, and insert at caret position. Rename - throughout. - (result_append_space): Remove. - (string_list_new): Initialize caret position. - (result_add_separated_char): Use caret position. - (result_get_caret): New funtion. - (result_set_caret): Likewise. - (result_shift_caret): Likewise. - (result_previous_char_is_space): Likewise. - (substitution_start): Use caret position. - (substitution_add): Likewise. - (demangling_new): Initialize caret position. - (demangle_encoding): Use caret position. - (demanglin_nested_name): Put CV qualifiers after name. - (demangle_type_ptr): Use switch statement. Handle pointers to - arrays. Don't use result_append_space. Use caret position. - (demangle_type): Emit CV qualifiers after underlying type. Adjust - call to demangle_array_type. - (demangle_array_type): Add parameter to handle pointers to arrays. - -2000-10-01 Mark Mitchell - - * splay-tree.c (splay_tree_insert): Fix formatting. - -2000-09-16 Mark Mitchell - - * splay-tree.c (splay_tree_predecessor): Fix typo in comment. - -2000-09-14 Michael Sokolov - - * splay-tree.c: #include . - -2000-09-14 Hans-Peter Nilsson - - * testsuite/demangle-expected: Add two tests for anonymous - namespaces. - * cplus-dem.c (gnu_special): Handle anonymous namespaces. - -2000-09-10 Mark Mitchell - - * splay-tree.c (splay_tree_predecessor): New function. - (splay_tree_successor): Likewise. - -2000-09-10 Hans-Peter Nilsson - - * testsuite/demangle-expected: Add four tests for type_info - mangling. - * cplus-dem.c (gnu_special): Use do_type, not demangle_fund_type, - for a non-template non-qualified type_info function or node. - -2000-09-08 Alex Samuel - - * cp-demangle.c: Fix copyright banner. - -2000-09-07 Michael Sokolov - - * md5.c: #include "ansidecl.h". - -2000-09-06 Alex Samuel - - * cp-demangle.c (status_allocation_failed): Rearrange whitespace. - (demangle_type): Handle substitution candidates correctly in the - face of special substitutions. - -2000-09-05 Alex Samuel - - * cp-demangle.c (demangle_encoding): Rename variable. - (demangle_name): Rename parameter. Handle return type - suppression. - (demangle_nested_name): Rename parameter. - (demangle_prefix): Likewise. Change return type suppression. - (demangle_unqualified_name): Add parameter. Flag constructors and - conversion operators. - (demangle_special_name): Fix comment. - (demangle_type): Rename variable. - (demangle_bare_function_type): Check for missing return type and - parameter. - (demangle_class_enum_type): Rename parameter. - (demangle_discriminator): Fix misspelling in comment. - -2000-08-31 DJ Delorie - - * configure.in (Cygwin): special case cygwin only when we're - building cygwin, not when we're hosting cygwin. - -2000-09-04 Alex Samuel - - * cp-demangle.c (demangle_template_arg): Eat an `E' after an - . - -2000-09-04 Alex Samuel - - * cp-demangle.c (demangle_type_ptr): Increment position past - pointer and reference characters. - -2000-09-04 Alex Samuel - - * cp-demangle.c (demangle_nv_offset): New function. - (demangle_v_offset): Likewise. - (demangle_call_offset): Likewise. - (demangle_special_name): Update thunk demangling to comply with - ABI changes. - -2000-09-03 Alex Samuel - - * cp-demangle.c (ANONYMOUS_NAMESPACE_PREFIX): New macro. - (substitution_def): Remove template_parm_number. - (NOT_TEMPLATE_PARM): Remove. - (result_insert_string): New macro. - (result_insert): Likewise. - (result_insert_char): Likewise. - (substitution_add): Remove last parameter. Don't store template - parm number. - (BFT_NO_RETURN_TYPE): Define as NULL. - (demangle_encoding): Adjust call to demangle_bare_function_type. - (demangle_name): Adjust substitution. Adjust call to - substitution_add. - (demangle_prefix): Adjust call to substitution_add. - (demangle_identifier): Handle anonymous namespaces. - (demangle_operator_name): Change demangling of vendor-extended - operator to match ABI changes. - (demangle_type_ptr): Change parameters. Make recursive. Handle - substitutions here. - (demangle_type): Adjust calls to demangle_template_param, - substitution_add, and demangle_type_ptr. Fix substitution of - templated types. - (demangle_function_type): Change parameter to a pointer. - (demangle_bare_function_type): Likewise. Adjust insertion point. - (demangle_template_param): Remove last parameter. - (demangle_expr_primary): Remove unused variable. Adjust call to - demangle_template_param. - (is_mangled_char): Accept `$' and `.'. - * cplus-dem.c (gnu_new_abi_symbol_characters): Add '$' and '.'. - * dyn-string.c (dyn_string_insert_char): New function. - -2000-08-31 Hans-Peter Nilsson - - * testsuite/demangle-expected: Add nine tests for - underscore-after-number followed by five tests for name-signature - delimiter. - -2000-08-28 Richard Henderson - - * Makefile.in (md5.o): Depend on config.h. - -2000-08-28 Jason Merrill - - * Makefile.in (REQUIRED_OFILES): Add md5.o. - (CFILES): Add md5.c. - * md5.c: New file. - -2000-08-27 Alex Samuel - - * cp-demangle.c (demangle_name): Initialize template_p in local - name case. Don't re-add substitutions as candidates. - (demangle_nested_name): Use . - (demangle_prefix): Likewise. Don't add template names as - substitution candidates twice, or re-add a substitution or the - last prefix component. - (demangle_local_name): Adjust output format. - -2000-08-25 Alex Samuel - - * cp-demangle.c (result_add_separated_char): Change parameter to - int. - (substitution_add): Don't check for duplicates. Check if - previously allocated size is zero. - (demangle_name): Remove duplicate check for std substitution. - Clear template flag appropriately. - (demangle_prefix): Remove argument to demangle_substitution. - Don't check that template flag is already set. - (demangle_operator_name): Add pt operator. - (demangle_type): Don't treat r as built-in type. Remove argument - to demangle_substitution. Fix substitution candidate mechanics. - Handle s. Improve comments. - (demangle_template_param): Don't handle template arg lists here. - (demangle_substitution): Remove parameter. - (print_usage): Remove extra fprintf option. - -2000-08-24 Greg McGary - - * libiberty/random.c (end_ptr): Revert previous change. - -2000-08-24 Greg McGary - - * libiberty/cplus-dem.c (cplus_demangle_opname, cplus_mangle_opname, - demangle_expression, demangle_function_name): Use ARRAY_SIZE. - * libiberty/random.c (end_ptr): Likewise. - -2000-08-23 Alex Samuel - - * cp-demangle.c (result_close_template_list): Remove function. - (result_add_separated_char): New function. - (result_open_template_list): New macro. - (result_close_template_list): Likewise. - (demangle_prefix): Don't set template_p if the - prefix ends with a ctor name. - (demangle_type_ptr): Remove duplicate RETURN_IF_ERROR. - (demangle_type): Check for template args after substitution. - (demangle_template_args): Use result_open_template_list. - -2000-08-02 Zack Weinberg - - * pexecute.c: Don't use vfork. Initialize 'pid' before retry loop. - -2000-07-26 Dave Pitts - - * config/mh-openedition.h: Added -DLE370 definition. - -2000-07-26 Mark Elbrecht - - * pexecute.c (pexecute) [__MSDOS__]: Change __GO32__ to - __DJGPP__. Use P_WAIT instead of constant in the spawnv* call. - Cast program to 'char *' in errmsg_arg assignment. - (PWAIT_ERROR): Define. - (pwait): Use PWAIT_ERROR. Adjust DJGPP's status code to conform - to DJGPP's WIF* macros. - -2000-07-27 RodneyBrown - Jeff Law - - * getcwd.c: Include string.h, stdlib.h for prototypes - - * Makefile.in (rename.o, waitpid.o): Depend on config.h - * rename.c: Include config.h, unistd.h - * waitpid.c: Include config.h, sys/wait.h - -2000-07-24 Hans-Peter Nilsson - - * cplus-dem.c (work_stuff_copy_to_from): New. - (delete_non_B_K_work_stuff): New. - (delete_work_stuff): New. - (mop_up): Break out work_stuff partly destruction to - delete_non_B_K_work_stuff. - (iterate_demangle_function): New. - (demangle_prefix): Call iterate_demangle_function instead of - demangle_function_name. Leave handling of name-signature - __-delimiters to iterate_demangle_function. - (demangle_integral_value): Strip an optional - following underscore cautiously. Handle negative numbers. - -2000-07-24 Daniel Berlin - - * cplus-dem.c (demangle_signature): Change if (GNU_DEMANGLING) to - if (AUTO_DEMANGLING || GNU_DEMANGLING) - -2000-07-21 Alex Samuel - - * cp-demangle.c (demangle_ctor_dtor_name): Remove not-in-charge - allocating ctor mangling. - (demangle_array_type): Handle empty and non-constant array length. - -2000-07-23 Michael Sokolov - Jeff Law - - * configure.in (AC_CHECK_HEADERS): Add time.h. - (AC_HEADER_TIME): Add check. - * configure, config.in: Regenerate. - * getruntime.c: Portably #include and/or . - - * configure.in (AC_CHECK_HEADERS): Add limits.h. - * configure, config.in: Regenerate. - * sort.c: Portably #include and/or . - * strtol.c, strtoul.c: #include "config.h". Portably #include - and/or . - * Makefile.in (strtol.o, strtoul.o): Update dependencies. - - * aclocal.m4 (libiberty_AC_DECLARE_ERRNO): New macro. - * configure.in (libiberty_AC_DECLARE_ERRNO): Add check. - * configure, config.in: Regenerate. - * pexecute.c, strtol.c, strtoul.c: Declare errno if necessary. - - * cp-demangle.c, mkstemps.c: #include . - -2000-07-21 Mike Stump - - * Makefile.in (xexit.o): Add dependency for config.h in xexit.c. - * (vasprintf.o): Add dependency for config.h in vasprintf.c. - -2000-07-21 Kaveh R. Ghazi - - * cp-demangle.c (cp_demangle_type): Wrap in IN_LIBGCC2. - - * setenv.c (setenv): Initialize variable `ep'. - - * sigsetmask.c (abort): Prototype. - - * vasprintf.c: Include config.h. Check ANSI_PROTOTYPES, not - __STDC__ for stdarg.h include. - (int_vasprintf): Prototype. - (checkit): Prototype. Use VPARAMS/ANSI_PROTOTYPES/VA_START in - definition. Cast `global_total_width' in comparison. - (main): Prototype. Return a value. - - * vfork.c (fork): Prototype. - - * xexit.c: Include config.h. - -2000-07-20 Joseph S. Myers - - * cplus-dem.c (demangle_fund_type): Make 'dec' an unsigned int, - and print it with %u. - -2000-07-17 Hans-Peter Nilsson - - * testsuite/regress-demangle (failed test): Show result and - expected output. - -2000-07-07 Andrew Haley - - * cplus-dem.c (main): fflush() after emitting last char before - waiting for input. - -2000-06-28 Alex Samuel - - * cp-demangle.c (demangle_encoding): Accept no substitutions. - (demangle_name): Handle followed by - . - (demangle_type): Follow special substitutions with - - (demangle_subtitution): Set template_p for special substitutions. - (main): Fix typos. - -2000-06-27 Alex Samuel - - * cp-demangle.c (demangle_special_name): Swap base and derived - class when demangling construction vtables. - -2000-06-21 Alex Samuel - - * cp-demangle.c: Don't include ctype.h. - (IS_DIGIT): New macro. - (IS_ALPHA): Likewise. Use IS_DIGIT and IS_ALPHA throughout - instead of isdigit and isalpanum. - (demangling_def): Make name and next const pointers. - (STATUS_ALLOCATION_FAILED): New status code. - (dyn_string_append_space): Handle failure in - dyn_string_append_char. - (int_to_dyn_string): Likewise. Change return value to status_t. - (string_list_new): Handle failure of dyn_string_init. - (result_close_template_list): Change return type to status_t. - Handle failure in dyn_string_append. - (result_push): Change return value to status_t. Handle failure in - string_list_new. Handle failure of result_push throughout. - (substitution_add): Change return value to status_t. Handle - dyn_string failures. Handle failure of substitution_add - throughout. - (template_arg_list_new): Return NULL on allocation failure. - (result_append_string): Return STATUS_ALLOCATION_FAILED on error. - Handle error result throughout. - (result_append): Likewise. - (result_append_char): Likewise. - (result_append_space): Likewise. - (demangling_new): Make argument a const pointer. Handle - allocation failures. - (demangle_template_args): Handle failure in template_arg_list_new - and result_close_template_list. - (demangle_discriminator): Return if int_to_dyn_string fails. - (cp_demangle): Likewise. - (cp_demangle_type): New function. - (cplus_demangle_new_abi): Don't call dyn_string_delete. Abort on - memory allocation failure. - (main): Likewise. - * dyn-string.c (RETURN_ON_ALLOCATION_FAILURE): Define if - IN_LIBGCC2. - (dyn_string_init): Change return value to int. Handle - RETURN_ON_ALLOCATION_FAILURE case. - (dyn_string_new): Handle RETURN_ON_ALLOCATION_FAILURE case. - (dyn_string_release): Delete the dyn_string. - (dyn_string_resize): Handle RETURN_ON_ALLOCATION_FAILURE case. - (dyn_string_copy): Change return type to int. - (dyn_string_copy_cstr): Likewise. - (dyn_string_prepend): Likewise. - (dyn_string_prepend_cstr): Likewise. - (dyn_string_insert): Likewise. - (dyn_string_insert_cstr): Likewise. - (dyn_string_append): Likewise. - (dyn_string_append_cstr): Likewise. - (dyn_string_append_char): Likewise. - (dyn_string_substring): Likewise. - -2000-06-09 Zack Weinberg - - * cp-demangle.c (demangle_operator_name): Add spaces before - names beginning with a letter: delete, delete[], new, new[], - sizeof. - (demangle_special_name): Handle TF and TJ . - -Thu Jun 8 18:52:24 2000 Philippe De Muyter - - * cp-demangle.c (template_arg_list_new): Revert previous PARAMS patch. - -Thu Jun 8 09:25:54 2000 Philippe De Muyter - - * cp-demangle.c (stdio.h): File included unconditionaly. - (template_arg_list_new): Parameter list is PARAMS ((void)), not (). - * dyn-string.c (stdio.h): File included. - * partition.c (partition_print): No `&' needed to take the address of - a function. - -2000-06-07 Kaveh R. Ghazi - - * configure.in (ac_libiberty_warn_cflags): Add -pedantic. - - * choose-temp.c (try, choose_temp_base, make_temp_file): Constify. - - * cp-demangle.c (demangle_char): Change parameter from char to int. - (demangle_expression, demangle_expr_primary): Remove extra - semi-colon in prototype. - - * dyn-string.c (dyn_string_append_char): Change parameter from - char to int. - - * memcmp.c (memcmp): Constify. - - * mkstemps.c (gcc_uint64_t): Mark GNUC `long long' case with - __extension__. - - * partition.c (elem_compare): Prototype. Don't cast away - const-ness. - - * setenv.c (setenv): Use braces to avoid ambiguous `else'. - -2000-06-07 Kaveh R. Ghazi - - * Makefile.in (cp-demangle.o): Depend on $(INCDIR)/demangle.h. - - * cp-demangle.c: Include demangle.h. - (template_arg_list_new): DeANSIfy. - (cp_demangle): Make static and add prototype. - (operator_code, operators): Constify. - (demangle_operator_name): Likewise for variables `p1', `p2' and `p'. - -2000-06-05 Alex Samuel - - * cp-demangle.c (demangle_prefix): Cast argument to isdigit to - unsigned char. - (demangle_unqualified_name): Likewise. - (demangle_number_literally): Likewise. - (demangle_type): Likewise. - (demangle_substitution): Likewise. - (is_mangled_char): Likewise, for isalnum. - -2000-06-04 Alex Samuel - - * Makefile.in (CFILES): Add cp-demangle.c and dyn-string.c. - (REQUIRED_OFILES): Add cp-demangle.o and dyn-string.o. - (cp-demangle.o): New dependency. - (dyn-string.o): Likewise. - - * dyn-string.c: Move here from gcc/dyn-string.c. Add new functions. - - * cplus-dem.c (libiberty_demanglers): Add initializer for new-ABI - demangler. - (cplus_demangle): Call cplus_demangle_new_abi if in new-ABI - demangling mode. - (gnu_new_abi_symbol_characters): New function. - (main): Use gnu_new_abi_symbol_characters. * cp-demangle.c: New - file. - * cp-demangle.c: New file. - -Tue May 30 16:45:25 2000 Andrew Cagney - - * floatformat.c: Add name to each floatformat field. - -Tue May 30 15:07:52 2000 Jeffrey A Law (law@cygnus.com) - - * Makefile.in (objalloc.o): Depend on config.h - -2000-05-29 Zack Weinberg - - * hashtab.c, partition.c, sort.c, xmemdup.c: Include string.h - if HAVE_STRING_H. - * pexecute.c, xexit.c: Include stdlib.h if HAVE_STDLIB_H. - * objalloc.c: Include config.h. Include stdlib.h and don't - declare malloc or free if HAVE_STDLIB_H. - * strerror.c, strsignal.c: Include stdlib.h if HAVE_STDLIB_H, - else declare malloc without prototype. Include string.h if - HAVE_STRING_H, else declare memset without prototype. Don't - include stddef.h. - -2000-05-23 Mike Stump - - * Makefile.in (xmalloc.o): Add dependency for config.h, fixes make - -j3. - -2000-05-18 J. David Anglin - - * xmalloc.c: Include config.h for HAVE_SBRK definition. - -2000-05-16 Horst von Brand - - * hashtab.c (hash_pointer): Delete low-order bits which are - probably zero, also eliminate a warning on alpha. - -2000-05-15 David Edelsohn - - * Makefile.in: Change "pic" to depend on $(PICFLAG), not - on $(enable_shared). - -2000-05-10 Jakub Jelinek - - * config.table: Use mh-sparcpic for sparc*-*-*. - -2000-05-08 Nick Clifton - - * Makefile.in (CFILES): Add strncmp.c. - (NEEDED): Add strncmp. - -2000-05-04 Kaveh R. Ghazi - - * cplus-dem.c (cplus_demangle_opname, demangle_function_name): - Cast the arguments to `islower' to `unsigned char'. - (print_demangler_list): Prototype. - -Thu May 4 17:14:41 2000 Philippe De Muyter - - * sort.c (UCHAR_MAX): Provide fallback definition. - -2000-04-29 Alexandre Oliva - - * Makefile.in (maintainer-clean-subdir): Fix handling of empty - SUBDIRS. - -2000-04-28 Kenneth Block - Jason Merrill - - * cplus-dem.c (libiberty_demanglers): New table for demangle styles. - (cplus_demangle_set_style): New function for setting style. - (cplus_demangle_name_to_style): New function to translate name. - -2000-04-27 Kaveh R. Ghazi - - * aclocal.m4: New file with new test libiberty_AC_FUNC_STRNCMP. - - * configure.in (AC_CHECK_HEADERS): Add sys/mman.h fcntl.h. - (libiberty_AC_FUNC_STRNCMP): Invoke. - - * strncmp.c: New file. - -Thu Apr 27 16:58:43 MET DST 2000 Jan Hubicka - - * hashtab.c (htab_expand): Add prototype. - (find_empty_slot_for_expand): Likewise. - -2000-04-24 Kaveh R. Ghazi - - * hashtab.c (hash_pointer, eq_pointer): Make definition static to - match prototype. - (htab_expand): Cast the return value of xcalloc. - -2000-04-24 Mark Mitchell - - * hashtab.c (hash_pointer): New function. - (eq_pointer): Likewise. - (htab_hash_pointer): New variable. - (htab_eq_pointer): Likewise. - -2000-04-23 Mark Mitchell - - * sort.c (sort_pointers): Fix endianness bugs. - - * sort.c: New file. - * Makefile.in (CFILES): Add sort.c - (REQUIRED_OFILES): Add sort.o. - (sort.o): New target. - -2000-04-21 Michael Sokolov - - * Makefile.in (*-subdir): Revamp slightly to avoid losing on - 4.3BSD systems. - -Tue Apr 18 16:23:31 2000 Richard Kenner - - * hashtab.c: Various minor cleanups. - (htab_find_slot_with_hash): INSERT is now enum insert_option. - (htab_find_slot): Likewise. - -2000-04-16 Dave Pitts - - * cplus-dem.c (cplus_demangle_opname): Changed to use islower. - -2000-04-05 Richard Henderson - - * splay-tree.c (splay_tree_remove): New. - -2000-03-30 Mark Mitchell - - * hashtab.c (find_empty_slot_for_expand): Use hashval_t for hash - codes. - (htab_find_with_hash): Likewise. - (htab_find_slot_with_hash): Likewise. - -2000-03-29 Zack Weinberg - - * hashtab.c (htab_find_with_hash): Avoid calculating hash2 - unless it will be used. Rearrange loop for better - optimization. - (higher_prime_number): Add static prototype. - -Thu Mar 16 01:33:58 2000 Jeffrey A Law (law@cygnus.com) - - * Makefile.in (partition.o): Depend on config.h - -2000-03-14 Bernd Schmidt - - * hashtab.c (find_empty_slot_for_expand): New function. - (htab_expand): Use it instead of htab_find_slot. - (htab_find_with_hash): Renamed from htab_find; now accepts extra - argument HASH. - (htab_find_slot_with_hash): Likewise for htab_find_slot. - (htab_find): New wrapper function. - (htab_find_slot): Likewise. - (htab_traverse): Pass slot, not entry, to called function. - -2000-03-09 Alex Samuel - - * Makefile.in (CFILES): Add partition.c. - (REQUIRED_OFILES): Add partition.o. - (partition.o): New rule. - * partition.c: New file. - -2000-03-09 Zack Weinberg - - * hashtab.c (htab_create): Set del_f. - (htab_delete, htab_empty, htab_remove_elt, htab_clear_slot): - Use it. - -2000-03-08 Zack Weinberg - - * hashtab.c: Remove debugging variables (all_searches, - all_collisions, all_expansions). Delete - all_hash_table_collisions. - (create_hash_table, delete_hash_table, empty_hash_table, - find_hash_table_entry, remove_element_from_hash_table_entry, - clear_hash_table_slot, traverse_hash_table, hash_table_size, - hash_table_elements_number, hash_table_collisions): Rename to: - htab_create, htab_delete, htab_empty, htab_find_slot, - htab_remove_elt, htab_clear_slot, htab_traverse, htab_size, - htab_elements, htab_collisions. - (htab_find): New function, handles common case where you don't - plan to add or delete an entry. - (htab_expand): Don't create a whole new table, just a new - entry vector. - (htab_find_slot): Simplify logic. - -1999-08-03 Ian Lance Taylor - - * floatformat.c: Add casts to avoid signed/unsigned warnings. - * pexecute.c: Add ATTRIBUTE_UNUSED as needed on Unix. - - * Makefile.in (install_to_libdir): Change $(TARGETLIB).n to - $(TARGETLIB)n so it works on MSDOS. - (install_to_tooldir): Likewise. - -1999-07-21 Ian Lance Taylor - - From Mark Elbrecht: - * makefile.dos: Remove; obsolete. - * configure.bat: Remove; obsolete. - -1999-07-11 Ian Lance Taylor - - * splay-tree.c (splay_tree_insert): Add initialization to avoid - warning. - -2000-01-04 Mumit Khan - - * pexecute.c: Conditionally include string.h. - (fix_argv): Handle embedded whitespace in args for Mingw32. - -2000-01-04 Kaveh R. Ghazi - - * configure.in (ac_libiberty_warn_cflags): Turn on warnings if - we're using gcc. - - * Makefile.in (COMPILE.c): Add @ac_libiberty_warn_cflags@ - -1999-12-27 Geoff Keating - - * vasprintf.c (int_vasprintf): Don't re-read the format character - as this mishandles strings like '%%s'. - -1999-12-05 Mark Mitchell - - * splay-tree.c (splay_tree_new): Use struct splay_tree_node_s - rather than struct splay_tree_node. - (splay_tree_insert): Use struct splay_tree_s rather than struct - splay_tree. - -Sun Nov 28 00:59:39 1999 Philippe De Muyter - - * hashtab.c (sys/types.h): File included. - -1999-11-22 Jason Merrill - - * strtoul.c, strtol.c, random.c: Remove advertising clause from - BSD license, pursuant with - - ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change - -Wed Nov 10 09:42:39 1999 Jeffrey A Law (law@cygnus.com) - - * hashtab.c: Include stdio.h. - -Mon Nov 8 09:23:41 1999 Jeffrey A Law (law@cygnus.com) - - * hashtab.c (traverse_hash_table): Protect prototype with PARAMS. - -Tue Nov 2 03:23:13 1999 Philippe De Muyter - - * xstrdup (sys/types.h): Include this file. - -1999-10-28 Nathan Sidwell - - * Makefile.in (SUBDIRS): New macro. - (mostlyclean, clean, distclean, maintainer-clean): Adjust to - avoid multiple subdirectory cleaning. - (*-subdir): Use SUBDIRS. - -1999-10-25 Jim Kingdon - - * cplus-dem.c: Move declarations of standard_symbol_characters and - hp_symbol_characters inside #ifdef MAIN to avoid compiler - warnings. - -1999-10-23 08:51 -0700 Zack Weinberg - - * hashtab.c (find_hash_table_entry): When returning a - DELETED_ENTRY slot, change it to EMPTY_ENTRY first. - (clear_hash_table_slot): New function which deletes an entry - by its position in the table, not its value. - (traverse_hash_table): New function which calls a hook - function for every live entry in the table. - -1999-10-19 Mark Mitchell - - * cplus-dem.c (INTBUF_SIZE): New macro. - (string_append_template_idx): New function. - (demangle_expression): Likewise. - (demangle_integral_value): Use it. - (demangle_real_value): New function, split out from ... - (demangle_template_value_parm): ... here. Use - string_append_template_idx. Use demangle_real_value. - (demangle_template): Use string_append_template_idx. - (demangle_qualified): Use consume_count_with_underscores. - (get_count): Tweak formatting. - (do_type): Use string_append_template_idx. - -1999-10-18 Kaveh R. Ghazi - - * calloc.c: Add a public domain notice. - -Mon Oct 18 02:30:47 1999 Philippe De Muyter - - * setenv.c (sys/types.h, stdio.h): Include those files unconditionaly. - -Fri Oct 15 01:47:51 1999 Vladimir Makarov - - * Makefile.in (CFILES): Add hashtab.c - (REQUIRED_OFILES): Add hashtab.o - (hashtab.o): Add dependencies. - * hashtab.c: New file - -Wed Oct 13 01:16:47 1999 Mumit Khan - - * basename.c (DIR_SEPARATOR): New macro. - (DIR_SEPARATOR_2): Likewise. - (HAVE_DOS_BASED_FILESYSTEM): Likewise. - (IS_DIR_SEPARATOR): Likewise. - (main): Handle MSDOS style pathname. - -1999-10-11 Mark Mitchell - - * cplus-dem.c (do_type): Handle pointer to member types whose - enclosing classes have namespace scope. - -Sun Oct 10 01:23:50 1999 Marc Espie - - * config.table: Provide a backup shell for executing move-if-change. - -1999-10-02 Mark Mitchell - - * xmalloc.c (xmalloc): Fix spelling error. - (xcalloc, xrealloc): Likewise. - -1999-10-02 Kaveh R. Ghazi - - * cplus-dem.c (fancy_abort, demangle_integral_value, - demangle_arm_hp_template, recursively_demangle, - standard_symbol_characters, hp_symbol_characters, main): Add prototype. - (program_name, program_version, fatal): Constify a char*. - (usage, fatal): Mark with ATTRIBUTE_NORETURN. - (main): Call return, not exit. - -1999-09-25 Kaveh R. Ghazi - - * choose-temp.c: Remove obsolete comment about gcc. - (make_temp_file): Constify a char*. - -Wed Sep 8 20:03:28 1999 Kaveh R. Ghazi - - * xmemdup.c: Include sys/types.h. - -1999-09-07 Jeff Garzik - - * xmemdup.c: New xmemdup function. - * Makefile.in, makefile.vms, vmsbuild.com: Use xmemdup.[co]. - -Tue Sep 7 23:32:18 1999 Linas Vepstas - - * config.table: Add openedition target. - * config/mh-openedition: New file. - -Thu Sep 2 01:36:12 1999 Marc Espie - - * pexecute.c (pexecute): Fill in temp_base when needed. - -1999-08-31 Richard Henderson - - * getpwd.c: Check HAVE_GETCWD before defining it away. - -1999-08-30 Kaveh R. Ghazi - - * Makefile.in (CFILES): Add calloc.c and getpwd.c. - (REQUIRED_OFILES): Add getpwd.o. - (getpwd.o): Add target. - - * configure.in (AC_PREREQ): Bump to 2.13. - (AC_CHECK_HEADERS): Add check for . - - * getpwd.c: New file, moved here from gcc. - -1999-08-25 Kaveh R. Ghazi - - * cplus-dem.c (gnu_special): Cast a `size_t' to `long' when - comparing against a signed quantity. - (arm_special): Likewise. - (demangle_fund_type): Likewise. - (do_hpacc_template_const_value): Mark parameter `work' with - ATTRIBUTE_UNUSED. - (main): Constify variable `valid_symbols'. - -Tue Aug 24 02:50:45 1999 Philippe De Muyter - - * strtoul.c (strtoul): Add parentheses around && within ||. - -Fri Aug 6 23:32:29 1999 Daniel Jacobowitz - - * Makefile.in (FLAGS_TO_PASS): Include prefix, exec_prefix, - libdir, libsubdir and tooldir. - -1999-08-01 Mark Mitchell - - * splay-tree.c (splay_tree_insert): Return the new node. - -1999-07-14 Richard Henderson - - * argv.c: Include stdlib.h and string.h instead of - prototyping directly. - * choose-temp.c: Conditionally include string.h. - -1999-07-12 Jason Merrill - - * Makefile.in (NEEDED): Add bcmp, bcopy, bzero. - -1999-07-11 Ian Lance Taylor - - * splay-tree.c (splay_tree_insert): Add initialization to avoid - warning. - -1999-07-07 Jason Merrill - - * Makefile.in (needed-list): Only include stuff we actually need - for libstdc++. - -1999-06-21 Andreas Schwab - - * configure.in (checkfuncs): Add gettimeofday. - * config.in, configure: Regenerated. - -Mon Jun 21 05:56:01 1999 Mumit Khan - - * configure.in (*-*-uwin*): UWIN has sys_{errlist,nerr} even if - the test fails. - * configure: Regenerate. - -1999-06-10 Mike Stump - - * Makefile.in (setenv.o): Add config.h dep for setenv.o to fix - parallel builds. - -1999-05-28 Kaveh R. Ghazi - - * putenv.c: Include ansidecl.h to define `const'. - * setenv.c: Likewise. - -Wed May 26 03:58:20 1999 "Melissa O'Neill" - - * Makefile.in (CFILES): Add putenv.c and setenv.c. - * configure.in (funcs): Add putenv and setenv. - (AC_CHECK_FUNCS): Check for putenv and setenv. - * configure: Rebuilt. - * putenv.c setenv.c: New files. - - * getcwd.c (getcwd): If pathname is NULL, then obtain SIZE - bytes of space using malloc. - -Mon May 17 01:42:34 1999 Stu Grossman - - * cplus-dem.c (demangle_fund_type (near 'I' case)): Don't advance - the *mangled pointer beyond the end of the string. Clean up code to - match prevailing coding style. - -1999-05-13 Michael Hayes - - * tmpnam.c (L_tmpnam): Fix typo. - -Thu May 13 01:14:46 1999 Marc Espie - - * cplus-dem.c (standard_symbol_characters): Renamed from - standard_symbol_alphabet. No longer modify TABLE. - (hp_symbol_characters): Renamed from hp_symbol_alphabet. No longer - modify TABLE. - (main): Corresponding changes. Use strchr to determine if a - character is valid. - -1999-05-11 Jim Blandy - - * cplus-dem.c (main): Use table lookup to distinguish identifier - characters from non-identifier characters. - (standard_symbol_alphabet, hp_symbol_alphabet): New functions. - -Thu May 6 20:34:42 1999 Fred Fish - - * configure.in (sys/resource.h): Add to AC_CHECK_HEADERS list. - * getruntime.c: Only attempt to include sys/resource.h and - use getrusage if both HAVE_GETRUSAGE and HAVE_SYS_RESOURCE_H - are defined. - -Mon Apr 26 01:36:06 1999 Donn Terry (donn@interix.com) - - * configure.in (alloca detection): Handle alloca directly for interix. - * configure: Rebuilt. - -Sun Apr 25 01:18:21 1999 Mumit Khan - - * choose-temp.c (DIR_SEPARATOR): Use '\\' only for native windows32. - -1999-04-20 Jim Blandy - - Fix from Dale Hawkins: - * cplus-dem.c (mop_up): Set typevec_size to zero, so it'll be - reallocated properly if we use it again. - - * cplus-dem.c (demangle_fund_type): Check for buffer overrun. Be - stricter about syntax. Always null-terminate string. - -Thu Apr 15 23:00:55 1999 Mumit Khan - - * configure.in (checkfuncs): Check for sbrk. - * config.in: Rebuilt. - * configure: Likewise. - * xmalloc.c: Use HAVE_SBRK instead of the host specific definitions. - -1999-04-12 Jim Blandy - - Fix from Marcus Daniels: - * cplus-dem.c (demangle_fund_type): Don't run off the end of the - identifier looking for another underscore. - -Sun Apr 11 23:20:59 1999 Mumit Khan - - * pexecute.c: Change all references to __UWIN__ to _UWIN. - * xmalloc.c: Likewise. - (xcalloc): UWIN has sbrk. - (xrealloc): Fix guard macro. - -1999-04-11 Richard Henderson - - * alloca-conf.h (alloca) [C_ALLOCA]: Don't use Gcc builtin - or . - * clock.c (GNU_HZ): New definition. - (clock): Use it. - * getruntime.c: Likewise. - - * config.table: Use mh-beos. - * config/mh-beos: New file. - -1999-04-11 Mark Mitchell - - * cplus-dem.c (demangle_template_value_parm): Handle - pointers-to-members. - (do_type): Handle template parameters as qualifiers. - -1999-04-01 Jim Blandy - - * cplus-dem.c: Attempt to handle overflows in counts with some - semblance of grace. - (consume_count): Detect overflows. Return -1 to indicate errors, - instead of zero. - (demangle_template_value_parm, demangle_template): Handle change - to consume_count's return convention. - -1999-04-05 Tom Tromey - - * testsuite/regress-demangle: New file. - * testsuite/demangle-expected: New file. - - * Makefile.in (all, check, installcheck, info, install-info, - clean-info, dvi, install, etags, tags, mostlyclean, clean, - distclean, maintainer-clean, realclean): Depend on corresponding - `-subdir' target. - (all-subdir check-subdir installcheck-subdir info-subdir - install-info-subdir clean-info-subdir dvi-subdir - install-info-subdir etags-subdir mostlyclean-subdir clean-subdir - distclean-subdir maintainer-clean-subdir): New target. - * testsuite/Makefile.in: New file. - * configure: Rebuilt. - * configure.in: Create testsuite/Makefile. - -1999-04-02 Mark Mitchell - - * splay-tree.h (splay_tree_compare_pointers): Define. - -1999-03-30 Mark Mitchell - - * splay-tree.c (splay_tree_compare_ints): Define. - -1999-03-30 Tom Tromey - - * cplus-dem.c (consume_count): If `count' wraps, return 0 and - don't advance input pointer. - (demangle_class_name): If consume_count didn't find a count, do - nothing. Don't bother with `strlen' sanity check; consume_count - does it for us. - -1999-03-16 Stan Shebs - - From Art Haas : - * cplus-dem.c (demangle_prefix): Don't grab all the '__' strings - when doing arm or hp style. - (demangle_nested_args): Decr forgetting_types field when done. - -Thu Mar 11 01:22:58 1999 Mumit Khan - - * pexecute.c (__CYGWIN32__): Rename to - (__CYGWIN__): this. - * xmalloc.c: Likewise. - - Changes to support i386-pc-uwin. - * configure.in (*-*-uwin*): Workaround for vfork bug. - * configure: Regenerate. - * pexecute.c (pexecute): Be like standard Unix. - (pwait): Likewise. - * xmalloc.c (first_break): Define. - (xmalloc_set_program_name): Use. - (xmalloc): Use. - -Thu Mar 11 01:07:55 1999 Franz Sirl - - * config.table: Cleanup and add mh-*pic handling for alpha, arm, powerpc - -Sun Feb 28 22:30:44 1999 Geoffrey Noer - - * config.table: Check cygwin*, not cygwin32*. - -Tue Feb 9 16:39:01 1999 Dave Brolley - - * Makefile.in: Change mkstemp -> mkstemps. - -Tue Feb 9 01:12:27 1999 Marc Espie - - * Makefile.in (REQUIRED_OFILES): remove mkstemp.o - * configure.in (funcs): Check for and conditionally add mkstemps to - the list of functions libiberty will provide. - * configure: Rebuilt. - -Wed Feb 3 00:01:15 1999 Mumit Khan - - * clock.c (HZ): Define in terms of (ISO C) CLOCKS_PER_SEC on - platforms that don't have HZ. - * getruntime.c (HZ): Likewise. - -Sat Jan 30 13:28:04 1999 Richard Henderson - - * Makefile.in (xstrdup.o): Depend on config.h. - -Wed Jan 13 07:26:44 1999 H.J. Lu (hjl@gnu.org) - - * cplus-dem.c (mop_up): Set work->previous_argument to NULL after - freeing it. - -Wed Jan 13 14:16:36 1999 Kaveh R. Ghazi - - * xstrdup.c (xstrdup): Switch from strcpy to memcpy for speed. - -Tue Jan 5 15:58:29 1999 Elena Zannoni - - * Makefile.in (CFILES): fix typo, splay-tree.c instead of - splay-tree.o. - -1999-01-04 Jason Molenda (jsm@bugshack.cygnus.com) - - * configure.in: Require autoconf 2.12.1 or higher. - -1998-12-30 Michael Meissner - - * random.c (NULL): Don't redefine NULL if it is already defined. - -Tue Dec 22 09:43:35 1998 Kaveh R. Ghazi - - * argv.c (buildargv): Cast the result of alloca in assignment. - - * choose-temp.c: Include stdlib.h. - - * cplus-dem.c (demangle_arm_pt): Remove unused prototype. - (snarf_numeric_literal): Constify first parameter. - (code_for_qualifier): Avoid a gcc extension, make the parameter an - int, not a char. - (demangle_qualifier): Likewise. - (demangle_signature): Cast the argument of a ctype function to - unsigned char. - (arm_pt): Add parens around assignment used as truth value. - (demangle_arm_hp_template): Constify variable `args'. - (do_hpacc_template_const_value): Cast the argument of a ctype - function to unsigned char. - (do_hpacc_template_literal): Remove unused variable `i'. - (snarf_numeric_literal): Constify parameter `args'. - Cast the argument of a ctype function to unsigned char. - - * floatformat.c (floatformat_to_double): Add explicit braces to - avoid ambiguous `else'. - - * fnmatch.c (fnmatch): Change type of variables `c', `c1', - `cstart' and `cend' to unsigned char. Cast the argument of macro - `FOLD', which uses ctype functions, to unsigned char. - - * objalloc.c (free): Add prototype. - -Sun Dec 20 16:03:46 1998 Hans-Peter Nilsson - - * Makefile.in (CFILES): Fix typo: splay-tree.c, not splay-tree.o - -Fri Dec 18 17:50:18 1998 David Taylor - - * cplus-dem.c (demangle_arm_pt): remove declaration -- function - doesn't exist. - (do_hpacc_template_literal): remove unused variable `i'. - -Fri Dec 18 16:11:43 EST 1998 Andrew MacLeod - - * cplus-dem.c (demangle_fund_type): Process CV and u codes before - bumping the pointer we read from. Also prepend these codes, - as we do in other places. - -1998-12-18 Nick Clifton - - * cplus-dem.c (demangle_arm_hp_template): Make variable 'args' be - 'const char *' in order to match its usage when calling siblings. - (snarf_numeric_literal): Make first arg 'const char **' in order - to match usage. - -Mon Dec 14 09:55:50 1998 Kaveh R. Ghazi - - * choose-temp.c: Don't check IN_GCC anymore. - - * floatformat.c (floatformat_from_double): Use `const', not `CONST'. - * memchr.c (memchr): Likewise. - * memcpy.c (memcpy): Likewise. - * memmove.c (memmove): Likewise. - - * mkstemp.c: Don't check IN_GCC anymore. - * pexecute.c: Likewise. - * splay-tree.c: Likewise. - - * strchr.c (strchr): Use `const', not `CONST'. - * strrchr.c (strrchr): Likewise. - * strtol.c (strtol): Likewise. - * strtoul.c (strtoul): Likewise. - -Fri Dec 4 13:51:04 1998 David Taylor - Elena Zannoni - Stan Shebs - Edith Epstein - Andres MacLeod - Satish Pai - - * HP aCC demangling support. - * cplus-dem.c - (main): Remove default to HP style demangling, set to EDG - demangling correctly when -edg specified; set the demangling style - when user specifies 'edg'. Set strip_underscore to - prepends_underscore, if not HPUXHPPA. Set - current_demangling_style to hp_demangling if HPUXHPPA. Set - current demangling style correctly if the switch is hp. Read - label correctly also in the HP style case. - (work_stuff): add temp_start field; add field for volatile member - function. - (arm_pt): handle ARM_DEMANGLING and EDG_DEMANGLING styles; HP - style for this case is the same as ARM. - (demangle_args): handle EDG_DEMANGLING style; support HP style. - (demangle_arm_hp_template): new function. (It was - demangle_arm_pt.); check and set value of temp_start field in - multiple places. Also, when ceching for end of template args, - check to see if at end of static member of template class. - (demangle_class): new local variable : save_class_name_end Don't - include template args in string defining class. - (demangle_class_name): use demangel_arm_hp_template. - (demangle_function_name): handle case where demangling style is - HP_DEMANGLING and currently point at an 'X' in the mangled name. - Handle EDG_DEMANGLING style. Handle constructor and destructor - ops for HP style. - (demangle_prefix): handle EDG_DEMANGLING and ARM_DEMANGLING - styles. global destructor and constructor for HP style are same - as for ARM style. Same for local variables. - (demangle_qualified): handle EDG_DEMANGLING style. - (demangle_signature): add case for volatile member function. For - cases '1' - '9' : initialize the temp_start field to -1 and handle - the EDG_DEMANGLING style. for case 'F' : handle EDG_DEMANGLING - and AUTO_DEMANGLING styles. If expecting a function and managed - to demangle the funct args, then handle the LUCID_DEMANGLING, - ARM_DEMANGLING, and EDG_DEMANGLING styles. Add case for local - class name after "Lnnn_ in HP style case. HP style too needs to - forget types. _nnn is OK for HP style, so don't report failure. - (do_hpacc_template_const_value): new function. Handle template's - value param for HP/aCC. - (do_hpacc_template_literal): new function. Handle a template's - literal parameter for HP aCC. - (recursively_demangle): new function - (snarf_numeric_literal): new function. - (usage): add 'edg' to the list of demangling styles; add hp switch - to message. - -Sat Nov 28 17:25:22 1998 Christopher Faylor - - * pexecute.c: Remove obsolete ifdefed cygwin code. - -Fri Nov 27 13:26:06 1998 Kaveh R. Ghazi - - * choose-temp.c: Always include libiberty.h. Avoid redundancies. - * cplus-dem.c: Likewise. Conform to libiberty.h. - * pexecute.c: Likewise. - * splay-tree.c: Likewise. - -1998-11-25 Mike Stump - - * Makefile.in (splay-tree.o): Add config.h dependency. - -Mon Nov 23 16:59:49 1998 Kaveh R. Ghazi - - * configure.in: Use AC_PREREQ(2.12.1). - -1998-11-16 Benjamin Kosnik - - * cplus-dem.c (demangle_fund_type): Add demangling for C9x types. - -Thu Nov 19 22:15:50 1998 Jeffrey A Law (law@cygnus.com) - - * mpw.c (mpw_access): Add missing parens. - -Thu Nov 19 12:59:21 1998 Kaveh R. Ghazi - - * configure.in: Call AC_HEADER_SYS_WAIT. - - * pexecute.c: Include sys/wait.h when !IN_GCC. - -Thu Nov 19 14:38:20 1998 Geoffrey Noer - - * pexecute.c: revert back to checking old Cygwin - preprocessor symbol until some time has passed. - -Wed Nov 18 08:52:26 1998 Christopher Faylor - - * pexecute.c: Reorganize WIN32 case to accomodate Cygwin - since it will now support similar constructs. - -Fri Nov 13 19:18:05 1998 Kaveh R. Ghazi - - * configure.in: Check for calloc. - - * calloc.c: New file. - - * xmalloc.c (xcalloc): New function. - -Fri Nov 13 08:51:46 EST 1998 Andrew MacLeod - - *cplus-dem.c (demangle_prefix): Use the last "__" - in the mangled name when looking for the signature. This allows - template names to begin with "__". - -1998-11-08 Mark Mitchell - - * cplus-dem.c (type_kind_t): Add tk_reference. - (demangle_template_value_parm): Handle it. - (do_type): Use it for references, instead of tk_pointer. - - * cplus-dem.c (demangle_template_value_parm): Use cplus_demangle, - not internal_cplus_demangle. - -Sat Nov 7 16:02:10 1998 Kaveh R. Ghazi - - * choose-temp.c: Don't include gansidecl.h. - * mkstemp.c: Likewise. - * pexecute.c: Likewise. - -Mon Nov 2 15:05:33 1998 Geoffrey Noer - - * configure.in: detect cygwin* instead of cygwin32* - * configure: regenerate - -Mon Nov 2 10:22:01 1998 Kaveh R. Ghazi - - * pexecute.c: Check HAVE_CONFIG_H, not IN_GCC, when determining - whether to include config.h. Possibly include unistd.h in the - !IN_GCC case. Define VFORK_STRING as a printable function call - for error messages (either "vfork" or "fork".) If HAVE_VFORK_H is - defined, include vfork.h. If VMS is defined, define vfork() - appropriately. Remove vfork check on USG, we're using autoconf. - (pexecute): Set `errmsg_fmt' to VFORK_STRING instead of checking - locally what string to use. - -1998-10-26 Mark Mitchell - - * splay-tree.c: Tweak include directives to make sure declarations of - xmalloc and free are available. - -1998-10-25 Mark Mitchell - - * cplus-dem.c (gnu_special): Fix handling of virtual tables in - anonymous namespaces. - -1998-10-23 Mark Mitchell - - * cplus-dem.c (work_stuff): Replace const_type and volatile_type - with type_quals. - (TYPE_UNQUALIFIED): New macro. - (TYPE_QUAL_CONST): Likewise. - (TYPE_QUAL_VOLATILE): Likewise. - (TYPE_QUAL_RESTRICT): Likewise. - (code_for_qualifier): New function. - (qualifier_string): Likewise. - (demangle_qualifier): Likewise. - (internal_cplus_demangle): Use them. - (demangle_signature): Likewise. - (demangle_template_value_parm): Likewise. - (do_type): Likewise. - (demangle_fund_type)): Likewise. - -Thu Oct 22 19:58:43 1998 Kaveh R. Ghazi - - * splay-tree.c (splay_tree_foreach_helper): Make definition static - to match prototype. - -1998-10-21 Mark Mitchell - - * splay-tree.c: New file. - * Makefile.in (CFILES): Add it. - (REQUIRED_OFILES): Likewise. - (splay-tree.o): Add dependencies. - -Tue Oct 20 12:29:02 1998 Andreas Schwab - - * cplus-dem.c (demangle_qualified): Fix off-by-one when checking - range of 'K' index. - -Thu Oct 15 18:51:12 1998 Kaveh R. Ghazi - - * choose-temp.c: Prototype mkstemps() when IN_GCC. - - * cplus-dem.c (consume_count): Cast argument of ctype macro to - `unsigned char'. - (cplus_demangle_opname): Cast the result of `strlen' to (int) when - comparing against one. - (cplus_mangle_opname): Likewise. - (demangle_integral_value): Cast argument of ctype macro to - `unsigned char'. - (demangle_template_value_parm): Likewise. - (demangle_template): Initialize variable `bindex'. Cast the - result of `strlen' to (int) when comparing against one. Remove - unused variable `start_of_value_parm'. - (demangle_class_name): Cast the result of `strlen' to (int) when - comparing against one. - (demangle_prefix): Cast argument of ctype macro to `unsigned char'. - (gnu_special): Likewise. Cast the result of `strlen' to (int) - when comparing against one. - (demangle_qualified): Cast argument of ctype macro to `unsigned char'. - (get_count): Likewise. - (do_type): Likewise. Cast the result of `strlen' to (int) when - comparing against one. - (demangle_fund_type): Cast argument of ctype macro to `unsigned char'. - (demangle_function_name): Cast the result of `strlen' to (int) - when comparing against one. - - * mkstemp.c (mkstemps): Cast variable `len' to (int) when - comparing against one. - -Tue Oct 13 23:51:51 1998 Jeffrey A Law (law@cygnus.com) - - * mkstemp.c: Check HAVE_SYS_TIME_H before including sys/time.h - * configure.in (AC_CHECK_HEADERS): Check for sys/time.h too. - * config.in, configure: Rebuilt. - - * getopt.c: Check HAVE_STRINGS_H before including strings.h. - * configure.in (AC_CHECK_HEADERS): Check for strings.h too. - * config.in, configure: Rebuilt. - -Mon Oct 12 19:15:59 1998 Geoffrey Noer - - * configure.in: in comment, call AC_EXEEXT instead of AM_EXEEXT - -Sun Oct 11 17:36:06 1998 Michael Tiemann - - * Makefile.in (cplus-dem.o, obstack.o): Depend upon config.h. - -Thu Oct 8 23:42:08 1998 Jeffrey A Law (law@cygnus.com) - - * Merge egcs & devo libiberty. - -1998-09-08 Martin von Löwis - - * cplus-dem.c (demangle_arm_pt): Demangle anonymous namespaces. - -Mon Sep 7 23:29:01 1998 Kaveh R. Ghazi - - * mkstemp.c: Include config.h even when not IN_GCC. Wrap header - inclusions inside HAVE_*_H macros. Include ansidecl.h when not - IN_GCC. - - * vasprintf.c: Include stdarg.h/varargs.h first. - - * vprintf.c: Likewise. - -Sat Sep 5 03:24:49 1998 Jeffrey A Law (law@cygnus.com) - - * pexecute.c: Updates from gcc. Copy in gcc has been removed. This - is the canonical copy. Define ISSPACE if !IN_GCC. - * alloca.c, vfprintf.c, choose-temp.c, mkstemp.c, getopt.c: Similarly. - * getopt1.c, obstack.c: Similarly. - * Makefile.in: Build mkstemp.o - -Tue Sep 1 23:12:47 1998 Christopher Faylor - - * configure.in: Include asprintf in list of functions known not - to be in newlib. - * configure: Rebuild. - -Wed Aug 19 14:05:01 1998 Mumit Khan - - * cplus-dem.c (work_stuff): Add dllimported. - (demangled_prefix): Mark symbols imported from PE DLL. - (internal_cplus_demangled): Handle. - -1998-08-17 Jason Merrill - - * cplus-dem.c (do_type): Fix simple array handling. If we fail, - stay failed. - -Mon Aug 17 10:40:34 1998 Kaveh R. Ghazi - - * cplus-dem.c: Include config.h if it exists. Also, only - prototype malloc/realloc if we can't get stdlib.h. - -Sat Aug 15 16:15:01 1998 Ian Lance Taylor - - * configure.in: Switch back to checking --with-target-subdir when - deciding whether to check for newlib, undoing part of July 15 - change. - * configure: Rebuild. - -Thu Aug 13 16:47:38 1998 Mark Mitchell - - * cplus-dem.c (type_kind_t): New type. - (demangle_template_value_parm): Add type_kind_t parameter. Rely - on this paramter, rather than demangling the type again. - (demangle_integral_value): Pass tk_integral. - (demangle_template_: Pass the value returned from do_type. - (do_type): Return a type_kind_t. Pass tk_integral to - demangle_template_value_parm for array bounds. - (demangle_fund_type): Likewise. - - Also incorporate from GCC version: - - Tue Jul 21 13:28:19 1998 Jason Merrill - - * cplus-dem.c (do_type): Use demangle_template_value_parm for arrays. - -Thu Aug 13 16:47:38 1998 Kaveh R. Ghazi - - * cplus-dem.c (demangle_nested_args): Make function definition - static to match the prototype. - -Tue Jul 28 11:33:09 1998 Mark Mitchell - - * cplus-dem.c (type_kind_t): New type. - (demangle_template_value_parm): Add type_kind_t parameter. Rely - on this paramter, rather than demangling the type again. - (demangle_integral_value): Pass tk_integral. - (demangle_template_: Pass the value returned from do_type. - (do_type): Return a type_kind_t. Pass tk_integral to - demangle_template_value_parm for array bounds. - (demangle_fund_type): Likewise. - - Also incorporate from GCC version: - - Tue Jul 21 13:28:19 1998 Jason Merrill - - * cplus-dem.c (do_type): Use demangle_template_value_parm for arrays. - -Mon Jul 27 12:16:08 1998 Ian Lance Taylor - - * Makefile.in (ALLOCA): New variable. - ($(TARGETLIB)): Add $(ALLOCA) to library. - (needed-list): Add $(ALLOCA). - ($(ALLOCA)): Depend upon stamp-picdir. - -Sun Jul 19 08:23:17 1998 Kaveh R. Ghazi - - * cplus-dem.c (demangle_nested_args): Make function definition - static to match the prototype. - -Wed Jul 15 00:12:58 1998 Ian Lance Taylor - - * configure.in: Check --with-cross-host rather than - --with-target-subdir when deciding whether build uses a cross - compiler, and when deciding where to install the library. - * configure: Rebuild. - -Sun Jul 12 01:27:05 1998 Jason Merrill - - * cplus-dem.c (demangle_nested_args): Return a value. - -Sat Jul 11 16:19:48 1998 Mark Mitchell - - * cplus-dem.c (string): Move definition before work_stuff. - (work_stuff): Add volatile_type, forgetting_types, - previous_argument, and nrepeats fields. - (SCOPE_STRING): New macro. - (demangle_template): Add `remember' parameter. Add comment. - Register the `B' code type here, if remembering. Tidy. Fix crash - on NULL tmpl_argvec. Be consistent with use of tname/trawname. - (demangle_nested_args): New function. - (internal_cplus_demangle): Handle volatile-qualified member - functions. - (mop_up): Delete the previous_argument string if present. - (demangle_signature): Tidy. Handle volatile-qualified member - functions. Handle back-references using the `B' code. Use extra - parameter to demangle_template and SCOPE_STRING where appropriate. - (demangle_template_value_parm): Fix thinko; 'B' is not an integral - code. - (demangle_class): Use SCOPE_STRING. - (gnu_special): Pass additional argument to demangle_template. - Use SCOPE_STRING. - (demangle_qualified): Save qualified types for later - back-references. Handle constructors and destructors for template - types correctly. - (do_type): Tidy. Use SCOPE_STRING. Pass extra argument to - demangle_template. Use demangled_nested_args. Don't remember - qualified types here; that's now done in demangle_qualified. - Similarly for templates. - (do_arg): Improve commment. Handle 'n' repeat code. - (remember_type): Check forgetting_types. - (demangle_args): Deal with 'n' repeat codes. Tidy. - -Thu Jul 2 16:26:24 1998 Ian Lance Taylor - - * config.table: Only use mh-fbsd21 on *-*-freebsd2.2.[012], not on - *-*-freebsd2.2.*. From Dmitrij Tejblum . - -Mon Jun 15 16:29:01 1998 Ian Lance Taylor - - * configure.in (setobjs): Correct quoting error in cygwin32 case. - From Chris Faylor . - -Mon Jun 1 13:47:55 1998 Jason Molenda (crash@bugshack.cygnus.com) - - * obstack.c: Update to latest FSF version. - -Mon Jun 1 14:17:36 1998 Mike Stump - - * Makefile.in: Add a dependency on stamp-picdir for the - objects, so that we can do a parallel build. - -Sat May 30 22:17:13 1998 Mumit Khan - - * configure.in (checkfuncs): Add missing "'". - -Fri May 29 12:40:41 1998 Jason Molenda (crash@bugshack.cygnus.com) - - * obstack.c (_obstack_memory_used): Elide this function if we're - on a system with GNU libc. - -Tue May 26 18:28:43 1998 Ian Lance Taylor - - * Makefile.in (distclean): Remove config.log. - -Tue May 26 15:01:52 1998 Andreas Schwab - - * Makefile.in (distclean): Don't remove alloca-conf.h. - -Fri May 22 01:38:07 1998 Hans-Peter Nilsson - - * cplus-dem.c (MBUF_SIZE): Bumped from 512 to 32767. - -1998-05-21 Mark Mitchell - - * cplus-dem.c (do_type): Handle volatile qualification. - -1998-05-21 Manfred Hollstein - - * configure.in: Check for unistd.h as well. - * configure: Rebuild. - * config.in: Rebuild. - * getpagesize.c (GNU_OUR_PAGESIZE): Use sysconf only if _SC_PAGESIZE - is defined in unistd.h. Reformat conditional block for easier reading. - - * config.table (shared): Default to no if ${enable_shared} - is unset or empty; this logic is used by the toplevel - configure scripts, too. - -Sat May 16 14:01:26 1998 Jeffrey A Law (law@cygnus.com) - - * config.table: Add line to set enable_shared in the Makefile - as needed. - -Wed May 13 14:24:38 1998 Kaveh R. Ghazi - - * cplus-dem.c (squangle_mop_up): Change return type to void. - (internal_cplus_demangle): Remove unused parameter `options'. - All callers changed. - (cplus_demangle_opname): Remove function wide variable `int i' and - replace with `size_t i' at each location where it is used. - (cplus_mangle_opname): change type of `i' from int to size_t. - -Wed May 13 13:39:38 1998 Ian Lance Taylor - - * alloca-conf.h: Include config.h. Check HAVE_ALLOCA_H rather - than sparc or sun. - * Makefile.in (argv.o): Depend upon config.h and alloca-conf.h. - -Fri May 8 00:23:51 1998 Ian Lance Taylor - - * configure.in: Set libiberty_topdir correctly when srcdir is - "." and with_target_subdir is not set. - * configure: Rebuild. - -Thu May 7 13:01:44 1998 Ian Lance Taylor - - * configure.in: Add *-*-mingw32* case. - * configure: Rebuild. - -Wed May 6 11:33:51 1998 Ian Lance Taylor - - * config.table: Never use a PIC file for *-*-cygwin32*. - - * Makefile.in (config.status): Depend upon config.table. - - * configure.in: On a cygwin32 host, always compile random, and - don't test for sys_siglist, strsignal, or psignal. - * configure: Rebuild. - - * clock.c: Check HAVE_SYS_PARAM_H rather than NO_SYS_PARAM_H. - * getcwd.c: Likewise. - * getpagesize.c: Likewise. - * getruntime.c: Likewise. - -Tue May 5 18:08:32 1998 Ian Lance Taylor - - Use autoconf tests rather than the old dummy.c test: - * configure.in: Add AC_ARG_WITH calls for --with-target-subdir and - --with-newlib. Add AC_CONFIG_HEADER. Use AC_REPLACE_FUNCS for - most functions. Add special cases to handle newlib and VxWorks. - Remove target_makefile_frag. Create stamp-h in AC_OUTPUT if - CONFIG_HEADERS is set. Only call config-ml.in in AC_OUTPUT if - CONFIG_FILES is set; set ac_file before calling it. - * config.table (arm-*-riscix*, *-*-cygwin32): Remove. - (*-*-hpux*, *-*-hiux*, *-*-irix4*, *-*-solaris2*): Remove. - (*-*-sysv4*, *-*-go32, *-*-vxworks5*, *-*-vxworks): Remove - (i[3456]-*-mingw32*): Remove. - * Makefile.in (ERRORS_CC, CONFIG_H, NEEDED_LIST): Remove. - (LIBOBJS): New variable. - (HOST_OFILES, DO_ALSO, STAGESTUFF): Remove. - (all): Depend upon needed-list. Don't check RULE1. - (@target_makefile_frag@): Remove. - (COMPILE.c): Include @DEFS@. - (HFILES): Add alloca-conf.h. - (REQUIRED_OFILES): Remove basename.o. - ($(TARGETLIB)): New target. - (stamp-needed, lneeded-list, needed.awk, stamp-config): Remove. - (lconfig.h, needed2.awk, dummy.o, errors): Remove. - (needed-list, config.h): Rewrite. - (RULE1, $(RULE1), RULE2, $(RULE2)): Remove. - (.always.): Remove. - (Makefile): Set CONFIG_FILES and CONFIG_HEADERS. - (stamp-h): New target. - (atexit.o, clock.o, getcwd.o, getpagesize.o): New targets. - (basename.o): Don't depend upon config.h. - (getruntime.o): Depend upon config.h. - * atexit.c: Include config.h. Check HAVE_ON_EXIT rather than - NEED_on_exit. - * basename.c: Don't include config.h. Don't check NEED_basename. - * clock.c: Include config.h. - * getcwd.c: Likewise. - * getpagesize.c: Likewise. - * getruntime.c: Likewise. Fix checks which set HAVE_GETRUSAGE and - HAVE_TIMES. - * strerror.c: Change uses of NEED_sys_errlist to - HAVE_SYS_ERRLIST. Likewise for NEED_strerror and HAVE_STRERROR. - * strsignal.c: Likewise for NEED_sys_siglist and HAVE_SYS_SIGLIST, - and for NEED_strsignal and HAVE_STRSIGNAL and for NEED_psignal and - HAVE_PSIGNAL. - * acconfig.h: New file. - * dummy.c: Remove. - * functions.def: Remove. - * config/mh-cxux7 (HDEFINES): Remove -DHAVE_SYSCONF. - * config/mh-windows (HDEFINES): Remove. - * config/mh-cygwin32: Remove. - * config/mh-go32: Remove. - * config/mh-irix4: Remove. - * config/mh-riscix: Remove. - * config/mh-sysv4: Remove. - * config/mt-mingw32: Remove. - * config/mt-vxworks5: Remove. - * config.in: New file, generated using autoheader. - * configure: Rebuild. - -Mon May 4 13:00:28 1998 Ian Lance Taylor - - * configure.in: Rewrite to use autoconf. - * configure: Generate using autoconf. - * config/mh-a68bsd: Remove. - * config/mh-apollo68: Remove. - * config/mh-hpbsd: Remove. - * config/mh-ncr3000: Remove. - * config/mh-sysv: Remove. - * config/mh-aix (RANLIB, INSTALL): Don't define. - * config/mh-cxux7 (RANLIB, INSTALL): Don't define. - * config/mh-irix4 (CC, RANLIB, INSTALL): Don't define. - * config/mh-sysv4 (RANLIB, INSTALL): Don't define. - * config.table: Change config_shell to CONFIG_SHELL, and use - libiberty_topdir to find move-if-change. - (m68k-apollo-bsd*, m68k-apollo-sysv*): Remove. - (i[3456]86-ncr-sysv4*, *-*-dgux*, hppa*-hp-bsd*): Remove. - (*-*-irix*, *-*-m88kbcs*, *-*-sysv*): Remove. - * Makefile.in (srcdir): Set to @srcdir@. - (VPATH): Likewise. - (prefix, exec_prefix, bindir, libdir): Set to autoconf variables. - (SHELL, INSTALL, INSTALL_PROGRAM, INSTALL_DATA): Likewise. - (CC, CFLAGS, RANLIB)): Likewise. - (datadir, man*dir, infodir, includedir, MAKEINFO): Remove. - (target_makefile_frag, host_makefile_frag): Add substitutions. - (INSTALL_DEST): Set to @INSTALL_DEST@. - (Makefile): Depend upon config.status. Don't depend upon - $(host_makefile_frag) or $(target_makefile_frag). - (config.status): New target. - -Sun May 3 17:58:49 1998 Ian Lance Taylor - - * config/mt-sunos4: Remove. Should be handled by --with-headers - and --with-libraries options at top level. - * config.table: Never use mt-sunos4. - - * alloca-conf.h: New file, combining alloca-norm.h and - alloca-botch.h. - * alloca-norm.h: Remove. - * alloca-botch.h: Remove. - * configure.in: Set shell variables files and links to empty. - * config.table: Don't set shell variable files. - * configure.bat: Don't create alloca-conf.h. - * makefile.vms: Likewise. - * mpw-config.in: Likewise. - * vmsbuild.com: Likewise. - -Fri May 1 11:41:42 1998 Ian Lance Taylor - - * Makefile.in ($(HOST_OFILES) $(REQUIRED_OFILES)): Remove old - target depending upon config.h. - (alloca.o): Add target depending upon config.h - (basename.o, choose-temp.o, fnmatch.o): Likewise. - (getopt.o, getopt1.o, pexecute.o, strerror.o): Likewise. - (strsignal.o, xstrerror.o): Likewise. - -Fri May 1 04:26:25 1998 Peter Schauer - - * cplus-dem.c (cplus_demangle_opname): Initialize work. - -Mon Apr 27 15:53:30 EDT 1998 Andrew MacLeod - - * cplus-dem.c (demangle_qualified): Replace missing else. - -Sun Apr 26 15:38:50 1998 Andreas Schwab - - * cplus-dem.c (gnu_special): Fix off-by-one bug when checking the - length in the name of a virtual table. - -Wed Apr 22 10:53:49 EDT 1998 Andrew MacLeod - - * cplus-dem.c (struct work stuff): Add field for B and K mangle codes. - (cplus_demangle_opname): Call mop_up_squangle. - (cplus_demangle): Initialize squangle info, then call - internal_cplus_demangle. (Most code moved there as well) - (internal_cplus_demangle): New function, performs most of what use - to be done in cplus_demangle, but is only called with this file. - (squangle_mop_up): New function to clean up B and K code data. - (mop_up): set pointers to NULL after freeing. - (demangle_signature, demangle_template, demangle_class): Add - switch elements to handle K and B codes. - (demangle_prefix, gnu_special, demangle_qualified): Add - code to handle K and B codes. - (do_type, demangle_fund_type): Handle B and K codes. - (remember_Ktype): New function to store K info. - (register_Btype, remember_Btype): New functions for B codes. - (forget_B_and_K_types): New function to destroy B and K info. - -Fri Apr 10 01:49:10 1998 Jeffrey A Law (law@cygnus.com) - - * COPYING.LIB, choose-temp.c, cplus-dem.c: Sync with egcs & gcc. - -Thu Mar 5 09:23:28 1998 Manfred Hollstein - - * config.table: Make locating frag files failsafe even for the - special case if configuring and building in srcdir. - -Mon Feb 23 14:33:15 1998 Ian Lance Taylor - - * choose-temp.c: Fix handling of sys/file.h to work in libiberty. - -Sun Feb 22 18:03:23 1998 Jeffrey A Law (law@cygnus.com) - - * choose-temp.c: Sync with copy in gcc. - -Thu Feb 12 16:29:49 1998 Ian Lance Taylor - - * getopt.c: Update to latest FSF version. - * getopt1.c: Likewise. - -Tue Feb 10 16:58:33 1998 Stan Shebs - - * cplus-dem.c (gnu_special): Don't get confused by . - strings that are not actually lengths. - -Fri Feb 6 01:35:17 1998 Manfred Hollstein - - * Makefile.in (FLAGS_TO_PASS): Don't pass PICFLAG. - (.c.o): Check value of enable_shared, not PICFLAG. - (stamp-picdir): Dito. - -Thu Feb 5 18:48:56 1998 Geoffrey Noer - - * config/mh-cygwin32: remove vasprintf.o from EXTRA_OFILES - since it gets built automatically - -Sun Feb 1 02:52:32 1998 Mike Stump - - * config.table (vxworks configs): Default to VxWorks 5.x, as that is - the currently shipping OS. - -Tue Jan 27 16:08:20 1998 Pat Rankin - - * vmsbuild.com [REQUIRE_OFILES]: Synchronized with Makefile.in: - Add fnmatch.o and objalloc.o; remove vasprintf.o. - [config.h]: Define NEED_strsignal. - -Mon Jan 19 12:20:01 1998 Ian Lance Taylor - - * functions.def: Correct argument types for strerror and - strsignal. Reported by Alex Gutman . - -Sun Jan 18 15:57:28 1998 Michael Snyder - - * vasprintf.c (int_vasprintf): Increase buffer size for float/double - values. - -Sat Jan 17 22:28:38 1998 Mumit Khan - J.J. VanderHeijden - - Add mingw32 support. - * pexecute.c (pexecute): New function for mingw32. Supports pipes. - (pwait): New function for mingw32. - - * config.table (i[3456]86-*-mingw32*): Support for i386-mingw32. - * config/mt-mingw32: New file. - * xmalloc.c (first_break): Not used for mingw32. - (xmalloc_set_program_name): Don't use sbrk on mingw32. - (xmalloc): Likewise. - (xrealloc): Likewise. - -Sat Jan 17 22:28:05 1998 Jeffrey A Law (law@cygnus.com) - - * choose-temp.c: Sync with gcc version. - -Tue Jan 13 18:34:39 1998 Jim Wilson - - * Makefile.in (install_to_libdir, install_to_tooldir): Add MULTISUBDIR - to all filenames in libdir and tooldir. - (distclean): Do MULTICLEAN before deleting Makefile. - (stamp-needed, stamp-config): Add MULTISRCTOP to - pathname for move-if-change. - -Thu Dec 4 17:25:19 1997 Jeffrey A Law (law@cygnus.com) - - * strsignal.c (sys_nsig): Try NSIG and _NSIG. - -Wed Nov 19 13:37:06 1997 Michael Meissner - - * alloca-norm.h (alloca, GCC case): Don't redefine alloca if it - was already defined previously. - -Mon Nov 10 12:48:03 1997 Philippe De Muyter - - * Makefile.in (INSTALL): Use ../install-sh, not install. - -Tue Oct 28 23:41:15 1997 Judy Goldberg - - * Makefile.in (CFILES): Add pexecute.c. - -Wed Oct 15 19:13:48 1997 Ian Lance Taylor - - * asprintf.c: Consistently use either stdarg or varargs. - -Tue Oct 14 12:01:00 1997 Mark Mitchell - - * cplus-dem.c (demangle_signature): Don't look for return types on - constructors. Handle member template constructors. - -Fri Oct 3 17:53:30 1997 Ian Lance Taylor - - * README: Fix configuration instructions. - -Mon Sep 29 12:28:41 1997 Ian Lance Taylor - - * pexecute.c: Update to current version from /gd/gnu/lib: - - Mon Sep 29 12:27:59 1997 Ian Lance Taylor - - * pexecute.c: Use spawn if __CYGWIN32__. - - 1997-08-08 Paul Eggert - - * pexecute.c: Include "config.h" first, as per autoconf manual. - - Fri Jun 27 15:20:29 1997 Scott Christley - - * pexecute.c (fix_argv): New function. - (pexecute): Win32 but not Cygwin32 needs its arguments fixed. - Add underscore to cwait function call. - -Sun Sep 28 12:00:52 1997 Mark Mitchell - - * cplus-dem.c (demangle_template): Add new parameter. Handle new - template-function mangling. - (consume_count_with_underscores): New function. - (demangle_signature): Handle new name-mangling scheme. - -Wed Sep 24 00:31:59 1997 Felix Lee - - * asprintf.c: stdarg.h when ALMOST_STDC - * config/mh-windows (EXTRA_OFILES): add asprintf.o and - strncasecmp.o. - -Thu Aug 28 14:27:15 1997 Andrew Cagney - - * vasprintf.c (vasprintf): Allow for _BSD_VA_LIST_. - - * config.table: Add case for FreeBSD 2.1 and 2.2, needs mh-fbsd21. - - * config/mh-fbsd21 (EXTRA_OFILES): Force vasprintf.o - -Wed Sep 10 12:43:10 1997 Jason Merrill - - * cplus-dem.c (demangle_fund_type): Change "complex" to "__complex". - -Fri Sep 5 16:34:42 1997 Andrew Cagney - - * asprintf.c (asprintf): New file. - * Makefile.in (CFILES): Add asprintf.c - * functions.def: Ditto. - -Thu Aug 28 18:53:34 1997 Andrew Cagney - - * argv.c (dupargv): New function, duplicate an argument vector. - -Tue Aug 19 20:28:45 1997 Geoffrey Noer - - * config/mh-cygwin32: also build random.o - -Tue Aug 19 17:10:56 1997 Jason Merrill - - * cplus-dem.c: Add 'extern' to prepends_underscore. - -Wed Jul 30 11:42:19 1997 Per Bothner - - * cplus-dem.c: Various changes to produce Java output when passed - DMGL_JAVA. Thus "::" becomes "." and "JArray" becomes "Foo[]". - (main): Support --java and -j flags to set DMGL_JAVA. - -Tue Jul 22 19:05:23 1997 Robert Hoehne - - * config/mh-go32 (CC, AR, RANLIB): Don't define. - -Tue Jul 22 17:49:54 1997 Ian Lance Taylor - - * Makefile.in (REQUIRED_OFILES): Add pexecute.o. - (pexecute.o): New target. - - * Makefile.in (stamp-needed): New target, replacing needed-list. - (needed-list): Just depend upon stamp-needed. - (stamp-config): New target, replacing config.h. - (config.h): Just depend upon stamp-config. - (mostlyclean): Remove stamp-*. - -Thu Jun 12 11:00:18 1997 Angela Marie Thomas (angela@cygnus.com) - - * Makefile.in (FLAGS_TO_PASS): pass INSTALL, INSTALL_PROGRAM and - INSTALL_DATA for multilibbed installs - -Tue Jun 3 13:21:05 1997 Doug Evans - - Tue Dec 10 09:44:57 1996 Paul Eggert - - * choose-temp.c (choose_temp_base): Don't dump core if TMPDIR is empty. - - * choose-temp.c (try): Insist that temp dir be searchable. - - Wed Oct 23 17:36:39 1996 Doug Rupp (rupp@gnat.com) - - * choose-temp.c (choose_temp_base): On VMS, use proper syntax - for current directory. - - Sat Feb 15 19:03:48 1997 Geoffrey Noer (noer@cygnus.com) - - * pexecute.c: Remove special cases for cygwin32. - (pwait): Remove local definition of `pid'. - - Tue Nov 12 18:26:15 1996 Doug Rupp (rupp@gnat.com) - - * pexecute.c (vfork): Supply new definition for VMS. - (pwait): Use waitpid instead of wait for VMS. - -Tue May 20 14:02:20 1997 Brendan Kehoe - - * cplus-dem.c (do_type): Handle `J'. - (demangle_fund_type): Print "complex" for it. - -Wed Apr 30 12:15:45 1997 Jason Merrill - - * configure.in: Don't turn on multilib here. - -Mon Apr 28 19:04:31 1997 Michael Snyder - - * obstack.c: move _obstack_memory_used outside of ifdef. Cannot be - elided; needed by gdb and not present in libc. - -Thu Apr 24 19:33:47 1997 Ian Lance Taylor - - * Makefile.in (clean): Remove tmpmulti.out. - -Tue Apr 22 10:25:15 1997 Fred Fish - - * floatformat.c (floatformat_ieee_double_littlebyte_bigword): - Add new floatformat, mainly for ARM doubles. - -Mon Apr 14 12:11:16 1997 Ian Lance Taylor - - * config.table: Use ${config_shell} with ${moveifchange}. From - Thomas Graichen . - -Fri Apr 4 03:09:24 1997 Ulrich Drepper - - * configure.in: Enable multilibing by default. - Update multilib template to read config-ml.in. - -Tue Apr 1 16:26:39 1997 Klaus Kaempf - - * makefile.vms: Add objalloc. - -Mon Mar 31 23:57:51 1997 H.J. Lu - - * cplus-dem.c (demangle_it): Add prototype declaration. - (usage, fatal): Likewise. - - * xexit.c (_xexit_cleanup): Add prototype. - - * strerror.c (init_error_tables): Declare. - -Fri Mar 28 11:43:20 1997 H.J. Lu - - * functions.def: Add DEF of vasprintf, and DEFFUNC of strsignal. - * strsignal.c: Only define strsignal if NEED_strsignal. - * Makefile.in (REQUIRED_OFILES): Remove vasprintf.o. - * configure.in: Add NEED_strsignal to xconfig.h. Add vasprintf.o - to xneeded-list. - * config/mh-cygwin32 (HDEFINES): Add -DNEED_strsignal. - (EXTRA_OFILES): Define to vasprintf.o. - * config/mh-windows (HDEFINES): Add -DNEED_strsignal. - (EXTRA_OFILES): Add vasprintf.o. - * config/mt-vxworks5 (vxconfig.h): Define NEED_strsignal. - (vxneeded-list): Add vasprintf.o. - -Thu Mar 20 17:02:09 1997 Ian Lance Taylor - - * objalloc.c: Include . - -Mon Mar 17 19:23:11 1997 Ian Lance Taylor - - * objalloc.c: New file. - * Makefile.in (CFILES): Add objalloc.c - (REQUIRED_OFILES): Add objalloc.o. - (objalloc.o): New target. - -Sat Mar 15 18:49:41 1997 Ian Lance Taylor - - * obstack.c: Update to current FSF version. - -Fri Mar 14 14:18:47 1997 Ian Lance Taylor - - * cplus-dem.c: Add prototypes for all static functions. - (mystrstr): Make static. Make arguments and result const. - (cplus_match): Remove; not used. - -Tue Mar 11 14:20:31 1997 Brendan Kehoe - - * cplus-dem.c (gnu_special): Call demangled_fund_type for other - __t* symbols. - -Tue Mar 11 15:41:21 1997 H.J. Lu - - * spaces.c: Declare malloc and free properly. - * strsignal.c (init_signal_tables): Add prototype. - * xatexit.c (_xexit_cleanup): Add parameter declarations. - -Wed Feb 19 15:43:24 1997 Brendan Kehoe - - * Makefile.in (lneeded-list): If alloca.o is needed, xexit.o is - also required because of xmalloc.o. - -Fri Feb 14 13:43:38 1997 Ian Lance Taylor - - * strsignal.c: Unconditionally redefine sys_siglist around the - inclusion of the system header files. - -Thu Feb 13 22:01:04 1997 Klaus Kaempf - - * makefile.vms: Remove 8 bit characters. Update to latest - gcc release. - -Tue Feb 4 11:52:19 1997 Ian Lance Taylor - - * strsignal.c: Use NEED_sys_siglist instead of - LOSING_SYS_SIGLIST. - * config.table: Don't use mh-lynxos. - * config/mh-lynxos: Remove. - -Thu Jan 16 14:51:03 1997 Bob Manson - - * cplus-dem.c: Fix indenting; make identical to the copy - in GCC. - (do_type, case 'M'): Check for a template as well as a class. - -Thu Dec 19 13:51:33 1996 Brendan Kehoe - - * config/mt-vxworks5 (vxneeded-list): Remove sigsetmask.o, since - vxworks 5.[0-3] all have sigsetmask in them; the one provided by - libiberty is incorrect, as well. - -Mon Dec 2 15:03:42 1996 Michael Meissner - - * alloca.c (alloca): When compiled with an ANSI/ISO compiler, - alloca takes a size_t argument, not just unsigned. - -Mon Nov 18 15:42:08 1996 Jason Merrill - - * cplus-dem.c: Note that this file also lives in GCC. - -Mon Nov 18 15:19:00 1996 Dawn Perchik - - * alloca.c: Remove include of libiberty.h for hpux. - * argv.c: Replace defs from libiberty.h. - * spaces.c: Put back externs from removed from libiberty.h. - * vasprintf.c: Remove include of libiberty.h for hpux. - -Mon Nov 18 14:08:00 1996 Dawn Perchik - - * cplus-dem.c: Checking in again; last checkin filed due to sticky tag. - -Wed Nov 13 08:22:00 1996 Dawn Perchik - - * cplus-dem.c: Revert last two commits due to conflicts with - hpux system headers. - -Wed Nov 13 08:22:00 1996 Dawn Perchik - - * alloca.c, argv.c, spaces.c, strcasecmp.c, vasprintf.c, vprintf.c: - Revert last commit due to conflicts with hpux system headers. - -Wed Nov 13 10:36:50 1996 Michael Meissner - - * cplus-dem.c (x{m,re}alloc): Make declarations compatibile with - libiberty.h when compiled with a standard compiler. - -Tue Nov 12 16:31:00 1996 Dawn Perchik - - * alloca.c: Include libiberty.h for definition of xmalloc. - Don't redefine NULL. - * argv.c: Move prototypes to libiberty.h. - * cplus-dem.c: Include libiberty.h for definition of xmalloc. - Don't redefine NULL. - Use casts to eliminate compiler warnings. - * spaces.c: Remove prototypes for malloc and free which are - already in libibrty.h. - * strcasecmp.c: Use casts to eliminate compiler warnings. - * vasprintf.c: Include libiberty.h for definition of malloc. - Don't redefine NULL. - * vprintf.c: Include stdarg.h if __STDC__. - -Fri Oct 11 15:42:12 1996 Stu Grossman (grossman@critters.cygnus.com) - - * config/mh-windows: Add strcasecmp.o to EXTRA_OFILES. - -Fri Oct 11 11:16:31 1996 Stan Shebs - - * mpw.c (mpwify_filename): Rewrite to simplify, and to handle - upward components correctly. - -Tue Oct 8 08:55:34 1996 Stu Grossman (grossman@critters.cygnus.com) - - * config.table, config/mh-windows: Add support for building under - MSVC (the Microsoft build environment). - -Mon Oct 7 10:50:27 1996 Ian Lance Taylor - - * fnmatch.c: Undef const if not __STDC__. - -Thu Oct 3 13:46:39 1996 Ian Lance Taylor - - * fnmatch.c: New file. - * Makefile.in (CFILES): Add fnmatch.c. - (REQUIRED_OFILES): Add fnmatch.o. - (fnmatch.o): New target. - -Wed Sep 18 14:49:13 1996 Jason Merrill - - * cplus-dem.c (demangle_template): Fix handling of address args. - (gnu_special): Handle type_info stuff. - -Fri Sep 13 17:52:55 1996 Stan Shebs - - * mpw.c (DebugPI): Make settable from the env var DEBUG_PATHNAMES. - (mpwify_filename): Handle "::/" case. - -Thu Sep 12 13:30:40 1996 Geoffrey Noer - - * config/mh-cygwin32: new file (need -DNEED_basename and - -DNEED_sys_siglist for native NT rebuilding) - * config.table (*-*-cygwin32): new entry - * choose-temp.c: bring in sync with gcc (revert Aug 17 change) - -Thu Aug 29 16:48:45 1996 Michael Meissner - - * config.table (i[345]86-*-*): Recognize i686 for pentium pro. - -Tue Aug 27 13:47:58 1996 Stan Shebs - - * pexecute.c (pexecute) [MPW]: Remove old bogus code that - messed with arguments that included a '/', add escape chars - to double quotes, remove const decl from arg that Mac - compilers don't seem to like. - -Sat Aug 17 04:44:27 1996 Geoffrey Noer - - * pexecute.c: Update test for win32 (&& ! cygwin32). - * choose-temp.c: fix WIN32 preprocessor defines - -Thu Aug 15 12:26:48 1996 Stan Shebs - - * mpw-make.sed: Add @DASH_C_FLAG@ and @SEGMENT_FLAG({Default})@ - to editing of default makefile rule. - -Sun Aug 11 21:03:27 1996 Stu Grossman (grossman@critters.cygnus.com) - - * alloca-norm.h: Include if _WIN32. - * argv.c: Include non-prototyped decls for malloc and string - functions if ! _WIN32 or if __GNUC__. - -Thu Aug 8 12:42:40 1996 Klaus Kaempf - - * config.h-vms: New file. - * makefile.vms: Use it. - -Wed Aug 7 17:16:12 1996 Stu Grossman (grossman@critters.cygnus.com) - - * getopt.c (_getopt_internal): If argc is 0, just return (before - we reference *argv and segfault). - -Mon Aug 5 01:29:08 1996 Jason Merrill - - * Makefile.in (distclean): Add multilib.out. - -Thu Jul 18 17:40:55 1996 Ian Lance Taylor - - * alloca-norm.h: Change #ifdef sparc to #if defined (sparc) && - defined (sun). From Andrew Gierth . - -Mon Jul 1 13:40:44 1996 Ken Raeburn - - Tue May 28 15:29:03 1996 Pat Rankin - - * vmsbuild.com (REQUIRD_OFILES): Add choose-temp.o and xstrdup.o. - - Thu Jan 25 18:20:04 1996 Pat Rankin - - * vmsbuild.com: Changes to handle DEFFUNC(on_exit). - (do_ofiles): Allow nonexistent source file in pass 3. - (chk_deffunc): New routine. - -Tue Jun 25 19:24:43 1996 Doug Evans - - * pexecute.c (PEXECUTE_VERBOSE): Define. - (MPW pexecute): Check flags & PEXECUTE_VERBOSE instead of verbose_flag. - -Tue Jun 25 23:11:48 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * Makefile.in (docdir): Removed. - -Tue Jun 25 23:01:07 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * Makefile.in (oldincludedir): Removed. - -Tue Jun 25 22:50:07 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) - - * Makefile.in (datadir): Set to $(prefix)/share. - -Thu Jun 20 21:17:52 1996 Ian Lance Taylor - - * cplus-dem.c (demangle_arm_pt): Reindent. Avoid endless loop by - checking for errors from do_type. - -Tue Jun 18 14:36:19 1996 Klaus Kaempf - - * makefile.vms: New file. - * xmalloc.c: If VMS, include and rather - than declaring malloc, realloc, and sbrk. - -Mon Jun 10 13:17:17 1996 Doug Evans - - * pexecute.c: New file. - -Wed Jun 5 16:57:45 1996 Richard Henderson - - * xmalloc.c: Declare sbrk. - -Sat May 4 05:08:45 1996 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * alloca-norm.h: Add SPARCworks cc compatible __builtin_alloca - declaration. - -Mon Apr 22 18:41:49 1996 Ian Lance Taylor - - * xstrerror.c: Include . - -Sun Apr 21 11:55:12 1996 Doug Evans - - * Makefile.in (CFILES): Add atexit.c. - -Sun Apr 21 09:50:09 1996 Stephen L Moshier (moshier@world.std.com) - - * choose-temp.c: Include sys/types.h before sys/file.h for sco3.2v5. - -Wed Apr 17 11:17:55 1996 Doug Evans - - * choose-temp.c: Don't #include sys/file.h ifdef NO_SYS_FILE_H. - #include - * config/mt-vxworks5 (HDEFINES): Define NO_SYS_FILE_H. - -Tue Apr 16 11:27:16 1996 Jeffrey A Law (law@cygnus.com) - - * Makefile.in (lneeded-list): If alloca.o is needed, so is xmalloc.o. - Reverts Feb 8, 1995 change. - -Mon Apr 15 12:53:26 1996 Doug Evans - - * choose-temp.c: New file. - * Makefile.in (CFILES): Add choose-temp.c. - (REQUIRED_OFILES): Add choose-temp.o. - -Sat Apr 13 14:19:30 1996 Stu Grossman (grossman@critters.cygnus.com) - - * floatformat.c (floatformat_to_double): Don't bias exponent when - handling zero's, denorms or NaNs. - -Thu Apr 11 13:36:56 1996 Stu Grossman (grossman@critters.cygnus.com) - - * floatformat.c (floatformat_to_double): Fix bugs with handling - numbers with fractions < 32 bits. - -Mon Apr 8 14:48:34 1996 Ian Lance Taylor - - * config.table: Permit --enable-shared to specify a list of - directories. - -Tue Mar 19 22:02:07 1996 Jason Merrill - - * cplus-dem.c (demangle_template): Fix for non-mangled pointer - arguments. - -Fri Mar 8 17:24:18 1996 Ian Lance Taylor - - * configure.in: If srcdir is `.' and with_target_subdir is not - `.', then set MULTISRCTOP before calling config-ml.in. - -Thu Mar 7 13:37:10 1996 Stan Shebs - - * mpw.c (mpw_open): Add debugging output option. - -Wed Mar 6 17:36:03 1996 Jason Merrill - - * cplus-dem.c (demangle_template): Fix for address-of-extern arguments. - -Tue Feb 27 12:00:50 1996 Raymond Jou - - * mpw.c (mpwify_filename): Change 6 to 5 in - strncmp (unixname, "/tmp/", 5). - -Tue Feb 20 10:55:53 1996 Ian Lance Taylor - - * cplus-dem.c (demangle_template): Initialize is_bool. Correctly - handle 0 as a pointer value parameter. - -Mon Feb 5 16:41:44 1996 Ian Lance Taylor - - * Makefile.in (all): Depend upon required-list. - (required-list): New target. - (clean): Remove required-list. - -Wed Jan 31 10:19:41 1996 Steve Chamberlain - - * win32.c: Deleted. - * config.table (i386-*-win32): Deleted. - * config/mh-i386win32: Deleted. - -Thu Jan 18 11:34:17 1996 Ian Lance Taylor - - * cplus-dem.c (cplus_demangle_opname): Change opname parameter to - const char *. - (cplus_mangle_opname): Change return type and opname parameter to - const char *. Don't cast return value. - -Tue Jan 16 12:13:11 1996 Stan Shebs - - * mpw.c: Include Timer.h, in order to get m68k Microseconds trap - definition. - -Wed Jan 3 13:15:04 1996 Fred Fish - - * obstack.c: Update copyright to 1996. - (_obstack_memory_used): Define new function. Called via - obstack_memory_used macro. - -Thu Dec 28 11:39:40 1995 Ian Lance Taylor - - * xstrdup.c: New file. - * Makefile.in (CFILES): Add xstrdup.c. - (REQUIRED_OFILES): Add xstrdup.o. - (xstrdup.o): New target. - -Mon Dec 11 18:18:52 1995 Mike Stump - - * atexit.c: New stub to provide atexit on systems that have - on_exit, like SunOS 4.1.x systems. - * functions.def (on_exit, atexit): Ditto. - -Mon Dec 11 15:42:14 1995 Stan Shebs - - * mpw.c (mpw_abort): Remove decl. - (mpw_access): Move debugging printf. - -Sat Dec 2 01:25:23 1995 Ian Lance Taylor - - * config.table: Consistently use ${host} rather than ${xhost} or - ${target}. - * configure.in: Don't bother to set ${xhost} before calling - config.table. - -Tue Nov 28 14:16:57 1995 Brendan Kehoe - - * Makefile.in (.c.o): Use test instead of the left bracket, to - avoid problems with some versions of make. - -Tue Nov 28 11:45:17 1995 Stan Shebs - - * mpw-make.sed: Fix INCDIR edit to work with Nov 14 change. - -Tue Nov 21 11:26:34 1995 Fred Fish - - * config/mh-hpux: Remove. It was only used to define EXTRA_OFILES, - which was set to just alloca.o, which is now automatically marked - as needed by the autoconfiguration process. - -Tue Nov 21 14:15:06 1995 Ian Lance Taylor - - * config.table: Check ${with_cross_host} rather than comparing - ${host} and ${target}. - -Thu Nov 16 14:34:42 1995 Ian Lance Taylor - - * configure.in: If with_target_subdir is empty, set xhost to - ${host} rather than ${target} before calling config.table. - -Tue Nov 14 01:38:30 1995 Doug Evans - - * Makefile.in (MULTITOP): Deleted. - (MULTISRCTOP, MULTIBUILDTOP): New. - (FLAGS_TO_PASS): Delete INCDIR. - (INCDIR): Add $(MULTISRCTOP). - (install_to_libdir): Add $(MULTISUBDIR). Call $(MULTIDO). - * configure.in: Delete call to cfg-ml-com.in. Call config-ml.in - instead of cfg-ml-pos.in. - (cross-compile check): Change to test for with_target_subdir. - (EXTRA_LINKS): Delete. - -Sun Nov 12 12:13:04 1995 Stan Shebs - - * mpw-make.sed: Add getpagesize.c.o to needed-list. - * mpw.c [USE_MW_HEADERS]: Conditionalize compiling of - functions that are supplied by Metrowerks libraries. - (fstat): Clean up descriptor->pointer conversion code. - (InstallConsole, etc): Empty definitions, for when linking - with SIOUX. - -Sun Nov 5 19:25:27 1995 Per Bothner - - * Makefile.in (FLAGS_TO_PASS): Also pass PICFLAGS. - (.c.o): Stylistic change. - -Thu Nov 2 12:06:29 1995 Ian Lance Taylor - - * strtol.c, strtoul.c: Don't include . From - phdm@info.ucl.ac.be (Philippe De Muyter). - -Wed Nov 1 11:59:36 1995 Ian Lance Taylor - - * configure.in: Correct sed call. - -Mon Oct 30 13:03:45 1995 Per Bothner - - * configure.in: Clean up / simplify for native. - - * configure.in: Merge in stuff from ../xiberty/configure.in. - * Makefile.in (CC): Add definition (so it can be overrridden - by ../configure). - -Tue Oct 24 17:57:27 1995 Stan Shebs - - * mpw-make.sed: Leave strerror.c.o in standard list of functions. - * mpw.c (R_OK, ENOENT, EACCESS, ENOSYS): Remove. - (link): Remove useless definition with error return. - (last_microseconds, warn_if_spin_delay, record_for_spin_delay): - Use UnsignedWide type for microsecond counts. - -Thu Oct 19 10:52:07 1995 Michael Meissner - - * memcmp.c (memcmp): Argument types are const void *, not void - *const. - - * strncasecmp.c (strncasecmp): Include ansidecl.h/stdarg.h, not - sys/types.h. - * strcasecmp.c (strcasecmp): Ditto. - -Tue Oct 10 11:03:24 1995 Fred Fish - - * Makefile.in (BISON): Remove macro. - -Tue Sep 26 15:06:46 1995 Stan Shebs - - * Makefile.in (HFILES): Add default empty definition. - * mpw-config.in (config.h): Only update if changed. - * mpw-make.in: Remove. - * mpw-make.sed: New file, edits Makefile.in into MPW makefile. - * mpw.c: Remove semi-clone of strerror code. - (sys_nerr, sys_errlist): Define here. - (Microseconds): Only define as A-line trap if m68k Mac. - -Wed Sep 20 12:53:32 1995 Ian Lance Taylor - - * Makefile.in (maintainer-clean): New synonym for distclean. - -Mon Aug 28 19:47:52 1995 Per Bothner - - * config.table: For host, generalize rs6000-ibm-aix* - to *-ibm-aix* so we also include powerpc. - -Tue Aug 22 03:18:05 1995 Ken Raeburn - - Fri Jun 16 18:35:40 1995 Pat Rankin (rankin@eql.caltech.edu) - - * xstrerror.c: New file. - * Makefile.in, vmsbuild.com: Compile it. - -Mon Jul 31 12:16:32 1995 steve chamberlain - - * config.table (i386-*-win32): New. - -Fri Jul 21 11:35:52 1995 Doug Evans - - * Makefile.in (MULTITOP): New variable. - (MULTIDIRS, MULTISUBDIR, MULTIDO, MULTICLEAN): Likewise. - (all): Add multilib support. - (install_to_tooldir, *clean): Likewise. - -Mon Jul 10 11:47:27 1995 Ken Raeburn - - * makefile.dos (OBJS): Add hex.o. From DJ Delorie. - -Fri Jun 30 17:28:59 1995 Pat Rankin (rankin@eql.caltech.edu) - - * vmsbuild.com: create "new-lib.olb", build libiberty under that - name, and then make it become "liberty.olb" when done, so that an - incomplete build attempt never leaves behind something which looks - like a complete library. - -Thu Jun 29 00:22:02 1995 Steve Chamberlain - - * config/mh-i386pe: New file for PE hosts. - * config.table: Understand PE hosts. - -Wed Jun 28 19:13:23 1995 Jason Merrill - - * cplus-dem.c: Update from gcc. - - * argv.c, dummy.c: If __STDC__, #include "alloca-conf.h" after - . - * alloca-norm.h: If __STDC__, declare alloca with its parameter. - -Thu Jun 22 18:57:47 1995 Stan Shebs - - * mpw-make.in (ALL_CFLAGS): Define NEED_basename. - * mpw.c: Only test DebugPI once whenever printing debug info. - (mpwify_filename): If filename is /tmp/foo, change it into :_foo, - also fix to not write on input filename buffer. - (mpw_access): Use stat() instead of open(), works for directories - as well as files. - -Mon Jun 19 00:33:22 1995 Jason Merrill - - * Makefile.in: Massage broken shells that require 'else true'. - -Sat Jun 17 23:21:58 1995 Fred Fish - - * alloca-norm.h: Declare alloca as type "PTR" to match functions.def. - Declare __builtin_alloca in the sparc case, as argv.c did. - * argv.c: Replace inline version of alloca-norm.h at start of file with - a #include of alloca-conf.h. Precede it with an include of ansidecl.h - because alloca-norm.h needs to declare alloca as "PTR". - -Mon Jun 12 14:24:26 1995 Steve Chamberlain - - * win32.c: New file. - -Fri Jun 9 15:16:14 1995 Jason Merrill - - * dummy.c: #include "alloca-conf.h". - -Wed Jun 7 11:46:23 1995 Jason Merrill - - * Makefile.in (mostlyclean): Remove stamp-picdir. - (clean): Don't. - -Mon Jun 5 18:46:06 1995 Jason Merrill - - * config.table (frags): Use toplevel pic frags. - - * Makefile.in (PICFLAG): New macro. - (all): Depend on stamp-picdir. - (needed-list): Ditto. - (.c.o): Also build pic object. - (stamp-picdir): New rule. - (mostlyclean): Remove pic. - (clean): Remove stamp-picdir. - -Fri Mar 24 16:55:48 1995 Pat Rankin (rankin@eql.caltech.edu) - - * vmsbuild.com (config.h): Add `#define NEED_basename'. - -Tue May 23 10:12:46 1995 Per Bothner - - * clock.c, getopt.c, strtod.c, vsprintf.c: Change from using LGPL - to libio-style copyright. - * getpagesize.c: Remove FSF copyright. - -Sat May 20 12:30:23 1995 Ken Raeburn - - Added improved VMS support from Pat Rankin: - - Fri Mar 17 18:40:36 1995 Pat Rankin (rankin@eql.caltech.edu) - - * vmsbuild.com: new file. - - * getpagesize.c (getpagesize): implement for VMS; - * strerror.c (strerror, strerrno, strtoerrno): add rudimentary - support for EVMSERR. - -Thu May 18 17:01:42 1995 Ken Raeburn - - Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk) - - * floatformat.c (floatformat_arm_ext): Define. - -Tue May 16 13:30:59 1995 Per Bothner - - * basename.c, bcmp.c, getcwd.c, insque.c, rename.c, sigsetmask.c, - strerror.c, strsignal.c: Remove FSF copyright. - * sigsetmask.c: #include - seems to be needed by ISC. - -Mon May 15 19:53:17 1995 Per Bothner - - * bcopy.c, bzero.c, memcmp.c, memcpy.c, memset.c, strchr.c, - strrchr.c, strstr.c, vfork.c: Remove FSF Copyright, because this - might contaminate libstdc++ with the LGPL. (OK'd by RMS 11 Oct 94.) - * strchr.c, strrchr.c: Add cast to suppress const warning. - -Thu May 4 14:36:42 1995 Jason Merrill - - * cplus-dem.c: Use const instead of CONST. Don't include - ansidecl.h directly. - -Wed Apr 19 01:30:27 1995 Jason Merrill - - * cplus-dem.c: Don't include libiberty.h. Do declare xmalloc and - xrealloc. - (-DMAIN): Don't rely on an externally-defined version number; - instead, require the version number to be defined as a - preprocessor macro. Handle the RS/6000 leading dot. Define - xmalloc, xrealloc and fatal. Don't strip a leading underscore - if we couldn't demangle the word. - -Tue Apr 4 13:03:51 1995 Stan Shebs - - (Old mpw.c change descriptions retained for informational value.) - * mpw.c (warning_threshold): Default to .4 sec. - (overflow_count, current_progress): New globals. - (warn_if_spin_delay): Include current progress type, - such as program name, in message. - (mpw_start_progress): Set current_progress variable from arg. - (mpw_end_progress): Report spin delays by power-of-two-size - buckets instead of constant-size buckets. - - * mpw.c: Clean up formatting, types, returns, etc. - (ENOSYS): Define. - (mpw_fread, mpw_fwrite): Define. - (sleep): Define correctly. - - * mpw.c: New code to implement cursor spinning support. - (umask): New function. - (mpw_fopen, mpw_fseek, stat, fstat): Call PROGRESS. - - * mpw.c (mpw_basename, mpw_mixed_basename): New functions, find - basenames for MPW and MPW/Unix filenames. - (mpw_special_init): New function, calls Macsbug if desired. - - * mpw.c: Add GPL notice. - (mpwify_filename): Add more transformations. - (mpw_fopen): Call mpwify_filename on file names. - (rename): Remove. - (chdir, getcwd): Add simple definitions. - - * mpw.c: Random cleanups, remove unused code bits. - Added copy of strerror.c for gcc's use. - (stat, fstat, _stat): New versions based on Guido van Rossum code. - - * mpw.c (mpw_fseek): Make it work correctly when doing SEEK_CUR. - - * mpw.c (stat): Remove hack definition, get from sys/stat.h. - (fork, vfork, etc): Print error messages if called. - (getrusage, sbrk, environ, isatty, link, utime, mkdir, rmdir, - rename, chown): Define. - - * mpw-config.in: New file, MPW version of configure.in. - * mpw-make.in: New file, MPW version of Makefile.in. - * mpw.c: New file, MPW compatibility routines. - -Fri Mar 24 14:10:30 1995 Jim Kingdon (kingdon@lioth.cygnus.com) - - * basename.c: Include config.h before checking for NEED_basename. - -Thu Mar 23 19:09:54 1995 Jason Merrill - - * functions.def: Add DEFFUNC for basename. - - * basename.c: Only define basename if NEED_basename. - -Thu Mar 16 13:36:05 1995 Jason Merrill - - * config.table: Fix --enable-shared logic for native builds. - -Mon Mar 13 11:05:11 1995 Jason Merrill - - * cplus-dem.c (demangle_template): Demangle bool literals properly. - -Mon Mar 6 23:57:28 1995 Stu Grossman (grossman@cygnus.com) - - * strtol.c strtoul.c: Replace these with less buggy versions from - NetBSD. (strtoul in particular couldn't handle base 16.) - -Wed Mar 1 15:59:01 1995 Ian Lance Taylor - - * config/mt-vxworks5 (HDEFINES): Define NO_SYS_PARAM_H. - - * clock.c: If NO_SYS_PARAM_H is defined, don't include - . - * getcwd.c, getpagesize.c, getruntime.c: Likewise. - -Fri Feb 17 15:40:55 1995 Ian Lance Taylor - - * getruntime.c (get_run_time): Don't assume that CLOCKS_PER_SEC is - a number; ANSI appears to permit any expression, including a - function call. - - * config.table (*-*-vxworks5*): Use mt-vxworks5 when configuring - xiberty. - * config/mt-vxworks5: New file. - -Thu Feb 9 14:19:45 1995 Ian Lance Taylor - - * basename.c (basename): Change argument to be const. - -Wed Feb 8 18:06:52 1995 Jason Merrill - - * Makefile.in (lneeded-list): Don't worry about xmalloc. - -Sun Jan 15 00:40:36 1995 Jeff Law (law@snake.cs.utah.edu) - - * Makefile.in (distclean): Delete xhost-mkfrag. - -Thu Jan 12 16:54:18 1995 Jason Merrill - - * Makefile.in (lneeded-list): If alloca.o is needed, so is xmalloc.o. - -Wed Jan 11 22:39:56 1995 Ken Raeburn - - * hex.c: New file. - * Makefile.in (REQUIRED_OFILES, CFILES): List it. - (hex.o): Add dependencies. - - * cplus-dem.c (demangle_prefix): For GNU style constructor and - destructor names, try demangling the remainder of the string. - -Wed Dec 28 00:49:15 1994 Ian Lance Taylor - - * vasprintf.c (int_vasprintf): New static function. - (vasprintf): Use int_vasprintf. Removes assumption that va_list - is assignment compatible. - -Sat Nov 5 19:29:12 1994 Jason Merrill (jason@phydeaux.cygnus.com) - - * Makefile.in (LIBCFLAGS): New variable. - (FLAGS_TO_PASS): Pass it. - (.c.o): Use it. - -Thu Nov 3 19:09:47 1994 Ken Raeburn - - * getopt.c, getopt1.c: Do compile these functions under Linux, - since many native versions are based on glibc but are buggy. - -Mon Oct 24 15:16:46 1994 Per Bothner - - * vasprintf.c: Make 'format' arg be const, to avoid a mismatch - with prototype in GNU libc. Support stdarg.h as well as varargs.h. - -Tue Oct 11 17:48:27 1994 Jason Merrill (jason@phydeaux.cygnus.com) - - * Makefile.in (REQUIRED_OFILES): Add vasprintf.o. - * functions.def: Remove vasprintf. - -Wed Sep 14 17:04:55 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * xmalloc.c (first_break): New static variable. - (xmalloc_set_program_name): Record sbrk (0) in first_break. - (xmalloc): If memory allocation fails, try to report how much - memory was allocated by the program up to this point. - (xrealloc): Likewise. - -Sun Sep 04 17:58:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org) - - * Makefile.in (ERRORS_CC): New variable, defaulted to $(CC). Use it - when linking dummy. - * config.table: Add host RISCiX Makefile frag. - * config/mh-riscix: New file. - -Thu Aug 25 17:29:44 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * Makefile.in (FLAGS_TO_PASS): Define. - ($(RULE1)): Use $(FLAGS_TO_PASS). - -Wed Aug 24 17:08:47 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * vasprintf.c: Include . - (vasprintf): Add casts to void for va_arg to avoid gcc warnings. - * xatexit.c: Declare malloc. - -Fri Aug 19 15:29:12 1994 Kung Hsu (kung@mexican.cygnus.com) - - * cplus-dem.c (demangle_args): Fix a bug in previous patch (the - one below). - -Thu Aug 18 14:37:14 1994 Kung Hsu (kung@mexican.cygnus.com) - - * cplus-dem.c (demangle args): Handle ARM repeat encoding where - the type index is greater than 9. - -Wed Aug 17 16:13:49 1994 Kung Hsu (kung@mexican.cygnus.com) - - * cplus-dem.c (demangle_qualified): accept optional '_' between - qualified name. This is baecause the template name may end with - numeric and can mixed up with the length of next qualified name. - -Wed Aug 3 05:52:14 1994 D. V. Henkel-Wallace (gumby@cygnus.com) - - * config/mt-sunos4: Use our standard location for cross-includes - and cross-libs when the target is also a "host" environment (ie no - newlib; includes and such don't belong to us). This is specific - to the Cygnus Support environment. - -Tue Aug 2 15:25:12 1994 Kung Hsu (kung@mexican.cygnus.com) - - * cplus-dem.c (demangle_template): demangle as xxx<'Q'> not - xxx. - -Mon Aug 1 17:02:48 1994 Kung Hsu (kung@mexican.cygnus.com) - - * cplus-dem.c (main): flush stdout to make pipe work. - -Sat Jul 16 12:56:32 1994 Stan Shebs (shebs@andros.cygnus.com) - - * config.table (*-*-cxux7*): Recognize. - * floatformat.c (floatformat_m88110_ext) [HARRIS_FLOAT_FORMAT]: - Harris-specific float format. - * config/mh-cxux7: New file. - -Wed Jun 29 00:26:17 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * cplus-dem.c (demangle_template): Make sure that the result of - consume_count doesn't index beyond the end of the string. - -Mon Jun 20 23:54:37 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * cplus-dem.c (gnu_special): Handle vtable mangling of gcc-2.4.5 and - earlier. Improve test for new vtable mangling. Change output back - to `virtual table'. - -Mon Jun 20 11:37:30 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) - - * obstack.c: Always compile this code, even if using the GNU - library. Avoids problems with relatively recent binary - incompatibility. - -Thu Jun 16 17:54:01 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * cplus-dem.c: Include libiberty.h. - (xmalloc, xrealloc, free): Don't declare. - (strstr): Don't declare parameters. - (xmalloc, xrealloc): Don't define. - (long_options): Add no-strip-underscores. - (main): Call xmalloc_set_program_name. Pass n in short options to - getopt_long. Handle option 'n' to not strip underscores. - (usage): Mention -n and --no-strip-underscores. - -Sun Jun 12 01:37:09 1994 Jason Merrill (jason@deneb.cygnus.com) - - * cplus-dem.c (demangle_template): Separate consecutive >'s with a - space. - (gnu_special): Demangle template and qualified names in a vtable name. - -Fri May 27 12:27:52 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - From gas-2.3 and binutils-2.4 net releases: - - Wed May 11 22:32:00 1994 DJ Delorie (dj@ctron.com) - - * makefile.dos: [new] Makefile for dos/go32 - * configure.bat: update for latest files - * msdos.c: remove some functions now in libc.a - -Fri May 20 18:53:32 1994 Per Bothner (bothner@kalessin.cygnus.com) - - * cplus-dem.c (gnu_special): Recognize thunks, as well as - the new naming style for vtables (when -fvtable-thunks). - -Wed May 18 13:34:06 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * Makefile.in (XTRAFLAGS): Don't define. - (.c.o, dummy.o): Don't use XTRAFLAGS. - ($(RULE1)): Don't pass XTRAFLAGS down in recursive call. - -Fri May 13 16:02:12 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * vasprintf.c: New file. - * Makefile.in, functions.def: Add it. - -Fri May 13 16:20:28 1994 Jason Merrill (jason@deneb.cygnus.com) - - * cplus-dem.c (demangle_fund_type): Grok bool. - -Fri May 6 14:44:21 1994 Steve Chamberlain (sac@cygnus.com) - - * config.table: Add go32 - * config/mh-go32: New template. - -Fri May 6 11:01:59 1994 D. V. Henkel-Wallace (gumby@rtl.cygnus.com) - - * config.table, config/mt-sunos4: config for when sun4 is cross target. - -Mon Apr 11 00:54:33 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) - - * getopt.c [not __GNU_LIBRARY__] [__GCC__] [not __STDC__]: - Declare strlen to return int. Don't include stddef.h. - -Fri Apr 1 00:38:17 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu) - - * getopt.c: Delete use of IN_GCC to control whether - stddef.h or gstddef.h is included. - -Thu Apr 14 14:00:56 1994 Kung Hsu (kung@mexican.cygnus.com) - - * cplus-dem.c (demangle_signature): Fix a bug in template function - type numbering. - -Wed Apr 13 17:23:03 1994 Kung Hsu (kung@mexican.cygnus.com) - - * cplus-dem.c (demangle_signature): Fix template function with arm - style argument type number, Tn. - -Wed Apr 13 17:11:15 1994 Jason Merrill (jason@deneb.cygnus.com) - - * cplus-dem.c (optable): Add new[] and delete[]. - -Fri Apr 8 11:21:42 1994 Jim Kingdon (kingdon@deneb.cygnus.com) - - * argv.c (buildargv): Don't produce empty argument just because - there is trailing whitespace. - -Wed Apr 6 11:42:14 1994 Kung Hsu (kung@mexican.cygnus.com) - - * cplus-dem.c (demangle_template): fix 'Q' qualified name bug. - Handle 'p' same as 'P'. - * cplus-dem.c (do_type): Handle 'p' same as 'P'. - -Sat Mar 26 12:00:13 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * floatformat.c (get_field, put_field): Fix off by one error in - little endian case. - -Thu Mar 24 10:40:19 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * floatformat.c (floatformat_from_double): Pass unsigned char *, - not char *, to put_field. - -Fri Mar 18 12:34:33 1994 Per Bothner (bothner@kalessin.cygnus.com) - - * memmove.c: Re-wrote; placed in public domain. - -Wed Mar 16 10:33:07 1994 Jim Kingdon (kingdon@lioth.cygnus.com) - - * cplus-dem.c (demangle_prefix): If ARM demangling, don't treat - __Q* as a constructor. - -Mon Mar 14 12:26:02 1994 Ian Lance Taylor (ian@cygnus.com) - - * ieee-float.c: Removed; no longer used. - * Makefile.in: Changed accordingly. - -Mon Mar 7 12:28:17 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * floatformat.c (get_field): Removed unused local variable i. - (put_field): Removed unused local variable i. - -Sun Feb 27 21:50:11 1994 Jim Kingdon (kingdon@deneb.cygnus.com) - - * floatformat.c: New file, intended to replace ieee-float.c. - * Makefile.in: Change accordingly. - -Thu Feb 24 11:51:12 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * getopt.c: Remove #ifdef GETOPT_COMPAT and #if 0 code. - (_getopt_initialize): New function, broken out of _getopt_internal. - (_getopt_internal): - If long_only and the ARGV-element has the form "-f", where f is - a valid short option, don't consider it an abbreviated form of - a long option that starts with f. Otherwise there would be no - way to give the -f short option. - -Thu Feb 10 14:44:16 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) - - * getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC]: - Test just __STDC__, not emacs. - -Wed Feb 9 00:14:00 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) - - * getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC] - [emacs] [not __STDC__]: Don't include stddef.h. Don't declare strlen. - -Fri Dec 24 19:43:00 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu) - - * getopt.c (_NO_PROTO): Define before config.h is included. - -Mon Sep 20 15:59:03 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) - - * getopt.c, getopt1.c [emacs || CONFIG_BROKETS]: Include - only under these, else "config.h". - -Thu Aug 12 18:16:49 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) - - * getopt.c, getopt1.c [HAVE_CONFIG_H]: Include - instead of "config.h". - -Sun Feb 20 17:17:01 1994 Ian Lance Taylor (ian@lisa.cygnus.com) - - * concat.c: Check ANSI_PROTOTYPES rather than __STDC__ to decide - whether to use prototypes or not. - * strerror.c (const): Never undefine; let ansidecl.h handle it. - * strsignal.c (const): Likewise. - -Thu Feb 17 13:27:35 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * xatexit.c (_xexit_cleanup): Declare as extern; don't initialize. - Merging common and initialized variables need not be supported by - ANSI C compilers. - (xatexit): Initialize _xexit_cleanup if not already set. - * xexit.c: Comment fix. - -Wed Feb 16 01:15:36 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * xmalloc.c: Don't declare xexit; it's declared in libiberty.h. - (xrealloc): If oldmem is NULL, allocate with malloc, rather than - assuming that realloc works correctly. - -Tue Feb 15 09:26:16 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * concat.c, ieee-float.c: Replace inclusion of - with explicit function declarations, as recommended by Ian Taylor. - -Sat Feb 12 10:31:11 1994 David J. Mackenzie (djm@rtl.cygnus.com) - - * xmalloc.c (xmalloc, xrealloc): Use PTR and size_t throughout. - (malloc, realloc): Declare. - -Thu Feb 10 17:08:19 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * argv.c, basename.c: Include ansidecl.h and libiberty.h. - * concat.c, fdmatch.c, getruntime.c, spaces.c: Likewise. - * strerror.c, strsignal.c, xatexit.c, xexit.c: Likewise. - * xmalloc.c: Likewise. - * concat.c: Don't declare xmalloc. If __STDC__, use - macros, not macros. - * spaces.c (spaces): Make return type const. Don't crash if - malloc returns NULL. - * strerror.c (struct error_info): Make name and msg fields const. - (error_names): Make const. - (strerrno): Make const. - (strtoerrno): Make argument const. - * strsignal.c (struct signal_info): Make name and msg fields - const. - (signal_names, sys_siglist): Make const. - (strsignal, strsigno): Make const. - (strtosigno): Make argument const. - * xatexit.c: Declare parameter types. - * xmalloc.c (name): Make const. - (xmalloc_set_program_name): Make argument const. - * Makefile.in (INCDIR): Define. - (.c.o): Use $(INCDIR). - (dummy.o): Likewise. - (argv.o, basename.o): New targets; depend on libiberty.h. - (concat.o, fdmatch.o, getruntime.o, spaces.o): Likewise. - (strerror.o, strsignal.o, xatexit.o, xexit.o): Likewise. - (xmalloc.o): Likewise. - (cplus-dem.o): New target; depend on demangle.h. - (getopt.o, getopt1.o): New targets; depend on getopt.h. - (ieee-float.o): New target; depend on ieee-float.h. - (obstack.o): New target; depend on obstack.h. - -Tue Feb 8 05:29:08 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - Handle obstack_chunk_alloc returning NULL. This allows - obstacks to be used by libraries, without forcing them - to call exit or longjmp. - * obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk): - If CALL_CHUNKFUN returns NULL, set alloc_failed, else clear it. - (_obstack_begin, _obstack_begin_1): Return 1 if successful, 0 if not. - -Tue Feb 8 00:32:28 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * concat.c, ieee-float.c: Include . - -Sun Feb 6 21:28:46 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * xmalloc.c (xmalloc_set_program_name): New function. - (xmalloc, xrealloc): Include the name in the error message, if set. - - * Replace atexit.c with xatexit.c. - * Makefile.in (CFILES), functions.def: Change references. - -Sat Feb 5 14:02:32 1994 Stan Shebs (shebs@andros.cygnus.com) - - * getruntime.c (get_run_time): Use getrusage or times if - HAVE_GETRUSAGE or HAVE_TIMES are defined. - -Fri Feb 4 15:49:38 1994 David J. Mackenzie (djm@thepub.cygnus.com) - - * atexit.c: New file. - * Makefile.in (CFILES), functions.def: Add it. - * xexit.c: New file. - * Makefile.in (CFILES, REQUIRED_OFILES): Add it. - * xmalloc.c (xmalloc, xrealloc): Call xexit instead of exit. - Change request for 0 bytes into request for 1 byte. - -Wed Feb 2 11:36:49 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * xmalloc.c (xmalloc, xrealloc): Print size using %lu, and cast to - unsigned long, to avoid warnings. - -Fri Jan 28 17:49:06 1994 Ken Raeburn (raeburn@cujo.cygnus.com) - - * dummy.c: Don't include time.h ever; always define clock_t as - "unsigned long". Until gcc/fixincludes ensures that clock_t - exists, __STDC__ isn't a sufficient test. And if clock() doesn't - exist, clock_t probably doesn't either. - -Mon Jan 24 11:52:31 1994 Stan Shebs (shebs@andros.cygnus.com) - - * clock.c, getruntime.c: New files. - * Makefile.in: Add to file lists. - * functions.def (clock): Add to list. - * dummy.c (time.h): Add if __STDC__. - (clock_t): #define as "unsigned long" if not __STDC__. - -Tue Jan 11 11:27:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * strtod.c: Declare atof. From edler@jan.ultra.nyu.edu (Jan - Edler). - -Tue Dec 28 14:17:30 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * Makefile.in (errors): Use CFLAGS as well as LDFLAGS when - linking. - -Fri Dec 17 12:26:07 1993 Kung Hsu (kung@cirdan.cygnus.com) - - * cplus-dem.c (demangle_arm_pt): New function. Common code - for ARM template demangling. - * cplus-dem.c (demangle_class_name): Use demangle_arm_pt. - * cplus-dem.c (demangle_prefix): Likewise. - -Tue Nov 30 15:47:48 1993 Jason Merrill (jason@deneb.cygnus.com) - - * cplus-dem.c (cplus_demangle_opname): Add CONST to please gcc. - -Sat Nov 27 11:05:50 1993 Fred Fish (fnf@cygnus.com) - - Merge changes from tom@basil.icce.rug.nl (Tom R.Hageman) - * strerror.c, strsignal.c: As a small space optimization, don't - include messages when they aren't actually used. - - Merge changes from takefive.co.at!joe (Josef Leherbauer) - * cplus-dem.c (demangle_prefix, demangle_function_name, - cplus_demangle_opname): Fixes for systems where cplus_marker - is something other than '$'. - -Fri Nov 26 13:51:11 1993 Per Bothner (bothner@kalessin.cygnus.com) - - * waitpid.c: Simple-minded approcimation to waitpid - using vanilla wait. - * functions.def, Makefile.in: Update accordingly, - -Thu Nov 18 18:01:15 1993 Kung Hsu (kung@cirdan.cygnus.com) - - * cplus-dem.c(demangle_template): fix bug template instantiation - with value of user defined type. - -Wed Nov 17 18:30:21 1993 Kung Hsu (kung@cirdan.cygnus.com) - - * cplus-dem.c(cplus_demangle_opname): add the subject new function - to support unified search of operator in class. - -Wed Nov 10 09:47:22 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - gcc -Wall lint: - * strtoul.c (strtoul): use "(digit = *s) != '\0'" not just - "digit = *s" as condition in while loop. - -Tue Nov 9 15:52:22 1993 Mark Eichin (eichin@cygnus.com) - - * Makefile.in: pass SHELL to recursive make - -Thu Nov 4 12:09:26 1993 Per Bothner (bothner@kalessin.cygnus.com) - - * vfprintf.c, vprintf.c, vsprintf.c: Make format arg - be (const char*), for ANSI (and gcc w/fixproto) consistency. - -Thu Nov 4 08:29:04 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * config.table: Make *-*-hiux* use mh-hpux. - -Fri Oct 22 07:53:15 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * config.table: Add * to end of all OS names. - -Tue Oct 19 17:12:01 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) - - * Makefile.in (lneeded-list): ensure that object file names are - not duplicated, as multiple instances of the same object file in - a library causes problems on some machines - -Mon Oct 18 21:59:28 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * strcasecmp.c, strncasecmp.c: Change u_char to unsigned char. - -Fri Oct 15 22:17:11 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) - - * strncasecmp.c: new file, implements strncasecmp - * strcasecmp.c: new file, implement strcasecmp - - * Makefile.in (CFILES): list these two new source files - - * functions.def: add strcasecmp and strncasecmp entries - -Fri Oct 15 14:53:05 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * strtoul.c (strtoul), strtol.c (strtol): Handle overflow - according to ANSI C. - -Thu Oct 14 16:34:19 1993 Kung Hsu (kung@cirdan.cygnus.com) - - * cplus-dem.c: add support of ARM global constructor/destructor, - and 'G' for passing record or union in parameter. - -Wed Oct 13 13:36:19 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * Makefile.in: Fix comment to clarify that stuff in REQUIRED_OFILES - should not be in functions.def. - -Wed Oct 13 13:13:38 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) - - * functions.def: Removed xmalloc. Stuff in REQUIRED_OFILES should - not be in functions.def. - -Mon Oct 4 18:26:39 1993 Kung Hsu (kung@cirdan.cygnus.com) - - * cplus-dem.c: change globl constructor/destructor to proper name - -Tue Sep 28 18:11:07 1993 Kung Hsu (kung@cirdan.cygnus.com) - - * cplus-dem.c: fix bug in constructor/destructor - -Tue Sep 28 16:20:49 1993 Kung Hsu (kung@cirdan.cygnus.com) - - * cplus-dem.c: support both old and new _vt$... vtbl mangled names - -Fri Sep 24 19:07:16 1993 Jason Merrill (jason@deneb.cygnus.com) - - * cplus-dem.c: Fix demangle_template prototype - -Fri Sep 24 17:32:55 1993 Kung Hsu (kung@cirdan.cygnus.com) - - * cplus-dem.c: fix template demangling - * cplus-dem.c: fix const type demangling - * cplus-dem.c: fix constructor/destructor, virtual table, - qualifier, global constructor/destructor demangling - -Wed Sep 1 23:13:11 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * strsignal.c, strerror.c: Use fully-bracketed initializer to - keep gcc -Wall happy. - -Fri Aug 27 10:30:09 1993 Jason Merrill (jason@deneb.cygnus.com) - - * cplus-dem.c (do_type): Add CONSTS to make gcc happy with last - patch. - -Fri Aug 27 11:24:54 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - Patch from Paul Flinders: - * cplus-dem.c (do_type): Deal with arrays. - -Tue Aug 24 14:23:50 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * cplus-dem.c (demangle_qualified: Deal with GNU format for more - than 9 classes. - -Wed Aug 18 19:50:29 1993 Jason Merrill (jason@deneb.cygnus.com) - - * Makefile.in (dummy.o): Redirect to /dev/null to avoid "variable - not initialized" warnings under HP/UX - -Sun Aug 15 20:42:40 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * strerror.c: Move include of stdio.h after sys_errlist #define. - Also remove NULL definition (stdio.h always defines NULL, so it - never did anything but clutter up the code). - -Sat Aug 14 14:21:49 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) - - * Makefile.in, functions.def: handle xmalloc.c - - * xmalloc.c: provide xmalloc and xrealloc functions - -Thu Aug 12 17:38:57 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * cplus-dem.c: Fix a comment. - -Sat Aug 7 13:56:35 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * getopt1.c: Declare const the way getopt.c does. - -Fri Aug 6 17:03:13 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * obstack.c, alloca.c: Update from FSF. - * getopt.c, getopt1.c: Update to current FSF version, which - doesn't use alloca. - -Tue Jul 27 14:03:57 1993 Brendan Kehoe (brendan@lisa.cygnus.com) - - * Makefile.in (demangle): Add the target with a message saying - where demangle went. - -Mon Jul 26 15:49:54 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * Makefile.in: Remove obsolete `demangle' target. - -Thu Jul 22 08:31:01 1993 Fred Fish (fnf@deneb.cygnus.com) - - * cplus-dem.c (arm_special): Apply patch from arg@lucid.com to - avoid infinite loop on vtbl symbols with disambiguating "junk" - tacked on the end. - -Mon Jul 19 14:10:37 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) - - * strsignal.c: work around some systems losing definitions of - sys_siglist - - * config/mh-lynxos: this system has a losing definition of - sys_siglist - - * config.table: use mh-lynxos for *-*-lynxos - -Mon Jul 19 17:08:52 1993 Ken Raeburn (raeburn@rtl.cygnus.com) - - * config.table: Add support for HPPA BSD hosts. - - * config/mh-hpbsd: New file. - -Mon Jul 12 18:00:40 1993 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in (TAGS): make work when srcdir != objdir. - -Sun Jun 27 15:35:31 1993 David J. Mackenzie (djm@thepub.cygnus.com) - - * cplus-dem.c (main): Add long options, including --help and - --version. - (usage): New function from code in main. - -Tue Jun 22 11:37:38 1993 Per Bothner (bothner@deneb.cygnus.com) - - * config.table: New shell scipt, sourced by both ./configure,in - and ../xiberty/configure.in, to avoid maintainance lossages. - * configure.in and ../xiberty/configure.in: Use config.table. - - * configure.in: Don't use mh-aix for AIX 3.2, only for 3.1. - * configure.in: Map *-*-irix* (except irix4) to mh-sysv. - * ../xiberty/configure.in: Update from ./configure.in. - -Tue Jun 15 17:05:31 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Makefile.in: remove parentdir support - -Wed May 26 12:59:09 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * cplus-dem.c (xrealloc): Match definition with prototype. - -Tue May 25 14:27:51 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * cplus-dem.c (demangle_prefix): Demangle cfront - local variables as an extension to ARM demangling. - -Fri May 21 09:53:57 1993 Jim Kingdon (kingdon@lioth.cygnus.com) - - * ieee-float.c: Don't require pointers to double to be aligned. - -Tue May 18 17:12:10 1993 Fred Fish (fnf@cygnus.com) - - (merge changes from dlong@cse.ucsc.edu) - * cplus-dem.c (consume_count): Simplify. - * cplus-dem.c (arm_pt, demangle_class_name): New functions. - * cplus-dem.c (various): Calls to arm_pt, demangle_class_name. - - * cplus-dem.c (xmalloc, xrealloc, strstr): Make extern decls into - full prototypes. - * cplus-dem.c (free): Add prototype. - * cplus-dem.c (optable): Fully bracketize initializer. - -Fri May 14 17:13:05 1993 Per Bothner (bothner@cygnus.com) - - * cplus-dem.c: Whether initial underscores are stripped - depends on the external variable prepends_underscore - (which is generated by the binutils Makefile). - -Fri May 14 07:32:20 1993 Ken Raeburn (raeburn@deneb.cygnus.com) - - * cplus-dem.c (mop_up, arm_special): Remove some unused variables. - -Tue May 4 20:31:59 1993 Fred Fish (fnf@cygnus.com) - - * cplus-dem.c (consume_count): Return zero if arg does not - start with digit, and don't consume any input. - -Tue May 4 08:10:28 1993 Jim Kingdon (kingdon@cygnus.com) - - * Makefile.in (demangle): Use ${srcdir} not $^. - - * strtod.c: New file, needed at least for BSD 4.3. - -Sun May 2 11:30:42 1993 Fred Fish (fnf@cygnus.com) - - * strsignal.c (sys_siglist): For ANSI compilations, type is - "const char *const". Also remove conditionalization on __STDC__ - since const is defined away for non-ANSI. - -Wed Apr 28 19:29:55 1993 Ken Raeburn (raeburn@deneb.cygnus.com) - - * configure.in: Recognize *-*-hpux. - * config/mh-hpux: New file. - -Tue Apr 27 15:22:19 1993 Per Bothner (bothner@cygnus.com) - - * tmpnam.c: Added ANSI tmpnam() function. - * functions.def, Makefile.in: Update accordingly. - -Tue Apr 27 13:38:38 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) - - * cplus-dem.c (demangle_function_name): Get the demangling of - stop__1A right. - -Fri Apr 16 23:48:24 1993 Jim Kingdon (kingdon at calvin) - - * cplus-dem.c: Declare strstr return type. - -Fri Mar 26 12:01:26 1993 Jim Kingdon (kingdon@cygnus.com) - - * strsignal.c: Add some AIX signals. - -Thu Mar 25 15:17:23 1993 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in (MAKEOVERRIDES): Define to be empty. - -Wed Mar 24 01:59:25 1993 david d `zoo' zuhn (zoo at poseidon.cygnus.com) - - * Makefile.in: add installcheck & dvi targets - -Thu Mar 18 14:05:44 1993 Per Bothner (bothner@rtl.cygnus.com) - - * ieee-float.c: New file, moved from ../gdb (since it is - needed by ../opcode/m68k-dis.c). - -Tue Mar 2 17:47:31 1993 Fred Fish (fnf@cygnus.com) - - * cplus-dem.c: Replace all references to cfront with ARM. - -Fri Feb 26 00:17:07 1993 Per Bothner (bothner@rtl.cygnus.com) - - * cplus-dem.c: Fix main program (when compiled with -DMAIN) - to be more useful as a filter. - -Sat Feb 20 21:41:39 1993 Brendan Kehoe (brendan@lisa.cygnus.com) - - * Makefile.in (install_to_libdir, install_to_tooldir): Go into the - destination directory before running $(RANLIB), in case that - program tries to create a file in the current directory as part of - its work. - -Thu Feb 18 23:00:19 1993 John Gilmore (gnu@cygnus.com) - - * strsignal.c (sys_siglist): Remove yet another *%^&%&$# "const" - because BSD 4.4 lacks one. Isn't this fun? - -Thu Feb 18 11:24:25 1993 Fred Fish (fnf@cygnus.com) - - * cplus-dem.c (demangle_signature): Set func_done after - demangling a template. - * cplus-dem.c (demangle_template): Fix several small bugs - in demangling GNU style templates. - * cplus-dem.c (demangle_prefix): Fix for templates in GNU - style constructors. - * cplus-dem.c (gnu_special): Fix for templates in GNU style - static data members. - -Tue Feb 16 17:28:35 1993 Fred Fish (fnf@cygnus.com) - - * cplus-dem.c (demangle_signature): Modify to include type - modifiers like static and const in remembered types. - -Thu Feb 11 22:20:47 1993 Fred Fish (fnf@cygnus.com) - - * cplus-dem.c (demangled_qualified): Add new parameter that tells - whether to prepend or append the qualifiers. - * cplus-dem.c (string_prepends): Used now, remove #if 0. - * cplus-dem.c (demangle_signature): Call demangle_qualified - with prepending. - * cplus-dem.c (gnu_special): Recognize static data members that - use qualified names. - * cplus-dem.c (demangle_qualified): Accumulate qualifiers in a - temporary buffer and the prepend or append them to the result, - as specified by the new "append" flag. - * cplus-dem.c (do_type): Call demangled_qualified with - appending. - -Mon Dec 28 10:47:19 1992 Ken Raeburn (raeburn@cygnus.com) - - * strsignal.c (signal_table): Now const. - (init_signal_tables): Variable eip now points to const. - - * strerror.c (error_table): Now const. - (init_error_tables): Variable eip now points to const. - -Tue Dec 15 15:36:50 1992 Per Bothner (bothner@cygnus.com) - - * memchr.c (memchr): New (ANSI standard) function. - * Makefile.in, functions.def: Added memchr. - * Makefile.in (AR_FLAGS): Use rc instad of non-standard cq. - -Wed Dec 2 22:49:10 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * getopt.c: remove use of USG around , which never meant - anything anyway - - * config/mh-{aix,apollo68,ncr3000,sysv,sysv4}: removed definitions - of USG and USGr4 - -Thu Nov 19 03:09:33 1992 Brendan Kehoe (brendan@lisa.cygnus.com) - - * cplus-dem.c (demangle_fund_type): Recognize `w', a wide character; - it's now a type according to the ANSI X3J16 working paper; output - "wchar_t" for it. - (demangle_template): Accept `w' as an integral type. - (xmalloc, xrealloc): Use `char *', not `PTR'. Cast calls to their - counterparts malloc and realloc to `char *'. - (main): Exit with a 0 status. - * Makefile.in (demangle): Don't expect the user to define - DEMANGLE, instead force to be cplus-dem.c. Look in $(srcdir)/../include - for demangle.h. Pass it any HDEFINES or XTRAFLAGS. - -Wed Nov 18 18:56:20 1992 John Gilmore (gnu@cygnus.com) - - * Makefile.in (AR_FLAGS): Avoid verbosity. - * config/mh-sysv4: Remove AR_FLAGS override, use INSTALL=cp, - replace USGr4 with HAVE_SYSCONF. - * config/mh-solaris: Remove; mh-sysv4 works now. - * getpagesize.c: Replace USGr4 with HAVE_SYSCONF. - * configure.in: Simplify host matching table, remove separate - solaris config file. - -Sun Nov 15 09:35:16 1992 Fred Fish (fnf@cygnus.com) - - * configure.in (i[34]86-*-solaris2*): Add, use mh-sysv4. - -Tue Nov 3 21:27:03 1992 Brendan Kehoe (brendan@cygnus.com) - - * cplus-dem.c (xmalloc, xrealloc): Add decls. - (remember_type): Don't cast xmalloc. - (string_need): Likewise; don't cast xrealloc either. - -Fri Oct 23 08:52:01 1992 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in, functions.defs, rename.c: added simple - implementation of rename, since some binutils programs use it. - -Thu Oct 15 15:18:22 1992 Per Bothner (bothner@cygnus.com) - - * strsignal.c: Add appropriate 'const' to sys_siglist - extern declaration (if __STDC__). (Needed for Linux.) - * strsignal.c (strsignal): Add cast to remove const-ness. - -Fri Oct 9 03:22:55 1992 John Gilmore (gnu@cygnus.com) - - * Makefile.in (needed.awk, needed2.awk): Remove erroneous \'s - before "'s, diagnosed by BSD 4.4 awk. - -Thu Oct 8 15:25:12 1992 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in: create config.h and needed-list through $(CONFIG_H) - and $(NEEDED_LIST), to give some hooks for xiberty. - -Thu Oct 1 23:31:42 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * configure.in: use cpu-vendor-triple instead of nested cases - -Wed Sep 30 11:26:59 1992 Per Bothner (bothner@rtl.cygnus.com) - - * Makefile.in, argv.c, basename.c, bcmp.c, bcopy.c, bzero.c, - concat.c, cplus-dem.c, fdmatch.c, getcwd.c, getopt.c, getopt1.c, - getpagesize.c, insque.c, memcmp.c, memcpy.c, memmove.c, memset.c, - obstack.c, sigsetmask.c, spaces.c, strchr.c, strerror.c, - strrchr.c, strsignal.c, strstr.c, vfork.c, vsprintf.c: - Convert from using GPL to LGPL. - -Sat Sep 26 04:01:30 1992 John Gilmore (gnu@cygnus.com) - - * Makefile.in (errors): Leave dummy.o and dummy around so that - we can see how the needed list was generated (it's sometimes wrong). - (mostlyclean): Remove them. - -Mon Sep 21 14:50:42 1992 Ian Lance Taylor (ian@cygnus.com) - - * getcwd.c: supply a default if MAXPATHLEN is not defined. - - * config/mh-irix4: set EXTRA_OFILES to alloca.o, from WRS. - -Wed Sep 9 12:41:48 1992 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in: Use XTRAFLAGS when compiling, so that xiberty works - when cross-compiling. - -Thu Sep 3 13:29:39 1992 K. Richard Pixley (rich@sendai.cygnus.com) - - * cplus-dem.c: (demangle_prefix): reduction in strength of strstr - as a time optimization. - - * cplus-dem.c (cplus_demangle): remove strpbrk test. Appears to - be more expensive than simply demangling. - - * cplus-dem.c (cplus_match): new function. - -Tue Sep 1 15:24:04 1992 Per Bothner (bothner@rtl.cygnus.com) - - * cplus-dem.c: #include , to define NULL. - Define current_demangling_style. - -Sun Aug 30 17:58:19 1992 Per Bothner (bothner@rtl.cygnus.com) - - * cplus-dem.c: New file, moved from ../gdb. - * cplus-dem.c (set_cplus_marker_for_demangling): New exported - function, to avoid compiling in target-dependency for CPLUS_MARKER. - * cplus-dem.c (cplus_demangle): Allow demangling style option - to be passed as a parameter, but using the global variable - current_demangling_style as a default. - * Makefile.in: Update for cplus-dem.c - -Sat Aug 29 10:44:09 1992 Fred Fish (fnf@cygnus.com) - - * obstack.c: Merge in comment changes from FSF version. Now - matches the FSF version exactly. - -Fri Aug 28 18:39:08 1992 John Gilmore (gnu@cygnus.com) - - * obstack.c (CALL_FREEFUN): Can't use ?: with void values (at - least on losing DECstations!); use if-then-else instead. - -Wed Aug 19 14:40:34 1992 Ian Lance Taylor (ian@cygnus.com) - - * Makefile.in: always create installation directories. - -Mon Aug 10 17:33:40 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) - - * Makefile.in: clean up definition of CFILES, more comments - -Sat Aug 8 23:10:59 1992 Fred Fish (fnf@cygnus.com) - - * getopt.c (my_index): Make first arg const to match strchr, - which it sometimes is remapped to. - -Sat Aug 1 13:48:50 1992 Fred Fish (fnf@cygnus.com) - - * obstack.c (DEFAULT_ALIGNMENT): Update to match FSF version. - * obstack.c (_obstack_begin): Initialize use_extra_arg. - * obstack.c (_obstack_begin_1): New, from FSF version. - -Mon Jul 20 21:07:58 1992 Fred Fish (fnf@cygnus.com) - - * obstack.c (CALL_CHECKFUN, CALL_FREEFUN): Use use_extra_arg and - extra_arg. - * obstack.c (_obstack_begin): Remove area_id and flags arguments - (previously added for mmalloc support, interface has changed). - Also convert flags usage to use use_extra_arg and maybe_empty_object. - -Fri Jul 10 00:41:53 1992 Fred Fish (fnf@cygnus.com) - - * argv.c: Move expandargv inline and eliminate static variables. - Rewrite to always allocate in powers of two. Fix to return an - argv with a single null string arg if passed a null string. - -Fri Jul 3 20:27:29 1992 Fred Fish (fnf@cygnus.com) - - * random.c, sigsetmask.c, strerror.c, strsignal.c: Remove - "(void)" casts from function calls where the return value is - ignored, in accordance with GNU coding standards. - -Mon Jun 29 10:54:19 1992 Fred Fish (fnf at cygnus.com) - - * bcopy.c, strerror.c, strsignal.c: Lint. - -Thu Jun 25 09:18:41 1992 K. Richard Pixley (rich@rtl.cygnus.com) - - * getopt.c: merge changes from make. - -Thu Jun 25 04:43:22 1992 John Gilmore (gnu at cygnus.com) - - * alloca.c: Incorporate fixes from gdb/alloca.c. - FIXME: Eventually move gdb's alloca configuration files here, - and remove gdb/alloca.c and its Makefile.in support. - -Tue Jun 23 21:56:30 1992 Fred Fish (fnf@cygnus.com) - - * dummy.c: Define NOTHING to /*nothing*/, change return type - of main to int and return zero. - * functions.def: Supply NOTHING as the fourth arg to macros - that don't have an explicit arg, to satisfy picky preprocessors. - -Wed Jun 17 18:13:58 1992 Per Bothner (bothner@rtl.cygnus.com) - - * Makefile.in: Clean up *clean rules, as per standards.texi. - -Tue Jun 16 16:11:59 1992 K. Richard Pixley (rich@rtl.cygnus.com) - - * getopt.c, getopt1.c: merged largely gratuitous, mostly - whitespace diffs from other prep distributions. - -Mon Jun 15 12:25:46 1992 Fred Fish (fnf@cygnus.com) - - * config/mh-ncr3000 (INSTALL): Don't use /usr/ucb/install, - it is broken on ncr 3000's. - -Mon Jun 15 01:03:26 1992 John Gilmore (gnu at cygnus.com) - - * sigsetmask.c: Rewrite. Old one was very confused about its - arguments and result. New one can't do much, but at least knows - what it can't do, and it's good enough for GDB's use. - -Sun Jun 14 15:17:40 1992 Stu Grossman (grossman at cygnus.com) - - * functions.def: Use proper prototype for strtoul. - -Fri Jun 12 19:22:40 1992 John Gilmore (gnu at cygnus.com) - - * Makefile.in: Add random.c. - * config/mh-*: Use "true" rather than "echo >/dev/null" for ranlib. - * configure.in: update solaris2 config. - -Wed Jun 10 16:31:29 1992 Fred Fish (fnf@cygnus.com) - - * random.c: Add for random() and srandom(). - * functions.def: Add random - -Tue Jun 9 17:27:18 1992 Fred Fish (fnf@cygnus.com) - - * config/{mh-ncr3000, mh-sysv4}: Add definition for INSTALL - using /usr/ucb/install. - -Mon Jun 1 13:20:17 1992 Per Bothner (bothner@rtl.cygnus.com) - - * strerror.c: Kludge to guard against a conflict with - possible declaration of sys_errlist in errno.h. - -Sun May 31 15:07:47 1992 Mark Eichin (eichin at cygnus.com) - - * configure.in, config/mh-solaris: add solaris2 config support. - -Fri May 29 17:23:23 1992 Per Bothner (bothner@rtl.cygnus.com) - - * sigsetmask.c: #ifdef out sigsetmask if SIG_SETMASK - is not defined (should be defined in signal.h, says Posix.). - -Mon May 18 17:35:04 1992 K. Richard Pixley (rich@cygnus.com) - - * getopt.c: merged changes from make-3.62.11. - -Fri May 8 14:53:07 1992 K. Richard Pixley (rich@cygnus.com) - - * getopt.c: merged changes from bison-1.18. - -Tue May 5 11:51:40 1992 Per Bothner (bothner@rtl.cygnus.com) - - * Makefile.in: Don't have $(EXTRA_OFILES) depend on config.h, - since that introduces a circular dependency. - ($(EXTRA_OFILES) are used to build config.h.) - - * strtoul.c: Fixes to handle non-decimal bases better. - -Wed Apr 22 09:27:51 1992 Fred Fish (fnf@cygnus.com) - - * config/mh-ncr3000: Replace MINUS_G with CFLAGS. - * Makefile.dos: Finish MINUS_G eradication. - * Makefile.in (CFILES): Add strsignal.c. - * Makefile.in (REQUIRED_OFILES): Add strerror.o strsignal.o - * Makefile.in (needed-list): Split creation of errors file to - separate make target. - * Makefile.in (config.h, needed2.awk, errors): New targets. - * Makefile.in (clean): Split to multiple lines, add needed2.awk - and config.h. - * dummy.c (DEFFUNC, DEFVAR): Add defines and undefs. - * functions.def (strerror): Remove from optional list. - * functions.def (sys_nerr, sys_errlist, sys_siglist): DEFVAR's - * functions.def (strerror, psignal): DEFFUNC's - * strerror.c: Rewrite from scratch to use sys_errlist only if - available, add errno_max(), add strerrno(), add strtoerrno(), - add test driver. - * strsignal.c: New file, signal equivalent to strerror.c. - Uses sys_siglist if available, defines signo_max(), strsignal(), - strsigno(), strtosigno(), psignal(), and test driver. - -Mon Apr 20 20:49:32 1992 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in: do not print recursion line. - - * Makefile.in: allow CFLAGS to be passed in from command line. - Removed MINUS_G. Default CFLAGS to -g. - -Mon Apr 20 12:57:46 1992 Per Bothner (bothner@rtl.cygnus.com) - - * config/mh-aix: New. EXTRA_OFILES lists copysign.o, - so libg++ users don't have to be inconvenienced by a - libc.a bug (libc.a needs copysign, but doesn't define it!). - * configure.in: Use config/mh-aix. - * strtoul.c: Handle '-' as required by ANSI. - Clean up radix handling. - * strstr.c: Fix buggy algorithm. - * Makefile.in: Change so that ${EXTRA_OFILES} is - appended to needed-list (which is used by libg++). - -Fri Apr 10 22:51:41 1992 Fred Fish (fnf@cygnus.com) - - * configure.in: Recognize new ncr3000 config. - * config/mh-ncr3000: New config file. - -Wed Apr 1 23:31:43 1992 John Gilmore (gnu at cygnus.com) - - * argv.c, dummy.c: Lint. - -Tue Mar 31 18:46:44 1992 Fred Fish (fnf@cygnus.com) - - * config/mh-sysv4: New config file. - * configure.in (host_makefile_frag): Set to config/mh-sysv4 for - host_os == sysv4. - * getpagesize.c: For SVR4, use sysconf(_SC_PAGESIZE) to get - pagesize. - -Sun Mar 29 12:26:42 1992 John Gilmore (gnu at cygnus.com) - - * getopt.c: Lint. - -Fri Mar 27 08:32:55 1992 Fred Fish (fnf@cygnus.com) - - * functions.def (alloca): Fix return type and args to avoid - type clash with gcc's builtin alloca. - -Tue Mar 24 23:33:42 1992 K. Richard Pixley (rich@cygnus.com) - - * configure.in, config/mh-irix4: irix4 support. - - * Makefile.in, functions.def, alloca.c: added alloca. - -Tue Mar 24 17:34:46 1992 Stu Grossman (grossman at cygnus.com) - - * obstack.c (CALL_FREEFUN): Make it compile on DECstations. - -Thu Mar 19 13:57:42 1992 Fred Fish (fnf@cygnus.com) - - * argv.c: Fix various external function definitions to be - correct in an ANSI compilation environment. - -Sat Mar 14 17:28:17 1992 Fred Fish (fnf@cygnus.com) - - * obstack.c: Changes to support calling mmalloc functions, - which take an additional argument over malloc functions. - -Fri Mar 6 22:01:10 1992 K. Richard Pixley (rich@cygnus.com) - - * added check target. - -Thu Feb 27 22:19:39 1992 Per Bothner (bothner@cygnus.com) - - * argv.c: #include alloca-conf.h (needed by AIX). - -Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com) - - * Makefile.in, configure.in: removed traces of namesubdir, - -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced - copyrights to '92, changed some from Cygnus to FSF. - -Sat Feb 22 01:09:21 1992 Stu Grossman (grossman at cygnus.com) - - * argv.c: Check in Fred's version which fixes problems with - alloca(). - -Fri Feb 7 21:46:08 1992 Stu Grossman (grossman at cygnus.com) - - * makefile.dos: Remove NUL to keep patch from failing. - -Thu Jan 30 22:48:41 1992 Stu Grossman (grossman at cygnus.com) - - * getopt.c (_getopt_internal): Fix usage of enum has_arg. - -Mon Jan 20 18:53:23 1992 Stu Grossman (grossman at cygnus.com) - - * getopt.c, getopt1.c, ../include/getopt.h: Get latest versions. - -Sat Jan 18 16:53:01 1992 Fred Fish (fnf at cygnus.com) - - * argv.c: New file to build and destroy standard argument - vectors from a command string. - - * Makefile.in: Add argv.c and argv.o to appropriate macros. - -Fri Dec 20 12:12:57 1991 Fred Fish (fnf at cygnus.com) - - * configure.in: Change svr4 references to sysv4. - - * rindex.c: Declare return type of externally used function - strrchr(). - -Thu Dec 19 18:35:03 1991 John Gilmore (gnu at cygnus.com) - - * Makefile.in: Remove "***" in normal output, since Make produces - this on errors, and it's convenient to search for. - -Tue Dec 17 23:21:30 1991 Per Bothner (bothner at cygnus.com) - - * memcmp.c, memcpy.c, memmove.c, memset.c, strchr.c, strrchr.c: - New ANSI functions. The old non-ANSI functions (such as bcopy) - should be avoided. - * bcopy.c: Fix to correctly handle overlapping regions. - * index.c, rindex.c: Re-write in terms of strchr() and strrchr(). - * functions.def: Add the new functions. - * functions.def: Add 4th parameter to DEF macro, - an ansidecl.h-style prototype. - * dummy.c: Use expanded DEF macro to create a dummy function - call, with correct parameter types. (This avoids some - complaints from gcc about predefined builtins.) - - Move the functionality of config/mh-default into Makefile.in. - This avoid duplication, and simplifies things slightly. - * Makefile.in: Tweak so we don't need config/mh-default. - * README: Update. - * configure.in: No longer need config/mh-default. - * config/mh-default: Deleted. - * config/mh-sysv: Remove lines copied from old mh-default. - -Tue Dec 17 05:46:46 1991 John Gilmore (gnu at cygnus.com) - - * fdmatch.c (fdmatch): Don't compare st_rdev, which is for - 'mknod' device numbers. - -Mon Dec 16 12:25:34 1991 Fred Fish (fnf at cygnus.com) - - * fdmatch.c, Makefile.in: Add new function that takes two - open file descriptors and returns nonzero if they refer to - the same file, zero otherwise. (used in gdb) - -Wed Dec 11 17:40:39 1991 Steve Chamberlain (sac at rtl.cygnus.com) - From DJ: - * msdos.c: stub functions for dos. - * makefile.dos, configdj.bat: new. - * getopt.c: Don't include alloca-conf.h in a GO32 world. - - -Tue Dec 10 04:14:49 1991 K. Richard Pixley (rich at rtl.cygnus.com) - - * Makefile.in: infodir belongs in datadir. - -Fri Dec 6 23:26:45 1991 K. Richard Pixley (rich at rtl.cygnus.com) - - * Makefile.in: remove spaces following hyphens because bsd make - can't cope. added standards.text support. install using - INSTALL_DATA. - - * configure.in: remove commontargets as it is no longer a - recognized hook. - -Thu Dec 5 22:46:46 1991 K. Richard Pixley (rich at rtl.cygnus.com) - - * Makefile.in: idestdir and ddestdir go away. Added copyrights - and shift gpl to v2. Added ChangeLog if it didn't exist. docdir - and mandir now keyed off datadir by default. - -Fri Nov 22 19:15:29 1991 John Gilmore (gnu at cygnus.com) - - * Makefile.in: find-needed.awk does not fit in 14 chars. - - * Makefile.in: Suppress error checking when compiling the test - program, because Ultrix make/sh aborts there due to a bug. - -Fri Nov 22 12:23:17 1991 Per Bothner (bothner at cygnus.com) - - * Makefile.in: Re-did how EXTRA_OFILES is used to be more useful. - * README: Explained how the auto-configuration works, - and how to add new files and/or configurations. - -Fri Nov 22 09:45:23 1991 John Gilmore (gnu at cygnus.com) - - * strtoul.c: Avoid defining ULONG_MAX if already defined; - cast a const char * to char * for pedants. - - * getopt.c: Only define "const" after local include files get to, - and only if they haven't defined it. - -Thu Nov 21 16:58:53 1991 John Gilmore (gnu at cygnus.com) - - * getcwd.c (remove getwd.c): GNU code should call getcwd(). We - emulate it with getwd() if available. This avoids callers having - to find a MAXPATHLEN or PATH_MAX value from somewhere. - * Makefile.in, functions.def: getwd->getcwd. - * configure.in: Use generic case for every system. - * config/mh-{delta88,mach,rs6000,svr4}: Remove. - * config/mh-sysv: Use default handling, just add -DUSG. - -Thu Nov 14 10:58:05 1991 Per Bothner (bothner at cygnus.com) - - * Makefile.in, config/mh-default: Re-do make magic - so that for the default ("automatic") mode we only - compile the files we actually need. Do this using - a recursive make: The top-level generates the list - of needed files (loosely, the ones missing in libc), - and then passes that list to the recursive make. - * config/mh-mach: Remove obsolete STRERROR-{C,O} macros. - -Tue Nov 12 19:10:57 1991 John Gilmore (gnu at cygnus.com) - - RS/6000 host support (grumble). - - * configure.in: Build alloca-conf.h file from alloca-norm.h - (everything else) or alloca-botch.h (rs/6000). - * Makefile.in: Include . on the include path. - * getopt.c: Use alloca-conf.h. - * alloca-norm.h: How to declare alloca on reasonable machines. - * alloca-botch.h: How to declare alloca on braindead machines. - -Tue Nov 12 09:21:48 1991 Fred Fish (fnf at cygnus.com) - - * concat.c : New file, like concat() in gdb but can take a - variable number of arguments rather than fixed at 3 args. For - now, client applications must supply an xmalloc(), which is a - front end function to malloc() that deals with out-of-memory - conditions. - - * Makefile.in: Add concat.c and concat.o to appropriate macros. - -Sat Nov 9 13:29:59 1991 Fred Fish (fnf at cygnus.com) - - * config/mh-svr4: Add sigsetmask to list of required functions. - -Sun Nov 3 11:57:56 1991 Per Bothner (bothner at cygnus.com) - - * vsprintf.c: New file. - * functions.def, Makefile.in: Add vsprintf. - -Sun Oct 27 16:31:22 1991 John Gilmore (gnu at cygnus.com) - - * configure.in, config/mh-rs6000: Add rs/6000 host support. - * Makefile.in: Compile with debug info. - -Fri Oct 25 17:01:12 1991 Per Bothner (bothner at cygnus.com) - - * Makefile.in, configure.in, and new files: dummy.c, functions.def, - config/mf-default: Added a default configuration mode, - which includes into libiberty.a functions that are "missing" in libc. - * strdup.c, vprintf.c, vfprintf.c: New files. - -Thu Oct 24 02:29:26 1991 Fred Fish (fnf at cygnus.com) - - * config/hmake-svr4: New file. - - * config/hmake-sysv: Add HOST_CFILES and HOST_OFILES. - - * basename.c, bcmp.c, bcopy.c, bzero.c, getpagesize.c getwd.c, - index.c, insque.c, rindex.c, spaces.c, strstr.c, vfork.c: New - files containing either portable C versions or emulations using - native library calls. - - * strerror.c: Add copyright, internal documentation, etc. - - * strtol.c: Replace hardwired hex constants with some more - portable macros. Remove illegal (according to gcc) cast. - - * strtoul.c: Replace hardwired hex constant with more portable - macro. - - * Makefile.in: Move TARGETLIB and CFLAGS where makefile fragments - can override them. Add new source and object file names to CFILES - and OFILES respectively. - - * configure.in: Add support for SVR4 makefile fragments. - -Tue Oct 22 19:00:23 1991 Steve Chamberlain (steve at cygnus.com) - - * Makefile.in: Move RANLIB, AR and AR_FLAGS to where they can be - over-ridden by config/hmake-* - * configure.in: added m88kcvs to sysv list - -Fri Oct 4 01:29:08 1991 John Gilmore (gnu at cygnus.com) - - * Makefile.in: Most hosts need strerror, but one or two don't, - and they override these definitions in the host-dependent makefile - fragment. - * config/hmake-mach: The odd man out on strerror -- it's supplied. - * strerror.c: New file. - - * strtol.c, strtoul.c: Add strtol to libiberty, since Mach lacks - it and bfd uses it. - * configure.in, Makefile.in, config/hmake-mach: Only configure - strtol & strotoul in on Mach. - -Tue Sep 3 06:36:23 1991 John Gilmore (gnu at cygint.cygnus.com) - - * obstack.c: Merge with latest FSF version. - - -Local Variables: -version-control: never -End: diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in deleted file mode 100644 index a579d798fca..00000000000 --- a/libiberty/Makefile.in +++ /dev/null @@ -1,1173 +0,0 @@ -# -# Makefile -# Copyright (C) 1990, 91-99, 2000, 2001, 2002, 2003, 2004, 2005, 2006 -# Free Software Foundation -# -# This file is part of the libiberty library. -# Libiberty 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. -# -# Libiberty 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 libiberty; see the file COPYING.LIB. If not, -# write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -# Boston, MA 02110-1301, USA. -# - -# This file was written by K. Richard Pixley . - -# -# Makefile for libiberty directory -# - -libiberty_topdir = @libiberty_topdir@ -srcdir = @srcdir@ - -prefix = @prefix@ - -exec_prefix = @exec_prefix@ -bindir = @bindir@ -libdir = @libdir@ -includedir = @includedir@ -target_header_dir = @target_header_dir@ - -SHELL = @SHELL@ - -# Multilib support variables. -MULTISRCTOP = -MULTIBUILDTOP = -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -mkinstalldirs = $(SHELL) $(libiberty_topdir)/mkinstalldirs - -# Some compilers can't handle cc -c blah.c -o foo/blah.o. -OUTPUT_OPTION = @OUTPUT_OPTION@ - -AR = @AR@ -AR_FLAGS = rc - -CC = @CC@ -CFLAGS = @CFLAGS@ -LIBCFLAGS = $(CFLAGS) -RANLIB = @RANLIB@ -MAKEINFO = @MAKEINFO@ -PERL = @PERL@ - -PICFLAG = - -MAKEOVERRIDES = - -TARGETLIB = ./libiberty.a -TESTLIB = ./testlib.a - -LIBOBJS = @LIBOBJS@ - -# A configuration can specify extra .o files that should be included, -# even if they are in libc. (Perhaps the libc version is buggy.) -EXTRA_OFILES = - -# Flags to pass to a recursive make. -FLAGS_TO_PASS = \ - "AR=$(AR)" \ - "AR_FLAGS=$(AR_FLAGS)" \ - "CC=$(CC)" \ - "CFLAGS=$(CFLAGS)" \ - "DESTDIR=$(DESTDIR)" \ - "LIBCFLAGS=$(LIBCFLAGS)" \ - "EXTRA_OFILES=$(EXTRA_OFILES)" \ - "HDEFINES=$(HDEFINES)" \ - "INSTALL=$(INSTALL)" \ - "INSTALL_DATA=$(INSTALL_DATA)" \ - "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ - "LDFLAGS=$(LDFLAGS)" \ - "LOADLIBES=$(LOADLIBES)" \ - "RANLIB=$(RANLIB)" \ - "SHELL=$(SHELL)" \ - "prefix=$(prefix)" \ - "exec_prefix=$(exec_prefix)" \ - "libdir=$(libdir)" \ - "libsubdir=$(libsubdir)" \ - "tooldir=$(tooldir)" - -# Subdirectories to recurse into. We need to override this during cleaning -SUBDIRS = testsuite - -# FIXME: add @BUILD_INFO@ once we're sure it works for everyone. -all: stamp-picdir $(TARGETLIB) needed-list required-list all-subdir - @: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all - -.PHONY: check installcheck -check: check-subdir -installcheck: installcheck-subdir - -@host_makefile_frag@ - -INCDIR=$(srcdir)/$(MULTISRCTOP)../include - -COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@ - -# Just to make sure we don't use a built-in rule with VPATH -.c.o: - false - -# NOTE: If you add new files to the library, add them to this list -# (alphabetical), and add them to REQUIRED_OFILES, or -# CONFIGURED_OFILES and funcs in configure.ac. Also run "make maint-deps" -# to build the new rules. -CFILES = alloca.c argv.c asprintf.c atexit.c \ - basename.c bcmp.c bcopy.c bsearch.c bzero.c \ - calloc.c choose-temp.c clock.c concat.c cp-demangle.c \ - cp-demint.c cplus-dem.c \ - dyn-string.c \ - fdmatch.c ffs.c fibheap.c floatformat.c fnmatch.c \ - fopen_unlocked.c \ - getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c \ - gettimeofday.c \ - hashtab.c hex.c \ - index.c insque.c \ - lbasename.c \ - lrealpath.c \ - make-relative-prefix.c \ - make-temp-file.c md5.c memchr.c memcmp.c memcpy.c memmove.c \ - mempcpy.c memset.c mkstemps.c \ - objalloc.c obstack.c \ - partition.c pexecute.c \ - pex-common.c pex-djgpp.c pex-msdos.c pex-one.c \ - pex-unix.c pex-win32.c \ - physmem.c putenv.c \ - random.c regex.c rename.c rindex.c \ - safe-ctype.c setenv.c sigsetmask.c snprintf.c sort.c spaces.c \ - splay-tree.c stpcpy.c stpncpy.c strcasecmp.c strchr.c strdup.c \ - strerror.c strncasecmp.c strncmp.c strrchr.c strsignal.c \ - strstr.c strtod.c strtol.c strtoul.c strndup.c strverscmp.c \ - ternary.c tmpnam.c \ - unlink-if-ordinary.c \ - vasprintf.c vfork.c vfprintf.c vprintf.c vsnprintf.c vsprintf.c \ - waitpid.c \ - xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c xstrerror.c \ - xstrndup.c - -# These are always included in the library. The first four are listed -# first and by compile time to optimize parallel builds. -REQUIRED_OFILES = ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o \ - ./alloca.o ./argv.o \ - ./choose-temp.o ./concat.o ./cp-demint.o \ - ./dyn-string.o \ - ./fdmatch.o ./fibheap.o ./floatformat.o ./fnmatch.o \ - ./fopen_unlocked.o \ - ./getopt.o ./getopt1.o ./getpwd.o ./getruntime.o \ - ./hashtab.o ./hex.o \ - ./lbasename.o ./lrealpath.o \ - ./make-relative-prefix.o ./make-temp-file.o \ - ./objalloc.o ./obstack.o \ - ./partition.o ./pexecute.o ./physmem.o \ - ./pex-common.o ./pex-one.o @pexecute@ \ - ./safe-ctype.o ./sort.o ./spaces.o ./splay-tree.o ./strerror.o \ - ./strsignal.o \ - ./ternary.o \ - ./unlink-if-ordinary.o \ - ./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o \ - ./xstrerror.o ./xstrndup.o - -# These are all the objects that configure may add to the library via -# $funcs or EXTRA_OFILES. This list exists here only for "make -# maint-missing" and "make check". -CONFIGURED_OFILES = ./asprintf.o ./atexit.o \ - ./basename.o ./bcmp.o ./bcopy.o ./bsearch.o ./bzero.o \ - ./calloc.o ./clock.o ./copysign.o \ - ./_doprnt.o \ - ./ffs.o \ - ./getcwd.o ./getpagesize.o ./gettimeofday.o \ - ./index.o ./insque.o \ - ./memchr.o ./memcmp.o ./memcpy.o ./memmove.o ./mempcpy.o \ - ./memset.o ./mkstemps.o \ - ./pex-djgpp.o ./pex-msdos.o \ - ./pex-unix.o ./pex-win32.o \ - ./putenv.o \ - ./random.o ./rename.o ./rindex.o \ - ./setenv.o ./sigsetmask.o ./snprintf.o ./stpcpy.o ./stpncpy.o \ - ./strcasecmp.o ./strchr.o ./strdup.o ./strncasecmp.o \ - ./strncmp.o ./strndup.o ./strrchr.o ./strstr.o \ - ./strtod.o ./strtol.o ./strtoul.o ./strverscmp.o \ - ./tmpnam.o \ - ./vasprintf.o ./vfork.o ./vfprintf.o ./vprintf.o ./vsnprintf.o \ - ./vsprintf.o \ - ./waitpid.o - -# These files are installed if the library has been configured to do so. -INSTALLED_HEADERS = \ - $(INCDIR)/ansidecl.h \ - $(INCDIR)/demangle.h \ - $(INCDIR)/dyn-string.h \ - $(INCDIR)/fibheap.h \ - $(INCDIR)/floatformat.h \ - $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h \ - $(INCDIR)/objalloc.h \ - $(INCDIR)/partition.h \ - $(INCDIR)/safe-ctype.h \ - $(INCDIR)/sort.h \ - $(INCDIR)/splay-tree.h \ - $(INCDIR)/ternary.h - -$(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) - -rm -f $(TARGETLIB) pic/$(TARGETLIB) - $(AR) $(AR_FLAGS) $(TARGETLIB) \ - $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) - $(RANLIB) $(TARGETLIB) - if [ x"$(PICFLAG)" != x ]; then \ - cd pic; \ - $(AR) $(AR_FLAGS) $(TARGETLIB) \ - $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \ - $(RANLIB) $(TARGETLIB); \ - cd ..; \ - else true; fi - -$(TESTLIB): $(REQUIRED_OFILES) $(CONFIGURED_OFILES) - -rm -f $(TESTLIB) - $(AR) $(AR_FLAGS) $(TESTLIB) \ - $(REQUIRED_OFILES) $(CONFIGURED_OFILES) - $(RANLIB) $(TESTLIB) - -info: libiberty.info info-subdir -install-info: install-info-subdir -clean-info: clean-info-subdir -dvi: libiberty.dvi dvi-subdir - -# html, install-html targets -HTMLS = libiberty.html - -html: $(HTMLS) - -.PHONY: install-html install-html-am install-html-recursive - -NORMAL_INSTALL = : -mkdir_p = mkdir -p -- - -html__strip_dir = `echo $$p | sed -e 's|^.*/||'`; - -install-html: install-html-recursive install-html-am - -install-html-am: $(HTMLS) - @$(NORMAL_INSTALL) - test -z "$(htmldir)" || $(mkdir_p) "$(DESTDIR)$(htmldir)" - @list='$(HTMLS)'; for p in $$list; do \ - if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ - f=$(html__strip_dir) \ - if test -d "$$d$$p"; then \ - echo " $(mkdir_p) '$(DESTDIR)$(htmldir)/$$f'"; \ - $(mkdir_p) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ - echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ - else \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ - fi; \ - done - -install-html-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -TEXISRC = \ - $(srcdir)/libiberty.texi \ - $(srcdir)/copying-lib.texi \ - $(srcdir)/obstacks.texi \ - $(srcdir)/functions.texi - -# Additional files that have texi snippets that need to be collected -# and sorted. Some are here because the sources are imported from -# elsewhere. Others represent headers in ../include. -TEXIFILES = fnmatch.txh pexecute.txh - -libiberty.info : $(srcdir)/libiberty.texi $(TEXISRC) - $(MAKEINFO) -I$(srcdir) $(srcdir)/libiberty.texi - -libiberty.dvi : $(srcdir)/libiberty.texi $(TEXISRC) - texi2dvi $(srcdir)/libiberty.texi - -libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC) - $(MAKEINFO) --no-split --html -I$(srcdir) -o $@ $< - -@MAINT@$(srcdir)/functions.texi : stamp-functions -@MAINT@ @true - -@MAINT@stamp-functions : $(CFILES:%=$(srcdir)/%) $(TEXIFILES:%=$(srcdir)/%) $(srcdir)/gather-docs Makefile -@MAINT@@HAVE_PERL@ $(PERL) $(srcdir)/gather-docs $(srcdir) $(srcdir)/functions.texi $(CFILES) $(TEXIFILES) -@MAINT@ echo stamp > stamp-functions - -INSTALL_DEST = @INSTALL_DEST@ -install: install_to_$(INSTALL_DEST) install-subdir - -install_to_libdir: all - ${mkinstalldirs} $(DESTDIR)$(libdir)$(MULTISUBDIR) - $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n - ( cd $(DESTDIR)$(libdir)$(MULTISUBDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n ) - mv -f $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)$(MULTISUBDIR)/$(TARGETLIB) - if test -n "${target_header_dir}"; then \ - case "${target_header_dir}" in \ - /*) thd=${target_header_dir};; \ - *) thd=${includedir}${MULTISUBDIR}/${target_header_dir};; \ - esac; \ - ${mkinstalldirs} $(DESTDIR)$${thd}; \ - for h in ${INSTALLED_HEADERS}; do \ - ${INSTALL_DATA} $$h $(DESTDIR)$${thd}; \ - done; \ - fi - @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install - -# This is tricky. Even though CC in the Makefile contains -# multilib-specific flags, it's overridden by FLAGS_TO_PASS from the -# default multilib, so we have to take LIBCFLAGS into account as well, -# since it will be passed the multilib flags. -MULTIOSDIR = `$(CC) $(LIBCFLAGS) -print-multi-os-directory` -install_to_tooldir: all - ${mkinstalldirs} $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) - $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n - ( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n; $(RANLIB) $(TARGETLIB)n ) - mv -f $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB) - @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install - -# needed-list is used by libstdc++. NEEDED is the list of functions -# to include there. Do not add anything LGPL to this list; libstdc++ -# can't use anything encumbering. -NEEDED = atexit calloc memchr memcmp memcpy memmove memset rename strchr \ - strerror strncmp strrchr strstr strtol strtoul tmpnam vfprintf vprintf \ - vfork waitpid bcmp bcopy bzero -needed-list: Makefile - rm -f needed-list; touch needed-list; \ - for f in $(NEEDED); do \ - for g in $(LIBOBJS) $(EXTRA_OFILES); do \ - case "$$g" in \ - *$$f*) echo $$g >> needed-list ;; \ - esac; \ - done; \ - done - -# required-list was used when building a shared bfd/opcodes/libiberty -# library. I don't know if it used by anything currently. -required-list: Makefile - echo $(REQUIRED_OFILES) > required-list - -stamp-picdir: - if [ x"$(PICFLAG)" != x ] && [ ! -d pic ]; then \ - mkdir pic; \ - else true; fi - touch stamp-picdir - -.PHONY: all etags tags ls clean stage1 stage2 - -etags tags: TAGS etags-subdir - -TAGS: $(CFILES) - etags `for i in $(CFILES); do echo $(srcdir)/$$i ; done` - -# The standalone demangler (c++filt) has been moved to binutils. -demangle: - @echo "The standalone demangler, now named c++filt, is now" - @echo "a part of binutils." - @false - -ls: - @echo Makefile $(CFILES) - -# Various targets for maintainers. - -maint-missing : - @$(PERL) $(srcdir)/maint-tool -s $(srcdir) missing $(CFILES) $(REQUIRED_OFILES) $(CONFIGURED_OFILES) - -maint-buildall : $(REQUIRED_OFILES) $(CONFIGURED_OFILES) - @true - -maint-undoc : $(srcdir)/functions.texi - @$(PERL) $(srcdir)/maint-tool -s $(srcdir) undoc - -maint-deps : - @$(PERL) $(srcdir)/maint-tool -s $(srcdir) deps $(INCDIR) - -# Need to deal with profiled libraries, too. - -# Cleaning has to be done carefully to ensure that we don't clean our SUBDIRS -# multiple times, hence our explicit recursion with an empty SUBDIRS. -mostlyclean: mostlyclean-subdir - -rm -rf *.o pic core errs \#* *.E a.out - -rm -f needed.awk needed2.awk errors dummy needed-list config.h stamp-* - -rm -f $(CONFIG_H) $(NEEDED_LIST) stamp-picdir - -rm -f libiberty.aux libiberty.cp libiberty.cps libiberty.fn libiberty.ky - -rm -f libiberty.log libiberty.tmp libiberty.tps libiberty.pg - -rm -f libiberty.pgs libiberty.toc libiberty.tp libiberty.tpl libiberty.vr - -rm -f libtexi.stamp - @$(MULTICLEAN) multi-clean DO=mostlyclean -clean: clean-subdir - $(MAKE) SUBDIRS="" mostlyclean - -rm -f *.a required-list tmpmulti.out - -rm -f libiberty.dvi libiberty.info* libiberty.html - @$(MULTICLEAN) multi-clean DO=clean -distclean: distclean-subdir - $(MAKE) SUBDIRS="" clean - @$(MULTICLEAN) multi-clean DO=distclean - -rm -f *~ Makefile config.cache config.status xhost-mkfrag TAGS multilib.out - -rm -f config.log - -rmdir testsuite 2>/dev/null -maintainer-clean realclean: maintainer-clean-subdir - $(MAKE) SUBDIRS="" distclean - -force: - -Makefile: $(srcdir)/Makefile.in config.status - CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status - -# Depending on Makefile makes sure that config.status has been re-run -# if needed. This prevents problems with parallel builds. -config.h: stamp-h ; @true -stamp-h: $(srcdir)/config.in config.status Makefile - CONFIG_FILES= CONFIG_HEADERS=config.h:$(srcdir)/config.in $(SHELL) ./config.status - -config.status: $(srcdir)/configure - $(SHELL) ./config.status --recheck - -# Depending on config.h makes sure that config.status has been re-run -# if needed. This prevents problems with parallel builds, in case -# subdirectories need to run config.status also. -all-subdir check-subdir installcheck-subdir info-subdir \ -install-info-subdir clean-info-subdir dvi-subdir install-subdir \ -etags-subdir mostlyclean-subdir clean-subdir distclean-subdir \ -maintainer-clean-subdir: config.h - @subdirs='$(SUBDIRS)'; \ - target=`echo $@ | sed -e 's/-subdir//'`; \ - for dir in $$subdirs ; do \ - cd $$dir && $(MAKE) $(FLAGS_TO_PASS) $$target; \ - done - -$(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS): stamp-picdir -$(CONFIGURED_OFILES): stamp-picdir - -# Don't export variables to the environment, in order to not confuse -# configure. -.NOEXPORT: - -# The dependencies in the remainder of this file are automatically -# generated by "make maint-deps". Manual edits will be lost. - -./_doprnt.o: $(srcdir)/_doprnt.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/_doprnt.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/_doprnt.c $(OUTPUT_OPTION) - -./alloca.o: $(srcdir)/alloca.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/alloca.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/alloca.c $(OUTPUT_OPTION) - -./argv.o: $(srcdir)/argv.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/argv.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/argv.c $(OUTPUT_OPTION) - -./asprintf.o: $(srcdir)/asprintf.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/asprintf.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/asprintf.c $(OUTPUT_OPTION) - -./atexit.o: $(srcdir)/atexit.c config.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/atexit.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/atexit.c $(OUTPUT_OPTION) - -./basename.o: $(srcdir)/basename.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/basename.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/basename.c $(OUTPUT_OPTION) - -./bcmp.o: $(srcdir)/bcmp.c - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/bcmp.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/bcmp.c $(OUTPUT_OPTION) - -./bcopy.o: $(srcdir)/bcopy.c - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/bcopy.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/bcopy.c $(OUTPUT_OPTION) - -./bsearch.o: $(srcdir)/bsearch.c config.h $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/bsearch.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/bsearch.c $(OUTPUT_OPTION) - -./bzero.o: $(srcdir)/bzero.c - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/bzero.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/bzero.c $(OUTPUT_OPTION) - -./calloc.o: $(srcdir)/calloc.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/calloc.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/calloc.c $(OUTPUT_OPTION) - -./choose-temp.o: $(srcdir)/choose-temp.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/choose-temp.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/choose-temp.c $(OUTPUT_OPTION) - -./clock.o: $(srcdir)/clock.c config.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/clock.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/clock.c $(OUTPUT_OPTION) - -./concat.o: $(srcdir)/concat.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/concat.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/concat.c $(OUTPUT_OPTION) - -./copysign.o: $(srcdir)/copysign.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/copysign.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/copysign.c $(OUTPUT_OPTION) - -./cp-demangle.o: $(srcdir)/cp-demangle.c config.h $(INCDIR)/ansidecl.h \ - $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \ - $(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demangle.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/cp-demangle.c $(OUTPUT_OPTION) - -./cp-demint.o: $(srcdir)/cp-demint.c config.h $(INCDIR)/ansidecl.h \ - $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demint.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/cp-demint.c $(OUTPUT_OPTION) - -./cplus-dem.o: $(srcdir)/cplus-dem.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \ - $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/cplus-dem.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION) - -./dyn-string.o: $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/dyn-string.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/dyn-string.c $(OUTPUT_OPTION) - -./fdmatch.o: $(srcdir)/fdmatch.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/fdmatch.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/fdmatch.c $(OUTPUT_OPTION) - -./ffs.o: $(srcdir)/ffs.c - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/ffs.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/ffs.c $(OUTPUT_OPTION) - -./fibheap.o: $(srcdir)/fibheap.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/fibheap.h $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/fibheap.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION) - -./floatformat.o: $(srcdir)/floatformat.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/floatformat.h $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/floatformat.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/floatformat.c $(OUTPUT_OPTION) - -./fnmatch.o: $(srcdir)/fnmatch.c config.h $(INCDIR)/fnmatch.h \ - $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/fnmatch.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/fnmatch.c $(OUTPUT_OPTION) - -./fopen_unlocked.o: $(srcdir)/fopen_unlocked.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/fopen_unlocked.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/fopen_unlocked.c $(OUTPUT_OPTION) - -./getcwd.o: $(srcdir)/getcwd.c config.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/getcwd.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/getcwd.c $(OUTPUT_OPTION) - -./getopt.o: $(srcdir)/getopt.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/getopt.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/getopt.c $(OUTPUT_OPTION) - -./getopt1.o: $(srcdir)/getopt1.c config.h $(INCDIR)/getopt.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt1.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/getopt1.c $(OUTPUT_OPTION) - -./getpagesize.o: $(srcdir)/getpagesize.c config.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/getpagesize.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/getpagesize.c $(OUTPUT_OPTION) - -./getpwd.o: $(srcdir)/getpwd.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/getpwd.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/getpwd.c $(OUTPUT_OPTION) - -./getruntime.o: $(srcdir)/getruntime.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/getruntime.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/getruntime.c $(OUTPUT_OPTION) - -./gettimeofday.o: $(srcdir)/gettimeofday.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/gettimeofday.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/gettimeofday.c $(OUTPUT_OPTION) - -./hashtab.o: $(srcdir)/hashtab.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/hashtab.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/hashtab.c $(OUTPUT_OPTION) - -./hex.o: $(srcdir)/hex.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/hex.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/hex.c $(OUTPUT_OPTION) - -./index.o: $(srcdir)/index.c - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/index.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/index.c $(OUTPUT_OPTION) - -./insque.o: $(srcdir)/insque.c - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/insque.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/insque.c $(OUTPUT_OPTION) - -./lbasename.o: $(srcdir)/lbasename.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \ - $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/lbasename.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/lbasename.c $(OUTPUT_OPTION) - -./lrealpath.o: $(srcdir)/lrealpath.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/lrealpath.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/lrealpath.c $(OUTPUT_OPTION) - -./make-relative-prefix.o: $(srcdir)/make-relative-prefix.c config.h \ - $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/make-relative-prefix.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/make-relative-prefix.c $(OUTPUT_OPTION) - -./make-temp-file.o: $(srcdir)/make-temp-file.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/make-temp-file.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/make-temp-file.c $(OUTPUT_OPTION) - -./md5.o: $(srcdir)/md5.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/md5.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/md5.c $(OUTPUT_OPTION) - -./memchr.o: $(srcdir)/memchr.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/memchr.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/memchr.c $(OUTPUT_OPTION) - -./memcmp.o: $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/memcmp.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/memcmp.c $(OUTPUT_OPTION) - -./memcpy.o: $(srcdir)/memcpy.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/memcpy.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/memcpy.c $(OUTPUT_OPTION) - -./memmove.o: $(srcdir)/memmove.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/memmove.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/memmove.c $(OUTPUT_OPTION) - -./mempcpy.o: $(srcdir)/mempcpy.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/mempcpy.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/mempcpy.c $(OUTPUT_OPTION) - -./memset.o: $(srcdir)/memset.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/memset.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/memset.c $(OUTPUT_OPTION) - -./mkstemps.o: $(srcdir)/mkstemps.c config.h $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/mkstemps.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/mkstemps.c $(OUTPUT_OPTION) - -./msdos.o: $(srcdir)/msdos.c - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/msdos.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/msdos.c $(OUTPUT_OPTION) - -./objalloc.o: $(srcdir)/objalloc.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/objalloc.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/objalloc.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/objalloc.c $(OUTPUT_OPTION) - -./obstack.o: $(srcdir)/obstack.c config.h $(INCDIR)/obstack.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/obstack.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/obstack.c $(OUTPUT_OPTION) - -./partition.o: $(srcdir)/partition.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h $(INCDIR)/partition.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/partition.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/partition.c $(OUTPUT_OPTION) - -./pex-common.o: $(srcdir)/pex-common.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h $(srcdir)/pex-common.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-common.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/pex-common.c $(OUTPUT_OPTION) - -./pex-djgpp.o: $(srcdir)/pex-djgpp.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h $(srcdir)/pex-common.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-djgpp.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/pex-djgpp.c $(OUTPUT_OPTION) - -./pex-msdos.o: $(srcdir)/pex-msdos.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h $(srcdir)/pex-common.h \ - $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-msdos.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/pex-msdos.c $(OUTPUT_OPTION) - -./pex-one.o: $(srcdir)/pex-one.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-one.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/pex-one.c $(OUTPUT_OPTION) - -./pex-unix.o: $(srcdir)/pex-unix.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h $(srcdir)/pex-common.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-unix.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/pex-unix.c $(OUTPUT_OPTION) - -./pex-win32.o: $(srcdir)/pex-win32.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h $(srcdir)/pex-common.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-win32.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/pex-win32.c $(OUTPUT_OPTION) - -./pexecute.o: $(srcdir)/pexecute.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/pexecute.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/pexecute.c $(OUTPUT_OPTION) - -./physmem.o: $(srcdir)/physmem.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/physmem.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/physmem.c $(OUTPUT_OPTION) - -./putenv.o: $(srcdir)/putenv.c config.h $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/putenv.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/putenv.c $(OUTPUT_OPTION) - -./random.o: $(srcdir)/random.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/random.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/random.c $(OUTPUT_OPTION) - -./regex.o: $(srcdir)/regex.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/xregex.h \ - $(INCDIR)/xregex2.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/regex.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/regex.c $(OUTPUT_OPTION) - -./rename.o: $(srcdir)/rename.c config.h $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/rename.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/rename.c $(OUTPUT_OPTION) - -./rindex.o: $(srcdir)/rindex.c - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/rindex.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/rindex.c $(OUTPUT_OPTION) - -./safe-ctype.o: $(srcdir)/safe-ctype.c $(INCDIR)/ansidecl.h \ - $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/safe-ctype.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/safe-ctype.c $(OUTPUT_OPTION) - -./setenv.o: $(srcdir)/setenv.c config.h $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/setenv.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/setenv.c $(OUTPUT_OPTION) - -./sigsetmask.o: $(srcdir)/sigsetmask.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/sigsetmask.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/sigsetmask.c $(OUTPUT_OPTION) - -./snprintf.o: $(srcdir)/snprintf.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/snprintf.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/snprintf.c $(OUTPUT_OPTION) - -./sort.o: $(srcdir)/sort.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(INCDIR)/sort.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/sort.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/sort.c $(OUTPUT_OPTION) - -./spaces.o: $(srcdir)/spaces.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/spaces.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/spaces.c $(OUTPUT_OPTION) - -./splay-tree.o: $(srcdir)/splay-tree.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/splay-tree.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/splay-tree.c $(OUTPUT_OPTION) - -./stpcpy.o: $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/stpcpy.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/stpcpy.c $(OUTPUT_OPTION) - -./stpncpy.o: $(srcdir)/stpncpy.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/stpncpy.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/stpncpy.c $(OUTPUT_OPTION) - -./strcasecmp.o: $(srcdir)/strcasecmp.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strcasecmp.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strcasecmp.c $(OUTPUT_OPTION) - -./strchr.o: $(srcdir)/strchr.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strchr.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strchr.c $(OUTPUT_OPTION) - -./strdup.o: $(srcdir)/strdup.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strdup.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strdup.c $(OUTPUT_OPTION) - -./strerror.o: $(srcdir)/strerror.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strerror.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strerror.c $(OUTPUT_OPTION) - -./strncasecmp.o: $(srcdir)/strncasecmp.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strncasecmp.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strncasecmp.c $(OUTPUT_OPTION) - -./strncmp.o: $(srcdir)/strncmp.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strncmp.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strncmp.c $(OUTPUT_OPTION) - -./strndup.o: $(srcdir)/strndup.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strndup.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strndup.c $(OUTPUT_OPTION) - -./strrchr.o: $(srcdir)/strrchr.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strrchr.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strrchr.c $(OUTPUT_OPTION) - -./strsignal.o: $(srcdir)/strsignal.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strsignal.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strsignal.c $(OUTPUT_OPTION) - -./strstr.o: $(srcdir)/strstr.c - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strstr.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strstr.c $(OUTPUT_OPTION) - -./strtod.o: $(srcdir)/strtod.c $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strtod.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strtod.c $(OUTPUT_OPTION) - -./strtol.o: $(srcdir)/strtol.c config.h $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strtol.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strtol.c $(OUTPUT_OPTION) - -./strtoul.o: $(srcdir)/strtoul.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strtoul.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strtoul.c $(OUTPUT_OPTION) - -./strverscmp.o: $(srcdir)/strverscmp.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(INCDIR)/safe-ctype.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/strverscmp.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/strverscmp.c $(OUTPUT_OPTION) - -./ternary.o: $(srcdir)/ternary.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h $(INCDIR)/ternary.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/ternary.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/ternary.c $(OUTPUT_OPTION) - -./tmpnam.o: $(srcdir)/tmpnam.c - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/tmpnam.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/tmpnam.c $(OUTPUT_OPTION) - -./unlink-if-ordinary.o: $(srcdir)/unlink-if-ordinary.c config.h \ - $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/unlink-if-ordinary.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/unlink-if-ordinary.c $(OUTPUT_OPTION) - -./vasprintf.o: $(srcdir)/vasprintf.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/vasprintf.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/vasprintf.c $(OUTPUT_OPTION) - -./vfork.o: $(srcdir)/vfork.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/vfork.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/vfork.c $(OUTPUT_OPTION) - -./vfprintf.o: $(srcdir)/vfprintf.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/vfprintf.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/vfprintf.c $(OUTPUT_OPTION) - -./vprintf.o: $(srcdir)/vprintf.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/vprintf.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/vprintf.c $(OUTPUT_OPTION) - -./vsnprintf.o: $(srcdir)/vsnprintf.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/vsnprintf.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/vsnprintf.c $(OUTPUT_OPTION) - -./vsprintf.o: $(srcdir)/vsprintf.c $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/vsprintf.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/vsprintf.c $(OUTPUT_OPTION) - -./waitpid.o: $(srcdir)/waitpid.c config.h $(INCDIR)/ansidecl.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/waitpid.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION) - -./xatexit.o: $(srcdir)/xatexit.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/xatexit.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/xatexit.c $(OUTPUT_OPTION) - -./xexit.o: $(srcdir)/xexit.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/xexit.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/xexit.c $(OUTPUT_OPTION) - -./xmalloc.o: $(srcdir)/xmalloc.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/xmalloc.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/xmalloc.c $(OUTPUT_OPTION) - -./xmemdup.o: $(srcdir)/xmemdup.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/xmemdup.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/xmemdup.c $(OUTPUT_OPTION) - -./xstrdup.o: $(srcdir)/xstrdup.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrdup.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/xstrdup.c $(OUTPUT_OPTION) - -./xstrerror.o: $(srcdir)/xstrerror.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrerror.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/xstrerror.c $(OUTPUT_OPTION) - -./xstrndup.o: $(srcdir)/xstrndup.c config.h $(INCDIR)/ansidecl.h \ - $(INCDIR)/libiberty.h - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrndup.c -o pic/$@; \ - else true; fi - $(COMPILE.c) $(srcdir)/xstrndup.c $(OUTPUT_OPTION) - diff --git a/libiberty/README b/libiberty/README deleted file mode 100644 index 886bd67bc9d..00000000000 --- a/libiberty/README +++ /dev/null @@ -1,66 +0,0 @@ -This directory contains the -liberty library of free software. -It is a collection of subroutines used by various GNU programs. -Current members include: - - getopt -- get options from command line - obstack -- stacks of arbitrarily-sized objects - strerror -- error message strings corresponding to errno - strtol -- string-to-long conversion - strtoul -- string-to-unsigned-long conversion - -We expect many of the GNU subroutines that are floating around to -eventually arrive here. - -The library must be configured from the top source directory. Don't -try to run configure in this directory. Follow the configuration -instructions in ../README. - -Please report bugs to "gcc-bugs@gcc.gnu.org" and send fixes to -"gcc-patches@gcc.gnu.org". Thank you. - -ADDING A NEW FILE -================= - -There are two sets of files: Those that are "required" will be -included in the library for all configurations, while those -that are "optional" will be included in the library only if "needed." - -To add a new required file, edit Makefile to add the source file -name to CFILES and the object file to REQUIRED_OFILES. - -To add a new optional file, it must provide a single function, and the -name of the function must be the same as the name of the file. - - * Add the source file name to CFILES. - - * Add the function to name to the funcs shell variable in - configure.ac. - - * Add the function to the AC_CHECK_FUNCS lists just after the - setting of the funcs shell variable. These AC_CHECK_FUNCS calls - are never executed; they are there to make autoheader work - better. - - * Consider the special cases of building libiberty; as of this - writing, the special cases are newlib and VxWorks. If a - particular special case provides the function, you do not need - to do anything. If it does not provide the function, add the - object file to LIBOBJS, and add the function name to the case - controlling whether to define HAVE_func. - -The optional file you've added (e.g. getcwd.c) should compile and work -on all hosts where it is needed. It does not have to work or even -compile on hosts where it is not needed. - -ADDING A NEW CONFIGURATION -========================== - -On most hosts you should be able to use the scheme for automatically -figuring out which files are needed. In that case, you probably -don't need a special Makefile stub for that configuration. - -If the fully automatic scheme doesn't work, you may be able to get -by with defining EXTRA_OFILES in your Makefile stub. This is -a list of object file names that should be treated as required -for this configuration - they will be included in libiberty.a, -regardless of whatever might be in the C library. diff --git a/libiberty/_doprnt.c b/libiberty/_doprnt.c deleted file mode 100644 index ca97bc8c5d4..00000000000 --- a/libiberty/_doprnt.c +++ /dev/null @@ -1,296 +0,0 @@ -/* Provide a version of _doprnt in terms of fprintf. - Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - Contributed by Kaveh Ghazi (ghazi@caip.rutgers.edu) 3/29/98 - -This program 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, 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, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -#include "config.h" -#include "ansidecl.h" -#include "safe-ctype.h" - -#include -#include -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_STDLIB_H -#include -#endif - -#undef _doprnt - -#ifdef HAVE__DOPRNT -#define TEST -#endif - -#ifdef TEST /* Make sure to use the internal one. */ -#define _doprnt my_doprnt -#endif - -#define COPY_VA_INT \ - do { \ - const int value = abs (va_arg (ap, int)); \ - char buf[32]; \ - ptr++; /* Go past the asterisk. */ \ - *sptr = '\0'; /* NULL terminate sptr. */ \ - sprintf(buf, "%d", value); \ - strcat(sptr, buf); \ - while (*sptr) sptr++; \ - } while (0) - -#define PRINT_CHAR(CHAR) \ - do { \ - putc(CHAR, stream); \ - ptr++; \ - total_printed++; \ - continue; \ - } while (0) - -#define PRINT_TYPE(TYPE) \ - do { \ - int result; \ - TYPE value = va_arg (ap, TYPE); \ - *sptr++ = *ptr++; /* Copy the type specifier. */ \ - *sptr = '\0'; /* NULL terminate sptr. */ \ - result = fprintf(stream, specifier, value); \ - if (result == -1) \ - return -1; \ - else \ - { \ - total_printed += result; \ - continue; \ - } \ - } while (0) - -int -_doprnt (const char *format, va_list ap, FILE *stream) -{ - const char * ptr = format; - char specifier[128]; - int total_printed = 0; - - while (*ptr != '\0') - { - if (*ptr != '%') /* While we have regular characters, print them. */ - PRINT_CHAR(*ptr); - else /* We got a format specifier! */ - { - char * sptr = specifier; - int wide_width = 0, short_width = 0; - - *sptr++ = *ptr++; /* Copy the % and move forward. */ - - while (strchr ("-+ #0", *ptr)) /* Move past flags. */ - *sptr++ = *ptr++; - - if (*ptr == '*') - COPY_VA_INT; - else - while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */ - *sptr++ = *ptr++; - - if (*ptr == '.') - { - *sptr++ = *ptr++; /* Copy and go past the period. */ - if (*ptr == '*') - COPY_VA_INT; - else - while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */ - *sptr++ = *ptr++; - } - while (strchr ("hlL", *ptr)) - { - switch (*ptr) - { - case 'h': - short_width = 1; - break; - case 'l': - wide_width++; - break; - case 'L': - wide_width = 2; - break; - default: - abort(); - } - *sptr++ = *ptr++; - } - - switch (*ptr) - { - case 'd': - case 'i': - case 'o': - case 'u': - case 'x': - case 'X': - case 'c': - { - /* Short values are promoted to int, so just copy it - as an int and trust the C library printf to cast it - to the right width. */ - if (short_width) - PRINT_TYPE(int); - else - { - switch (wide_width) - { - case 0: - PRINT_TYPE(int); - break; - case 1: - PRINT_TYPE(long); - break; - case 2: - default: -#if defined(__GNUC__) || defined(HAVE_LONG_LONG) - PRINT_TYPE(long long); -#else - PRINT_TYPE(long); /* Fake it and hope for the best. */ -#endif - break; - } /* End of switch (wide_width) */ - } /* End of else statement */ - } /* End of integer case */ - break; - case 'f': - case 'e': - case 'E': - case 'g': - case 'G': - { - if (wide_width == 0) - PRINT_TYPE(double); - else - { -#if defined(__GNUC__) || defined(HAVE_LONG_DOUBLE) - PRINT_TYPE(long double); -#else - PRINT_TYPE(double); /* Fake it and hope for the best. */ -#endif - } - } - break; - case 's': - PRINT_TYPE(char *); - break; - case 'p': - PRINT_TYPE(void *); - break; - case '%': - PRINT_CHAR('%'); - break; - default: - abort(); - } /* End of switch (*ptr) */ - } /* End of else statement */ - } - - return total_printed; -} - -#ifdef TEST - -#include -#ifndef M_PI -#define M_PI (3.1415926535897932385) -#endif - -#define RESULT(x) do \ -{ \ - int i = (x); \ - printf ("printed %d characters\n", i); \ - fflush(stdin); \ -} while (0) - -static int checkit (const char * format, ...) ATTRIBUTE_PRINTF_1; - -static int -checkit (const char* format, ...) -{ - int result; - VA_OPEN (args, format); - VA_FIXEDARG (args, char *, format); - - result = _doprnt (format, args, stdout); - VA_CLOSE (args); - - return result; -} - -int -main (void) -{ - RESULT(checkit ("<%d>\n", 0x12345678)); - RESULT(printf ("<%d>\n", 0x12345678)); - - RESULT(checkit ("<%200d>\n", 5)); - RESULT(printf ("<%200d>\n", 5)); - - RESULT(checkit ("<%.300d>\n", 6)); - RESULT(printf ("<%.300d>\n", 6)); - - RESULT(checkit ("<%100.150d>\n", 7)); - RESULT(printf ("<%100.150d>\n", 7)); - - RESULT(checkit ("<%s>\n", - "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\ -777777777777777777333333333333366666666666622222222222777777777777733333")); - RESULT(printf ("<%s>\n", - "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\ -777777777777777777333333333333366666666666622222222222777777777777733333")); - - RESULT(checkit ("<%f><%0+#f>%s%d%s>\n", - 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx")); - RESULT(printf ("<%f><%0+#f>%s%d%s>\n", - 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx")); - - RESULT(checkit ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI)); - RESULT(printf ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI)); - - RESULT(checkit ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI)); - RESULT(printf ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI)); - - RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n", - 75, 75, 75, 75, 75, 75, 75)); - RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n", - 75, 75, 75, 75, 75, 75, 75)); - - RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n", - 75, 75, 75, 75, 75, 75, 75)); - RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n", - 75, 75, 75, 75, 75, 75, 75)); - - RESULT(checkit ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456)); - RESULT(printf ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456)); - -#if defined(__GNUC__) || defined (HAVE_LONG_LONG) - RESULT(checkit ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345)); - RESULT(printf ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345)); - RESULT(checkit ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345)); - RESULT(printf ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345)); -#endif - -#if defined(__GNUC__) || defined (HAVE_LONG_DOUBLE) - RESULT(checkit ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n", - 1.23456, 1.234567890123456789L, 1.23456)); - RESULT(printf ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n", - 1.23456, 1.234567890123456789L, 1.23456)); -#endif - - return 0; -} -#endif /* TEST */ diff --git a/libiberty/aclocal.m4 b/libiberty/aclocal.m4 deleted file mode 100644 index 0b49d032122..00000000000 --- a/libiberty/aclocal.m4 +++ /dev/null @@ -1,221 +0,0 @@ -sinclude(../config/acx.m4) -sinclude(../config/no-executables.m4) - -dnl See whether strncmp reads past the end of its string parameters. -dnl On some versions of SunOS4 at least, strncmp reads a word at a time -dnl but erroneously reads past the end of strings. This can cause -dnl a SEGV in some cases. -AC_DEFUN(libiberty_AC_FUNC_STRNCMP, -[AC_REQUIRE([AC_FUNC_MMAP]) -AC_CACHE_CHECK([for working strncmp], ac_cv_func_strncmp_works, -[AC_TRY_RUN([ -/* Test by Jim Wilson and Kaveh Ghazi. - Check whether strncmp reads past the end of its string parameters. */ -#include - -#ifdef HAVE_FCNTL_H -#include -#endif - -#ifdef HAVE_SYS_MMAN_H -#include -#endif - -#ifndef MAP_ANON -#ifdef MAP_ANONYMOUS -#define MAP_ANON MAP_ANONYMOUS -#else -#define MAP_ANON MAP_FILE -#endif -#endif - -#ifndef MAP_FILE -#define MAP_FILE 0 -#endif -#ifndef O_RDONLY -#define O_RDONLY 0 -#endif - -#define MAP_LEN 0x10000 - -main () -{ -#if defined(HAVE_MMAP) || defined(HAVE_MMAP_ANYWHERE) - char *p; - int dev_zero; - - dev_zero = open ("/dev/zero", O_RDONLY); - if (dev_zero < 0) - exit (1); - - p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE, - MAP_ANON|MAP_PRIVATE, dev_zero, 0); - if (p == (char *)-1) - p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE, - MAP_ANON|MAP_PRIVATE, -1, 0); - if (p == (char *)-1) - exit (2); - else - { - char *string = "__si_type_info"; - char *q = (char *) p + MAP_LEN - strlen (string) - 2; - char *r = (char *) p + 0xe; - - strcpy (q, string); - strcpy (r, string); - strncmp (r, q, 14); - } -#endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */ - exit (0); -} -], ac_cv_func_strncmp_works=yes, ac_cv_func_strncmp_works=no, - ac_cv_func_strncmp_works=no) -rm -f core core.* *.core]) -if test $ac_cv_func_strncmp_works = no ; then - AC_LIBOBJ([strncmp]) -fi -]) - -dnl See if errno must be declared even when is included. -AC_DEFUN(libiberty_AC_DECLARE_ERRNO, -[AC_CACHE_CHECK(whether errno must be declared, libiberty_cv_declare_errno, -[AC_TRY_COMPILE( -[#include ], -[int x = errno;], -libiberty_cv_declare_errno=no, -libiberty_cv_declare_errno=yes)]) -if test $libiberty_cv_declare_errno = yes -then AC_DEFINE(NEED_DECLARATION_ERRNO, 1, - [Define if errno must be declared even when is included.]) -fi -]) - -dnl See whether we need a declaration for a function. -AC_DEFUN(libiberty_NEED_DECLARATION, -[AC_MSG_CHECKING([whether $1 must be declared]) -AC_CACHE_VAL(libiberty_cv_decl_needed_$1, -[AC_TRY_COMPILE([ -#include "confdefs.h" -#include -#ifdef HAVE_STRING_H -#include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif], -[char *(*pfn) = (char *(*)) $1], -libiberty_cv_decl_needed_$1=no, libiberty_cv_decl_needed_$1=yes)]) -AC_MSG_RESULT($libiberty_cv_decl_needed_$1) -if test $libiberty_cv_decl_needed_$1 = yes; then - AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]), 1, - [Define if $1 is not declared in system header files.]) -fi -])dnl - -# We always want a C version of alloca() compiled into libiberty, -# because native-compiler support for the real alloca is so !@#$% -# unreliable that GCC has decided to use it only when being compiled -# by GCC. This is the part of AC_FUNC_ALLOCA that calculates the -# information alloca.c needs. -AC_DEFUN(libiberty_AC_FUNC_C_ALLOCA, -[AC_CACHE_CHECK(whether alloca needs Cray hooks, ac_cv_os_cray, -[AC_EGREP_CPP(webecray, -[#if defined(CRAY) && ! defined(CRAY2) -webecray -#else -wenotbecray -#endif -], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - AC_CHECK_FUNC($ac_func, - [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, - [Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP - systems. This function is required for alloca.c support on those - systems.]) break]) - done -fi - -AC_CACHE_CHECK(stack direction for C alloca, ac_cv_c_stack_direction, -[AC_TRY_RUN([find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} -main () -{ - exit (find_stack_direction() < 0); -}], - ac_cv_c_stack_direction=1, - ac_cv_c_stack_direction=-1, - ac_cv_c_stack_direction=0)]) -AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction, - [Define if you know the direction of stack growth for your system; - otherwise it will be automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown]) -]) - -# AC_LANG_FUNC_LINK_TRY(C)(FUNCTION) -# ---------------------------------- -# Don't include because on OSF/1 3.0 it includes -# which includes which contains a -# prototype for select. Similarly for bzero. -# -# This test used to merely assign f=$1 in main(), but that was -# optimized away by HP unbundled cc A.05.36 for ia64 under +O3, -# presumably on the basis that there's no need to do that store if the -# program is about to exit. Conversely, the AIX linker optimizes an -# unused external declaration that initializes f=$1. So this test -# program has both an external initialization of f, and a use of f in -# main that affects the exit status. -# -m4_define([AC_LANG_FUNC_LINK_TRY(C)], -[AC_LANG_PROGRAM( -[/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $1 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. Under hpux, - including includes and causes problems - checking for functions defined therein. */ -#if defined (__STDC__) && !defined (_HPUX_SOURCE) -# include -#else -# include -#endif -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $1 (); -/* 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_$1) || defined (__stub___$1) -choke me -#else -char (*f) () = $1; -#endif -#ifdef __cplusplus -} -#endif -], [return f != $1;])]) - diff --git a/libiberty/alloca.c b/libiberty/alloca.c deleted file mode 100644 index 9b2e9cb12b6..00000000000 --- a/libiberty/alloca.c +++ /dev/null @@ -1,483 +0,0 @@ -/* alloca.c -- allocate automatically reclaimed memory - (Mostly) portable public-domain implementation -- D A Gwyn - - This implementation of the PWB library alloca function, - which is used to allocate space off the run-time stack so - that it is automatically reclaimed upon procedure exit, - was inspired by discussions with J. Q. Johnson of Cornell. - J.Otto Tennant contributed the Cray support. - - There are some preprocessor constants that can - be defined when compiling for your specific system, for - improved efficiency; however, the defaults should be okay. - - The general concept of this implementation is to keep - track of all alloca-allocated blocks, and reclaim any - that are found to be deeper in the stack than the current - invocation. This heuristic does not reclaim storage as - soon as it becomes invalid, but it will do so eventually. - - As a special case, alloca(0) reclaims storage without - allocating any. It is a good idea to use alloca(0) in - your main control loop, etc. to force garbage collection. */ - -/* - -@deftypefn Replacement void* alloca (size_t @var{size}) - -This function allocates memory which will be automatically reclaimed -after the procedure exits. The @libib{} implementation does not free -the memory immediately but will do so eventually during subsequent -calls to this function. Memory is allocated using @code{xmalloc} under -normal circumstances. - -The header file @file{alloca-conf.h} can be used in conjunction with the -GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make -available this function. The @code{AC_FUNC_ALLOCA} test requires that -client code use a block of preprocessor code to be safe (see the Autoconf -manual for more); this header incorporates that logic and more, including -the possibility of a GCC built-in function. - -@end deftypefn - -*/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_STDLIB_H -#include -#endif - -/* These variables are used by the ASTRDUP implementation that relies - on C_alloca. */ -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ -const char *libiberty_optr; -char *libiberty_nptr; -unsigned long libiberty_len; -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -/* If your stack is a linked list of frames, you have to - provide an "address metric" ADDRESS_FUNCTION macro. */ - -#if defined (CRAY) && defined (CRAY_STACKSEG_END) -static long i00afunc (); -#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) -#else -#define ADDRESS_FUNCTION(arg) &(arg) -#endif - -#ifndef NULL -#define NULL 0 -#endif - -/* Define STACK_DIRECTION if you know the direction of stack - growth for your system; otherwise it will be automatically - deduced at run-time. - - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ - -#ifndef STACK_DIRECTION -#define STACK_DIRECTION 0 /* Direction unknown. */ -#endif - -#if STACK_DIRECTION != 0 - -#define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ - -#else /* STACK_DIRECTION == 0; need run-time code. */ - -static int stack_dir; /* 1 or -1 once known. */ -#define STACK_DIR stack_dir - -static void -find_stack_direction (void) -{ - static char *addr = NULL; /* Address of first `dummy', once known. */ - auto char dummy; /* To get stack address. */ - - if (addr == NULL) - { /* Initial entry. */ - addr = ADDRESS_FUNCTION (dummy); - - find_stack_direction (); /* Recurse once. */ - } - else - { - /* Second entry. */ - if (ADDRESS_FUNCTION (dummy) > addr) - stack_dir = 1; /* Stack grew upward. */ - else - stack_dir = -1; /* Stack grew downward. */ - } -} - -#endif /* STACK_DIRECTION == 0 */ - -/* An "alloca header" is used to: - (a) chain together all alloca'ed blocks; - (b) keep track of stack depth. - - It is very important that sizeof(header) agree with malloc - alignment chunk size. The following default should work okay. */ - -#ifndef ALIGN_SIZE -#define ALIGN_SIZE sizeof(double) -#endif - -typedef union hdr -{ - char align[ALIGN_SIZE]; /* To force sizeof(header). */ - struct - { - union hdr *next; /* For chaining headers. */ - char *deep; /* For stack depth measure. */ - } h; -} header; - -static header *last_alloca_header = NULL; /* -> last alloca header. */ - -/* Return a pointer to at least SIZE bytes of storage, - which will be automatically reclaimed upon exit from - the procedure that called alloca. Originally, this space - was supposed to be taken from the current stack frame of the - caller, but that method cannot be made to work for some - implementations of C, for example under Gould's UTX/32. */ - -/* @undocumented C_alloca */ - -PTR -C_alloca (size_t size) -{ - auto char probe; /* Probes stack depth: */ - register char *depth = ADDRESS_FUNCTION (probe); - -#if STACK_DIRECTION == 0 - if (STACK_DIR == 0) /* Unknown growth direction. */ - find_stack_direction (); -#endif - - /* Reclaim garbage, defined as all alloca'd storage that - was allocated from deeper in the stack than currently. */ - - { - register header *hp; /* Traverses linked list. */ - - for (hp = last_alloca_header; hp != NULL;) - if ((STACK_DIR > 0 && hp->h.deep > depth) - || (STACK_DIR < 0 && hp->h.deep < depth)) - { - register header *np = hp->h.next; - - free ((PTR) hp); /* Collect garbage. */ - - hp = np; /* -> next header. */ - } - else - break; /* Rest are not deeper. */ - - last_alloca_header = hp; /* -> last valid storage. */ - } - - if (size == 0) - return NULL; /* No allocation required. */ - - /* Allocate combined header + user data storage. */ - - { - register void *new_storage = XNEWVEC (char, sizeof (header) + size); - /* Address of header. */ - - if (new_storage == 0) - abort(); - - ((header *) new_storage)->h.next = last_alloca_header; - ((header *) new_storage)->h.deep = depth; - - last_alloca_header = (header *) new_storage; - - /* User storage begins just after header. */ - - return (PTR) ((char *) new_storage + sizeof (header)); - } -} - -#if defined (CRAY) && defined (CRAY_STACKSEG_END) - -#ifdef DEBUG_I00AFUNC -#include -#endif - -#ifndef CRAY_STACK -#define CRAY_STACK -#ifndef CRAY2 -/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ -struct stack_control_header - { - long shgrow:32; /* Number of times stack has grown. */ - long shaseg:32; /* Size of increments to stack. */ - long shhwm:32; /* High water mark of stack. */ - long shsize:32; /* Current size of stack (all segments). */ - }; - -/* The stack segment linkage control information occurs at - the high-address end of a stack segment. (The stack - grows from low addresses to high addresses.) The initial - part of the stack segment linkage control information is - 0200 (octal) words. This provides for register storage - for the routine which overflows the stack. */ - -struct stack_segment_linkage - { - long ss[0200]; /* 0200 overflow words. */ - long sssize:32; /* Number of words in this segment. */ - long ssbase:32; /* Offset to stack base. */ - long:32; - long sspseg:32; /* Offset to linkage control of previous - segment of stack. */ - long:32; - long sstcpt:32; /* Pointer to task common address block. */ - long sscsnm; /* Private control structure number for - microtasking. */ - long ssusr1; /* Reserved for user. */ - long ssusr2; /* Reserved for user. */ - long sstpid; /* Process ID for pid based multi-tasking. */ - long ssgvup; /* Pointer to multitasking thread giveup. */ - long sscray[7]; /* Reserved for Cray Research. */ - long ssa0; - long ssa1; - long ssa2; - long ssa3; - long ssa4; - long ssa5; - long ssa6; - long ssa7; - long sss0; - long sss1; - long sss2; - long sss3; - long sss4; - long sss5; - long sss6; - long sss7; - }; - -#else /* CRAY2 */ -/* The following structure defines the vector of words - returned by the STKSTAT library routine. */ -struct stk_stat - { - long now; /* Current total stack size. */ - long maxc; /* Amount of contiguous space which would - be required to satisfy the maximum - stack demand to date. */ - long high_water; /* Stack high-water mark. */ - long overflows; /* Number of stack overflow ($STKOFEN) calls. */ - long hits; /* Number of internal buffer hits. */ - long extends; /* Number of block extensions. */ - long stko_mallocs; /* Block allocations by $STKOFEN. */ - long underflows; /* Number of stack underflow calls ($STKRETN). */ - long stko_free; /* Number of deallocations by $STKRETN. */ - long stkm_free; /* Number of deallocations by $STKMRET. */ - long segments; /* Current number of stack segments. */ - long maxs; /* Maximum number of stack segments so far. */ - long pad_size; /* Stack pad size. */ - long current_address; /* Current stack segment address. */ - long current_size; /* Current stack segment size. This - number is actually corrupted by STKSTAT to - include the fifteen word trailer area. */ - long initial_address; /* Address of initial segment. */ - long initial_size; /* Size of initial segment. */ - }; - -/* The following structure describes the data structure which trails - any stack segment. I think that the description in 'asdef' is - out of date. I only describe the parts that I am sure about. */ - -struct stk_trailer - { - long this_address; /* Address of this block. */ - long this_size; /* Size of this block (does not include - this trailer). */ - long unknown2; - long unknown3; - long link; /* Address of trailer block of previous - segment. */ - long unknown5; - long unknown6; - long unknown7; - long unknown8; - long unknown9; - long unknown10; - long unknown11; - long unknown12; - long unknown13; - long unknown14; - }; - -#endif /* CRAY2 */ -#endif /* not CRAY_STACK */ - -#ifdef CRAY2 -/* Determine a "stack measure" for an arbitrary ADDRESS. - I doubt that "lint" will like this much. */ - -static long -i00afunc (long *address) -{ - struct stk_stat status; - struct stk_trailer *trailer; - long *block, size; - long result = 0; - - /* We want to iterate through all of the segments. The first - step is to get the stack status structure. We could do this - more quickly and more directly, perhaps, by referencing the - $LM00 common block, but I know that this works. */ - - STKSTAT (&status); - - /* Set up the iteration. */ - - trailer = (struct stk_trailer *) (status.current_address - + status.current_size - - 15); - - /* There must be at least one stack segment. Therefore it is - a fatal error if "trailer" is null. */ - - if (trailer == 0) - abort (); - - /* Discard segments that do not contain our argument address. */ - - while (trailer != 0) - { - block = (long *) trailer->this_address; - size = trailer->this_size; - if (block == 0 || size == 0) - abort (); - trailer = (struct stk_trailer *) trailer->link; - if ((block <= address) && (address < (block + size))) - break; - } - - /* Set the result to the offset in this segment and add the sizes - of all predecessor segments. */ - - result = address - block; - - if (trailer == 0) - { - return result; - } - - do - { - if (trailer->this_size <= 0) - abort (); - result += trailer->this_size; - trailer = (struct stk_trailer *) trailer->link; - } - while (trailer != 0); - - /* We are done. Note that if you present a bogus address (one - not in any segment), you will get a different number back, formed - from subtracting the address of the first block. This is probably - not what you want. */ - - return (result); -} - -#else /* not CRAY2 */ -/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. - Determine the number of the cell within the stack, - given the address of the cell. The purpose of this - routine is to linearize, in some sense, stack addresses - for alloca. */ - -static long -i00afunc (long address) -{ - long stkl = 0; - - long size, pseg, this_segment, stack; - long result = 0; - - struct stack_segment_linkage *ssptr; - - /* Register B67 contains the address of the end of the - current stack segment. If you (as a subprogram) store - your registers on the stack and find that you are past - the contents of B67, you have overflowed the segment. - - B67 also points to the stack segment linkage control - area, which is what we are really interested in. */ - - stkl = CRAY_STACKSEG_END (); - ssptr = (struct stack_segment_linkage *) stkl; - - /* If one subtracts 'size' from the end of the segment, - one has the address of the first word of the segment. - - If this is not the first segment, 'pseg' will be - nonzero. */ - - pseg = ssptr->sspseg; - size = ssptr->sssize; - - this_segment = stkl - size; - - /* It is possible that calling this routine itself caused - a stack overflow. Discard stack segments which do not - contain the target address. */ - - while (!(this_segment <= address && address <= stkl)) - { -#ifdef DEBUG_I00AFUNC - fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); -#endif - if (pseg == 0) - break; - stkl = stkl - pseg; - ssptr = (struct stack_segment_linkage *) stkl; - size = ssptr->sssize; - pseg = ssptr->sspseg; - this_segment = stkl - size; - } - - result = address - this_segment; - - /* If you subtract pseg from the current end of the stack, - you get the address of the previous stack segment's end. - This seems a little convoluted to me, but I'll bet you save - a cycle somewhere. */ - - while (pseg != 0) - { -#ifdef DEBUG_I00AFUNC - fprintf (stderr, "%011o %011o\n", pseg, size); -#endif - stkl = stkl - pseg; - ssptr = (struct stack_segment_linkage *) stkl; - size = ssptr->sssize; - pseg = ssptr->sspseg; - result += size; - } - return (result); -} - -#endif /* not CRAY2 */ -#endif /* CRAY */ diff --git a/libiberty/argv.c b/libiberty/argv.c deleted file mode 100644 index 11ca549a8ea..00000000000 --- a/libiberty/argv.c +++ /dev/null @@ -1,460 +0,0 @@ -/* Create and destroy argument vectors (argv's) - Copyright (C) 1992, 2001 Free Software Foundation, Inc. - Written by Fred Fish @ Cygnus Support - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - - -/* Create and destroy argument vectors. An argument vector is simply an - array of string pointers, terminated by a NULL pointer. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "ansidecl.h" -#include "libiberty.h" -#include "safe-ctype.h" - -/* Routines imported from standard C runtime libraries. */ - -#include -#include -#include -#include - -#ifndef NULL -#define NULL 0 -#endif - -#ifndef EOS -#define EOS '\0' -#endif - -#define INITIAL_MAXARGC 8 /* Number of args + NULL in initial argv */ - - -/* - -@deftypefn Extension char** dupargv (char **@var{vector}) - -Duplicate an argument vector. Simply scans through @var{vector}, -duplicating each argument until the terminating @code{NULL} is found. -Returns a pointer to the argument vector if successful. Returns -@code{NULL} if there is insufficient memory to complete building the -argument vector. - -@end deftypefn - -*/ - -char ** -dupargv (char **argv) -{ - int argc; - char **copy; - - if (argv == NULL) - return NULL; - - /* the vector */ - for (argc = 0; argv[argc] != NULL; argc++); - copy = (char **) malloc ((argc + 1) * sizeof (char *)); - if (copy == NULL) - return NULL; - - /* the strings */ - for (argc = 0; argv[argc] != NULL; argc++) - { - int len = strlen (argv[argc]); - copy[argc] = (char *) malloc (len + 1); - if (copy[argc] == NULL) - { - freeargv (copy); - return NULL; - } - strcpy (copy[argc], argv[argc]); - } - copy[argc] = NULL; - return copy; -} - -/* - -@deftypefn Extension void freeargv (char **@var{vector}) - -Free an argument vector that was built using @code{buildargv}. Simply -scans through @var{vector}, freeing the memory for each argument until -the terminating @code{NULL} is found, and then frees @var{vector} -itself. - -@end deftypefn - -*/ - -void freeargv (char **vector) -{ - register char **scan; - - if (vector != NULL) - { - for (scan = vector; *scan != NULL; scan++) - { - free (*scan); - } - free (vector); - } -} - -/* - -@deftypefn Extension char** buildargv (char *@var{sp}) - -Given a pointer to a string, parse the string extracting fields -separated by whitespace and optionally enclosed within either single -or double quotes (which are stripped off), and build a vector of -pointers to copies of the string for each field. The input string -remains unchanged. The last element of the vector is followed by a -@code{NULL} element. - -All of the memory for the pointer array and copies of the string -is obtained from @code{malloc}. All of the memory can be returned to the -system with the single function call @code{freeargv}, which takes the -returned result of @code{buildargv}, as it's argument. - -Returns a pointer to the argument vector if successful. Returns -@code{NULL} if @var{sp} is @code{NULL} or if there is insufficient -memory to complete building the argument vector. - -If the input is a null string (as opposed to a @code{NULL} pointer), -then buildarg returns an argument vector that has one arg, a null -string. - -@end deftypefn - -The memory for the argv array is dynamically expanded as necessary. - -In order to provide a working buffer for extracting arguments into, -with appropriate stripping of quotes and translation of backslash -sequences, we allocate a working buffer at least as long as the input -string. This ensures that we always have enough space in which to -work, since the extracted arg is never larger than the input string. - -The argument vector is always kept terminated with a @code{NULL} arg -pointer, so it can be passed to @code{freeargv} at any time, or -returned, as appropriate. - -*/ - -char **buildargv (const char *input) -{ - char *arg; - char *copybuf; - int squote = 0; - int dquote = 0; - int bsquote = 0; - int argc = 0; - int maxargc = 0; - char **argv = NULL; - char **nargv; - - if (input != NULL) - { - copybuf = (char *) alloca (strlen (input) + 1); - /* Is a do{}while to always execute the loop once. Always return an - argv, even for null strings. See NOTES above, test case below. */ - do - { - /* Pick off argv[argc] */ - while (ISBLANK (*input)) - { - input++; - } - if ((maxargc == 0) || (argc >= (maxargc - 1))) - { - /* argv needs initialization, or expansion */ - if (argv == NULL) - { - maxargc = INITIAL_MAXARGC; - nargv = (char **) malloc (maxargc * sizeof (char *)); - } - else - { - maxargc *= 2; - nargv = (char **) realloc (argv, maxargc * sizeof (char *)); - } - if (nargv == NULL) - { - if (argv != NULL) - { - freeargv (argv); - argv = NULL; - } - break; - } - argv = nargv; - argv[argc] = NULL; - } - /* Begin scanning arg */ - arg = copybuf; - while (*input != EOS) - { - if (ISSPACE (*input) && !squote && !dquote && !bsquote) - { - break; - } - else - { - if (bsquote) - { - bsquote = 0; - *arg++ = *input; - } - else if (*input == '\\') - { - bsquote = 1; - } - else if (squote) - { - if (*input == '\'') - { - squote = 0; - } - else - { - *arg++ = *input; - } - } - else if (dquote) - { - if (*input == '"') - { - dquote = 0; - } - else - { - *arg++ = *input; - } - } - else - { - if (*input == '\'') - { - squote = 1; - } - else if (*input == '"') - { - dquote = 1; - } - else - { - *arg++ = *input; - } - } - input++; - } - } - *arg = EOS; - argv[argc] = strdup (copybuf); - if (argv[argc] == NULL) - { - freeargv (argv); - argv = NULL; - break; - } - argc++; - argv[argc] = NULL; - - while (ISSPACE (*input)) - { - input++; - } - } - while (*input != EOS); - } - return (argv); -} - -/* - -@deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp}) - -The @var{argcp} and @code{argvp} arguments are pointers to the usual -@code{argc} and @code{argv} arguments to @code{main}. This function -looks for arguments that begin with the character @samp{@@}. Any such -arguments are interpreted as ``response files''. The contents of the -response file are interpreted as additional command line options. In -particular, the file is separated into whitespace-separated strings; -each such string is taken as a command-line option. The new options -are inserted in place of the option naming the response file, and -@code{*argcp} and @code{*argvp} will be updated. If the value of -@code{*argvp} is modified by this function, then the new value has -been dynamically allocated and can be deallocated by the caller with -@code{freeargv}. However, most callers will simply call -@code{expandargv} near the beginning of @code{main} and allow the -operating system to free the memory when the program exits. - -@end deftypefn - -*/ - -void -expandargv (argcp, argvp) - int *argcp; - char ***argvp; -{ - /* The argument we are currently processing. */ - int i = 0; - /* Non-zero if ***argvp has been dynamically allocated. */ - int argv_dynamic = 0; - /* Loop over the arguments, handling response files. We always skip - ARGVP[0], as that is the name of the program being run. */ - while (++i < *argcp) - { - /* The name of the response file. */ - const char *filename; - /* The response file. */ - FILE *f; - /* An upper bound on the number of characters in the response - file. */ - long pos; - /* The number of characters in the response file, when actually - read. */ - size_t len; - /* A dynamically allocated buffer used to hold options read from a - response file. */ - char *buffer; - /* Dynamically allocated storage for the options read from the - response file. */ - char **file_argv; - /* The number of options read from the response file, if any. */ - size_t file_argc; - /* We are only interested in options of the form "@file". */ - filename = (*argvp)[i]; - if (filename[0] != '@') - continue; - /* Read the contents of the file. */ - f = fopen (++filename, "r"); - if (!f) - continue; - if (fseek (f, 0L, SEEK_END) == -1) - goto error; - pos = ftell (f); - if (pos == -1) - goto error; - if (fseek (f, 0L, SEEK_SET) == -1) - goto error; - buffer = (char *) xmalloc (pos * sizeof (char) + 1); - len = fread (buffer, sizeof (char), pos, f); - if (len != (size_t) pos - /* On Windows, fread may return a value smaller than POS, - due to CR/LF->CR translation when reading text files. - That does not in-and-of itself indicate failure. */ - && ferror (f)) - goto error; - /* Add a NUL terminator. */ - buffer[len] = '\0'; - /* Parse the string. */ - file_argv = buildargv (buffer); - /* If *ARGVP is not already dynamically allocated, copy it. */ - if (!argv_dynamic) - { - *argvp = dupargv (*argvp); - if (!*argvp) - { - fputs ("\nout of memory\n", stderr); - xexit (1); - } - } - /* Count the number of arguments. */ - file_argc = 0; - while (file_argv[file_argc] && *file_argv[file_argc]) - ++file_argc; - /* Now, insert FILE_ARGV into ARGV. The "+1" below handles the - NULL terminator at the end of ARGV. */ - *argvp = ((char **) - xrealloc (*argvp, - (*argcp + file_argc + 1) * sizeof (char *))); - memmove (*argvp + i + file_argc, *argvp + i + 1, - (*argcp - i) * sizeof (char *)); - memcpy (*argvp + i, file_argv, file_argc * sizeof (char *)); - /* The original option has been replaced by all the new - options. */ - *argcp += file_argc - 1; - /* Free up memory allocated to process the response file. We do - not use freeargv because the individual options in FILE_ARGV - are now in the main ARGV. */ - free (file_argv); - free (buffer); - /* Rescan all of the arguments just read to support response - files that include other response files. */ - --i; - error: - /* We're all done with the file now. */ - fclose (f); - } -} - -#ifdef MAIN - -/* Simple little test driver. */ - -static const char *const tests[] = -{ - "a simple command line", - "arg 'foo' is single quoted", - "arg \"bar\" is double quoted", - "arg \"foo bar\" has embedded whitespace", - "arg 'Jack said \\'hi\\'' has single quotes", - "arg 'Jack said \\\"hi\\\"' has double quotes", - "a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9", - - /* This should be expanded into only one argument. */ - "trailing-whitespace ", - - "", - NULL -}; - -int -main (void) -{ - char **argv; - const char *const *test; - char **targs; - - for (test = tests; *test != NULL; test++) - { - printf ("buildargv(\"%s\")\n", *test); - if ((argv = buildargv (*test)) == NULL) - { - printf ("failed!\n\n"); - } - else - { - for (targs = argv; *targs != NULL; targs++) - { - printf ("\t\"%s\"\n", *targs); - } - printf ("\n"); - } - freeargv (argv); - } - - return 0; -} - -#endif /* MAIN */ diff --git a/libiberty/asprintf.c b/libiberty/asprintf.c deleted file mode 100644 index 3cf50526609..00000000000 --- a/libiberty/asprintf.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Like sprintf but provides a pointer to malloc'd storage, which must - be freed by the caller. - Copyright (C) 1997, 2003 Free Software Foundation, Inc. - Contributed by Cygnus Solutions. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "ansidecl.h" -#include "libiberty.h" - -#include - -/* - -@deftypefn Extension int asprintf (char **@var{resptr}, const char *@var{format}, ...) - -Like @code{sprintf}, but instead of passing a pointer to a buffer, you -pass a pointer to a pointer. This function will compute the size of -the buffer needed, allocate memory with @code{malloc}, and store a -pointer to the allocated memory in @code{*@var{resptr}}. The value -returned is the same as @code{sprintf} would return. If memory could -not be allocated, minus one is returned and @code{NULL} is stored in -@code{*@var{resptr}}. - -@end deftypefn - -*/ - -int -asprintf (char **buf, const char *fmt, ...) -{ - int status; - VA_OPEN (ap, fmt); - VA_FIXEDARG (ap, char **, buf); - VA_FIXEDARG (ap, const char *, fmt); - status = vasprintf (buf, fmt, ap); - VA_CLOSE (ap); - return status; -} diff --git a/libiberty/at-file.texi b/libiberty/at-file.texi deleted file mode 100644 index 080d1951d62..00000000000 --- a/libiberty/at-file.texi +++ /dev/null @@ -1,15 +0,0 @@ -@c This file is designed to be included in manuals that use -@c expandargv. - -@item @@@var{file} -Read command-line options from @var{file}. The options read are -inserted in place of the original @@@var{file} option. If @var{file} -does not exist, or cannot be read, then the option will be treated -literally, and not removed. - -Options in @var{file} are separated by whitespace. A whitespace -character may be included in an option by surrounding the entire -option in either single or double quotes. Any character (including a -backslash) may be included by prefixing the character to be included -with a backslash. The @var{file} may itself contain additional -@@@var{file} options; any such options will be processed recursively. diff --git a/libiberty/atexit.c b/libiberty/atexit.c deleted file mode 100644 index e091f0139ee..00000000000 --- a/libiberty/atexit.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Wrapper to implement ANSI C's atexit using SunOS's on_exit. */ -/* This function is in the public domain. --Mike Stump. */ - -/* - -@deftypefn Supplemental int atexit (void (*@var{f})()) - -Causes function @var{f} to be called at exit. Returns 0. - -@end deftypefn - -*/ - -#include "config.h" - -#ifdef HAVE_ON_EXIT - -int -atexit(void (*f)(void)) -{ - /* If the system doesn't provide a definition for atexit, use on_exit - if the system provides that. */ - on_exit (f, 0); - return 0; -} - -#endif diff --git a/libiberty/basename.c b/libiberty/basename.c deleted file mode 100644 index 0f2c069f0cc..00000000000 --- a/libiberty/basename.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Return the basename of a pathname. - This file is in the public domain. */ - -/* - -@deftypefn Supplemental char* basename (const char *@var{name}) - -Returns a pointer to the last component of pathname @var{name}. -Behavior is undefined if the pathname ends in a directory separator. - -@end deftypefn - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "ansidecl.h" -#include "libiberty.h" -#include "safe-ctype.h" - -#ifndef DIR_SEPARATOR -#define DIR_SEPARATOR '/' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -#define HAVE_DOS_BASED_FILE_SYSTEM -#ifndef DIR_SEPARATOR_2 -#define DIR_SEPARATOR_2 '\\' -#endif -#endif - -/* Define IS_DIR_SEPARATOR. */ -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -char * -basename (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (ISALPHA (name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - { - if (IS_DIR_SEPARATOR (*name)) - { - base = name + 1; - } - } - return (char *) base; -} - diff --git a/libiberty/bcmp.c b/libiberty/bcmp.c deleted file mode 100644 index c639f9895bc..00000000000 --- a/libiberty/bcmp.c +++ /dev/null @@ -1,27 +0,0 @@ -/* bcmp - This function is in the public domain. */ - -/* - -@deftypefn Supplemental int bcmp (char *@var{x}, char *@var{y}, int @var{count}) - -Compares the first @var{count} bytes of two areas of memory. Returns -zero if they are the same, nonzero otherwise. Returns zero if -@var{count} is zero. A nonzero result only indicates a difference, -it does not indicate any sorting order (say, by having a positive -result mean @var{x} sorts before @var{y}). - -@end deftypefn - -*/ - -#include - -extern int memcmp(const void *, const void *, size_t); - -int -bcmp (const void *s1, const void *s2, size_t count) -{ - return memcmp (s1, s2, count); -} - diff --git a/libiberty/bcopy.c b/libiberty/bcopy.c deleted file mode 100644 index 1e2eca9c641..00000000000 --- a/libiberty/bcopy.c +++ /dev/null @@ -1,31 +0,0 @@ -/* bcopy -- copy memory regions of arbitary length - -@deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length}) - -Copies @var{length} bytes from memory region @var{in} to region -@var{out}. The use of @code{bcopy} is deprecated in new programs. - -@end deftypefn - -*/ - -#include - -void -bcopy (const void *src, void *dest, size_t len) -{ - if (dest < src) - { - const char *firsts = src; - char *firstd = dest; - while (len--) - *firstd++ = *firsts++; - } - else - { - const char *lasts = (const char *)src + (len-1); - char *lastd = (char *)dest + (len-1); - while (len--) - *lastd-- = *lasts--; - } -} diff --git a/libiberty/bsearch.c b/libiberty/bsearch.c deleted file mode 100644 index 771d5de7b12..00000000000 --- a/libiberty/bsearch.c +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 1990 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. [rescinded 22 July 1999] - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - -@deftypefn Supplemental void* bsearch (const void *@var{key}, const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, int (*@var{compar})(const void *, const void *)) - -Performs a search over an array of @var{nmemb} elements pointed to by -@var{base} for a member that matches the object pointed to by @var{key}. -The size of each member is specified by @var{size}. The array contents -should be sorted in ascending order according to the @var{compar} -comparison function. This routine should take two arguments pointing to -the @var{key} and to an array member, in that order, and should return an -integer less than, equal to, or greater than zero if the @var{key} object -is respectively less than, matching, or greater than the array member. - -@end deftypefn - -*/ - -#include "config.h" -#include "ansidecl.h" -#include /* size_t */ -#include - -/* - * Perform a binary search. - * - * The code below is a bit sneaky. After a comparison fails, we - * divide the work in half by moving either left or right. If lim - * is odd, moving left simply involves halving lim: e.g., when lim - * is 5 we look at item 2, so we change lim to 2 so that we will - * look at items 0 & 1. If lim is even, the same applies. If lim - * is odd, moving right again involes halving lim, this time moving - * the base up one item past p: e.g., when lim is 5 we change base - * to item 3 and make lim 2 so that we will look at items 3 and 4. - * If lim is even, however, we have to shrink it by one before - * halving: e.g., when lim is 4, we still looked at item 2, so we - * have to make lim 3, then halve, obtaining 1, so that we will only - * look at item 3. - */ -void * -bsearch (register const void *key, const void *base0, - size_t nmemb, register size_t size, - register int (*compar)(const void *, const void *)) -{ - register const char *base = (const char *) base0; - register int lim, cmp; - register const void *p; - - for (lim = nmemb; lim != 0; lim >>= 1) { - p = base + (lim >> 1) * size; - cmp = (*compar)(key, p); - if (cmp == 0) - return (void *)p; - if (cmp > 0) { /* key > p: move right */ - base = (const char *)p + size; - lim--; - } /* else move left */ - } - return (NULL); -} diff --git a/libiberty/bzero.c b/libiberty/bzero.c deleted file mode 100644 index 44ad73da4d6..00000000000 --- a/libiberty/bzero.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Portable version of bzero for systems without it. - This function is in the public domain. */ - -/* - -@deftypefn Supplemental void bzero (char *@var{mem}, int @var{count}) - -Zeros @var{count} bytes starting at @var{mem}. Use of this function -is deprecated in favor of @code{memset}. - -@end deftypefn - -*/ - -#include - -extern void *memset(void *, int, size_t); - -void -bzero (void *to, size_t count) -{ - memset (to, 0, count); -} diff --git a/libiberty/calloc.c b/libiberty/calloc.c deleted file mode 100644 index f4bd27b1cd2..00000000000 --- a/libiberty/calloc.c +++ /dev/null @@ -1,34 +0,0 @@ -/* calloc -- allocate memory which has been initialized to zero. - This function is in the public domain. */ - -/* - -@deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize}) - -Uses @code{malloc} to allocate storage for @var{nelem} objects of -@var{elsize} bytes each, then zeros the memory. - -@end deftypefn - -*/ - -#include "ansidecl.h" -#include - -/* For systems with larger pointers than ints, this must be declared. */ -PTR malloc (size_t); -void bzero (PTR, size_t); - -PTR -calloc (size_t nelem, size_t elsize) -{ - register PTR ptr; - - if (nelem == 0 || elsize == 0) - nelem = elsize = 1; - - ptr = malloc (nelem * elsize); - if (ptr) bzero (ptr, nelem * elsize); - - return ptr; -} diff --git a/libiberty/choose-temp.c b/libiberty/choose-temp.c deleted file mode 100644 index 0cba9905d5b..00000000000 --- a/libiberty/choose-temp.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Utility to pick a temporary filename prefix. - Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If not, -write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include /* May get P_tmpdir. */ -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif - -#include "libiberty.h" -extern char *choose_tmpdir (void); - -/* Name of temporary file. - mktemp requires 6 trailing X's. */ -#define TEMP_FILE "ccXXXXXX" -#define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1) - -/* - -@deftypefn Extension char* choose_temp_base (void) - -Return a prefix for temporary file names or @code{NULL} if unable to -find one. The current directory is chosen if all else fails so the -program is exited if a temporary directory can't be found (@code{mktemp} -fails). The buffer for the result is obtained with @code{xmalloc}. - -This function is provided for backwards compatability only. Its use is -not recommended. - -@end deftypefn - -*/ - -char * -choose_temp_base (void) -{ - const char *base = choose_tmpdir (); - char *temp_filename; - int len; - - len = strlen (base); - temp_filename = XNEWVEC (char, len + TEMP_FILE_LEN + 1); - strcpy (temp_filename, base); - strcpy (temp_filename + len, TEMP_FILE); - - mktemp (temp_filename); - if (strlen (temp_filename) == 0) - abort (); - return temp_filename; -} diff --git a/libiberty/clock.c b/libiberty/clock.c deleted file mode 100644 index 07d902e8a16..00000000000 --- a/libiberty/clock.c +++ /dev/null @@ -1,103 +0,0 @@ -/* ANSI-compatible clock function. - Copyright (C) 1994, 1995, 1999 Free Software Foundation, Inc. - -This file is part of the libiberty library. This library 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, 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - -As a special exception, if you link this library with files -compiled with a GNU compiler to produce an executable, this does not cause -the resulting executable to be covered by the GNU General Public License. -This exception does not however invalidate any other reasons why -the executable file might be covered by the GNU General Public License. */ - -/* - -@deftypefn Supplemental long clock (void) - -Returns an approximation of the CPU time used by the process as a -@code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the -number of seconds used. - -@end deftypefn - -*/ - -#include "config.h" - -#ifdef HAVE_GETRUSAGE -#include -#include -#endif - -#ifdef HAVE_TIMES -#ifdef HAVE_SYS_PARAM_H -#include -#endif -#include -#endif - -#ifdef HAVE_UNISTD_H -#include -#endif - -#ifdef _SC_CLK_TCK -#define GNU_HZ sysconf(_SC_CLK_TCK) -#else -#ifdef HZ -#define GNU_HZ HZ -#else -#ifdef CLOCKS_PER_SEC -#define GNU_HZ CLOCKS_PER_SEC -#endif -#endif -#endif - -/* FIXME: should be able to declare as clock_t. */ - -long -clock (void) -{ -#ifdef HAVE_GETRUSAGE - struct rusage rusage; - - getrusage (0, &rusage); - return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec - + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec); -#else -#ifdef HAVE_TIMES - struct tms tms; - - times (&tms); - return (tms.tms_utime + tms.tms_stime) * (1000000 / GNU_HZ); -#else -#ifdef VMS - struct - { - int proc_user_time; - int proc_system_time; - int child_user_time; - int child_system_time; - } vms_times; - - times (&vms_times); - return (vms_times.proc_user_time + vms_times.proc_system_time) * 10000; -#else - /* A fallback, if nothing else available. */ - return 0; -#endif /* VMS */ -#endif /* HAVE_TIMES */ -#endif /* HAVE_GETRUSAGE */ -} - diff --git a/libiberty/concat.c b/libiberty/concat.c deleted file mode 100644 index 1f329ea0e15..00000000000 --- a/libiberty/concat.c +++ /dev/null @@ -1,232 +0,0 @@ -/* Concatenate variable number of strings. - Copyright (C) 1991, 1994, 2001 Free Software Foundation, Inc. - Written by Fred Fish @ Cygnus Support - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - - -/* - -@deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @dots{}, @code{NULL}) - -Concatenate zero or more of strings and return the result in freshly -@code{xmalloc}ed memory. Returns @code{NULL} if insufficient memory is -available. The argument list is terminated by the first @code{NULL} -pointer encountered. Pointers to empty strings are ignored. - -@end deftypefn - -NOTES - - This function uses xmalloc() which is expected to be a front end - function to malloc() that deals with low memory situations. In - typical use, if malloc() returns NULL then xmalloc() diverts to an - error handler routine which never returns, and thus xmalloc will - never return a NULL pointer. If the client application wishes to - deal with low memory situations itself, it should supply an xmalloc - that just directly invokes malloc and blindly returns whatever - malloc returns. - -*/ - - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "ansidecl.h" -#include "libiberty.h" -#include /* size_t */ - -#include - -# if HAVE_STRING_H -# include -# else -# if HAVE_STRINGS_H -# include -# endif -# endif - -#if HAVE_STDLIB_H -#include -#endif - -static inline unsigned long vconcat_length (const char *, va_list); -static inline unsigned long -vconcat_length (const char *first, va_list args) -{ - unsigned long length = 0; - const char *arg; - - for (arg = first; arg ; arg = va_arg (args, const char *)) - length += strlen (arg); - - return length; -} - -static inline char * -vconcat_copy (char *dst, const char *first, va_list args) -{ - char *end = dst; - const char *arg; - - for (arg = first; arg ; arg = va_arg (args, const char *)) - { - unsigned long length = strlen (arg); - memcpy (end, arg, length); - end += length; - } - *end = '\000'; - - return dst; -} - -/* @undocumented concat_length */ - -unsigned long -concat_length (const char *first, ...) -{ - unsigned long length; - - VA_OPEN (args, first); - VA_FIXEDARG (args, const char *, first); - length = vconcat_length (first, args); - VA_CLOSE (args); - - return length; -} - -/* @undocumented concat_copy */ - -char * -concat_copy (char *dst, const char *first, ...) -{ - char *save_dst; - - VA_OPEN (args, first); - VA_FIXEDARG (args, char *, dst); - VA_FIXEDARG (args, const char *, first); - vconcat_copy (dst, first, args); - save_dst = dst; /* With K&R C, dst goes out of scope here. */ - VA_CLOSE (args); - - return save_dst; -} - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ -char *libiberty_concat_ptr; -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -/* @undocumented concat_copy2 */ - -char * -concat_copy2 (const char *first, ...) -{ - VA_OPEN (args, first); - VA_FIXEDARG (args, const char *, first); - vconcat_copy (libiberty_concat_ptr, first, args); - VA_CLOSE (args); - - return libiberty_concat_ptr; -} - -char * -concat (const char *first, ...) -{ - char *newstr; - - /* First compute the size of the result and get sufficient memory. */ - VA_OPEN (args, first); - VA_FIXEDARG (args, const char *, first); - newstr = XNEWVEC (char, vconcat_length (first, args) + 1); - VA_CLOSE (args); - - /* Now copy the individual pieces to the result string. */ - VA_OPEN (args, first); - VA_FIXEDARG (args, const char *, first); - vconcat_copy (newstr, first, args); - VA_CLOSE (args); - - return newstr; -} - -/* - -@deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @dots{}, @code{NULL}) - -Same as @code{concat}, except that if @var{optr} is not @code{NULL} it -is freed after the string is created. This is intended to be useful -when you're extending an existing string or building up a string in a -loop: - -@example - str = reconcat (str, "pre-", str, NULL); -@end example - -@end deftypefn - -*/ - -char * -reconcat (char *optr, const char *first, ...) -{ - char *newstr; - - /* First compute the size of the result and get sufficient memory. */ - VA_OPEN (args, first); - VA_FIXEDARG (args, char *, optr); - VA_FIXEDARG (args, const char *, first); - newstr = XNEWVEC (char, vconcat_length (first, args) + 1); - VA_CLOSE (args); - - /* Now copy the individual pieces to the result string. */ - VA_OPEN (args, first); - VA_FIXEDARG (args, char *, optr); - VA_FIXEDARG (args, const char *, first); - vconcat_copy (newstr, first, args); - if (optr) /* Done before VA_CLOSE so optr stays in scope for K&R C. */ - free (optr); - VA_CLOSE (args); - - return newstr; -} - -#ifdef MAIN -#define NULLP (char *)0 - -/* Simple little test driver. */ - -#include - -int -main (void) -{ - printf ("\"\" = \"%s\"\n", concat (NULLP)); - printf ("\"a\" = \"%s\"\n", concat ("a", NULLP)); - printf ("\"ab\" = \"%s\"\n", concat ("a", "b", NULLP)); - printf ("\"abc\" = \"%s\"\n", concat ("a", "b", "c", NULLP)); - printf ("\"abcd\" = \"%s\"\n", concat ("ab", "cd", NULLP)); - printf ("\"abcde\" = \"%s\"\n", concat ("ab", "c", "de", NULLP)); - printf ("\"abcdef\" = \"%s\"\n", concat ("", "a", "", "bcd", "ef", NULLP)); - return 0; -} - -#endif diff --git a/libiberty/config.h-vms b/libiberty/config.h-vms deleted file mode 100644 index ccac6a2bcc7..00000000000 --- a/libiberty/config.h-vms +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef NEED_strerror -#define NEED_strerror -#endif -#ifndef NEED_basename -#define NEED_basename -#endif -#ifndef NEED_psignal -#define NEED_psignal -#endif -#ifndef NEED_on_exit -#define NEED_on_exit -#endif - diff --git a/libiberty/config.in b/libiberty/config.in deleted file mode 100644 index 436a58d7e79..00000000000 --- a/libiberty/config.in +++ /dev/null @@ -1,444 +0,0 @@ -/* config.in. Generated from configure.ac by autoheader. */ - -/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. - This function is required for alloca.c support on those systems. */ -#undef CRAY_STACKSEG_END - -/* Define to 1 if you have the header file. */ -#undef HAVE_ALLOCA_H - -/* Define to 1 if you have the `asprintf' function. */ -#undef HAVE_ASPRINTF - -/* Define to 1 if you have the `atexit' function. */ -#undef HAVE_ATEXIT - -/* Define to 1 if you have the `basename' function. */ -#undef HAVE_BASENAME - -/* Define to 1 if you have the `bcmp' function. */ -#undef HAVE_BCMP - -/* Define to 1 if you have the `bcopy' function. */ -#undef HAVE_BCOPY - -/* Define to 1 if you have the `bsearch' function. */ -#undef HAVE_BSEARCH - -/* Define to 1 if you have the `bzero' function. */ -#undef HAVE_BZERO - -/* Define to 1 if you have the `calloc' function. */ -#undef HAVE_CALLOC - -/* Define to 1 if you have the `canonicalize_file_name' function. */ -#undef HAVE_CANONICALIZE_FILE_NAME - -/* Define to 1 if you have the `clock' function. */ -#undef HAVE_CLOCK - -/* Define to 1 if you have the declaration of `asprintf', and to 0 if you - don't. */ -#undef HAVE_DECL_ASPRINTF - -/* Define to 1 if you have the declaration of `basename', and to 0 if you - don't. */ -#undef HAVE_DECL_BASENAME - -/* Define to 1 if you have the declaration of `calloc', and to 0 if you don't. - */ -#undef HAVE_DECL_CALLOC - -/* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */ -#undef HAVE_DECL_FFS - -/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't. - */ -#undef HAVE_DECL_GETENV - -/* Define to 1 if you have the declaration of `getopt', and to 0 if you don't. - */ -#undef HAVE_DECL_GETOPT - -/* Define to 1 if you have the declaration of `malloc', and to 0 if you don't. - */ -#undef HAVE_DECL_MALLOC - -/* Define to 1 if you have the declaration of `realloc', and to 0 if you - don't. */ -#undef HAVE_DECL_REALLOC - -/* Define to 1 if you have the declaration of `sbrk', and to 0 if you don't. - */ -#undef HAVE_DECL_SBRK - -/* Define to 1 if you have the declaration of `snprintf', and to 0 if you - don't. */ -#undef HAVE_DECL_SNPRINTF - -/* Define to 1 if you have the declaration of `strverscmp', and to 0 if you - don't. */ -#undef HAVE_DECL_STRVERSCMP - -/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you - don't. */ -#undef HAVE_DECL_VASPRINTF - -/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you - don't. */ -#undef HAVE_DECL_VSNPRINTF - -/* Define to 1 if you have the header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if you have the `ffs' function. */ -#undef HAVE_FFS - -/* Define to 1 if you have the `fork' function. */ -#undef HAVE_FORK - -/* Define to 1 if you have the `getcwd' function. */ -#undef HAVE_GETCWD - -/* Define to 1 if you have the `getpagesize' function. */ -#undef HAVE_GETPAGESIZE - -/* Define to 1 if you have the `getrusage' function. */ -#undef HAVE_GETRUSAGE - -/* Define to 1 if you have the `getsysinfo' function. */ -#undef HAVE_GETSYSINFO - -/* Define to 1 if you have the `gettimeofday' function. */ -#undef HAVE_GETTIMEOFDAY - -/* Define to 1 if you have the `index' function. */ -#undef HAVE_INDEX - -/* Define to 1 if you have the `insque' function. */ -#undef HAVE_INSQUE - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIMITS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MACHINE_HAL_SYSINFO_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MALLOC_H - -/* Define to 1 if you have the `memchr' function. */ -#undef HAVE_MEMCHR - -/* Define to 1 if you have the `memcmp' function. */ -#undef HAVE_MEMCMP - -/* Define to 1 if you have the `memcpy' function. */ -#undef HAVE_MEMCPY - -/* Define to 1 if you have the `memmove' function. */ -#undef HAVE_MEMMOVE - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `mempcpy' function. */ -#undef HAVE_MEMPCPY - -/* Define to 1 if you have the `memset' function. */ -#undef HAVE_MEMSET - -/* Define to 1 if you have the `mkstemps' function. */ -#undef HAVE_MKSTEMPS - -/* Define to 1 if you have a working `mmap' system call. */ -#undef HAVE_MMAP - -/* Define to 1 if you have the `on_exit' function. */ -#undef HAVE_ON_EXIT - -/* Define to 1 if you have the `psignal' function. */ -#undef HAVE_PSIGNAL - -/* Define to 1 if you have the `pstat_getdynamic' function. */ -#undef HAVE_PSTAT_GETDYNAMIC - -/* Define to 1 if you have the `pstat_getstatic' function. */ -#undef HAVE_PSTAT_GETSTATIC - -/* Define to 1 if you have the `putenv' function. */ -#undef HAVE_PUTENV - -/* Define to 1 if you have the `random' function. */ -#undef HAVE_RANDOM - -/* Define to 1 if you have the `realpath' function. */ -#undef HAVE_REALPATH - -/* Define to 1 if you have the `rename' function. */ -#undef HAVE_RENAME - -/* Define to 1 if you have the `rindex' function. */ -#undef HAVE_RINDEX - -/* Define to 1 if you have the `sbrk' function. */ -#undef HAVE_SBRK - -/* Define to 1 if you have the `setenv' function. */ -#undef HAVE_SETENV - -/* Define to 1 if you have the `sigsetmask' function. */ -#undef HAVE_SIGSETMASK - -/* Define to 1 if you have the `snprintf' function. */ -#undef HAVE_SNPRINTF - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDIO_EXT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the `stpcpy' function. */ -#undef HAVE_STPCPY - -/* Define to 1 if you have the `stpncpy' function. */ -#undef HAVE_STPNCPY - -/* Define to 1 if you have the `strcasecmp' function. */ -#undef HAVE_STRCASECMP - -/* Define to 1 if you have the `strchr' function. */ -#undef HAVE_STRCHR - -/* Define to 1 if you have the `strdup' function. */ -#undef HAVE_STRDUP - -/* Define to 1 if you have the `strerror' function. */ -#undef HAVE_STRERROR - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the `strncasecmp' function. */ -#undef HAVE_STRNCASECMP - -/* Define to 1 if you have the `strndup' function. */ -#undef HAVE_STRNDUP - -/* Define to 1 if you have the `strrchr' function. */ -#undef HAVE_STRRCHR - -/* Define to 1 if you have the `strsignal' function. */ -#undef HAVE_STRSIGNAL - -/* Define to 1 if you have the `strstr' function. */ -#undef HAVE_STRSTR - -/* Define to 1 if you have the `strtod' function. */ -#undef HAVE_STRTOD - -/* Define to 1 if you have the `strtol' function. */ -#undef HAVE_STRTOL - -/* Define to 1 if you have the `strtoul' function. */ -#undef HAVE_STRTOUL - -/* Define to 1 if you have the `strverscmp' function. */ -#undef HAVE_STRVERSCMP - -/* Define to 1 if you have the `sysconf' function. */ -#undef HAVE_SYSCONF - -/* Define to 1 if you have the `sysctl' function. */ -#undef HAVE_SYSCTL - -/* Define to 1 if you have the `sysmp' function. */ -#undef HAVE_SYSMP - -/* Define if you have the sys_errlist variable. */ -#undef HAVE_SYS_ERRLIST - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_FILE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_MMAN_H - -/* Define if you have the sys_nerr variable. */ -#undef HAVE_SYS_NERR - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_PARAM_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_PSTAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_RESOURCE_H - -/* Define if you have the sys_siglist variable. */ -#undef HAVE_SYS_SIGLIST - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SYSCTL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SYSINFO_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SYSMP_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SYSTEMCFG_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TABLE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIME_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have that is POSIX.1 compatible. */ -#undef HAVE_SYS_WAIT_H - -/* Define to 1 if you have the `table' function. */ -#undef HAVE_TABLE - -/* Define to 1 if you have the `times' function. */ -#undef HAVE_TIMES - -/* Define to 1 if you have the header file. */ -#undef HAVE_TIME_H - -/* Define to 1 if you have the `tmpnam' function. */ -#undef HAVE_TMPNAM - -/* Define if you have the \`uintptr_t' type. */ -#undef HAVE_UINTPTR_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the `vasprintf' function. */ -#undef HAVE_VASPRINTF - -/* Define to 1 if you have the `vfork' function. */ -#undef HAVE_VFORK - -/* Define to 1 if you have the header file. */ -#undef HAVE_VFORK_H - -/* Define to 1 if you have the `vfprintf' function. */ -#undef HAVE_VFPRINTF - -/* Define to 1 if you have the `vprintf' function. */ -#undef HAVE_VPRINTF - -/* Define to 1 if you have the `vsnprintf' function. */ -#undef HAVE_VSNPRINTF - -/* Define to 1 if you have the `vsprintf' function. */ -#undef HAVE_VSPRINTF - -/* Define to 1 if you have the `wait3' function. */ -#undef HAVE_WAIT3 - -/* Define to 1 if you have the `wait4' function. */ -#undef HAVE_WAIT4 - -/* Define to 1 if you have the `waitpid' function. */ -#undef HAVE_WAITPID - -/* Define to 1 if `fork' works. */ -#undef HAVE_WORKING_FORK - -/* Define to 1 if `vfork' works. */ -#undef HAVE_WORKING_VFORK - -/* Define to 1 if you have the `_doprnt' function. */ -#undef HAVE__DOPRNT - -/* Define if you have the _system_configuration variable. */ -#undef HAVE__SYSTEM_CONFIGURATION - -/* Define to 1 if you have the `__fsetlocking' function. */ -#undef HAVE___FSETLOCKING - -/* Define if canonicalize_file_name is not declared in system header files. */ -#undef NEED_DECLARATION_CANONICALIZE_FILE_NAME - -/* Define if errno must be declared even when is included. */ -#undef NEED_DECLARATION_ERRNO - -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -#undef NO_MINUS_C_MINUS_O - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* The size of a `int', as computed by sizeof. */ -#undef SIZEOF_INT - -/* Define if you know the direction of stack growth for your system; otherwise - it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows - toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -#undef STACK_DIRECTION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define to 1 if you can safely include both and . */ -#undef TIME_WITH_SYS_TIME - -/* Define to an unsigned 64-bit type available in the compiler. */ -#undef UNSIGNED_64BIT_TYPE - -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN - -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -#undef inline -#endif - -/* Define to `int' if does not define. */ -#undef pid_t - -/* Define to `unsigned long' if does not define. */ -#undef uintptr_t - -/* Define as `fork' if `vfork' does not work. */ -#undef vfork diff --git a/libiberty/config/mh-aix b/libiberty/config/mh-aix deleted file mode 100644 index 6b645058fa9..00000000000 --- a/libiberty/config/mh-aix +++ /dev/null @@ -1,9 +0,0 @@ -# This file is only needed by AIX 3.1. -HDEFINES = -D__IEEE_BIG_ENDIAN - -# Most releases of AIX 3.1 include an incorrect internal version of copysign -# in libc.a for use by some libc public functions including modf. The public -# version of copysign in libm.a is usable. For the sake of libg++ (which -# uses modf), we add copysign here. Supposedly, this problem is fixed in AIX -# 3.1.8 and above, including all releases of AIX 3.2. -EXTRA_OFILES = copysign.o diff --git a/libiberty/config/mh-cxux7 b/libiberty/config/mh-cxux7 deleted file mode 100644 index a924b0853fc..00000000000 --- a/libiberty/config/mh-cxux7 +++ /dev/null @@ -1 +0,0 @@ -HDEFINES = -DHARRIS_FLOAT_FORMAT diff --git a/libiberty/config/mh-fbsd21 b/libiberty/config/mh-fbsd21 deleted file mode 100644 index 1375a780bef..00000000000 --- a/libiberty/config/mh-fbsd21 +++ /dev/null @@ -1 +0,0 @@ -EXTRA_OFILES=vasprintf.o diff --git a/libiberty/config/mh-openedition b/libiberty/config/mh-openedition deleted file mode 100644 index 8de8ed16cc0..00000000000 --- a/libiberty/config/mh-openedition +++ /dev/null @@ -1,3 +0,0 @@ -HDEFINES = -D_ALL_SOURCE -DLE370 -CC=c89 - diff --git a/libiberty/config/mh-windows b/libiberty/config/mh-windows deleted file mode 100644 index 3ff5f794e9f..00000000000 --- a/libiberty/config/mh-windows +++ /dev/null @@ -1 +0,0 @@ -EXTRA_OFILES=asprintf.o strcasecmp.o strncasecmp.o vasprintf.o diff --git a/libiberty/configure b/libiberty/configure deleted file mode 100755 index ed7423a006e..00000000000 --- a/libiberty/configure +++ /dev/null @@ -1,9983 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59. -# -# Copyright (C) 2003 Free Software Foundation, Inc. -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - - -# PATH needs CR, and LINENO needs CR and PATH. -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_executable_p="test -f" - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -exec 6>&1 - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_config_libobj_dir=. -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Maximum number of lines to put in a shell here document. -# This variable seems obsolete. It should probably be removed, and -# only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - -ac_unique_file="xmalloc.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_STAT_H -# include -#endif -#if STDC_HEADERS -# include -# include -#else -# if HAVE_STDLIB_H -# include -# endif -#endif -#if HAVE_STRING_H -# if !STDC_HEADERS && HAVE_MEMORY_H -# include -# endif -# include -#endif -#if HAVE_STRINGS_H -# include -#endif -#if HAVE_INTTYPES_H -# include -#else -# if HAVE_STDINT_H -# include -# endif -#endif -#if HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libiberty_topdir MAINT NOTMAINT MAKEINFO BUILD_INFO PERL HAVE_PERL build build_cpu build_vendor build_os host host_cpu host_vendor host_os AR ac_ct_AR RANLIB ac_ct_RANLIB CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP ac_libiberty_warn_cflags NO_MINUS_C_MINUS_O OUTPUT_OPTION INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA EGREP LIBOBJS CHECK target_header_dir pexecute INSTALL_DEST datarootdir docdir htmldir LTLIBOBJS' -ac_subst_files='host_makefile_frag' - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -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' - -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 - - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` - - # 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_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$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 ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - eval "enable_$ac_feature=no" ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) 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 | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$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 | -n) - 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_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; - esac - eval "with_$ac_package='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - 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 "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; - esac -done - -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; - esac -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -# 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_confdir=`(dirname "$0") 2>/dev/null || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - 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 "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi -fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 - { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias -ac_env_CC_set=${CC+set} -ac_env_CC_value=$CC -ac_cv_env_CC_set=${CC+set} -ac_cv_env_CC_value=$CC -ac_env_CFLAGS_set=${CFLAGS+set} -ac_env_CFLAGS_value=$CFLAGS -ac_cv_env_CFLAGS_set=${CFLAGS+set} -ac_cv_env_CFLAGS_value=$CFLAGS -ac_env_LDFLAGS_set=${LDFLAGS+set} -ac_env_LDFLAGS_value=$LDFLAGS -ac_cv_env_LDFLAGS_set=${LDFLAGS+set} -ac_cv_env_LDFLAGS_value=$LDFLAGS -ac_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_env_CPPFLAGS_value=$CPPFLAGS -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_cv_env_CPPFLAGS_value=$CPPFLAGS -ac_env_CPP_set=${CPP+set} -ac_env_CPP_value=$CPP -ac_cv_env_CPP_set=${CPP+set} -ac_cv_env_CPP_value=$CPP - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # 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 <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -_ACEOF - - cat <<_ACEOF -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data [PREFIX/share] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --infodir=DIR info documentation [PREFIX/info] - --mandir=DIR man documentation [PREFIX/man] -_ACEOF - - cat <<\_ACEOF - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-maintainer-mode - enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer - --enable-install-libiberty Install headers for end users - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-target-subdir=SUBDIR Configuring in a subdirectory for target - --with-build-subdir=SUBDIR Configuring in a subdirectory for build - --with-cross-host=HOST Configuring with a cross compiler - --with-newlib Configuring with newlib - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have - headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -_ACEOF -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - ac_popdir=`pwd` - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - cd $ac_dir - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_srcdir/configure.gnu; then - echo - $SHELL $ac_srcdir/configure.gnu --help=recursive - elif test -f $ac_srcdir/configure; then - echo - $SHELL $ac_srcdir/configure --help=recursive - elif test -f $ac_srcdir/configure.ac || - test -f $ac_srcdir/configure.in; then - echo - $ac_configure --help - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir - done -fi - -test -n "$ac_init_help" && exit 0 -if $ac_init_version; then - cat <<\_ACEOF - -Copyright (C) 2003 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit 0 -fi -exec 5>config.log -cat >&5 <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was - - $ $0 $@ - -_ACEOF -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -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 || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -hostinfo = `(hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_sep= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - # Get rid of the leading space. - ac_sep=" " - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -{ - (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) - sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; - *) - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - sed "/^$/d" confdefs.h | sort - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status - ' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# 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 - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# 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 "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - - - - - - - - - - -# This works around the fact that libtool configuration may change LD -# for this particular configuration, but some shells, instead of -# keeping the changes in LD private, export them just because LD is -# exported. We don't use libtool yet, but some day we might, so... -ORIGINAL_LD_FOR_MULTILIBS=$LD - - -# Check whether --with-target-subdir or --without-target-subdir was given. -if test "${with_target_subdir+set}" = set; then - withval="$with_target_subdir" - -fi; - -# Check whether --with-build-subdir or --without-build-subdir was given. -if test "${with_build_subdir+set}" = set; then - withval="$with_build_subdir" - -fi; - -# Check whether --with-cross-host or --without-cross-host was given. -if test "${with_cross_host+set}" = set; then - withval="$with_cross_host" - -fi; - -# Check whether --with-newlib or --without-newlib was given. -if test "${with_newlib+set}" = set; then - withval="$with_newlib" - -fi; - -if test "${srcdir}" = "."; then - if test -n "${with_build_subdir}"; then - libiberty_topdir="${srcdir}/../.." - with_target_subdir= - elif test -z "${with_target_subdir}"; then - libiberty_topdir="${srcdir}/.." - else - if test "${with_target_subdir}" != "."; then - libiberty_topdir="${srcdir}/${with_multisrctop}../.." - else - libiberty_topdir="${srcdir}/${with_multisrctop}.." - fi - fi -else - libiberty_topdir="${srcdir}/.." -fi - -ac_aux_dir= -for ac_dir in $libiberty_topdir $srcdir/$libiberty_topdir; 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 - elif test -f $ac_dir/shtool; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $libiberty_topdir $srcdir/$libiberty_topdir" >&5 -echo "$as_me: error: cannot find install-sh or install.sh in $libiberty_topdir $srcdir/$libiberty_topdir" >&2;} - { (exit 1); exit 1; }; } -fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. - - - -echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 -echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 - # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then - enableval="$enable_maintainer_mode" - maintainer_mode=$enableval -else - maintainer_mode=no -fi; - -echo "$as_me:$LINENO: result: $maintainer_mode" >&5 -echo "${ECHO_T}$maintainer_mode" >&6 - -if test "$maintainer_mode" = "yes"; then - MAINT='' - NOTMAINT='#' -else - MAINT='#' - NOTMAINT='' -fi - -# Do we have a single-tree copy of texinfo? Even if we do, we can't -# rely on it - libiberty is built before texinfo. -# Extract the first word of "makeinfo", so it can be a program name with args. -set dummy makeinfo; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_MAKEINFO+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$MAKEINFO"; then - ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_MAKEINFO="makeinfo" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -MAKEINFO=$ac_cv_prog_MAKEINFO -if test -n "$MAKEINFO"; then - echo "$as_me:$LINENO: result: $MAKEINFO" >&5 -echo "${ECHO_T}$MAKEINFO" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -if test "x$MAKEINFO" = "x"; then - MAKEINFO="@echo makeinfo missing; true" - BUILD_INFO= -else - BUILD_INFO=info - case "$MAKEINFO" in - */missing\ makeinfo*) - BUILD_INFO= - { echo "$as_me:$LINENO: WARNING: -*** Makeinfo is missing. Info documentation will not be built." >&5 -echo "$as_me: WARNING: -*** Makeinfo is missing. Info documentation will not be built." >&2;} - ;; - *) - case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in - x*\ [1-3].* ) - MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true" - BUILD_INFO= - { echo "$as_me:$LINENO: WARNING: -*** Makeinfo is too old. Info documentation will not be built." >&5 -echo "$as_me: WARNING: -*** Makeinfo is too old. Info documentation will not be built." >&2;} - ;; - esac - ;; - esac -fi - - - -# Extract the first word of "perl", so it can be a program name with args. -set dummy perl; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_PERL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$PERL"; then - ac_cv_prog_PERL="$PERL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PERL="perl" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -PERL=$ac_cv_prog_PERL -if test -n "$PERL"; then - echo "$as_me:$LINENO: result: $PERL" >&5 -echo "${ECHO_T}$PERL" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -if test x"$PERL" = x""; then - HAVE_PERL='#' -else - HAVE_PERL='' -fi - - -# Make sure we can run config.sub. -$ac_config_sub sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 -echo "$as_me: error: cannot run $ac_config_sub" >&2;} - { (exit 1); exit 1; }; } - -echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6 -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_build_alias=$build_alias -test -z "$ac_cv_build_alias" && - ac_cv_build_alias=`$ac_config_guess` -test -z "$ac_cv_build_alias" && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } -ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6 -build=$ac_cv_build -build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - - -echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6 -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_host_alias=$host_alias -test -z "$ac_cv_host_alias" && - ac_cv_host_alias=$ac_cv_build_alias -ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6 -host=$ac_cv_host -host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 -echo "${ECHO_T}$ac_ct_AR" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - AR=$ac_ct_AR -else - AR="$ac_cv_prog_AR" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - RANLIB=$ac_ct_RANLIB -else - RANLIB="$ac_cv_prog_RANLIB" -fi - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi - -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 "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -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 $# != 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 - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_CC" && break -done - - CC=$ac_ct_CC -fi - -fi - - -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - -# Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -# FIXME: Cleanup? -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - gcc_no_link=no -else - gcc_no_link=yes -fi - -if test x$gcc_no_link = xyes; then - # Setting cross_compile will disable run tests; it will - # also disable AC_CHECK_FILE but that's generally - # correct if we can't link. - cross_compiling=yes - EXEEXT= -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 - (eval $ac_link_default) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Find the output, starting from the most likely. This scheme is -# not robust to junk in `.', hence go to wildcards (a.*) only as a last -# resort. - -# Be careful to initialize this variable, since it used to be cached. -# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. -ac_cv_exeext= -# b.out is created by i960 compilers. -for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) - ;; - conftest.$ac_ext ) - # This is the source file. - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - # FIXME: I believe we export ac_cv_exeext for Libtool, - # but it would be cool to find out if it's true. Does anybody - # maintain Libtool? --akim. - export ac_cv_exeext - break;; - * ) - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6 - -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -rm -f a.out a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6 - -echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - export ac_cv_exeext - break;; - * ) break;; - esac -done -else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -fi -echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -GCC=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -CFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_prog_cc_g=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&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 "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 -echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_prog_cc_stdc=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std1 is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -# Don't try gcc -ansi; that turns off useful extensions and -# breaks some systems' header files. -# AIX -qlanglvl=ansi -# Ultrix and OSF/1 -std1 -# HP-UX 10.20 and later -Ae -# HP-UX older versions -Aa -D_HPUX_SOURCE -# SVR4 -Xc -D__EXTENSIONS__ -for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_stdc=$ac_arg -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext -done -rm -f conftest.$ac_ext conftest.$ac_objext -CC=$ac_save_CC - -fi - -case "x$ac_cv_prog_cc_stdc" in - x|xno) - echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6 ;; - *) - echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 - CC="$CC $ac_cv_prog_cc_stdc" ;; -esac - -# Some people use a C++ compiler to compile C. Since we use `exit', -# in C++ we need to declare it. In case someone uses the same compiler -# for both compiling C and C++ we need to have the C++ compiler decide -# the declaration of exit, since it's the most demanding environment. -cat >conftest.$ac_ext <<_ACEOF -#ifndef __cplusplus - choke me -#endif -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6 -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_c_preproc_warn_flag=yes - -# Warn C++ incompatibilities if supported. - -echo "$as_me:$LINENO: checking whether ${CC} accepts -Wc++-compat" >&5 -echo $ECHO_N "checking whether ${CC} accepts -Wc++-compat... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_w_cxx_compat+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - save_CFLAGS="$CFLAGS" - CFLAGS="-Wc++-compat" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_w_cxx_compat=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_prog_cc_w_cxx_compat=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$save_CFLAGS" - -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_w_cxx_compat" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_w_cxx_compat" >&6 - - -if test x$GCC = xyes; then - ac_libiberty_warn_cflags='-W -Wall -pedantic -Wwrite-strings -Wstrict-prototypes' -fi -if test $ac_cv_prog_cc_w_cxx_compat = yes ; then - ac_libiberty_warn_cflags="${ac_libiberty_warn_cflags} -Wc++-compat" -fi - - -if test "x$CC" != xcc; then - echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5 -echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6 -else - echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5 -echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6 -fi -set dummy $CC; ac_cc=`echo $2 | - sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -# Make sure it works both with $CC and with simple cc. -# We do the test twice because some compilers refuse to overwrite an -# existing .o file with -o, though they will create one. -ac_try='$CC -c conftest.$ac_ext -o conftest.$ac_objext >&5' -if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; -then - eval ac_cv_prog_cc_${ac_cc}_c_o=yes - if test "x$CC" != xcc; then - # Test first that cc exists at all. - if { ac_try='cc -c conftest.$ac_ext >&5' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_try='cc -c conftest.$ac_ext -o conftest.$ac_objext >&5' - if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; - then - # cc works too. - : - else - # cc exists but doesn't like -o. - eval ac_cv_prog_cc_${ac_cc}_c_o=no - fi - fi - fi -else - eval ac_cv_prog_cc_${ac_cc}_c_o=no -fi -rm -f conftest* - -fi -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - -cat >>confdefs.h <<\_ACEOF -#define NO_MINUS_C_MINUS_O 1 -_ACEOF - -fi - -# autoconf is lame and doesn't give us any substitution variable for this. -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then - NO_MINUS_C_MINUS_O=yes -else - OUTPUT_OPTION='-o $@' -fi - - - -echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 -echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 -if test "${ac_cv_c_const+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset x; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *ccp; - char **p; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - ccp = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++ccp; - p = (char**) ccp; - ccp = (char const *const *) p; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - } -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_const=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_c_const=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 -echo "${ECHO_T}$ac_cv_c_const" >&6 -if test $ac_cv_c_const = no; then - -cat >>confdefs.h <<\_ACEOF -#define const -_ACEOF - -fi - -echo "$as_me:$LINENO: checking for inline" >&5 -echo $ECHO_N "checking for inline... $ECHO_C" >&6 -if test "${ac_cv_c_inline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo () {return 0; } -$ac_kw foo_t foo () {return 0; } -#endif - -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_inline=$ac_kw; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done - -fi -echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 -echo "${ECHO_T}$ac_cv_c_inline" >&6 - - -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac - -echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6 -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include - -int -main () -{ -#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN - bogus endian macros -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_bigendian=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_c_bigendian=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -# It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } -int -main () -{ - _ascii (); _ebcdic (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then - ac_cv_c_bigendian=yes -fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -int -main () -{ - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long l; - char c[sizeof (long)]; - } u; - u.l = 1; - exit (u.c[sizeof (long) - 1] == 1); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_bigendian=no -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_bigendian=yes -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6 -case $ac_cv_c_bigendian in - yes) - -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac - - - - - ac_config_headers="$ac_config_headers config.h:config.in" - - - -# 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 -# AmigaOS /C/install, which installs bootblocks on floppy discs -# 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" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ - /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 - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - done - done - ;; -esac -done - - -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 "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&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}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - -# Don't build the shared library for build. -if [ -n "${with_build_subdir}" ]; then - enable_shared=no -fi - -frag= -case "${host}" in - rs6000-ibm-aix3.1 | rs6000-ibm-aix) - frag=mh-aix ;; - *-*-cxux7*) frag=mh-cxux7 ;; - *-*-freebsd2.1.*) frag=mh-fbsd21 ;; - *-*-freebsd2.2.[012]) frag=mh-fbsd21 ;; - i370-*-opened*) frag=mh-openedition ;; - i[34567]86-*-windows*) frag=mh-windows ;; -esac - -if [ -n "${frag}" ]; then - frags=${libiberty_topdir}/libiberty/config/$frag -else - frags= -fi - -# If they didn't specify --enable-shared, don't generate shared libs. -case "${enable_shared}" in - yes) shared=yes ;; - no) shared=no ;; - "") shared=no ;; - *) shared=yes ;; -esac -if [ "${shared}" = "yes" ]; then - frag= - case "${host}" in - *-*-cygwin*) ;; - alpha*-*-linux*) frag=mh-elfalphapic ;; - arm*-*-*) frag=mh-armpic ;; - hppa*-*-*) frag=mh-papic ;; - i[34567]86-*-* | x86_64-*-*) - frag=mh-x86pic ;; - powerpc*-*-aix*) ;; - powerpc*-*-*) frag=mh-ppcpic ;; - sparc*-*-*) frag=mh-sparcpic ;; - s390*-*-*) frag=mh-s390pic ;; - *) frag=mh-${host_cpu}pic ;; - esac - if [ -n "${frag}" ]; then - frags="${frags} ${libiberty_topdir}/config/${frag}" - fi -fi - -echo "# Warning: this fragment is automatically generated" > temp-frag - -for frag in ${frags}; do - if [ -f ${frag} ]; then - echo "Appending ${frag} to xhost-mkfrag" - echo "# Following fragment copied from ${frag}" >> temp-frag - cat ${frag} >> temp-frag - fi -done - -# record if we want to build shared libs. -if [ "${shared}" = "yes" ]; then - echo enable_shared = yes >> temp-frag -else - echo enable_shared = no >> temp-frag -fi - -frag=xhost-mkfrag -${CONFIG_SHELL-/bin/sh} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag - -host_makefile_frag=${frag} - - -# It's OK to check for header files. Although the compiler may not be -# able to link anything, it had better be able to at least compile -# something. - - - - - - - - - - - - - - - - - - - - - - - - - -for ac_header in sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 -echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6 -if test "${ac_cv_header_sys_wait_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#ifndef WEXITSTATUS -# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) -#endif -#ifndef WIFEXITED -# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) -#endif - -int -main () -{ - int s; - wait (&s); - s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_header_sys_wait_h=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_sys_wait_h=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6 -if test $ac_cv_header_sys_wait_h = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_WAIT_H 1 -_ACEOF - -fi - -echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 -echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 -if test "${ac_cv_header_time+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include - -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_header_time=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_time=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 -echo "${ECHO_T}$ac_cv_header_time" >&6 -if test $ac_cv_header_time = yes; then - -cat >>confdefs.h <<\_ACEOF -#define TIME_WITH_SYS_TIME 1 -_ACEOF - -fi - - -echo "$as_me:$LINENO: checking whether errno must be declared" >&5 -echo $ECHO_N "checking whether errno must be declared... $ECHO_C" >&6 -if test "${libiberty_cv_declare_errno+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -int x = errno; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - libiberty_cv_declare_errno=no -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -libiberty_cv_declare_errno=yes -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $libiberty_cv_declare_errno" >&5 -echo "${ECHO_T}$libiberty_cv_declare_errno" >&6 -if test $libiberty_cv_declare_errno = yes -then -cat >>confdefs.h <<\_ACEOF -#define NEED_DECLARATION_ERRNO 1 -_ACEOF - -fi - - -# Determine the size of an int for struct fibnode. -echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6 -if test "${ac_cv_prog_egrep+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' - fi -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 -echo "${ECHO_T}$ac_cv_prog_egrep" >&6 - EGREP=$ac_cv_prog_egrep - - -echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - 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 <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - 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 <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#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); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -echo "$as_me:$LINENO: checking for int" >&5 -echo $ECHO_N "checking for int... $ECHO_C" >&6 -if test "${ac_cv_type_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int *) 0) - return 0; -if (sizeof (int)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 -echo "${ECHO_T}$ac_cv_type_int" >&6 - -echo "$as_me:$LINENO: checking size of int" >&5 -echo $ECHO_N "checking size of int... $ECHO_C" >&6 -if test "${ac_cv_sizeof_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$ac_cv_type_int" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_int=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (int)); } -unsigned long ulongval () { return (long) (sizeof (int)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (int))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_int=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int" >&6 -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT $ac_cv_sizeof_int -_ACEOF - - - -echo "$as_me:$LINENO: checking for uintptr_t" >&5 -echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6 -if test "${ac_cv_type_uintptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uintptr_t *) 0) - return 0; -if (sizeof (uintptr_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uintptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uintptr_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6 -if test $ac_cv_type_uintptr_t = yes; then - : -else - -cat >>confdefs.h <<_ACEOF -#define uintptr_t unsigned long -_ACEOF - -fi - - -# Look for a 64-bit type. -echo "$as_me:$LINENO: checking for a 64-bit type" >&5 -echo $ECHO_N "checking for a 64-bit type... $ECHO_C" >&6 -if test "${liberty_cv_uint64+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_STDINT_H -#include -#endif -int -main () -{ -extern uint64_t foo; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - liberty_cv_uint64=uint64_t -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_LIMITS_H -#include -#endif -#ifndef CHAR_BIT -#define CHAR_BIT 8 -#endif -int -main () -{ -extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1]; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - liberty_cv_uint64="unsigned long" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_LIMITS_H -#include -#endif -#ifndef CHAR_BIT -#define CHAR_BIT 8 -#endif -int -main () -{ -extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1]; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - liberty_cv_uint64="unsigned long long" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -liberty_cv_uint64=none -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -echo "$as_me:$LINENO: result: $liberty_cv_uint64" >&5 -echo "${ECHO_T}$liberty_cv_uint64" >&6 -if test "$liberty_cv_uint64" != none; then - -cat >>confdefs.h <<_ACEOF -#define UNSIGNED_64BIT_TYPE $liberty_cv_uint64 -_ACEOF - -fi - -# Given the above check, we always have uintptr_t or a fallback -# definition. So define HAVE_UINTPTR_T in case any imported code -# relies on it. - -cat >>confdefs.h <<\_ACEOF -#define HAVE_UINTPTR_T 1 -_ACEOF - - -echo "$as_me:$LINENO: checking for pid_t" >&5 -echo $ECHO_N "checking for pid_t... $ECHO_C" >&6 -if test "${ac_cv_type_pid_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((pid_t *) 0) - return 0; -if (sizeof (pid_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_pid_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_pid_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 -echo "${ECHO_T}$ac_cv_type_pid_t" >&6 -if test $ac_cv_type_pid_t = yes; then - : -else - -cat >>confdefs.h <<_ACEOF -#define pid_t int -_ACEOF - -fi - - -# This is the list of functions which libiberty will provide if they -# are not available on the host. - -funcs="asprintf" -funcs="$funcs atexit" -funcs="$funcs basename" -funcs="$funcs bcmp" -funcs="$funcs bcopy" -funcs="$funcs bsearch" -funcs="$funcs bzero" -funcs="$funcs calloc" -funcs="$funcs clock" -funcs="$funcs ffs" -funcs="$funcs getcwd" -funcs="$funcs getpagesize" -funcs="$funcs gettimeofday" -funcs="$funcs index" -funcs="$funcs insque" -funcs="$funcs memchr" -funcs="$funcs memcmp" -funcs="$funcs memcpy" -funcs="$funcs memmove" -funcs="$funcs mempcpy" -funcs="$funcs memset" -funcs="$funcs mkstemps" -funcs="$funcs putenv" -funcs="$funcs random" -funcs="$funcs rename" -funcs="$funcs rindex" -funcs="$funcs setenv" -funcs="$funcs snprintf" -funcs="$funcs sigsetmask" -funcs="$funcs stpcpy" -funcs="$funcs stpncpy" -funcs="$funcs strcasecmp" -funcs="$funcs strchr" -funcs="$funcs strdup" -funcs="$funcs strncasecmp" -funcs="$funcs strndup" -funcs="$funcs strrchr" -funcs="$funcs strstr" -funcs="$funcs strtod" -funcs="$funcs strtol" -funcs="$funcs strtoul" -funcs="$funcs strverscmp" -funcs="$funcs tmpnam" -funcs="$funcs vasprintf" -funcs="$funcs vfprintf" -funcs="$funcs vprintf" -funcs="$funcs vsnprintf" -funcs="$funcs vsprintf" -funcs="$funcs waitpid" - -# Also in the old function.def file: alloca, vfork, getopt. - -vars="sys_errlist sys_nerr sys_siglist" - -checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday" -checkfuncs="$checkfuncs realpath canonicalize_file_name pstat_getstatic pstat_getdynamic sysmp" -checkfuncs="$checkfuncs getsysinfo table sysctl wait3 wait4 __fsetlocking" - -# These are neither executed nor required, but they help keep -# autoheader happy without adding a bunch of text to acconfig.h. -if test "x" = "y"; then - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -for ac_func in asprintf atexit basename bcmp bcopy bsearch bzero calloc clock \ - getcwd getpagesize gettimeofday index insque mkstemps memchr memcmp memcpy \ - memmove mempcpy memset putenv random rename rindex sigsetmask \ - strcasecmp setenv stpcpy stpncpy strchr strdup strncasecmp strndup strrchr strstr \ - strtod strtol strtoul strverscmp tmpnam vasprintf vfprintf vprintf \ - vsprintf waitpid getrusage on_exit psignal strerror strsignal \ - sysconf times sbrk gettimeofday ffs snprintf vsnprintf \ - pstat_getstatic pstat_getdynamic sysmp getsysinfo table sysctl wait3 wait4 \ - realpath canonicalize_file_name __fsetlocking -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test x$gcc_no_link = xyes; then - { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 -echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} - { (exit 1); exit 1; }; } -fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. Under hpux, - including includes and causes problems - checking for functions defined therein. */ -#if defined (__STDC__) && !defined (_HPUX_SOURCE) -# include -#else -# include -#endif -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* 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 (); -/* 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 -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - echo "$as_me:$LINENO: checking whether basename is declared" >&5 -echo $ECHO_N "checking whether basename is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_basename+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef basename - char *p = (char *) basename; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_basename=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_basename=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_basename" >&5 -echo "${ECHO_T}$ac_cv_have_decl_basename" >&6 -if test $ac_cv_have_decl_basename = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_BASENAME 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_BASENAME 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether ffs is declared" >&5 -echo $ECHO_N "checking whether ffs is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_ffs+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef ffs - char *p = (char *) ffs; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_ffs=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_ffs=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_ffs" >&5 -echo "${ECHO_T}$ac_cv_have_decl_ffs" >&6 -if test $ac_cv_have_decl_ffs = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FFS 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FFS 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether asprintf is declared" >&5 -echo $ECHO_N "checking whether asprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_asprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef asprintf - char *p = (char *) asprintf; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_asprintf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_asprintf=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_asprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_asprintf" >&6 -if test $ac_cv_have_decl_asprintf = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ASPRINTF 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ASPRINTF 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether vasprintf is declared" >&5 -echo $ECHO_N "checking whether vasprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_vasprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef vasprintf - char *p = (char *) vasprintf; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_vasprintf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_vasprintf=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_vasprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_vasprintf" >&6 -if test $ac_cv_have_decl_vasprintf = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VASPRINTF 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VASPRINTF 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 -echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_snprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef snprintf - char *p = (char *) snprintf; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_snprintf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_snprintf=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6 -if test $ac_cv_have_decl_snprintf = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SNPRINTF 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SNPRINTF 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 -echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_vsnprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef vsnprintf - char *p = (char *) vsnprintf; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_vsnprintf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_vsnprintf=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6 -if test $ac_cv_have_decl_vsnprintf = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VSNPRINTF 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VSNPRINTF 0 -_ACEOF - - -fi - - - -cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_ERRLIST 1 -_ACEOF - - -cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_NERR 1 -_ACEOF - - -cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_SIGLIST 1 -_ACEOF - -fi - -# For each of these functions, if the host does not provide the -# function we want to put FN.o in LIBOBJS, and if the host does -# provide the function, we want to define HAVE_FN in config.h. - -setobjs= -CHECK= -target_header_dir= -if test -n "${with_target_subdir}"; then - - # We are being configured as a target library. AC_REPLACE_FUNCS - # may not work correctly, because the compiler may not be able to - # link executables. Note that we may still be being configured - # native. - - # If we are being configured for newlib, we know which functions - # newlib provide and which ones we will be expected to provide. - - if test "x${with_newlib}" = "xyes"; then - case $LIBOBJS in - "asprintf.$ac_objext" | \ - *" asprintf.$ac_objext" | \ - "asprintf.$ac_objext "* | \ - *" asprintf.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS asprintf.$ac_objext" ;; -esac - - case $LIBOBJS in - "basename.$ac_objext" | \ - *" basename.$ac_objext" | \ - "basename.$ac_objext "* | \ - *" basename.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS basename.$ac_objext" ;; -esac - - case $LIBOBJS in - "insque.$ac_objext" | \ - *" insque.$ac_objext" | \ - "insque.$ac_objext "* | \ - *" insque.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS insque.$ac_objext" ;; -esac - - case $LIBOBJS in - "random.$ac_objext" | \ - *" random.$ac_objext" | \ - "random.$ac_objext "* | \ - *" random.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS random.$ac_objext" ;; -esac - - case $LIBOBJS in - "strdup.$ac_objext" | \ - *" strdup.$ac_objext" | \ - "strdup.$ac_objext "* | \ - *" strdup.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS strdup.$ac_objext" ;; -esac - - case $LIBOBJS in - "vasprintf.$ac_objext" | \ - *" vasprintf.$ac_objext" | \ - "vasprintf.$ac_objext "* | \ - *" vasprintf.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext" ;; -esac - - - for f in $funcs; do - case "$f" in - asprintf | basename | insque | random | strdup | vasprintf) - ;; - *) - n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >>confdefs.h <<_ACEOF -#define $n 1 -_ACEOF - - ;; - esac - done - - # newlib doesnt provide any of the variables in $vars, so we - # dont have to check them here. - - # Of the functions in $checkfuncs, newlib only has strerror. - cat >>confdefs.h <<\_ACEOF -#define HAVE_STRERROR 1 -_ACEOF - - - setobjs=yes - - fi - - # We may wish to install the target headers somewhere. - # Check whether --enable-install-libiberty or --disable-install-libiberty was given. -if test "${enable_install_libiberty+set}" = set; then - enableval="$enable_install_libiberty" - enable_install_libiberty=$enableval -else - enable_install_libiberty=no -fi; - # Option parsed, now set things appropriately. - case x"$enable_install_libiberty" in - xyes|x) - target_header_dir=libiberty - ;; - xno) - target_header_dir= - ;; - *) - # This could be sanity-checked in various ways... - target_header_dir="${enable_install_libiberty}" - ;; - esac - - -else - - # Not a target library, so we set things up to run the test suite. - CHECK=really-check - -fi - - - - -case "${host}" in - *-*-cygwin* | *-*-mingw*) - cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_ERRLIST 1 -_ACEOF - - cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_NERR 1 -_ACEOF - - ;; -esac - -if test -z "${setobjs}"; then - case "${host}" in - - *-*-vxworks*) - # Handle VxWorks configuration specially, since on VxWorks the - # libraries are actually on the target board, not in the file - # system. - case $LIBOBJS in - "basename.$ac_objext" | \ - *" basename.$ac_objext" | \ - "basename.$ac_objext "* | \ - *" basename.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS basename.$ac_objext" ;; -esac - - case $LIBOBJS in - "getpagesize.$ac_objext" | \ - *" getpagesize.$ac_objext" | \ - "getpagesize.$ac_objext "* | \ - *" getpagesize.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS getpagesize.$ac_objext" ;; -esac - - case $LIBOBJS in - "insque.$ac_objext" | \ - *" insque.$ac_objext" | \ - "insque.$ac_objext "* | \ - *" insque.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS insque.$ac_objext" ;; -esac - - case $LIBOBJS in - "random.$ac_objext" | \ - *" random.$ac_objext" | \ - "random.$ac_objext "* | \ - *" random.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS random.$ac_objext" ;; -esac - - case $LIBOBJS in - "strcasecmp.$ac_objext" | \ - *" strcasecmp.$ac_objext" | \ - "strcasecmp.$ac_objext "* | \ - *" strcasecmp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS strcasecmp.$ac_objext" ;; -esac - - case $LIBOBJS in - "strncasecmp.$ac_objext" | \ - *" strncasecmp.$ac_objext" | \ - "strncasecmp.$ac_objext "* | \ - *" strncasecmp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS strncasecmp.$ac_objext" ;; -esac - - case $LIBOBJS in - "strdup.$ac_objext" | \ - *" strdup.$ac_objext" | \ - "strdup.$ac_objext "* | \ - *" strdup.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS strdup.$ac_objext" ;; -esac - - case $LIBOBJS in - "vfork.$ac_objext" | \ - *" vfork.$ac_objext" | \ - "vfork.$ac_objext "* | \ - *" vfork.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS vfork.$ac_objext" ;; -esac - - case $LIBOBJS in - "waitpid.$ac_objext" | \ - *" waitpid.$ac_objext" | \ - "waitpid.$ac_objext "* | \ - *" waitpid.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS waitpid.$ac_objext" ;; -esac - - case $LIBOBJS in - "vasprintf.$ac_objext" | \ - *" vasprintf.$ac_objext" | \ - "vasprintf.$ac_objext "* | \ - *" vasprintf.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext" ;; -esac - - for f in $funcs; do - case "$f" in - basename | getpagesize | insque | random | strcasecmp) - ;; - strncasecmp | strdup | vfork | waitpid | vasprintf) - ;; - *) - n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >>confdefs.h <<_ACEOF -#define $n 1 -_ACEOF - - ;; - esac - done - - # VxWorks doesn't provide any of the variables in $vars, so we - # don't have to check them here. - - # Of the functions in $checkfuncs, VxWorks only has strerror. - cat >>confdefs.h <<\_ACEOF -#define HAVE_STRERROR 1 -_ACEOF - - - setobjs=yes - ;; - - esac -fi - -if test -z "${setobjs}"; then - - case "${host}" in - - *-*-cygwin*) - # The Cygwin library actually uses a couple of files from - # libiberty when it is built. If we are building a native - # Cygwin, and we run the tests, we will appear to have these - # files. However, when we go on to build winsup, we will wind up - # with a library which does not have the files, since they should - # have come from libiberty. - - # We handle this by removing the functions the winsup library - # provides from our shell variables, so that they appear to be - # missing. - - # DJ - only if we're *building* cygwin, not just building *with* cygwin - - if test -n "${with_target_subdir}" - then - funcs="`echo $funcs | sed -e 's/random//'`" - case $LIBOBJS in - "random.$ac_objext" | \ - *" random.$ac_objext" | \ - "random.$ac_objext "* | \ - *" random.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS random.$ac_objext" ;; -esac - - vars="`echo $vars | sed -e 's/sys_siglist//'`" - checkfuncs="`echo $checkfuncs | sed -e 's/strsignal//' -e 's/psignal//'`" - fi - ;; - - *-*-mingw32*) - # Under mingw32, sys_nerr and sys_errlist exist, but they are - # macros, so the test below won't find them. - libiberty_cv_var_sys_nerr=yes - libiberty_cv_var_sys_errlist=yes - ;; - - *-*-msdosdjgpp*) - # vfork and fork are stubs. - ac_cv_func_vfork_works=no - ;; - - *-*-uwin*) - # Under some versions of uwin, vfork is notoriously buggy and the test - # can hang configure; on other versions, vfork exists just as a stub. - # FIXME: This should be removed once vfork in uwin's runtime is fixed. - ac_cv_func_vfork_works=no - # Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are - # macros (actually, these are imported from a DLL, but the end effect - # is the same), so the test below won't find them. - libiberty_cv_var_sys_nerr=yes - libiberty_cv_var_sys_errlist=yes - ;; - - *-*-*vms*) - # Under VMS, vfork works very different than on Unix. The standard test - # won't work, and it isn't easily adaptable. It makes more sense to - # just force it. - ac_cv_func_vfork_works=yes - ;; - - esac - - # We haven't set the list of objects yet. Use the standard autoconf - # tests. This will only work if the compiler works. - echo "$as_me:$LINENO: checking for library containing strerror" >&5 -echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 -if test "${ac_cv_search_strerror+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -ac_cv_search_strerror=no -if test x$gcc_no_link = xyes; then - { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 -echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} - { (exit 1); exit 1; }; } -fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char strerror (); -int -main () -{ -strerror (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_strerror="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_strerror" = no; then - for ac_lib in cposix; do - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - if test x$gcc_no_link = xyes; then - { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 -echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} - { (exit 1); exit 1; }; } -fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char strerror (); -int -main () -{ -strerror (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_strerror="-l$ac_lib" -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done -fi -LIBS=$ac_func_search_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 -echo "${ECHO_T}$ac_cv_search_strerror" >&6 -if test "$ac_cv_search_strerror" != no; then - test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" - -fi - - -for ac_func in $funcs -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test x$gcc_no_link = xyes; then - { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 -echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} - { (exit 1); exit 1; }; } -fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. Under hpux, - including includes and causes problems - checking for functions defined therein. */ -#if defined (__STDC__) && !defined (_HPUX_SOURCE) -# include -#else -# include -#endif -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* 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 (); -/* 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 -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -else - case $LIBOBJS in - "$ac_func.$ac_objext" | \ - *" $ac_func.$ac_objext" | \ - "$ac_func.$ac_objext "* | \ - *" $ac_func.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;; -esac - -fi -done - - - echo "$as_me:$LINENO: checking whether alloca needs Cray hooks" >&5 -echo $ECHO_N "checking whether alloca needs Cray hooks... $ECHO_C" >&6 -if test "${ac_cv_os_cray+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if defined(CRAY) && ! defined(CRAY2) -webecray -#else -wenotbecray -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* - -fi -echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 -echo "${ECHO_T}$ac_cv_os_cray" >&6 -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test x$gcc_no_link = xyes; then - { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 -echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} - { (exit 1); exit 1; }; } -fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. Under hpux, - including includes and causes problems - checking for functions defined therein. */ -#if defined (__STDC__) && !defined (_HPUX_SOURCE) -# include -#else -# include -#endif -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* 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 (); -/* 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 -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - break -fi - - done -fi - -echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 -echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 -if test "${ac_cv_c_stack_direction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_c_stack_direction=0 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} -main () -{ - exit (find_stack_direction() < 0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_stack_direction=1 -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_stack_direction=-1 -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 -echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 - -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - - - - -for ac_header in unistd.h vfork.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - - -for ac_func in fork vfork -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test x$gcc_no_link = xyes; then - { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 -echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} - { (exit 1); exit 1; }; } -fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. Under hpux, - including includes and causes problems - checking for functions defined therein. */ -#if defined (__STDC__) && !defined (_HPUX_SOURCE) -# include -#else -# include -#endif -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* 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 (); -/* 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 -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -if test "x$ac_cv_func_fork" = xyes; then - echo "$as_me:$LINENO: checking for working fork" >&5 -echo $ECHO_N "checking for working fork... $ECHO_C" >&6 -if test "${ac_cv_func_fork_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_fork_works=cross -else - cat >conftest.$ac_ext <<_ACEOF -/* By Ruediger Kuhlmann. */ - #include - #if HAVE_UNISTD_H - # include - #endif - /* Some systems only have a dummy stub for fork() */ - int main () - { - if (fork() < 0) - exit (1); - exit (0); - } -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_fork_works=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_func_fork_works=no -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5 -echo "${ECHO_T}$ac_cv_func_fork_works" >&6 - -else - ac_cv_func_fork_works=$ac_cv_func_fork -fi -if test "x$ac_cv_func_fork_works" = xcross; then - case $host in - *-*-amigaos* | *-*-msdosdjgpp*) - # Override, as these systems have only a dummy fork() stub - ac_cv_func_fork_works=no - ;; - *) - ac_cv_func_fork_works=yes - ;; - esac - { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 -echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} -fi -ac_cv_func_vfork_works=$ac_cv_func_vfork -if test "x$ac_cv_func_vfork" = xyes; then - echo "$as_me:$LINENO: checking for working vfork" >&5 -echo $ECHO_N "checking for working vfork... $ECHO_C" >&6 -if test "${ac_cv_func_vfork_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_vfork_works=cross -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Thanks to Paul Eggert for this test. */ -#include -#include -#include -#include -#include -#if HAVE_UNISTD_H -# include -#endif -#if HAVE_VFORK_H -# include -#endif -/* On some sparc systems, changes by the child to local and incoming - argument registers are propagated back to the parent. The compiler - is told about this with #include , but some compilers - (e.g. gcc -O) don't grok . Test for this by using a - static variable whose address is put into a register that is - clobbered by the vfork. */ -static void -#ifdef __cplusplus -sparc_address_test (int arg) -# else -sparc_address_test (arg) int arg; -#endif -{ - static pid_t child; - if (!child) { - child = vfork (); - if (child < 0) { - perror ("vfork"); - _exit(2); - } - if (!child) { - arg = getpid(); - write(-1, "", 0); - _exit (arg); - } - } -} - -int -main () -{ - pid_t parent = getpid (); - pid_t child; - - sparc_address_test (0); - - child = vfork (); - - if (child == 0) { - /* Here is another test for sparc vfork register problems. This - test uses lots of local variables, at least as many local - variables as main has allocated so far including compiler - temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris - 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should - reuse the register of parent for one of the local variables, - since it will think that parent can't possibly be used any more - in this routine. Assigning to the local variable will thus - munge parent in the parent process. */ - pid_t - p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), - p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); - /* Convince the compiler that p..p7 are live; otherwise, it might - use the same hardware register for all 8 local variables. */ - if (p != p1 || p != p2 || p != p3 || p != p4 - || p != p5 || p != p6 || p != p7) - _exit(1); - - /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent - from child file descriptors. If the child closes a descriptor - before it execs or exits, this munges the parent's descriptor - as well. Test for this by closing stdout in the child. */ - _exit(close(fileno(stdout)) != 0); - } else { - int status; - struct stat st; - - while (wait(&status) != child) - ; - exit( - /* Was there some problem with vforking? */ - child < 0 - - /* Did the child fail? (This shouldn't happen.) */ - || status - - /* Did the vfork/compiler bug occur? */ - || parent != getpid() - - /* Did the file descriptor bug occur? */ - || fstat(fileno(stdout), &st) != 0 - ); - } -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_vfork_works=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_func_vfork_works=no -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5 -echo "${ECHO_T}$ac_cv_func_vfork_works" >&6 - -fi; -if test "x$ac_cv_func_fork_works" = xcross; then - ac_cv_func_vfork_works=$ac_cv_func_vfork - { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 -echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} -fi - -if test "x$ac_cv_func_vfork_works" = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_WORKING_VFORK 1 -_ACEOF - -else - -cat >>confdefs.h <<\_ACEOF -#define vfork fork -_ACEOF - -fi -if test "x$ac_cv_func_fork_works" = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_WORKING_FORK 1 -_ACEOF - -fi - - if test $ac_cv_func_vfork_works = no; then - case $LIBOBJS in - "vfork.$ac_objext" | \ - *" vfork.$ac_objext" | \ - "vfork.$ac_objext "* | \ - *" vfork.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS vfork.$ac_objext" ;; -esac - - fi - # We only need _doprnt if we might use it to implement v*printf. - if test $ac_cv_func_vprintf != yes \ - || test $ac_cv_func_vfprintf != yes \ - || test $ac_cv_func_vsprintf != yes; then - -for ac_func in _doprnt -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test x$gcc_no_link = xyes; then - { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 -echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} - { (exit 1); exit 1; }; } -fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. Under hpux, - including includes and causes problems - checking for functions defined therein. */ -#if defined (__STDC__) && !defined (_HPUX_SOURCE) -# include -#else -# include -#endif -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* 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 (); -/* 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 -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -else - case $LIBOBJS in - "$ac_func.$ac_objext" | \ - *" $ac_func.$ac_objext" | \ - "$ac_func.$ac_objext "* | \ - *" $ac_func.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;; -esac - -fi -done - - - else - -for ac_func in _doprnt -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test x$gcc_no_link = xyes; then - { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 -echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} - { (exit 1); exit 1; }; } -fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. Under hpux, - including includes and causes problems - checking for functions defined therein. */ -#if defined (__STDC__) && !defined (_HPUX_SOURCE) -# include -#else -# include -#endif -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* 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 (); -/* 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 -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - fi - - for v in $vars; do - echo "$as_me:$LINENO: checking for $v" >&5 -echo $ECHO_N "checking for $v... $ECHO_C" >&6 - if eval "test \"\${libiberty_cv_var_$v+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test x$gcc_no_link = xyes; then - { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 -echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} - { (exit 1); exit 1; }; } -fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -int *p; -int -main () -{ -extern int $v []; p = $v; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "libiberty_cv_var_$v=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "libiberty_cv_var_$v=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - - if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >>confdefs.h <<_ACEOF -#define $n 1 -_ACEOF - - else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - fi - done - - # special check for _system_configuration because AIX <4.3.2 do not - # contain the `physmem' member. - echo "$as_me:$LINENO: checking for external symbol _system_configuration" >&5 -echo $ECHO_N "checking for external symbol _system_configuration... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -double x = _system_configuration.physmem; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -cat >>confdefs.h <<\_ACEOF -#define HAVE__SYSTEM_CONFIGURATION 1 -_ACEOF - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - - -for ac_func in $checkfuncs -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test x$gcc_no_link = xyes; then - { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 -echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} - { (exit 1); exit 1; }; } -fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. Under hpux, - including includes and causes problems - checking for functions defined therein. */ -#if defined (__STDC__) && !defined (_HPUX_SOURCE) -# include -#else -# include -#endif -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* 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 (); -/* 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 -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - echo "$as_me:$LINENO: checking whether basename is declared" >&5 -echo $ECHO_N "checking whether basename is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_basename+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef basename - char *p = (char *) basename; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_basename=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_basename=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_basename" >&5 -echo "${ECHO_T}$ac_cv_have_decl_basename" >&6 -if test $ac_cv_have_decl_basename = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_BASENAME 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_BASENAME 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether ffs is declared" >&5 -echo $ECHO_N "checking whether ffs is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_ffs+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef ffs - char *p = (char *) ffs; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_ffs=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_ffs=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_ffs" >&5 -echo "${ECHO_T}$ac_cv_have_decl_ffs" >&6 -if test $ac_cv_have_decl_ffs = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FFS 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FFS 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether asprintf is declared" >&5 -echo $ECHO_N "checking whether asprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_asprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef asprintf - char *p = (char *) asprintf; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_asprintf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_asprintf=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_asprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_asprintf" >&6 -if test $ac_cv_have_decl_asprintf = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ASPRINTF 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ASPRINTF 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether vasprintf is declared" >&5 -echo $ECHO_N "checking whether vasprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_vasprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef vasprintf - char *p = (char *) vasprintf; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_vasprintf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_vasprintf=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_vasprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_vasprintf" >&6 -if test $ac_cv_have_decl_vasprintf = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VASPRINTF 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VASPRINTF 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 -echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_snprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef snprintf - char *p = (char *) snprintf; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_snprintf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_snprintf=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6 -if test $ac_cv_have_decl_snprintf = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SNPRINTF 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SNPRINTF 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 -echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_vsnprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef vsnprintf - char *p = (char *) vsnprintf; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_vsnprintf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_vsnprintf=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6 -if test $ac_cv_have_decl_vsnprintf = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VSNPRINTF 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VSNPRINTF 0 -_ACEOF - - -fi - - - echo "$as_me:$LINENO: checking whether calloc is declared" >&5 -echo $ECHO_N "checking whether calloc is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_calloc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef calloc - char *p = (char *) calloc; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_calloc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_calloc=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_calloc" >&5 -echo "${ECHO_T}$ac_cv_have_decl_calloc" >&6 -if test $ac_cv_have_decl_calloc = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_CALLOC 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_CALLOC 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether getenv is declared" >&5 -echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_getenv+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef getenv - char *p = (char *) getenv; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_getenv=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_getenv=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 -echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6 -if test $ac_cv_have_decl_getenv = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETENV 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETENV 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether getopt is declared" >&5 -echo $ECHO_N "checking whether getopt is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_getopt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef getopt - char *p = (char *) getopt; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_getopt=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_getopt=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_getopt" >&5 -echo "${ECHO_T}$ac_cv_have_decl_getopt" >&6 -if test $ac_cv_have_decl_getopt = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETOPT 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETOPT 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether malloc is declared" >&5 -echo $ECHO_N "checking whether malloc is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_malloc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef malloc - char *p = (char *) malloc; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_malloc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_malloc=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_malloc" >&5 -echo "${ECHO_T}$ac_cv_have_decl_malloc" >&6 -if test $ac_cv_have_decl_malloc = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_MALLOC 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_MALLOC 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether realloc is declared" >&5 -echo $ECHO_N "checking whether realloc is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_realloc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef realloc - char *p = (char *) realloc; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_realloc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_realloc=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_realloc" >&5 -echo "${ECHO_T}$ac_cv_have_decl_realloc" >&6 -if test $ac_cv_have_decl_realloc = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_REALLOC 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_REALLOC 0 -_ACEOF - - -fi -echo "$as_me:$LINENO: checking whether sbrk is declared" >&5 -echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_sbrk+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef sbrk - char *p = (char *) sbrk; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_sbrk=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_sbrk=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5 -echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6 -if test $ac_cv_have_decl_sbrk = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SBRK 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SBRK 0 -_ACEOF - - -fi - - - echo "$as_me:$LINENO: checking whether strverscmp is declared" >&5 -echo $ECHO_N "checking whether strverscmp is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_strverscmp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef strverscmp - char *p = (char *) strverscmp; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_strverscmp=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_strverscmp=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_strverscmp" >&5 -echo "${ECHO_T}$ac_cv_have_decl_strverscmp" >&6 -if test $ac_cv_have_decl_strverscmp = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRVERSCMP 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRVERSCMP 0 -_ACEOF - - -fi - - - echo "$as_me:$LINENO: checking whether canonicalize_file_name must be declared" >&5 -echo $ECHO_N "checking whether canonicalize_file_name must be declared... $ECHO_C" >&6 -if test "${libiberty_cv_decl_needed_canonicalize_file_name+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#include "confdefs.h" -#include -#ifdef HAVE_STRING_H -#include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif -int -main () -{ -char *(*pfn) = (char *(*)) canonicalize_file_name - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - libiberty_cv_decl_needed_canonicalize_file_name=no -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -libiberty_cv_decl_needed_canonicalize_file_name=yes -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -echo "$as_me:$LINENO: result: $libiberty_cv_decl_needed_canonicalize_file_name" >&5 -echo "${ECHO_T}$libiberty_cv_decl_needed_canonicalize_file_name" >&6 -if test $libiberty_cv_decl_needed_canonicalize_file_name = yes; then - -cat >>confdefs.h <<\_ACEOF -#define NEED_DECLARATION_CANONICALIZE_FILE_NAME 1 -_ACEOF - -fi - -fi - -# Figure out which version of pexecute to use. -case "${host}" in - *-*-mingw* | *-*-winnt*) pexecute=./pex-win32.o ;; - *-*-msdosdjgpp*) pexecute=./pex-djgpp.o ;; - *-*-msdos*) pexecute=./pex-msdos.o ;; - *) pexecute=./pex-unix.o ;; -esac - - -if test x$gcc_no_link = xyes; then - if test "x${ac_cv_func_mmap_fixed_mapped+set}" != xset; then - ac_cv_func_mmap_fixed_mapped=no - fi -fi -if test "x${ac_cv_func_mmap_fixed_mapped}" != xno; then - - -for ac_header in stdlib.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -for ac_func in getpagesize -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test x$gcc_no_link = xyes; then - { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 -echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} - { (exit 1); exit 1; }; } -fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. Under hpux, - including includes and causes problems - checking for functions defined therein. */ -#if defined (__STDC__) && !defined (_HPUX_SOURCE) -# include -#else -# include -#endif -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* 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 (); -/* 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 -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -echo "$as_me:$LINENO: checking for working mmap" >&5 -echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 -if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_mmap_fixed_mapped=no -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -/* malloc might have been renamed as rpl_malloc. */ -#undef malloc - -/* Thanks to Mike Haertel and Jim Avera for this test. - Here is a matrix of mmap possibilities: - mmap private not fixed - mmap private fixed at somewhere currently unmapped - mmap private fixed at somewhere already mapped - mmap shared not fixed - mmap shared fixed at somewhere currently unmapped - mmap shared fixed at somewhere already mapped - For private mappings, we should verify that changes cannot be read() - back from the file, nor mmap's back from the file at a different - address. (There have been systems where private was not correctly - implemented like the infamous i386 svr4.0, and systems where the - VM page cache was not coherent with the file system buffer cache - like early versions of FreeBSD and possibly contemporary NetBSD.) - For shared mappings, we should conversely verify that changes get - propagated back to all the places they're supposed to be. - - Grep wants private fixed already mapped. - The main things grep needs to know about mmap are: - * does it exist and is it safe to write into the mmap'd area - * how to use it (BSD variants) */ - -#include -#include - -#if !STDC_HEADERS && !HAVE_STDLIB_H -char *malloc (); -#endif - -/* This mess was copied from the GNU getpagesize.h. */ -#if !HAVE_GETPAGESIZE -/* Assume that all systems that can run configure have sys/param.h. */ -# if !HAVE_SYS_PARAM_H -# define HAVE_SYS_PARAM_H 1 -# endif - -# ifdef _SC_PAGESIZE -# define getpagesize() sysconf(_SC_PAGESIZE) -# else /* no _SC_PAGESIZE */ -# if 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 */ - -int -main () -{ - char *data, *data2, *data3; - int i, pagesize; - int fd; - - pagesize = getpagesize (); - - /* First, make a file with some known garbage in it. */ - data = (char *) malloc (pagesize); - if (!data) - exit (1); - for (i = 0; i < pagesize; ++i) - *(data + i) = rand (); - umask (0); - fd = creat ("conftest.mmap", 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 ("conftest.mmap", O_RDWR); - if (fd < 0) - exit (1); - data2 = (char *) malloc (2 * pagesize); - if (!data2) - exit (1); - data2 += (pagesize - ((long) 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 = (char *) 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); - exit (0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_mmap_fixed_mapped=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_func_mmap_fixed_mapped=no -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 -if test $ac_cv_func_mmap_fixed_mapped = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP 1 -_ACEOF - -fi -rm -f conftest.mmap - -fi - -echo "$as_me:$LINENO: checking for working strncmp" >&5 -echo $ECHO_N "checking for working strncmp... $ECHO_C" >&6 -if test "${ac_cv_func_strncmp_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_strncmp_works=no -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Test by Jim Wilson and Kaveh Ghazi. - Check whether strncmp reads past the end of its string parameters. */ -#include - -#ifdef HAVE_FCNTL_H -#include -#endif - -#ifdef HAVE_SYS_MMAN_H -#include -#endif - -#ifndef MAP_ANON -#ifdef MAP_ANONYMOUS -#define MAP_ANON MAP_ANONYMOUS -#else -#define MAP_ANON MAP_FILE -#endif -#endif - -#ifndef MAP_FILE -#define MAP_FILE 0 -#endif -#ifndef O_RDONLY -#define O_RDONLY 0 -#endif - -#define MAP_LEN 0x10000 - -main () -{ -#if defined(HAVE_MMAP) || defined(HAVE_MMAP_ANYWHERE) - char *p; - int dev_zero; - - dev_zero = open ("/dev/zero", O_RDONLY); - if (dev_zero < 0) - exit (1); - - p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE, - MAP_ANON|MAP_PRIVATE, dev_zero, 0); - if (p == (char *)-1) - p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE, - MAP_ANON|MAP_PRIVATE, -1, 0); - if (p == (char *)-1) - exit (2); - else - { - char *string = "__si_type_info"; - char *q = (char *) p + MAP_LEN - strlen (string) - 2; - char *r = (char *) p + 0xe; - - strcpy (q, string); - strcpy (r, string); - strncmp (r, q, 14); - } -#endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */ - exit (0); -} - -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_strncmp_works=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_func_strncmp_works=no -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f core core.* *.core -fi -echo "$as_me:$LINENO: result: $ac_cv_func_strncmp_works" >&5 -echo "${ECHO_T}$ac_cv_func_strncmp_works" >&6 -if test $ac_cv_func_strncmp_works = no ; then - case $LIBOBJS in - "strncmp.$ac_objext" | \ - *" strncmp.$ac_objext" | \ - "strncmp.$ac_objext "* | \ - *" strncmp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS strncmp.$ac_objext" ;; -esac - -fi - - -# Install a library built with a cross compiler in $(tooldir) rather -# than $(libdir). -if test -z "${with_cross_host}"; then - INSTALL_DEST=libdir -else - INSTALL_DEST=tooldir -fi - - - -L="" -for l in x $LIBOBJS; do - case $l in - x) ;; - *) L="$L ./$l" ;; - esac -done -LIBOBJS="$L" - - - - - -# We need multilib support, but only if configuring for the target. - ac_config_files="$ac_config_files Makefile testsuite/Makefile" - - ac_config_commands="$ac_config_commands default" - -cat >confcache <<\_ACEOF -# 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, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# 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 \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} | - sed ' - t clear - : clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - : end' >>confcache -if diff $cache_file confcache >/dev/null 2>&1; then :; else - if test -w $cache_file; then - test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" - cat confcache >$cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; -}' -fi - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_i=`echo "$ac_i" | - sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Add them. - ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - - -# PATH needs CR, and LINENO needs CR and PATH. -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_executable_p="test -f" - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - -exec 6>&1 - -# Open the log real soon, to keep \$[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - -This file was extended by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 -_ACEOF - -# Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS -fi - -cat >>$CONFIG_STATUS <<\_ACEOF - -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2003 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` - ac_shift=: - ;; - -*) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_option=$1 - ac_need_defaults=false;; - esac - - case $ac_option in - # Handling of the options. -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:$LINENO: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -# -# INIT-COMMANDS section. -# - -srcdir=${srcdir} -host=${host} -target=${target} -with_target_subdir=${with_target_subdir} -with_multisubdir=${with_multisubdir} -ac_configure_args="--enable-multilib ${ac_configure_args}" -CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} -ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}" -libiberty_topdir=${libiberty_topdir} - - -_ACEOF - - - -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_config_target in $ac_config_targets -do - case "$ac_config_target" in - # Handling of arguments. - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "testsuite/Makefile" ) CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; - "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; - "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason to put it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Create a temporary directory, and hook for its removal unless debugging. -$debug || -{ - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} - -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF - -# -# CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@libiberty_topdir@,$libiberty_topdir,;t t -s,@MAINT@,$MAINT,;t t -s,@NOTMAINT@,$NOTMAINT,;t t -s,@MAKEINFO@,$MAKEINFO,;t t -s,@BUILD_INFO@,$BUILD_INFO,;t t -s,@PERL@,$PERL,;t t -s,@HAVE_PERL@,$HAVE_PERL,;t t -s,@build@,$build,;t t -s,@build_cpu@,$build_cpu,;t t -s,@build_vendor@,$build_vendor,;t t -s,@build_os@,$build_os,;t t -s,@host@,$host,;t t -s,@host_cpu@,$host_cpu,;t t -s,@host_vendor@,$host_vendor,;t t -s,@host_os@,$host_os,;t t -s,@AR@,$AR,;t t -s,@ac_ct_AR@,$ac_ct_AR,;t t -s,@RANLIB@,$RANLIB,;t t -s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t -s,@CC@,$CC,;t t -s,@CFLAGS@,$CFLAGS,;t t -s,@LDFLAGS@,$LDFLAGS,;t t -s,@CPPFLAGS@,$CPPFLAGS,;t t -s,@ac_ct_CC@,$ac_ct_CC,;t t -s,@EXEEXT@,$EXEEXT,;t t -s,@OBJEXT@,$OBJEXT,;t t -s,@CPP@,$CPP,;t t -s,@ac_libiberty_warn_cflags@,$ac_libiberty_warn_cflags,;t t -s,@NO_MINUS_C_MINUS_O@,$NO_MINUS_C_MINUS_O,;t t -s,@OUTPUT_OPTION@,$OUTPUT_OPTION,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@EGREP@,$EGREP,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@CHECK@,$CHECK,;t t -s,@target_header_dir@,$target_header_dir,;t t -s,@pexecute@,$pexecute,;t t -s,@INSTALL_DEST@,$INSTALL_DEST,;t t -s,@datarootdir@,$datarootdir,;t t -s,@docdir@,$docdir,;t t -s,@htmldir@,$htmldir,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -/@host_makefile_frag@/r $host_makefile_frag -s,@host_makefile_frag@,,;t t -CEOF - -_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF - # 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_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # 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" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat - fi -fi # test -n "$CONFIG_FILES" - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; - esac - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;t t -s,@srcdir@,$ac_srcdir,;t t -s,@abs_srcdir@,$ac_abs_srcdir,;t t -s,@top_srcdir@,$ac_top_srcdir,;t t -s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t -s,@builddir@,$ac_builddir,;t t -s,@abs_builddir@,$ac_abs_builddir,;t t -s,@top_builddir@,$ac_top_builddir,;t t -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file - else - cat $tmp/out - rm -f $tmp/out - fi - -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -# -# CONFIG_HEADER section. -# - -# 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=' ' -ac_dD=',;t' -# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='$,\1#\2define\3' -ac_uC=' ' -ac_uD=',;t' - -for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - # Do quote $f, to prevent DOS paths from being IFS'd. - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } - # Remove the trailing spaces. - sed 's/[ ]*$//' $ac_file_inputs >$tmp/in - -_ACEOF - -# Transform confdefs.h into two sed scripts, `conftest.defines' and -# `conftest.undefs', that substitutes the proper values into -# config.h.in to produce config.h. The first handles `#define' -# templates, and the second `#undef' templates. -# 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.defines conftest.undefs -# Using a here document instead of a string reduces the quoting nightmare. -# Putting comments in sed scripts is not portable. -# -# `end' is used to avoid that the second main sed command (meant for -# 0-ary CPP macros) applies to n-ary macro definitions. -# See the Autoconf documentation for `clear'. -cat >confdef2sed.sed <<\_ACEOF -s/[\\&,]/\\&/g -s,[\\$`],\\&,g -t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp -t end -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp -: end -_ACEOF -# If some macros were called several times there might be several times -# the same #defines, which is useless. Nevertheless, we may not want to -# sort them, since we want the *last* AC-DEFINE to be honored. -uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines -sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs -rm -f confdef2sed.sed - -# 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.undefs <<\_ACEOF -s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, -_ACEOF - -# Break up conftest.defines because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS -echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS -echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS -echo ' :' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.defines >/dev/null -do - # Write a limited-size here document to $tmp/defines.sed. - echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#define' lines. - echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/defines.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines -echo ' fi # grep' >>$CONFIG_STATUS -echo >>$CONFIG_STATUS - -# Break up conftest.undefs because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #undef templates' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.undefs >/dev/null -do - # Write a limited-size here document to $tmp/undefs.sed. - echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#undef' - echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/undefs.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail - rm -f conftest.undefs - mv conftest.tail conftest.undefs -done -rm -f conftest.undefs - -cat >>$CONFIG_STATUS <<\_ACEOF - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - echo "/* Generated by configure. */" >$tmp/config.h - else - echo "/* $ac_file. Generated by configure. */" >$tmp/config.h - fi - cat $tmp/in >>$tmp/config.h - rm -f $tmp/in - if test x"$ac_file" != x-; then - if diff $ac_file $tmp/config.h >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} - else - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - rm -f $ac_file - mv $tmp/config.h $ac_file - fi - else - cat $tmp/config.h - rm -f $tmp/config.h - fi -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -# -# CONFIG_COMMANDS section. -# -for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue - ac_dest=`echo "$ac_file" | sed 's,:.*,,'` - ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_dir=`(dirname "$ac_dest") 2>/dev/null || -$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_dest" : 'X\(//\)[^/]' \| \ - X"$ac_dest" : 'X\(//\)$' \| \ - X"$ac_dest" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_dest" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - - { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 -echo "$as_me: executing $ac_dest commands" >&6;} - case $ac_dest in - default ) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h -if test -n "$CONFIG_FILES"; then - if test -n "${with_target_subdir}"; then - # FIXME: We shouldn't need to set ac_file - ac_file=Makefile - LD="${ORIGINAL_LD_FOR_MULTILIBS}" - . ${libiberty_topdir}/config-ml.in - fi -fi ;; - esac -done -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } -fi - diff --git a/libiberty/configure.ac b/libiberty/configure.ac deleted file mode 100644 index 76cf3d5333f..00000000000 --- a/libiberty/configure.ac +++ /dev/null @@ -1,669 +0,0 @@ -dnl Process this file with autoconf to produce a configure script - -AC_PREREQ(2.59) -AC_INIT -AC_CONFIG_SRCDIR([xmalloc.c]) - -# This works around the fact that libtool configuration may change LD -# for this particular configuration, but some shells, instead of -# keeping the changes in LD private, export them just because LD is -# exported. We don't use libtool yet, but some day we might, so... -ORIGINAL_LD_FOR_MULTILIBS=$LD - -dnl We use these options to decide which functions to include. -AC_ARG_WITH(target-subdir, -[ --with-target-subdir=SUBDIR Configuring in a subdirectory for target]) -AC_ARG_WITH(build-subdir, -[ --with-build-subdir=SUBDIR Configuring in a subdirectory for build]) -AC_ARG_WITH(cross-host, -[ --with-cross-host=HOST Configuring with a cross compiler]) -AC_ARG_WITH(newlib, -[ --with-newlib Configuring with newlib]) - -if test "${srcdir}" = "."; then - if test -n "${with_build_subdir}"; then - libiberty_topdir="${srcdir}/../.." - with_target_subdir= - elif test -z "${with_target_subdir}"; then - libiberty_topdir="${srcdir}/.." - else - if test "${with_target_subdir}" != "."; then - libiberty_topdir="${srcdir}/${with_multisrctop}../.." - else - libiberty_topdir="${srcdir}/${with_multisrctop}.." - fi - fi -else - libiberty_topdir="${srcdir}/.." -fi -AC_SUBST(libiberty_topdir) -AC_CONFIG_AUX_DIR($libiberty_topdir) - -dnl Very limited version of automake's enable-maintainer-mode - -AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode is disabled by default - AC_ARG_ENABLE(maintainer-mode, -[ --enable-maintainer-mode - enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - maintainer_mode=$enableval, - maintainer_mode=no) - -AC_MSG_RESULT($maintainer_mode) - -if test "$maintainer_mode" = "yes"; then - MAINT='' - NOTMAINT='#' -else - MAINT='#' - NOTMAINT='' -fi -AC_SUBST(MAINT)dnl -AC_SUBST(NOTMAINT)dnl - -# Do we have a single-tree copy of texinfo? Even if we do, we can't -# rely on it - libiberty is built before texinfo. -AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, ) -if test "x$MAKEINFO" = "x"; then - MAKEINFO="@echo makeinfo missing; true" - BUILD_INFO= -else - BUILD_INFO=info - case "$MAKEINFO" in - */missing\ makeinfo*) - BUILD_INFO= - AC_MSG_WARN([ -*** Makeinfo is missing. Info documentation will not be built.]) - ;; - *) - case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in - x*\ [[1-3]].* ) - MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true" - BUILD_INFO= - AC_MSG_WARN([ -*** Makeinfo is too old. Info documentation will not be built.]) - ;; - esac - ;; - esac -fi -AC_SUBST(MAKEINFO) -AC_SUBST(BUILD_INFO) - -AC_CHECK_PROG(PERL, perl, perl, ) -if test x"$PERL" = x""; then - HAVE_PERL='#' -else - HAVE_PERL='' -fi -AC_SUBST(HAVE_PERL) - -AC_CANONICAL_HOST - -dnl When we start using automake: -dnl AM_INIT_AUTOMAKE(libiberty, 1.0) - -dnl These must be called before AM_PROG_LIBTOOL, because it may want -dnl to call AC_CHECK_PROG. -AC_CHECK_TOOL(AR, ar) -AC_CHECK_TOOL(RANLIB, ranlib, :) - -GCC_NO_EXECUTABLES -AC_PROG_CC -AC_PROG_CPP_WERROR - -# Warn C++ incompatibilities if supported. -AC_CACHE_CHECK( - [whether ${CC} accepts -Wc++-compat], - [ac_cv_prog_cc_w_cxx_compat], - [save_CFLAGS="$CFLAGS" - CFLAGS="-Wc++-compat" - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[]])], - [ac_cv_prog_cc_w_cxx_compat=yes], - [ac_cv_prog_cc_w_cxx_compat=no]) - CFLAGS="$save_CFLAGS" - ]) - - -if test x$GCC = xyes; then - ac_libiberty_warn_cflags='-W -Wall -pedantic -Wwrite-strings -Wstrict-prototypes' -fi -if test $ac_cv_prog_cc_w_cxx_compat = yes ; then - ac_libiberty_warn_cflags="${ac_libiberty_warn_cflags} -Wc++-compat" -fi -AC_SUBST(ac_libiberty_warn_cflags) - -AC_PROG_CC_C_O -# autoconf is lame and doesn't give us any substitution variable for this. -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then - NO_MINUS_C_MINUS_O=yes -else - OUTPUT_OPTION='-o $@' -fi -AC_SUBST(NO_MINUS_C_MINUS_O) -AC_SUBST(OUTPUT_OPTION) - -AC_C_CONST -AC_C_INLINE -AC_C_BIGENDIAN - -dnl When we start using libtool: -dnl Default to a non shared library. This may be overridden by the -dnl configure option --enable-shared. -dnl AM_DISABLE_SHARED - -dnl When we start using libtool: -dnl AM_PROG_LIBTOOL - -dnl When we start using automake: -dnl AM_CONFIG_HEADER(config.h:config.in) -AC_CONFIG_HEADER(config.h:config.in) - -dnl When we start using automake: -dnl AM_MAINTAINER_MODE -dnl AC_EXEEXT - -dnl When we start using automake: -dnl AM_PROG_INSTALL -AC_PROG_INSTALL - -# Don't build the shared library for build. -if [[ -n "${with_build_subdir}" ]]; then - enable_shared=no -fi - -frag= -case "${host}" in - rs6000-ibm-aix3.1 | rs6000-ibm-aix) - frag=mh-aix ;; - *-*-cxux7*) frag=mh-cxux7 ;; - *-*-freebsd2.1.*) frag=mh-fbsd21 ;; - *-*-freebsd2.2.[[012]]) frag=mh-fbsd21 ;; - i370-*-opened*) frag=mh-openedition ;; - i[[34567]]86-*-windows*) frag=mh-windows ;; -esac - -if [[ -n "${frag}" ]]; then - frags=${libiberty_topdir}/libiberty/config/$frag -else - frags= -fi - -# If they didn't specify --enable-shared, don't generate shared libs. -case "${enable_shared}" in - yes) shared=yes ;; - no) shared=no ;; - "") shared=no ;; - *) shared=yes ;; -esac -if [[ "${shared}" = "yes" ]]; then - frag= - case "${host}" in - *-*-cygwin*) ;; - alpha*-*-linux*) frag=mh-elfalphapic ;; - arm*-*-*) frag=mh-armpic ;; - hppa*-*-*) frag=mh-papic ;; - i[[34567]]86-*-* | x86_64-*-*) - frag=mh-x86pic ;; - powerpc*-*-aix*) ;; - powerpc*-*-*) frag=mh-ppcpic ;; - sparc*-*-*) frag=mh-sparcpic ;; - s390*-*-*) frag=mh-s390pic ;; - *) frag=mh-${host_cpu}pic ;; - esac - if [[ -n "${frag}" ]]; then - frags="${frags} ${libiberty_topdir}/config/${frag}" - fi -fi - -echo "# Warning: this fragment is automatically generated" > temp-frag - -for frag in ${frags}; do - if [[ -f ${frag} ]]; then - echo "Appending ${frag} to xhost-mkfrag" - echo "# Following fragment copied from ${frag}" >> temp-frag - cat ${frag} >> temp-frag - fi -done - -# record if we want to build shared libs. -if [[ "${shared}" = "yes" ]]; then - echo enable_shared = yes >> temp-frag -else - echo enable_shared = no >> temp-frag -fi - -frag=xhost-mkfrag -${CONFIG_SHELL-/bin/sh} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag - -host_makefile_frag=${frag} -AC_SUBST_FILE(host_makefile_frag) - -# It's OK to check for header files. Although the compiler may not be -# able to link anything, it had better be able to at least compile -# something. -AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h) -AC_HEADER_SYS_WAIT -AC_HEADER_TIME - -libiberty_AC_DECLARE_ERRNO - -# Determine the size of an int for struct fibnode. -AC_CHECK_SIZEOF([int]) - -AC_CHECK_TYPE(uintptr_t, unsigned long) - -# Look for a 64-bit type. -AC_MSG_CHECKING([for a 64-bit type]) -AC_CACHE_VAL(liberty_cv_uint64, -[AC_TRY_COMPILE( -[#ifdef HAVE_STDINT_H -#include -#endif], -[extern uint64_t foo;], -liberty_cv_uint64=uint64_t, -[AC_TRY_COMPILE( -[#ifdef HAVE_LIMITS_H -#include -#endif -#ifndef CHAR_BIT -#define CHAR_BIT 8 -#endif], -[extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1];], -liberty_cv_uint64="unsigned long", -[AC_TRY_COMPILE( -[#ifdef HAVE_LIMITS_H -#include -#endif -#ifndef CHAR_BIT -#define CHAR_BIT 8 -#endif], -[extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1];], -liberty_cv_uint64="unsigned long long", liberty_cv_uint64=none)])])]) -AC_MSG_RESULT($liberty_cv_uint64) -if test "$liberty_cv_uint64" != none; then - AC_DEFINE_UNQUOTED(UNSIGNED_64BIT_TYPE, $liberty_cv_uint64, - [Define to an unsigned 64-bit type available in the compiler.]) -fi - -# Given the above check, we always have uintptr_t or a fallback -# definition. So define HAVE_UINTPTR_T in case any imported code -# relies on it. -AC_DEFINE(HAVE_UINTPTR_T, 1, [Define if you have the \`uintptr_t' type.]) - -AC_TYPE_PID_T - -# This is the list of functions which libiberty will provide if they -# are not available on the host. - -funcs="asprintf" -funcs="$funcs atexit" -funcs="$funcs basename" -funcs="$funcs bcmp" -funcs="$funcs bcopy" -funcs="$funcs bsearch" -funcs="$funcs bzero" -funcs="$funcs calloc" -funcs="$funcs clock" -funcs="$funcs ffs" -funcs="$funcs getcwd" -funcs="$funcs getpagesize" -funcs="$funcs gettimeofday" -funcs="$funcs index" -funcs="$funcs insque" -funcs="$funcs memchr" -funcs="$funcs memcmp" -funcs="$funcs memcpy" -funcs="$funcs memmove" -funcs="$funcs mempcpy" -funcs="$funcs memset" -funcs="$funcs mkstemps" -funcs="$funcs putenv" -funcs="$funcs random" -funcs="$funcs rename" -funcs="$funcs rindex" -funcs="$funcs setenv" -funcs="$funcs snprintf" -funcs="$funcs sigsetmask" -funcs="$funcs stpcpy" -funcs="$funcs stpncpy" -funcs="$funcs strcasecmp" -funcs="$funcs strchr" -funcs="$funcs strdup" -funcs="$funcs strncasecmp" -funcs="$funcs strndup" -funcs="$funcs strrchr" -funcs="$funcs strstr" -funcs="$funcs strtod" -funcs="$funcs strtol" -funcs="$funcs strtoul" -funcs="$funcs strverscmp" -funcs="$funcs tmpnam" -funcs="$funcs vasprintf" -funcs="$funcs vfprintf" -funcs="$funcs vprintf" -funcs="$funcs vsnprintf" -funcs="$funcs vsprintf" -funcs="$funcs waitpid" - -# Also in the old function.def file: alloca, vfork, getopt. - -vars="sys_errlist sys_nerr sys_siglist" - -checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday" -checkfuncs="$checkfuncs realpath canonicalize_file_name pstat_getstatic pstat_getdynamic sysmp" -checkfuncs="$checkfuncs getsysinfo table sysctl wait3 wait4 __fsetlocking" - -# These are neither executed nor required, but they help keep -# autoheader happy without adding a bunch of text to acconfig.h. -if test "x" = "y"; then - AC_CHECK_FUNCS(asprintf atexit basename bcmp bcopy bsearch bzero calloc clock \ - getcwd getpagesize gettimeofday index insque mkstemps memchr memcmp memcpy \ - memmove mempcpy memset putenv random rename rindex sigsetmask \ - strcasecmp setenv stpcpy stpncpy strchr strdup strncasecmp strndup strrchr strstr \ - strtod strtol strtoul strverscmp tmpnam vasprintf vfprintf vprintf \ - vsprintf waitpid getrusage on_exit psignal strerror strsignal \ - sysconf times sbrk gettimeofday ffs snprintf vsnprintf \ - pstat_getstatic pstat_getdynamic sysmp getsysinfo table sysctl wait3 wait4 \ - realpath canonicalize_file_name __fsetlocking) - AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf]) - AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.]) - AC_DEFINE(HAVE_SYS_NERR, 1, [Define if you have the sys_nerr variable.]) - AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.]) -fi - -# For each of these functions, if the host does not provide the -# function we want to put FN.o in LIBOBJS, and if the host does -# provide the function, we want to define HAVE_FN in config.h. - -setobjs= -CHECK= -target_header_dir= -if test -n "${with_target_subdir}"; then - - # We are being configured as a target library. AC_REPLACE_FUNCS - # may not work correctly, because the compiler may not be able to - # link executables. Note that we may still be being configured - # native. - - # If we are being configured for newlib, we know which functions - # newlib provide and which ones we will be expected to provide. - - if test "x${with_newlib}" = "xyes"; then - AC_LIBOBJ([asprintf]) - AC_LIBOBJ([basename]) - AC_LIBOBJ([insque]) - AC_LIBOBJ([random]) - AC_LIBOBJ([strdup]) - AC_LIBOBJ([vasprintf]) - - for f in $funcs; do - case "$f" in - asprintf | basename | insque | random | strdup | vasprintf) - ;; - *) - n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - AC_DEFINE_UNQUOTED($n) - ;; - esac - done - - # newlib doesnt provide any of the variables in $vars, so we - # dont have to check them here. - - # Of the functions in $checkfuncs, newlib only has strerror. - AC_DEFINE(HAVE_STRERROR) - - setobjs=yes - - fi - - # We may wish to install the target headers somewhere. - AC_ARG_ENABLE(install-libiberty, - [ --enable-install-libiberty Install headers for end users], - enable_install_libiberty=$enableval, - enable_install_libiberty=no)dnl - - # Option parsed, now set things appropriately. - case x"$enable_install_libiberty" in - xyes|x) - target_header_dir=libiberty - ;; - xno) - target_header_dir= - ;; - *) - # This could be sanity-checked in various ways... - target_header_dir="${enable_install_libiberty}" - ;; - esac - - -else - - # Not a target library, so we set things up to run the test suite. - CHECK=really-check - -fi - -AC_SUBST(CHECK) -AC_SUBST(target_header_dir) - -case "${host}" in - *-*-cygwin* | *-*-mingw*) - AC_DEFINE(HAVE_SYS_ERRLIST) - AC_DEFINE(HAVE_SYS_NERR) - ;; -esac - -if test -z "${setobjs}"; then - case "${host}" in - - *-*-vxworks*) - # Handle VxWorks configuration specially, since on VxWorks the - # libraries are actually on the target board, not in the file - # system. - AC_LIBOBJ([basename]) - AC_LIBOBJ([getpagesize]) - AC_LIBOBJ([insque]) - AC_LIBOBJ([random]) - AC_LIBOBJ([strcasecmp]) - AC_LIBOBJ([strncasecmp]) - AC_LIBOBJ([strdup]) - AC_LIBOBJ([vfork]) - AC_LIBOBJ([waitpid]) - AC_LIBOBJ([vasprintf]) - for f in $funcs; do - case "$f" in - basename | getpagesize | insque | random | strcasecmp) - ;; - strncasecmp | strdup | vfork | waitpid | vasprintf) - ;; - *) - n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - AC_DEFINE_UNQUOTED($n) - ;; - esac - done - - # VxWorks doesn't provide any of the variables in $vars, so we - # don't have to check them here. - - # Of the functions in $checkfuncs, VxWorks only has strerror. - AC_DEFINE(HAVE_STRERROR) - - setobjs=yes - ;; - - esac -fi - -if test -z "${setobjs}"; then - - case "${host}" in - - *-*-cygwin*) - # The Cygwin library actually uses a couple of files from - # libiberty when it is built. If we are building a native - # Cygwin, and we run the tests, we will appear to have these - # files. However, when we go on to build winsup, we will wind up - # with a library which does not have the files, since they should - # have come from libiberty. - - # We handle this by removing the functions the winsup library - # provides from our shell variables, so that they appear to be - # missing. - - # DJ - only if we're *building* cygwin, not just building *with* cygwin - - if test -n "${with_target_subdir}" - then - funcs="`echo $funcs | sed -e 's/random//'`" - AC_LIBOBJ([random]) - vars="`echo $vars | sed -e 's/sys_siglist//'`" - checkfuncs="`echo $checkfuncs | sed -e 's/strsignal//' -e 's/psignal//'`" - fi - ;; - - *-*-mingw32*) - # Under mingw32, sys_nerr and sys_errlist exist, but they are - # macros, so the test below won't find them. - libiberty_cv_var_sys_nerr=yes - libiberty_cv_var_sys_errlist=yes - ;; - - *-*-msdosdjgpp*) - # vfork and fork are stubs. - ac_cv_func_vfork_works=no - ;; - - *-*-uwin*) - # Under some versions of uwin, vfork is notoriously buggy and the test - # can hang configure; on other versions, vfork exists just as a stub. - # FIXME: This should be removed once vfork in uwin's runtime is fixed. - ac_cv_func_vfork_works=no - # Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are - # macros (actually, these are imported from a DLL, but the end effect - # is the same), so the test below won't find them. - libiberty_cv_var_sys_nerr=yes - libiberty_cv_var_sys_errlist=yes - ;; - - *-*-*vms*) - # Under VMS, vfork works very different than on Unix. The standard test - # won't work, and it isn't easily adaptable. It makes more sense to - # just force it. - ac_cv_func_vfork_works=yes - ;; - - esac - - # We haven't set the list of objects yet. Use the standard autoconf - # tests. This will only work if the compiler works. - AC_ISC_POSIX - AC_REPLACE_FUNCS($funcs) - libiberty_AC_FUNC_C_ALLOCA - AC_FUNC_FORK - if test $ac_cv_func_vfork_works = no; then - AC_LIBOBJ([vfork]) - fi - # We only need _doprnt if we might use it to implement v*printf. - if test $ac_cv_func_vprintf != yes \ - || test $ac_cv_func_vfprintf != yes \ - || test $ac_cv_func_vsprintf != yes; then - AC_REPLACE_FUNCS(_doprnt) - else - AC_CHECK_FUNCS(_doprnt) - fi - - for v in $vars; do - AC_MSG_CHECKING([for $v]) - AC_CACHE_VAL(libiberty_cv_var_$v, - [AC_LINK_IFELSE([AC_LANG_PROGRAM([[int *p;]],[[extern int $v []; p = $v;]])], - [eval "libiberty_cv_var_$v=yes"], - [eval "libiberty_cv_var_$v=no"])]) - if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then - AC_MSG_RESULT(yes) - n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - AC_DEFINE_UNQUOTED($n) - else - AC_MSG_RESULT(no) - fi - done - - # special check for _system_configuration because AIX <4.3.2 do not - # contain the `physmem' member. - AC_MSG_CHECKING([for external symbol _system_configuration]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[double x = _system_configuration.physmem;]])], - [AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE__SYSTEM_CONFIGURATION, 1, - [Define if you have the _system_configuration variable.])], - [AC_MSG_RESULT([no])]) - - AC_CHECK_FUNCS($checkfuncs) - AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf]) - AC_CHECK_DECLS([calloc, getenv, getopt, malloc, realloc, sbrk]) - AC_CHECK_DECLS([strverscmp]) - libiberty_NEED_DECLARATION(canonicalize_file_name) -fi - -# Figure out which version of pexecute to use. -case "${host}" in - *-*-mingw* | *-*-winnt*) pexecute=./pex-win32.o ;; - *-*-msdosdjgpp*) pexecute=./pex-djgpp.o ;; - *-*-msdos*) pexecute=./pex-msdos.o ;; - *) pexecute=./pex-unix.o ;; -esac -AC_SUBST(pexecute) - -libiberty_AC_FUNC_STRNCMP - -# Install a library built with a cross compiler in $(tooldir) rather -# than $(libdir). -if test -z "${with_cross_host}"; then - INSTALL_DEST=libdir -else - INSTALL_DEST=tooldir -fi -AC_SUBST(INSTALL_DEST) - -m4_pattern_allow(LIBOBJS) -L="" -for l in x $LIBOBJS; do - case $l in - x) ;; - *) L="$L ./$l" ;; - esac -done -LIBOBJS="$L" - -dnl Required by html and install-html -AC_SUBST(datarootdir) -AC_SUBST(docdir) -AC_SUBST(htmldir) - -# We need multilib support, but only if configuring for the target. -AC_CONFIG_FILES([Makefile testsuite/Makefile]) -AC_CONFIG_COMMANDS([default], - [[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h -if test -n "$CONFIG_FILES"; then - if test -n "${with_target_subdir}"; then - # FIXME: We shouldn't need to set ac_file - ac_file=Makefile - LD="${ORIGINAL_LD_FOR_MULTILIBS}" - . ${libiberty_topdir}/config-ml.in - fi -fi]], -[[srcdir=${srcdir} -host=${host} -target=${target} -with_target_subdir=${with_target_subdir} -with_multisubdir=${with_multisubdir} -ac_configure_args="--enable-multilib ${ac_configure_args}" -CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} -ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}" -libiberty_topdir=${libiberty_topdir} -]]) -AC_OUTPUT diff --git a/libiberty/copying-lib.texi b/libiberty/copying-lib.texi deleted file mode 100644 index 79e1038783d..00000000000 --- a/libiberty/copying-lib.texi +++ /dev/null @@ -1,565 +0,0 @@ -@node Library Copying -@appendixsec GNU LESSER GENERAL PUBLIC LICENSE - -@cindex LGPL, Lesser General Public License -@center Version 2.1, February 1999 - -@display -Copyright @copyright{} 1991, 1999 Free Software Foundation, Inc. -51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, 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 Lesser GPL. It also counts -as the successor of the GNU Library Public License, version 2, hence the -version number 2.1.] -@end display - -@appendixsubsec 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 Lesser General Public License, applies to some -specially designated software---typically libraries---of the Free -Software Foundation and other authors who decide to use it. You can use -it too, but we suggest you first think carefully about whether this -license or the ordinary General Public License is the better strategy to -use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -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 and use pieces of it -in new free programs; and that you are informed that you can do these -things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -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 other code 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. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the @dfn{Lesser} General Public License because it -does @emph{Less} to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - 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, whereas the latter must -be combined with the library in order to run. - -@iftex -@appendixsubsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -@end iftex -@ifinfo -@center GNU LESSER GENERAL PUBLIC LICENSE -@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -@end ifinfo - -@enumerate 0 -@item -This License Agreement applies to any software library or other program -which contains a notice placed by the copyright holder or other -authorized party saying it may be distributed under the terms of this -Lesser 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. - -@item -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. - -@item -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: - -@enumerate a -@item -The modified work must itself be a software library. - -@item -You must cause the files modified to carry prominent notices -stating that you changed the files and the date of any change. - -@item -You must cause the whole of the work to be licensed at no -charge to all third parties under the terms of this License. - -@item -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.) -@end enumerate - -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. - -@item -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. - -@item -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. - -@item -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. - -@item -As an exception to the Sections above, you may also combine 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: - -@enumerate a -@item -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.) - -@item -Use a suitable shared library mechanism for linking with the Library. A -suitable mechanism is one that (1) uses at run time a copy of the -library already present on the user's computer system, rather than -copying library functions into the executable, and (2) will operate -properly with a modified version of the library, if the user installs -one, as long as the modified version is interface-compatible with the -version that the work was made with. - -@item -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. - -@item -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. - -@item -Verify that the user has already received a copy of these -materials or that you have already sent this user a copy. -@end enumerate - - 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 materials to be 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. - -@item -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: - -@enumerate a -@item -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. - -@item -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. -@end enumerate - -@item -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. - -@item -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. - -@item -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 with -this License. - -@item -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. - -@item -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. - -@item -The Free Software Foundation may publish revised and/or new -versions of the Lesser 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. - -@item -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. - -@iftex -@heading NO WARRANTY -@end iftex -@ifinfo -@center NO WARRANTY -@end ifinfo - -@item -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. - -@item -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 enumerate - -@iftex -@heading END OF TERMS AND CONDITIONS -@end iftex -@ifinfo -@center END OF TERMS AND CONDITIONS -@end ifinfo - -@page -@appendixsubsec 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. - -@smallexample -@var{one line to give the library's name and an idea of what it does.} -Copyright (C) @var{year} @var{name of author} - -This library is free software; you can redistribute it and/or modify it -under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 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 -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser 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. -@end smallexample - -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: - -@smallexample -Yoyodyne, Inc., hereby disclaims all copyright interest in the library -`Frob' (a library for tweaking knobs) written by James Random Hacker. - -@var{signature of Ty Coon}, 1 April 1990 -Ty Coon, President of Vice -@end smallexample - -That's all there is to it! diff --git a/libiberty/copysign.c b/libiberty/copysign.c deleted file mode 100644 index 6793f22e8cc..00000000000 --- a/libiberty/copysign.c +++ /dev/null @@ -1,154 +0,0 @@ -#include - -#ifdef __IEEE_BIG_ENDIAN - -typedef union -{ - double value; - struct - { - unsigned int sign : 1; - unsigned int exponent: 11; - unsigned int fraction0:4; - unsigned int fraction1:16; - unsigned int fraction2:16; - unsigned int fraction3:16; - - } number; - struct - { - unsigned int sign : 1; - unsigned int exponent: 11; - unsigned int quiet:1; - unsigned int function0:3; - unsigned int function1:16; - unsigned int function2:16; - unsigned int function3:16; - } nan; - struct - { - unsigned long msw; - unsigned long lsw; - } parts; - long aslong[2]; -} __ieee_double_shape_type; - -#endif - -#ifdef __IEEE_LITTLE_ENDIAN - -typedef union -{ - double value; - struct - { -#ifdef __SMALL_BITFIELDS - unsigned int fraction3:16; - unsigned int fraction2:16; - unsigned int fraction1:16; - unsigned int fraction0: 4; -#else - unsigned int fraction1:32; - unsigned int fraction0:20; -#endif - unsigned int exponent :11; - unsigned int sign : 1; - } number; - struct - { -#ifdef __SMALL_BITFIELDS - unsigned int function3:16; - unsigned int function2:16; - unsigned int function1:16; - unsigned int function0:3; -#else - unsigned int function1:32; - unsigned int function0:19; -#endif - unsigned int quiet:1; - unsigned int exponent: 11; - unsigned int sign : 1; - } nan; - struct - { - unsigned long lsw; - unsigned long msw; - } parts; - - long aslong[2]; - -} __ieee_double_shape_type; - -#endif - -#ifdef __IEEE_BIG_ENDIAN -typedef union -{ - float value; - struct - { - unsigned int sign : 1; - unsigned int exponent: 8; - unsigned int fraction0: 7; - unsigned int fraction1: 16; - } number; - struct - { - unsigned int sign:1; - unsigned int exponent:8; - unsigned int quiet:1; - unsigned int function0:6; - unsigned int function1:16; - } nan; - long p1; - -} __ieee_float_shape_type; -#endif - -#ifdef __IEEE_LITTLE_ENDIAN -typedef union -{ - float value; - struct - { - unsigned int fraction0: 7; - unsigned int fraction1: 16; - unsigned int exponent: 8; - unsigned int sign : 1; - } number; - struct - { - unsigned int function1:16; - unsigned int function0:6; - unsigned int quiet:1; - unsigned int exponent:8; - unsigned int sign:1; - } nan; - long p1; - -} __ieee_float_shape_type; -#endif - -#if defined(__IEEE_BIG_ENDIAN) || defined(__IEEE_LITTLE_ENDIAN) - -double -copysign (double x, double y) -{ - __ieee_double_shape_type a,b; - b.value = y; - a.value = x; - a.number.sign =b.number.sign; - return a.value; -} - -#else - -double -copysign (double x, double y) -{ - if ((x < 0 && y > 0) || (x > 0 && y < 0)) - return -x; - return x; -} - -#endif diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c deleted file mode 100644 index 109d533b524..00000000000 --- a/libiberty/cp-demangle.c +++ /dev/null @@ -1,4351 +0,0 @@ -/* Demangler for g++ V3 ABI. - Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. - Written by Ian Lance Taylor . - - This file is part of the libiberty library, which is part of GCC. - - 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. - - In addition to the permissions in the GNU General Public License, the - Free Software Foundation gives you unlimited permission to link the - compiled version of this file into combinations with other programs, - and to distribute those combinations without any restriction coming - from the use of this file. (The General Public License restrictions - do apply in other respects; for example, they cover modification of - the file, and distribution when not linked into a combined - executable.) - - 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -*/ - -/* This code implements a demangler for the g++ V3 ABI. The ABI is - described on this web page: - http://www.codesourcery.com/cxx-abi/abi.html#mangling - - This code was written while looking at the demangler written by - Alex Samuel . - - This code first pulls the mangled name apart into a list of - components, and then walks the list generating the demangled - name. - - This file will normally define the following functions, q.v.: - char *cplus_demangle_v3(const char *mangled, int options) - char *java_demangle_v3(const char *mangled) - enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name) - enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name) - - Also, the interface to the component list is public, and defined in - demangle.h. The interface consists of these types, which are - defined in demangle.h: - enum demangle_component_type - struct demangle_component - and these functions defined in this file: - cplus_demangle_fill_name - cplus_demangle_fill_extended_operator - cplus_demangle_fill_ctor - cplus_demangle_fill_dtor - cplus_demangle_print - and other functions defined in the file cp-demint.c. - - This file also defines some other functions and variables which are - only to be used by the file cp-demint.c. - - Preprocessor macros you can define while compiling this file: - - IN_LIBGCC2 - If defined, this file defines the following function, q.v.: - char *__cxa_demangle (const char *mangled, char *buf, size_t *len, - int *status) - instead of cplus_demangle_v3() and java_demangle_v3(). - - IN_GLIBCPP_V3 - If defined, this file defines only __cxa_demangle(), and no other - publically visible functions or variables. - - STANDALONE_DEMANGLER - If defined, this file defines a main() function which demangles - any arguments, or, if none, demangles stdin. - - CP_DEMANGLE_DEBUG - If defined, turns on debugging mode, which prints information on - stdout about the mangled string. This is not generally useful. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif - -#include "ansidecl.h" -#include "libiberty.h" -#include "demangle.h" -#include "cp-demangle.h" - -/* If IN_GLIBCPP_V3 is defined, some functions are made static. We - also rename them via #define to avoid compiler errors when the - static definition conflicts with the extern declaration in a header - file. */ -#ifdef IN_GLIBCPP_V3 - -#define CP_STATIC_IF_GLIBCPP_V3 static - -#define cplus_demangle_fill_name d_fill_name -static int d_fill_name (struct demangle_component *, const char *, int); - -#define cplus_demangle_fill_extended_operator d_fill_extended_operator -static int -d_fill_extended_operator (struct demangle_component *, int, - struct demangle_component *); - -#define cplus_demangle_fill_ctor d_fill_ctor -static int -d_fill_ctor (struct demangle_component *, enum gnu_v3_ctor_kinds, - struct demangle_component *); - -#define cplus_demangle_fill_dtor d_fill_dtor -static int -d_fill_dtor (struct demangle_component *, enum gnu_v3_dtor_kinds, - struct demangle_component *); - -#define cplus_demangle_mangled_name d_mangled_name -static struct demangle_component *d_mangled_name (struct d_info *, int); - -#define cplus_demangle_type d_type -static struct demangle_component *d_type (struct d_info *); - -#define cplus_demangle_print d_print -static char *d_print (int, const struct demangle_component *, int, size_t *); - -#define cplus_demangle_init_info d_init_info -static void d_init_info (const char *, int, size_t, struct d_info *); - -#else /* ! defined(IN_GLIBCPP_V3) */ -#define CP_STATIC_IF_GLIBCPP_V3 -#endif /* ! defined(IN_GLIBCPP_V3) */ - -/* See if the compiler supports dynamic arrays. */ - -#ifdef __GNUC__ -#define CP_DYNAMIC_ARRAYS -#else -#ifdef __STDC__ -#ifdef __STDC_VERSION__ -#if __STDC_VERSION__ >= 199901L -#define CP_DYNAMIC_ARRAYS -#endif /* __STDC__VERSION >= 199901L */ -#endif /* defined (__STDC_VERSION__) */ -#endif /* defined (__STDC__) */ -#endif /* ! defined (__GNUC__) */ - -/* We avoid pulling in the ctype tables, to prevent pulling in - additional unresolved symbols when this code is used in a library. - FIXME: Is this really a valid reason? This comes from the original - V3 demangler code. - - As of this writing this file has the following undefined references - when compiled with -DIN_GLIBCPP_V3: malloc, realloc, free, memcpy, - strcpy, strcat, strlen. */ - -#define IS_DIGIT(c) ((c) >= '0' && (c) <= '9') -#define IS_UPPER(c) ((c) >= 'A' && (c) <= 'Z') -#define IS_LOWER(c) ((c) >= 'a' && (c) <= 'z') - -/* The prefix prepended by GCC to an identifier represnting the - anonymous namespace. */ -#define ANONYMOUS_NAMESPACE_PREFIX "_GLOBAL_" -#define ANONYMOUS_NAMESPACE_PREFIX_LEN \ - (sizeof (ANONYMOUS_NAMESPACE_PREFIX) - 1) - -/* Information we keep for the standard substitutions. */ - -struct d_standard_sub_info -{ - /* The code for this substitution. */ - char code; - /* The simple string it expands to. */ - const char *simple_expansion; - /* The length of the simple expansion. */ - int simple_len; - /* The results of a full, verbose, expansion. This is used when - qualifying a constructor/destructor, or when in verbose mode. */ - const char *full_expansion; - /* The length of the full expansion. */ - int full_len; - /* What to set the last_name field of d_info to; NULL if we should - not set it. This is only relevant when qualifying a - constructor/destructor. */ - const char *set_last_name; - /* The length of set_last_name. */ - int set_last_name_len; -}; - -/* Accessors for subtrees of struct demangle_component. */ - -#define d_left(dc) ((dc)->u.s_binary.left) -#define d_right(dc) ((dc)->u.s_binary.right) - -/* A list of templates. This is used while printing. */ - -struct d_print_template -{ - /* Next template on the list. */ - struct d_print_template *next; - /* This template. */ - const struct demangle_component *template_decl; -}; - -/* A list of type modifiers. This is used while printing. */ - -struct d_print_mod -{ - /* Next modifier on the list. These are in the reverse of the order - in which they appeared in the mangled string. */ - struct d_print_mod *next; - /* The modifier. */ - const struct demangle_component *mod; - /* Whether this modifier was printed. */ - int printed; - /* The list of templates which applies to this modifier. */ - struct d_print_template *templates; -}; - -/* We use this structure to hold information during printing. */ - -struct d_print_info -{ - /* The options passed to the demangler. */ - int options; - /* Buffer holding the result. */ - char *buf; - /* Current length of data in buffer. */ - size_t len; - /* Allocated size of buffer. */ - size_t alc; - /* The current list of templates, if any. */ - struct d_print_template *templates; - /* The current list of modifiers (e.g., pointer, reference, etc.), - if any. */ - struct d_print_mod *modifiers; - /* Set to 1 if we had a memory allocation failure. */ - int allocation_failure; -}; - -#define d_print_saw_error(dpi) ((dpi)->buf == NULL) - -#define d_append_char(dpi, c) \ - do \ - { \ - if ((dpi)->buf != NULL && (dpi)->len < (dpi)->alc) \ - (dpi)->buf[(dpi)->len++] = (c); \ - else \ - d_print_append_char ((dpi), (c)); \ - } \ - while (0) - -#define d_append_buffer(dpi, s, l) \ - do \ - { \ - if ((dpi)->buf != NULL && (dpi)->len + (l) <= (dpi)->alc) \ - { \ - memcpy ((dpi)->buf + (dpi)->len, (s), (l)); \ - (dpi)->len += l; \ - } \ - else \ - d_print_append_buffer ((dpi), (s), (l)); \ - } \ - while (0) - -#define d_append_string_constant(dpi, s) \ - d_append_buffer (dpi, (s), sizeof (s) - 1) - -#define d_last_char(dpi) \ - ((dpi)->buf == NULL || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1]) - -#ifdef CP_DEMANGLE_DEBUG -static void d_dump (struct demangle_component *, int); -#endif - -static struct demangle_component * -d_make_empty (struct d_info *); - -static struct demangle_component * -d_make_comp (struct d_info *, enum demangle_component_type, - struct demangle_component *, - struct demangle_component *); - -static struct demangle_component * -d_make_name (struct d_info *, const char *, int); - -static struct demangle_component * -d_make_builtin_type (struct d_info *, - const struct demangle_builtin_type_info *); - -static struct demangle_component * -d_make_operator (struct d_info *, - const struct demangle_operator_info *); - -static struct demangle_component * -d_make_extended_operator (struct d_info *, int, - struct demangle_component *); - -static struct demangle_component * -d_make_ctor (struct d_info *, enum gnu_v3_ctor_kinds, - struct demangle_component *); - -static struct demangle_component * -d_make_dtor (struct d_info *, enum gnu_v3_dtor_kinds, - struct demangle_component *); - -static struct demangle_component * -d_make_template_param (struct d_info *, long); - -static struct demangle_component * -d_make_sub (struct d_info *, const char *, int); - -static int -has_return_type (struct demangle_component *); - -static int -is_ctor_dtor_or_conversion (struct demangle_component *); - -static struct demangle_component *d_encoding (struct d_info *, int); - -static struct demangle_component *d_name (struct d_info *); - -static struct demangle_component *d_nested_name (struct d_info *); - -static struct demangle_component *d_prefix (struct d_info *); - -static struct demangle_component *d_unqualified_name (struct d_info *); - -static struct demangle_component *d_source_name (struct d_info *); - -static long d_number (struct d_info *); - -static struct demangle_component *d_identifier (struct d_info *, int); - -static struct demangle_component *d_operator_name (struct d_info *); - -static struct demangle_component *d_special_name (struct d_info *); - -static int d_call_offset (struct d_info *, int); - -static struct demangle_component *d_ctor_dtor_name (struct d_info *); - -static struct demangle_component ** -d_cv_qualifiers (struct d_info *, struct demangle_component **, int); - -static struct demangle_component * -d_function_type (struct d_info *); - -static struct demangle_component * -d_bare_function_type (struct d_info *, int); - -static struct demangle_component * -d_class_enum_type (struct d_info *); - -static struct demangle_component *d_array_type (struct d_info *); - -static struct demangle_component * -d_pointer_to_member_type (struct d_info *); - -static struct demangle_component * -d_template_param (struct d_info *); - -static struct demangle_component *d_template_args (struct d_info *); - -static struct demangle_component * -d_template_arg (struct d_info *); - -static struct demangle_component *d_expression (struct d_info *); - -static struct demangle_component *d_expr_primary (struct d_info *); - -static struct demangle_component *d_local_name (struct d_info *); - -static int d_discriminator (struct d_info *); - -static int -d_add_substitution (struct d_info *, struct demangle_component *); - -static struct demangle_component *d_substitution (struct d_info *, int); - -static void d_print_resize (struct d_print_info *, size_t); - -static void d_print_append_char (struct d_print_info *, int); - -static void -d_print_append_buffer (struct d_print_info *, const char *, size_t); - -static void d_print_error (struct d_print_info *); - -static void -d_print_comp (struct d_print_info *, const struct demangle_component *); - -static void -d_print_java_identifier (struct d_print_info *, const char *, int); - -static void -d_print_mod_list (struct d_print_info *, struct d_print_mod *, int); - -static void -d_print_mod (struct d_print_info *, const struct demangle_component *); - -static void -d_print_function_type (struct d_print_info *, - const struct demangle_component *, - struct d_print_mod *); - -static void -d_print_array_type (struct d_print_info *, - const struct demangle_component *, - struct d_print_mod *); - -static void -d_print_expr_op (struct d_print_info *, const struct demangle_component *); - -static void -d_print_cast (struct d_print_info *, const struct demangle_component *); - -static char *d_demangle (const char *, int, size_t *); - -#ifdef CP_DEMANGLE_DEBUG - -static void -d_dump (struct demangle_component *dc, int indent) -{ - int i; - - if (dc == NULL) - return; - - for (i = 0; i < indent; ++i) - putchar (' '); - - switch (dc->type) - { - case DEMANGLE_COMPONENT_NAME: - printf ("name '%.*s'\n", dc->u.s_name.len, dc->u.s_name.s); - return; - case DEMANGLE_COMPONENT_TEMPLATE_PARAM: - printf ("template parameter %ld\n", dc->u.s_number.number); - return; - case DEMANGLE_COMPONENT_CTOR: - printf ("constructor %d\n", (int) dc->u.s_ctor.kind); - d_dump (dc->u.s_ctor.name, indent + 2); - return; - case DEMANGLE_COMPONENT_DTOR: - printf ("destructor %d\n", (int) dc->u.s_dtor.kind); - d_dump (dc->u.s_dtor.name, indent + 2); - return; - case DEMANGLE_COMPONENT_SUB_STD: - printf ("standard substitution %s\n", dc->u.s_string.string); - return; - case DEMANGLE_COMPONENT_BUILTIN_TYPE: - printf ("builtin type %s\n", dc->u.s_builtin.type->name); - return; - case DEMANGLE_COMPONENT_OPERATOR: - printf ("operator %s\n", dc->u.s_operator.op->name); - return; - case DEMANGLE_COMPONENT_EXTENDED_OPERATOR: - printf ("extended operator with %d args\n", - dc->u.s_extended_operator.args); - d_dump (dc->u.s_extended_operator.name, indent + 2); - return; - - case DEMANGLE_COMPONENT_QUAL_NAME: - printf ("qualified name\n"); - break; - case DEMANGLE_COMPONENT_LOCAL_NAME: - printf ("local name\n"); - break; - case DEMANGLE_COMPONENT_TYPED_NAME: - printf ("typed name\n"); - break; - case DEMANGLE_COMPONENT_TEMPLATE: - printf ("template\n"); - break; - case DEMANGLE_COMPONENT_VTABLE: - printf ("vtable\n"); - break; - case DEMANGLE_COMPONENT_VTT: - printf ("VTT\n"); - break; - case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: - printf ("construction vtable\n"); - break; - case DEMANGLE_COMPONENT_TYPEINFO: - printf ("typeinfo\n"); - break; - case DEMANGLE_COMPONENT_TYPEINFO_NAME: - printf ("typeinfo name\n"); - break; - case DEMANGLE_COMPONENT_TYPEINFO_FN: - printf ("typeinfo function\n"); - break; - case DEMANGLE_COMPONENT_THUNK: - printf ("thunk\n"); - break; - case DEMANGLE_COMPONENT_VIRTUAL_THUNK: - printf ("virtual thunk\n"); - break; - case DEMANGLE_COMPONENT_COVARIANT_THUNK: - printf ("covariant thunk\n"); - break; - case DEMANGLE_COMPONENT_JAVA_CLASS: - printf ("java class\n"); - break; - case DEMANGLE_COMPONENT_GUARD: - printf ("guard\n"); - break; - case DEMANGLE_COMPONENT_REFTEMP: - printf ("reference temporary\n"); - break; - case DEMANGLE_COMPONENT_HIDDEN_ALIAS: - printf ("hidden alias\n"); - break; - case DEMANGLE_COMPONENT_RESTRICT: - printf ("restrict\n"); - break; - case DEMANGLE_COMPONENT_VOLATILE: - printf ("volatile\n"); - break; - case DEMANGLE_COMPONENT_CONST: - printf ("const\n"); - break; - case DEMANGLE_COMPONENT_RESTRICT_THIS: - printf ("restrict this\n"); - break; - case DEMANGLE_COMPONENT_VOLATILE_THIS: - printf ("volatile this\n"); - break; - case DEMANGLE_COMPONENT_CONST_THIS: - printf ("const this\n"); - break; - case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: - printf ("vendor type qualifier\n"); - break; - case DEMANGLE_COMPONENT_POINTER: - printf ("pointer\n"); - break; - case DEMANGLE_COMPONENT_REFERENCE: - printf ("reference\n"); - break; - case DEMANGLE_COMPONENT_COMPLEX: - printf ("complex\n"); - break; - case DEMANGLE_COMPONENT_IMAGINARY: - printf ("imaginary\n"); - break; - case DEMANGLE_COMPONENT_VENDOR_TYPE: - printf ("vendor type\n"); - break; - case DEMANGLE_COMPONENT_FUNCTION_TYPE: - printf ("function type\n"); - break; - case DEMANGLE_COMPONENT_ARRAY_TYPE: - printf ("array type\n"); - break; - case DEMANGLE_COMPONENT_PTRMEM_TYPE: - printf ("pointer to member type\n"); - break; - case DEMANGLE_COMPONENT_ARGLIST: - printf ("argument list\n"); - break; - case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: - printf ("template argument list\n"); - break; - case DEMANGLE_COMPONENT_CAST: - printf ("cast\n"); - break; - case DEMANGLE_COMPONENT_UNARY: - printf ("unary operator\n"); - break; - case DEMANGLE_COMPONENT_BINARY: - printf ("binary operator\n"); - break; - case DEMANGLE_COMPONENT_BINARY_ARGS: - printf ("binary operator arguments\n"); - break; - case DEMANGLE_COMPONENT_TRINARY: - printf ("trinary operator\n"); - break; - case DEMANGLE_COMPONENT_TRINARY_ARG1: - printf ("trinary operator arguments 1\n"); - break; - case DEMANGLE_COMPONENT_TRINARY_ARG2: - printf ("trinary operator arguments 1\n"); - break; - case DEMANGLE_COMPONENT_LITERAL: - printf ("literal\n"); - break; - case DEMANGLE_COMPONENT_LITERAL_NEG: - printf ("negative literal\n"); - break; - } - - d_dump (d_left (dc), indent + 2); - d_dump (d_right (dc), indent + 2); -} - -#endif /* CP_DEMANGLE_DEBUG */ - -/* Fill in a DEMANGLE_COMPONENT_NAME. */ - -CP_STATIC_IF_GLIBCPP_V3 -int -cplus_demangle_fill_name (struct demangle_component *p, const char *s, int len) -{ - if (p == NULL || s == NULL || len == 0) - return 0; - p->type = DEMANGLE_COMPONENT_NAME; - p->u.s_name.s = s; - p->u.s_name.len = len; - return 1; -} - -/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR. */ - -CP_STATIC_IF_GLIBCPP_V3 -int -cplus_demangle_fill_extended_operator (struct demangle_component *p, int args, - struct demangle_component *name) -{ - if (p == NULL || args < 0 || name == NULL) - return 0; - p->type = DEMANGLE_COMPONENT_EXTENDED_OPERATOR; - p->u.s_extended_operator.args = args; - p->u.s_extended_operator.name = name; - return 1; -} - -/* Fill in a DEMANGLE_COMPONENT_CTOR. */ - -CP_STATIC_IF_GLIBCPP_V3 -int -cplus_demangle_fill_ctor (struct demangle_component *p, - enum gnu_v3_ctor_kinds kind, - struct demangle_component *name) -{ - if (p == NULL - || name == NULL - || (kind < gnu_v3_complete_object_ctor - && kind > gnu_v3_complete_object_allocating_ctor)) - return 0; - p->type = DEMANGLE_COMPONENT_CTOR; - p->u.s_ctor.kind = kind; - p->u.s_ctor.name = name; - return 1; -} - -/* Fill in a DEMANGLE_COMPONENT_DTOR. */ - -CP_STATIC_IF_GLIBCPP_V3 -int -cplus_demangle_fill_dtor (struct demangle_component *p, - enum gnu_v3_dtor_kinds kind, - struct demangle_component *name) -{ - if (p == NULL - || name == NULL - || (kind < gnu_v3_deleting_dtor - && kind > gnu_v3_base_object_dtor)) - return 0; - p->type = DEMANGLE_COMPONENT_DTOR; - p->u.s_dtor.kind = kind; - p->u.s_dtor.name = name; - return 1; -} - -/* Add a new component. */ - -static struct demangle_component * -d_make_empty (struct d_info *di) -{ - struct demangle_component *p; - - if (di->next_comp >= di->num_comps) - return NULL; - p = &di->comps[di->next_comp]; - ++di->next_comp; - return p; -} - -/* Add a new generic component. */ - -static struct demangle_component * -d_make_comp (struct d_info *di, enum demangle_component_type type, - struct demangle_component *left, - struct demangle_component *right) -{ - struct demangle_component *p; - - /* We check for errors here. A typical error would be a NULL return - from a subroutine. We catch those here, and return NULL - upward. */ - switch (type) - { - /* These types require two parameters. */ - case DEMANGLE_COMPONENT_QUAL_NAME: - case DEMANGLE_COMPONENT_LOCAL_NAME: - case DEMANGLE_COMPONENT_TYPED_NAME: - case DEMANGLE_COMPONENT_TEMPLATE: - case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: - case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: - case DEMANGLE_COMPONENT_PTRMEM_TYPE: - case DEMANGLE_COMPONENT_UNARY: - case DEMANGLE_COMPONENT_BINARY: - case DEMANGLE_COMPONENT_BINARY_ARGS: - case DEMANGLE_COMPONENT_TRINARY: - case DEMANGLE_COMPONENT_TRINARY_ARG1: - case DEMANGLE_COMPONENT_TRINARY_ARG2: - case DEMANGLE_COMPONENT_LITERAL: - case DEMANGLE_COMPONENT_LITERAL_NEG: - if (left == NULL || right == NULL) - return NULL; - break; - - /* These types only require one parameter. */ - case DEMANGLE_COMPONENT_VTABLE: - case DEMANGLE_COMPONENT_VTT: - case DEMANGLE_COMPONENT_TYPEINFO: - case DEMANGLE_COMPONENT_TYPEINFO_NAME: - case DEMANGLE_COMPONENT_TYPEINFO_FN: - case DEMANGLE_COMPONENT_THUNK: - case DEMANGLE_COMPONENT_VIRTUAL_THUNK: - case DEMANGLE_COMPONENT_COVARIANT_THUNK: - case DEMANGLE_COMPONENT_JAVA_CLASS: - case DEMANGLE_COMPONENT_GUARD: - case DEMANGLE_COMPONENT_REFTEMP: - case DEMANGLE_COMPONENT_HIDDEN_ALIAS: - case DEMANGLE_COMPONENT_POINTER: - case DEMANGLE_COMPONENT_REFERENCE: - case DEMANGLE_COMPONENT_COMPLEX: - case DEMANGLE_COMPONENT_IMAGINARY: - case DEMANGLE_COMPONENT_VENDOR_TYPE: - case DEMANGLE_COMPONENT_ARGLIST: - case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: - case DEMANGLE_COMPONENT_CAST: - if (left == NULL) - return NULL; - break; - - /* This needs a right parameter, but the left parameter can be - empty. */ - case DEMANGLE_COMPONENT_ARRAY_TYPE: - if (right == NULL) - return NULL; - break; - - /* These are allowed to have no parameters--in some cases they - will be filled in later. */ - case DEMANGLE_COMPONENT_FUNCTION_TYPE: - case DEMANGLE_COMPONENT_RESTRICT: - case DEMANGLE_COMPONENT_VOLATILE: - case DEMANGLE_COMPONENT_CONST: - case DEMANGLE_COMPONENT_RESTRICT_THIS: - case DEMANGLE_COMPONENT_VOLATILE_THIS: - case DEMANGLE_COMPONENT_CONST_THIS: - break; - - /* Other types should not be seen here. */ - default: - return NULL; - } - - p = d_make_empty (di); - if (p != NULL) - { - p->type = type; - p->u.s_binary.left = left; - p->u.s_binary.right = right; - } - return p; -} - -/* Add a new name component. */ - -static struct demangle_component * -d_make_name (struct d_info *di, const char *s, int len) -{ - struct demangle_component *p; - - p = d_make_empty (di); - if (! cplus_demangle_fill_name (p, s, len)) - return NULL; - return p; -} - -/* Add a new builtin type component. */ - -static struct demangle_component * -d_make_builtin_type (struct d_info *di, - const struct demangle_builtin_type_info *type) -{ - struct demangle_component *p; - - if (type == NULL) - return NULL; - p = d_make_empty (di); - if (p != NULL) - { - p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE; - p->u.s_builtin.type = type; - } - return p; -} - -/* Add a new operator component. */ - -static struct demangle_component * -d_make_operator (struct d_info *di, const struct demangle_operator_info *op) -{ - struct demangle_component *p; - - p = d_make_empty (di); - if (p != NULL) - { - p->type = DEMANGLE_COMPONENT_OPERATOR; - p->u.s_operator.op = op; - } - return p; -} - -/* Add a new extended operator component. */ - -static struct demangle_component * -d_make_extended_operator (struct d_info *di, int args, - struct demangle_component *name) -{ - struct demangle_component *p; - - p = d_make_empty (di); - if (! cplus_demangle_fill_extended_operator (p, args, name)) - return NULL; - return p; -} - -/* Add a new constructor component. */ - -static struct demangle_component * -d_make_ctor (struct d_info *di, enum gnu_v3_ctor_kinds kind, - struct demangle_component *name) -{ - struct demangle_component *p; - - p = d_make_empty (di); - if (! cplus_demangle_fill_ctor (p, kind, name)) - return NULL; - return p; -} - -/* Add a new destructor component. */ - -static struct demangle_component * -d_make_dtor (struct d_info *di, enum gnu_v3_dtor_kinds kind, - struct demangle_component *name) -{ - struct demangle_component *p; - - p = d_make_empty (di); - if (! cplus_demangle_fill_dtor (p, kind, name)) - return NULL; - return p; -} - -/* Add a new template parameter. */ - -static struct demangle_component * -d_make_template_param (struct d_info *di, long i) -{ - struct demangle_component *p; - - p = d_make_empty (di); - if (p != NULL) - { - p->type = DEMANGLE_COMPONENT_TEMPLATE_PARAM; - p->u.s_number.number = i; - } - return p; -} - -/* Add a new standard substitution component. */ - -static struct demangle_component * -d_make_sub (struct d_info *di, const char *name, int len) -{ - struct demangle_component *p; - - p = d_make_empty (di); - if (p != NULL) - { - p->type = DEMANGLE_COMPONENT_SUB_STD; - p->u.s_string.string = name; - p->u.s_string.len = len; - } - return p; -} - -/* ::= _Z - - TOP_LEVEL is non-zero when called at the top level. */ - -CP_STATIC_IF_GLIBCPP_V3 -struct demangle_component * -cplus_demangle_mangled_name (struct d_info *di, int top_level) -{ - if (d_next_char (di) != '_') - return NULL; - if (d_next_char (di) != 'Z') - return NULL; - return d_encoding (di, top_level); -} - -/* Return whether a function should have a return type. The argument - is the function name, which may be qualified in various ways. The - rules are that template functions have return types with some - exceptions, function types which are not part of a function name - mangling have return types with some exceptions, and non-template - function names do not have return types. The exceptions are that - constructors, destructors, and conversion operators do not have - return types. */ - -static int -has_return_type (struct demangle_component *dc) -{ - if (dc == NULL) - return 0; - switch (dc->type) - { - default: - return 0; - case DEMANGLE_COMPONENT_TEMPLATE: - return ! is_ctor_dtor_or_conversion (d_left (dc)); - case DEMANGLE_COMPONENT_RESTRICT_THIS: - case DEMANGLE_COMPONENT_VOLATILE_THIS: - case DEMANGLE_COMPONENT_CONST_THIS: - return has_return_type (d_left (dc)); - } -} - -/* Return whether a name is a constructor, a destructor, or a - conversion operator. */ - -static int -is_ctor_dtor_or_conversion (struct demangle_component *dc) -{ - if (dc == NULL) - return 0; - switch (dc->type) - { - default: - return 0; - case DEMANGLE_COMPONENT_QUAL_NAME: - case DEMANGLE_COMPONENT_LOCAL_NAME: - return is_ctor_dtor_or_conversion (d_right (dc)); - case DEMANGLE_COMPONENT_CTOR: - case DEMANGLE_COMPONENT_DTOR: - case DEMANGLE_COMPONENT_CAST: - return 1; - } -} - -/* ::= <(function) name> - ::= <(data) name> - ::= - - TOP_LEVEL is non-zero when called at the top level, in which case - if DMGL_PARAMS is not set we do not demangle the function - parameters. We only set this at the top level, because otherwise - we would not correctly demangle names in local scopes. */ - -static struct demangle_component * -d_encoding (struct d_info *di, int top_level) -{ - char peek = d_peek_char (di); - - if (peek == 'G' || peek == 'T') - return d_special_name (di); - else - { - struct demangle_component *dc; - - dc = d_name (di); - - if (dc != NULL && top_level && (di->options & DMGL_PARAMS) == 0) - { - /* Strip off any initial CV-qualifiers, as they really apply - to the `this' parameter, and they were not output by the - v2 demangler without DMGL_PARAMS. */ - while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS - || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS - || dc->type == DEMANGLE_COMPONENT_CONST_THIS) - dc = d_left (dc); - - /* If the top level is a DEMANGLE_COMPONENT_LOCAL_NAME, then - there may be CV-qualifiers on its right argument which - really apply here; this happens when parsing a class - which is local to a function. */ - if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME) - { - struct demangle_component *dcr; - - dcr = d_right (dc); - while (dcr->type == DEMANGLE_COMPONENT_RESTRICT_THIS - || dcr->type == DEMANGLE_COMPONENT_VOLATILE_THIS - || dcr->type == DEMANGLE_COMPONENT_CONST_THIS) - dcr = d_left (dcr); - dc->u.s_binary.right = dcr; - } - - return dc; - } - - peek = d_peek_char (di); - if (peek == '\0' || peek == 'E') - return dc; - return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc, - d_bare_function_type (di, has_return_type (dc))); - } -} - -/* ::= - ::= - ::= - ::= - - ::= - ::= St - - ::= - ::= -*/ - -static struct demangle_component * -d_name (struct d_info *di) -{ - char peek = d_peek_char (di); - struct demangle_component *dc; - - switch (peek) - { - case 'N': - return d_nested_name (di); - - case 'Z': - return d_local_name (di); - - case 'S': - { - int subst; - - if (d_peek_next_char (di) != 't') - { - dc = d_substitution (di, 0); - subst = 1; - } - else - { - d_advance (di, 2); - dc = d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, - d_make_name (di, "std", 3), - d_unqualified_name (di)); - di->expansion += 3; - subst = 0; - } - - if (d_peek_char (di) != 'I') - { - /* The grammar does not permit this case to occur if we - called d_substitution() above (i.e., subst == 1). We - don't bother to check. */ - } - else - { - /* This is , which means that we just saw - , which is a substitution - candidate if we didn't just get it from a - substitution. */ - if (! subst) - { - if (! d_add_substitution (di, dc)) - return NULL; - } - dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc, - d_template_args (di)); - } - - return dc; - } - - default: - dc = d_unqualified_name (di); - if (d_peek_char (di) == 'I') - { - /* This is , which means that we just saw - , which is a substitution - candidate. */ - if (! d_add_substitution (di, dc)) - return NULL; - dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc, - d_template_args (di)); - } - return dc; - } -} - -/* ::= N [] E - ::= N [] E -*/ - -static struct demangle_component * -d_nested_name (struct d_info *di) -{ - struct demangle_component *ret; - struct demangle_component **pret; - - if (d_next_char (di) != 'N') - return NULL; - - pret = d_cv_qualifiers (di, &ret, 1); - if (pret == NULL) - return NULL; - - *pret = d_prefix (di); - if (*pret == NULL) - return NULL; - - if (d_next_char (di) != 'E') - return NULL; - - return ret; -} - -/* ::= - ::= - ::= - ::= - ::= - - ::= <(template) unqualified-name> - ::= - ::= -*/ - -static struct demangle_component * -d_prefix (struct d_info *di) -{ - struct demangle_component *ret = NULL; - - while (1) - { - char peek; - enum demangle_component_type comb_type; - struct demangle_component *dc; - - peek = d_peek_char (di); - if (peek == '\0') - return NULL; - - /* The older code accepts a here, but I don't see - that in the grammar. The older code does not accept a - here. */ - - comb_type = DEMANGLE_COMPONENT_QUAL_NAME; - if (IS_DIGIT (peek) - || IS_LOWER (peek) - || peek == 'C' - || peek == 'D') - dc = d_unqualified_name (di); - else if (peek == 'S') - dc = d_substitution (di, 1); - else if (peek == 'I') - { - if (ret == NULL) - return NULL; - comb_type = DEMANGLE_COMPONENT_TEMPLATE; - dc = d_template_args (di); - } - else if (peek == 'T') - dc = d_template_param (di); - else if (peek == 'E') - return ret; - else - return NULL; - - if (ret == NULL) - ret = dc; - else - ret = d_make_comp (di, comb_type, ret, dc); - - if (peek != 'S' && d_peek_char (di) != 'E') - { - if (! d_add_substitution (di, ret)) - return NULL; - } - } -} - -/* ::= - ::= - ::= -*/ - -static struct demangle_component * -d_unqualified_name (struct d_info *di) -{ - char peek; - - peek = d_peek_char (di); - if (IS_DIGIT (peek)) - return d_source_name (di); - else if (IS_LOWER (peek)) - { - struct demangle_component *ret; - - ret = d_operator_name (di); - if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR) - di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2; - return ret; - } - else if (peek == 'C' || peek == 'D') - return d_ctor_dtor_name (di); - else - return NULL; -} - -/* ::= <(positive length) number> */ - -static struct demangle_component * -d_source_name (struct d_info *di) -{ - long len; - struct demangle_component *ret; - - len = d_number (di); - if (len <= 0) - return NULL; - ret = d_identifier (di, len); - di->last_name = ret; - return ret; -} - -/* number ::= [n] <(non-negative decimal integer)> */ - -static long -d_number (struct d_info *di) -{ - int negative; - char peek; - long ret; - - negative = 0; - peek = d_peek_char (di); - if (peek == 'n') - { - negative = 1; - d_advance (di, 1); - peek = d_peek_char (di); - } - - ret = 0; - while (1) - { - if (! IS_DIGIT (peek)) - { - if (negative) - ret = - ret; - return ret; - } - ret = ret * 10 + peek - '0'; - d_advance (di, 1); - peek = d_peek_char (di); - } -} - -/* identifier ::= <(unqualified source code identifier)> */ - -static struct demangle_component * -d_identifier (struct d_info *di, int len) -{ - const char *name; - - name = d_str (di); - - if (di->send - name < len) - return NULL; - - d_advance (di, len); - - /* A Java mangled name may have a trailing '$' if it is a C++ - keyword. This '$' is not included in the length count. We just - ignore the '$'. */ - if ((di->options & DMGL_JAVA) != 0 - && d_peek_char (di) == '$') - d_advance (di, 1); - - /* Look for something which looks like a gcc encoding of an - anonymous namespace, and replace it with a more user friendly - name. */ - if (len >= (int) ANONYMOUS_NAMESPACE_PREFIX_LEN + 2 - && memcmp (name, ANONYMOUS_NAMESPACE_PREFIX, - ANONYMOUS_NAMESPACE_PREFIX_LEN) == 0) - { - const char *s; - - s = name + ANONYMOUS_NAMESPACE_PREFIX_LEN; - if ((*s == '.' || *s == '_' || *s == '$') - && s[1] == 'N') - { - di->expansion -= len - sizeof "(anonymous namespace)"; - return d_make_name (di, "(anonymous namespace)", - sizeof "(anonymous namespace)" - 1); - } - } - - return d_make_name (di, name, len); -} - -/* operator_name ::= many different two character encodings. - ::= cv - ::= v -*/ - -#define NL(s) s, (sizeof s) - 1 - -CP_STATIC_IF_GLIBCPP_V3 -const struct demangle_operator_info cplus_demangle_operators[] = -{ - { "aN", NL ("&="), 2 }, - { "aS", NL ("="), 2 }, - { "aa", NL ("&&"), 2 }, - { "ad", NL ("&"), 1 }, - { "an", NL ("&"), 2 }, - { "cl", NL ("()"), 0 }, - { "cm", NL (","), 2 }, - { "co", NL ("~"), 1 }, - { "dV", NL ("/="), 2 }, - { "da", NL ("delete[]"), 1 }, - { "de", NL ("*"), 1 }, - { "dl", NL ("delete"), 1 }, - { "dv", NL ("/"), 2 }, - { "eO", NL ("^="), 2 }, - { "eo", NL ("^"), 2 }, - { "eq", NL ("=="), 2 }, - { "ge", NL (">="), 2 }, - { "gt", NL (">"), 2 }, - { "ix", NL ("[]"), 2 }, - { "lS", NL ("<<="), 2 }, - { "le", NL ("<="), 2 }, - { "ls", NL ("<<"), 2 }, - { "lt", NL ("<"), 2 }, - { "mI", NL ("-="), 2 }, - { "mL", NL ("*="), 2 }, - { "mi", NL ("-"), 2 }, - { "ml", NL ("*"), 2 }, - { "mm", NL ("--"), 1 }, - { "na", NL ("new[]"), 1 }, - { "ne", NL ("!="), 2 }, - { "ng", NL ("-"), 1 }, - { "nt", NL ("!"), 1 }, - { "nw", NL ("new"), 1 }, - { "oR", NL ("|="), 2 }, - { "oo", NL ("||"), 2 }, - { "or", NL ("|"), 2 }, - { "pL", NL ("+="), 2 }, - { "pl", NL ("+"), 2 }, - { "pm", NL ("->*"), 2 }, - { "pp", NL ("++"), 1 }, - { "ps", NL ("+"), 1 }, - { "pt", NL ("->"), 2 }, - { "qu", NL ("?"), 3 }, - { "rM", NL ("%="), 2 }, - { "rS", NL (">>="), 2 }, - { "rm", NL ("%"), 2 }, - { "rs", NL (">>"), 2 }, - { "st", NL ("sizeof "), 1 }, - { "sz", NL ("sizeof "), 1 }, - { NULL, NULL, 0, 0 } -}; - -static struct demangle_component * -d_operator_name (struct d_info *di) -{ - char c1; - char c2; - - c1 = d_next_char (di); - c2 = d_next_char (di); - if (c1 == 'v' && IS_DIGIT (c2)) - return d_make_extended_operator (di, c2 - '0', d_source_name (di)); - else if (c1 == 'c' && c2 == 'v') - return d_make_comp (di, DEMANGLE_COMPONENT_CAST, - cplus_demangle_type (di), NULL); - else - { - /* LOW is the inclusive lower bound. */ - int low = 0; - /* HIGH is the exclusive upper bound. We subtract one to ignore - the sentinel at the end of the array. */ - int high = ((sizeof (cplus_demangle_operators) - / sizeof (cplus_demangle_operators[0])) - - 1); - - while (1) - { - int i; - const struct demangle_operator_info *p; - - i = low + (high - low) / 2; - p = cplus_demangle_operators + i; - - if (c1 == p->code[0] && c2 == p->code[1]) - return d_make_operator (di, p); - - if (c1 < p->code[0] || (c1 == p->code[0] && c2 < p->code[1])) - high = i; - else - low = i + 1; - if (low == high) - return NULL; - } - } -} - -/* ::= TV - ::= TT - ::= TI - ::= TS - ::= GV <(object) name> - ::= T <(base) encoding> - ::= Tc <(base) encoding> - Also g++ extensions: - ::= TC <(offset) number> _ <(base) type> - ::= TF - ::= TJ - ::= GR - ::= GA -*/ - -static struct demangle_component * -d_special_name (struct d_info *di) -{ - char c; - - di->expansion += 20; - c = d_next_char (di); - if (c == 'T') - { - switch (d_next_char (di)) - { - case 'V': - di->expansion -= 5; - return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE, - cplus_demangle_type (di), NULL); - case 'T': - di->expansion -= 10; - return d_make_comp (di, DEMANGLE_COMPONENT_VTT, - cplus_demangle_type (di), NULL); - case 'I': - return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO, - cplus_demangle_type (di), NULL); - case 'S': - return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME, - cplus_demangle_type (di), NULL); - - case 'h': - if (! d_call_offset (di, 'h')) - return NULL; - return d_make_comp (di, DEMANGLE_COMPONENT_THUNK, - d_encoding (di, 0), NULL); - - case 'v': - if (! d_call_offset (di, 'v')) - return NULL; - return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK, - d_encoding (di, 0), NULL); - - case 'c': - if (! d_call_offset (di, '\0')) - return NULL; - if (! d_call_offset (di, '\0')) - return NULL; - return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK, - d_encoding (di, 0), NULL); - - case 'C': - { - struct demangle_component *derived_type; - long offset; - struct demangle_component *base_type; - - derived_type = cplus_demangle_type (di); - offset = d_number (di); - if (offset < 0) - return NULL; - if (d_next_char (di) != '_') - return NULL; - base_type = cplus_demangle_type (di); - /* We don't display the offset. FIXME: We should display - it in verbose mode. */ - di->expansion += 5; - return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, - base_type, derived_type); - } - - case 'F': - return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN, - cplus_demangle_type (di), NULL); - case 'J': - return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS, - cplus_demangle_type (di), NULL); - - default: - return NULL; - } - } - else if (c == 'G') - { - switch (d_next_char (di)) - { - case 'V': - return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), NULL); - - case 'R': - return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, d_name (di), - NULL); - - case 'A': - return d_make_comp (di, DEMANGLE_COMPONENT_HIDDEN_ALIAS, - d_encoding (di, 0), NULL); - - default: - return NULL; - } - } - else - return NULL; -} - -/* ::= h _ - ::= v _ - - ::= <(offset) number> - - ::= <(offset) number> _ <(virtual offset) number> - - The C parameter, if not '\0', is a character we just read which is - the start of the . - - We don't display the offset information anywhere. FIXME: We should - display it in verbose mode. */ - -static int -d_call_offset (struct d_info *di, int c) -{ - if (c == '\0') - c = d_next_char (di); - - if (c == 'h') - d_number (di); - else if (c == 'v') - { - d_number (di); - if (d_next_char (di) != '_') - return 0; - d_number (di); - } - else - return 0; - - if (d_next_char (di) != '_') - return 0; - - return 1; -} - -/* ::= C1 - ::= C2 - ::= C3 - ::= D0 - ::= D1 - ::= D2 -*/ - -static struct demangle_component * -d_ctor_dtor_name (struct d_info *di) -{ - if (di->last_name != NULL) - { - if (di->last_name->type == DEMANGLE_COMPONENT_NAME) - di->expansion += di->last_name->u.s_name.len; - else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD) - di->expansion += di->last_name->u.s_string.len; - } - switch (d_next_char (di)) - { - case 'C': - { - enum gnu_v3_ctor_kinds kind; - - switch (d_next_char (di)) - { - case '1': - kind = gnu_v3_complete_object_ctor; - break; - case '2': - kind = gnu_v3_base_object_ctor; - break; - case '3': - kind = gnu_v3_complete_object_allocating_ctor; - break; - default: - return NULL; - } - return d_make_ctor (di, kind, di->last_name); - } - - case 'D': - { - enum gnu_v3_dtor_kinds kind; - - switch (d_next_char (di)) - { - case '0': - kind = gnu_v3_deleting_dtor; - break; - case '1': - kind = gnu_v3_complete_object_dtor; - break; - case '2': - kind = gnu_v3_base_object_dtor; - break; - default: - return NULL; - } - return d_make_dtor (di, kind, di->last_name); - } - - default: - return NULL; - } -} - -/* ::= - ::= - ::= - ::= - ::= - ::= - ::= - ::= - ::= - ::= P - ::= R - ::= C - ::= G - ::= U - - ::= various one letter codes - ::= u -*/ - -CP_STATIC_IF_GLIBCPP_V3 -const struct demangle_builtin_type_info -cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT] = -{ - /* a */ { NL ("signed char"), NL ("signed char"), D_PRINT_DEFAULT }, - /* b */ { NL ("bool"), NL ("boolean"), D_PRINT_BOOL }, - /* c */ { NL ("char"), NL ("byte"), D_PRINT_DEFAULT }, - /* d */ { NL ("double"), NL ("double"), D_PRINT_FLOAT }, - /* e */ { NL ("long double"), NL ("long double"), D_PRINT_FLOAT }, - /* f */ { NL ("float"), NL ("float"), D_PRINT_FLOAT }, - /* g */ { NL ("__float128"), NL ("__float128"), D_PRINT_FLOAT }, - /* h */ { NL ("unsigned char"), NL ("unsigned char"), D_PRINT_DEFAULT }, - /* i */ { NL ("int"), NL ("int"), D_PRINT_INT }, - /* j */ { NL ("unsigned int"), NL ("unsigned"), D_PRINT_UNSIGNED }, - /* k */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, - /* l */ { NL ("long"), NL ("long"), D_PRINT_LONG }, - /* m */ { NL ("unsigned long"), NL ("unsigned long"), D_PRINT_UNSIGNED_LONG }, - /* n */ { NL ("__int128"), NL ("__int128"), D_PRINT_DEFAULT }, - /* o */ { NL ("unsigned __int128"), NL ("unsigned __int128"), - D_PRINT_DEFAULT }, - /* p */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, - /* q */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, - /* r */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, - /* s */ { NL ("short"), NL ("short"), D_PRINT_DEFAULT }, - /* t */ { NL ("unsigned short"), NL ("unsigned short"), D_PRINT_DEFAULT }, - /* u */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, - /* v */ { NL ("void"), NL ("void"), D_PRINT_VOID }, - /* w */ { NL ("wchar_t"), NL ("char"), D_PRINT_DEFAULT }, - /* x */ { NL ("long long"), NL ("long"), D_PRINT_LONG_LONG }, - /* y */ { NL ("unsigned long long"), NL ("unsigned long long"), - D_PRINT_UNSIGNED_LONG_LONG }, - /* z */ { NL ("..."), NL ("..."), D_PRINT_DEFAULT }, -}; - -CP_STATIC_IF_GLIBCPP_V3 -struct demangle_component * -cplus_demangle_type (struct d_info *di) -{ - char peek; - struct demangle_component *ret; - int can_subst; - - /* The ABI specifies that when CV-qualifiers are used, the base type - is substitutable, and the fully qualified type is substitutable, - but the base type with a strict subset of the CV-qualifiers is - not substitutable. The natural recursive implementation of the - CV-qualifiers would cause subsets to be substitutable, so instead - we pull them all off now. - - FIXME: The ABI says that order-insensitive vendor qualifiers - should be handled in the same way, but we have no way to tell - which vendor qualifiers are order-insensitive and which are - order-sensitive. So we just assume that they are all - order-sensitive. g++ 3.4 supports only one vendor qualifier, - __vector, and it treats it as order-sensitive when mangling - names. */ - - peek = d_peek_char (di); - if (peek == 'r' || peek == 'V' || peek == 'K') - { - struct demangle_component **pret; - - pret = d_cv_qualifiers (di, &ret, 0); - if (pret == NULL) - return NULL; - *pret = cplus_demangle_type (di); - if (! d_add_substitution (di, ret)) - return NULL; - return ret; - } - - can_subst = 1; - - switch (peek) - { - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': - case 'h': case 'i': case 'j': case 'l': case 'm': case 'n': - case 'o': case 's': case 't': - case 'v': case 'w': case 'x': case 'y': case 'z': - ret = d_make_builtin_type (di, - &cplus_demangle_builtin_types[peek - 'a']); - di->expansion += ret->u.s_builtin.type->len; - can_subst = 0; - d_advance (di, 1); - break; - - case 'u': - d_advance (di, 1); - ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE, - d_source_name (di), NULL); - break; - - case 'F': - ret = d_function_type (di); - break; - - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - case 'N': - case 'Z': - ret = d_class_enum_type (di); - break; - - case 'A': - ret = d_array_type (di); - break; - - case 'M': - ret = d_pointer_to_member_type (di); - break; - - case 'T': - ret = d_template_param (di); - if (d_peek_char (di) == 'I') - { - /* This is . The - part is a substitution - candidate. */ - if (! d_add_substitution (di, ret)) - return NULL; - ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret, - d_template_args (di)); - } - break; - - case 'S': - /* If this is a special substitution, then it is the start of - . */ - { - char peek_next; - - peek_next = d_peek_next_char (di); - if (IS_DIGIT (peek_next) - || peek_next == '_' - || IS_UPPER (peek_next)) - { - ret = d_substitution (di, 0); - /* The substituted name may have been a template name and - may be followed by tepmlate args. */ - if (d_peek_char (di) == 'I') - ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret, - d_template_args (di)); - else - can_subst = 0; - } - else - { - ret = d_class_enum_type (di); - /* If the substitution was a complete type, then it is not - a new substitution candidate. However, if the - substitution was followed by template arguments, then - the whole thing is a substitution candidate. */ - if (ret != NULL && ret->type == DEMANGLE_COMPONENT_SUB_STD) - can_subst = 0; - } - } - break; - - case 'P': - d_advance (di, 1); - ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER, - cplus_demangle_type (di), NULL); - break; - - case 'R': - d_advance (di, 1); - ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE, - cplus_demangle_type (di), NULL); - break; - - case 'C': - d_advance (di, 1); - ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX, - cplus_demangle_type (di), NULL); - break; - - case 'G': - d_advance (di, 1); - ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY, - cplus_demangle_type (di), NULL); - break; - - case 'U': - d_advance (di, 1); - ret = d_source_name (di); - ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL, - cplus_demangle_type (di), ret); - break; - - default: - return NULL; - } - - if (can_subst) - { - if (! d_add_substitution (di, ret)) - return NULL; - } - - return ret; -} - -/* ::= [r] [V] [K] */ - -static struct demangle_component ** -d_cv_qualifiers (struct d_info *di, - struct demangle_component **pret, int member_fn) -{ - char peek; - - peek = d_peek_char (di); - while (peek == 'r' || peek == 'V' || peek == 'K') - { - enum demangle_component_type t; - - d_advance (di, 1); - if (peek == 'r') - { - t = (member_fn - ? DEMANGLE_COMPONENT_RESTRICT_THIS - : DEMANGLE_COMPONENT_RESTRICT); - di->expansion += sizeof "restrict"; - } - else if (peek == 'V') - { - t = (member_fn - ? DEMANGLE_COMPONENT_VOLATILE_THIS - : DEMANGLE_COMPONENT_VOLATILE); - di->expansion += sizeof "volatile"; - } - else - { - t = (member_fn - ? DEMANGLE_COMPONENT_CONST_THIS - : DEMANGLE_COMPONENT_CONST); - di->expansion += sizeof "const"; - } - - *pret = d_make_comp (di, t, NULL, NULL); - if (*pret == NULL) - return NULL; - pret = &d_left (*pret); - - peek = d_peek_char (di); - } - - return pret; -} - -/* ::= F [Y] E */ - -static struct demangle_component * -d_function_type (struct d_info *di) -{ - struct demangle_component *ret; - - if (d_next_char (di) != 'F') - return NULL; - if (d_peek_char (di) == 'Y') - { - /* Function has C linkage. We don't print this information. - FIXME: We should print it in verbose mode. */ - d_advance (di, 1); - } - ret = d_bare_function_type (di, 1); - if (d_next_char (di) != 'E') - return NULL; - return ret; -} - -/* ::= [J]+ */ - -static struct demangle_component * -d_bare_function_type (struct d_info *di, int has_return_type) -{ - struct demangle_component *return_type; - struct demangle_component *tl; - struct demangle_component **ptl; - char peek; - - /* Detect special qualifier indicating that the first argument - is the return type. */ - peek = d_peek_char (di); - if (peek == 'J') - { - d_advance (di, 1); - has_return_type = 1; - } - - return_type = NULL; - tl = NULL; - ptl = &tl; - while (1) - { - struct demangle_component *type; - - peek = d_peek_char (di); - if (peek == '\0' || peek == 'E') - break; - type = cplus_demangle_type (di); - if (type == NULL) - return NULL; - if (has_return_type) - { - return_type = type; - has_return_type = 0; - } - else - { - *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, NULL); - if (*ptl == NULL) - return NULL; - ptl = &d_right (*ptl); - } - } - - /* There should be at least one parameter type besides the optional - return type. A function which takes no arguments will have a - single parameter type void. */ - if (tl == NULL) - return NULL; - - /* If we have a single parameter type void, omit it. */ - if (d_right (tl) == NULL - && d_left (tl)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE - && d_left (tl)->u.s_builtin.type->print == D_PRINT_VOID) - { - di->expansion -= d_left (tl)->u.s_builtin.type->len; - tl = NULL; - } - - return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE, return_type, tl); -} - -/* ::= */ - -static struct demangle_component * -d_class_enum_type (struct d_info *di) -{ - return d_name (di); -} - -/* ::= A <(positive dimension) number> _ <(element) type> - ::= A [<(dimension) expression>] _ <(element) type> -*/ - -static struct demangle_component * -d_array_type (struct d_info *di) -{ - char peek; - struct demangle_component *dim; - - if (d_next_char (di) != 'A') - return NULL; - - peek = d_peek_char (di); - if (peek == '_') - dim = NULL; - else if (IS_DIGIT (peek)) - { - const char *s; - - s = d_str (di); - do - { - d_advance (di, 1); - peek = d_peek_char (di); - } - while (IS_DIGIT (peek)); - dim = d_make_name (di, s, d_str (di) - s); - if (dim == NULL) - return NULL; - } - else - { - dim = d_expression (di); - if (dim == NULL) - return NULL; - } - - if (d_next_char (di) != '_') - return NULL; - - return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim, - cplus_demangle_type (di)); -} - -/* ::= M <(class) type> <(member) type> */ - -static struct demangle_component * -d_pointer_to_member_type (struct d_info *di) -{ - struct demangle_component *cl; - struct demangle_component *mem; - struct demangle_component **pmem; - - if (d_next_char (di) != 'M') - return NULL; - - cl = cplus_demangle_type (di); - - /* The ABI specifies that any type can be a substitution source, and - that M is followed by two types, and that when a CV-qualified - type is seen both the base type and the CV-qualified types are - substitution sources. The ABI also specifies that for a pointer - to a CV-qualified member function, the qualifiers are attached to - the second type. Given the grammar, a plain reading of the ABI - suggests that both the CV-qualified member function and the - non-qualified member function are substitution sources. However, - g++ does not work that way. g++ treats only the CV-qualified - member function as a substitution source. FIXME. So to work - with g++, we need to pull off the CV-qualifiers here, in order to - avoid calling add_substitution() in cplus_demangle_type(). */ - - pmem = d_cv_qualifiers (di, &mem, 1); - if (pmem == NULL) - return NULL; - *pmem = cplus_demangle_type (di); - - return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem); -} - -/* ::= T_ - ::= T <(parameter-2 non-negative) number> _ -*/ - -static struct demangle_component * -d_template_param (struct d_info *di) -{ - long param; - - if (d_next_char (di) != 'T') - return NULL; - - if (d_peek_char (di) == '_') - param = 0; - else - { - param = d_number (di); - if (param < 0) - return NULL; - param += 1; - } - - if (d_next_char (di) != '_') - return NULL; - - ++di->did_subs; - - return d_make_template_param (di, param); -} - -/* ::= I + E */ - -static struct demangle_component * -d_template_args (struct d_info *di) -{ - struct demangle_component *hold_last_name; - struct demangle_component *al; - struct demangle_component **pal; - - /* Preserve the last name we saw--don't let the template arguments - clobber it, as that would give us the wrong name for a subsequent - constructor or destructor. */ - hold_last_name = di->last_name; - - if (d_next_char (di) != 'I') - return NULL; - - al = NULL; - pal = &al; - while (1) - { - struct demangle_component *a; - - a = d_template_arg (di); - if (a == NULL) - return NULL; - - *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, NULL); - if (*pal == NULL) - return NULL; - pal = &d_right (*pal); - - if (d_peek_char (di) == 'E') - { - d_advance (di, 1); - break; - } - } - - di->last_name = hold_last_name; - - return al; -} - -/* ::= - ::= X E - ::= -*/ - -static struct demangle_component * -d_template_arg (struct d_info *di) -{ - struct demangle_component *ret; - - switch (d_peek_char (di)) - { - case 'X': - d_advance (di, 1); - ret = d_expression (di); - if (d_next_char (di) != 'E') - return NULL; - return ret; - - case 'L': - return d_expr_primary (di); - - default: - return cplus_demangle_type (di); - } -} - -/* ::= <(unary) operator-name> - ::= <(binary) operator-name> - ::= <(trinary) operator-name> - ::= st - ::= - ::= sr - ::= sr - ::= -*/ - -static struct demangle_component * -d_expression (struct d_info *di) -{ - char peek; - - peek = d_peek_char (di); - if (peek == 'L') - return d_expr_primary (di); - else if (peek == 'T') - return d_template_param (di); - else if (peek == 's' && d_peek_next_char (di) == 'r') - { - struct demangle_component *type; - struct demangle_component *name; - - d_advance (di, 2); - type = cplus_demangle_type (di); - name = d_unqualified_name (di); - if (d_peek_char (di) != 'I') - return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name); - else - return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, - d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name, - d_template_args (di))); - } - else - { - struct demangle_component *op; - int args; - - op = d_operator_name (di); - if (op == NULL) - return NULL; - - if (op->type == DEMANGLE_COMPONENT_OPERATOR) - di->expansion += op->u.s_operator.op->len - 2; - - if (op->type == DEMANGLE_COMPONENT_OPERATOR - && strcmp (op->u.s_operator.op->code, "st") == 0) - return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op, - cplus_demangle_type (di)); - - switch (op->type) - { - default: - return NULL; - case DEMANGLE_COMPONENT_OPERATOR: - args = op->u.s_operator.op->args; - break; - case DEMANGLE_COMPONENT_EXTENDED_OPERATOR: - args = op->u.s_extended_operator.args; - break; - case DEMANGLE_COMPONENT_CAST: - args = 1; - break; - } - - switch (args) - { - case 1: - return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op, - d_expression (di)); - case 2: - { - struct demangle_component *left; - - left = d_expression (di); - return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op, - d_make_comp (di, - DEMANGLE_COMPONENT_BINARY_ARGS, - left, - d_expression (di))); - } - case 3: - { - struct demangle_component *first; - struct demangle_component *second; - - first = d_expression (di); - second = d_expression (di); - return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op, - d_make_comp (di, - DEMANGLE_COMPONENT_TRINARY_ARG1, - first, - d_make_comp (di, - DEMANGLE_COMPONENT_TRINARY_ARG2, - second, - d_expression (di)))); - } - default: - return NULL; - } - } -} - -/* ::= L <(value) number> E - ::= L <(value) float> E - ::= L E -*/ - -static struct demangle_component * -d_expr_primary (struct d_info *di) -{ - struct demangle_component *ret; - - if (d_next_char (di) != 'L') - return NULL; - if (d_peek_char (di) == '_') - ret = cplus_demangle_mangled_name (di, 0); - else - { - struct demangle_component *type; - enum demangle_component_type t; - const char *s; - - type = cplus_demangle_type (di); - if (type == NULL) - return NULL; - - /* If we have a type we know how to print, we aren't going to - print the type name itself. */ - if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE - && type->u.s_builtin.type->print != D_PRINT_DEFAULT) - di->expansion -= type->u.s_builtin.type->len; - - /* Rather than try to interpret the literal value, we just - collect it as a string. Note that it's possible to have a - floating point literal here. The ABI specifies that the - format of such literals is machine independent. That's fine, - but what's not fine is that versions of g++ up to 3.2 with - -fabi-version=1 used upper case letters in the hex constant, - and dumped out gcc's internal representation. That makes it - hard to tell where the constant ends, and hard to dump the - constant in any readable form anyhow. We don't attempt to - handle these cases. */ - - t = DEMANGLE_COMPONENT_LITERAL; - if (d_peek_char (di) == 'n') - { - t = DEMANGLE_COMPONENT_LITERAL_NEG; - d_advance (di, 1); - } - s = d_str (di); - while (d_peek_char (di) != 'E') - { - if (d_peek_char (di) == '\0') - return NULL; - d_advance (di, 1); - } - ret = d_make_comp (di, t, type, d_make_name (di, s, d_str (di) - s)); - } - if (d_next_char (di) != 'E') - return NULL; - return ret; -} - -/* ::= Z <(function) encoding> E <(entity) name> [] - ::= Z <(function) encoding> E s [] -*/ - -static struct demangle_component * -d_local_name (struct d_info *di) -{ - struct demangle_component *function; - - if (d_next_char (di) != 'Z') - return NULL; - - function = d_encoding (di, 0); - - if (d_next_char (di) != 'E') - return NULL; - - if (d_peek_char (di) == 's') - { - d_advance (di, 1); - if (! d_discriminator (di)) - return NULL; - return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, - d_make_name (di, "string literal", - sizeof "string literal" - 1)); - } - else - { - struct demangle_component *name; - - name = d_name (di); - if (! d_discriminator (di)) - return NULL; - return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name); - } -} - -/* ::= _ <(non-negative) number> - - We demangle the discriminator, but we don't print it out. FIXME: - We should print it out in verbose mode. */ - -static int -d_discriminator (struct d_info *di) -{ - long discrim; - - if (d_peek_char (di) != '_') - return 1; - d_advance (di, 1); - discrim = d_number (di); - if (discrim < 0) - return 0; - return 1; -} - -/* Add a new substitution. */ - -static int -d_add_substitution (struct d_info *di, struct demangle_component *dc) -{ - if (dc == NULL) - return 0; - if (di->next_sub >= di->num_subs) - return 0; - di->subs[di->next_sub] = dc; - ++di->next_sub; - return 1; -} - -/* ::= S _ - ::= S_ - ::= St - ::= Sa - ::= Sb - ::= Ss - ::= Si - ::= So - ::= Sd - - If PREFIX is non-zero, then this type is being used as a prefix in - a qualified name. In this case, for the standard substitutions, we - need to check whether we are being used as a prefix for a - constructor or destructor, and return a full template name. - Otherwise we will get something like std::iostream::~iostream() - which does not correspond particularly well to any function which - actually appears in the source. -*/ - -static const struct d_standard_sub_info standard_subs[] = -{ - { 't', NL ("std"), - NL ("std"), - NULL, 0 }, - { 'a', NL ("std::allocator"), - NL ("std::allocator"), - NL ("allocator") }, - { 'b', NL ("std::basic_string"), - NL ("std::basic_string"), - NL ("basic_string") }, - { 's', NL ("std::string"), - NL ("std::basic_string, std::allocator >"), - NL ("basic_string") }, - { 'i', NL ("std::istream"), - NL ("std::basic_istream >"), - NL ("basic_istream") }, - { 'o', NL ("std::ostream"), - NL ("std::basic_ostream >"), - NL ("basic_ostream") }, - { 'd', NL ("std::iostream"), - NL ("std::basic_iostream >"), - NL ("basic_iostream") } -}; - -static struct demangle_component * -d_substitution (struct d_info *di, int prefix) -{ - char c; - - if (d_next_char (di) != 'S') - return NULL; - - c = d_next_char (di); - if (c == '_' || IS_DIGIT (c) || IS_UPPER (c)) - { - int id; - - id = 0; - if (c != '_') - { - do - { - if (IS_DIGIT (c)) - id = id * 36 + c - '0'; - else if (IS_UPPER (c)) - id = id * 36 + c - 'A' + 10; - else - return NULL; - c = d_next_char (di); - } - while (c != '_'); - - ++id; - } - - if (id >= di->next_sub) - return NULL; - - ++di->did_subs; - - return di->subs[id]; - } - else - { - int verbose; - const struct d_standard_sub_info *p; - const struct d_standard_sub_info *pend; - - verbose = (di->options & DMGL_VERBOSE) != 0; - if (! verbose && prefix) - { - char peek; - - peek = d_peek_char (di); - if (peek == 'C' || peek == 'D') - verbose = 1; - } - - pend = (&standard_subs[0] - + sizeof standard_subs / sizeof standard_subs[0]); - for (p = &standard_subs[0]; p < pend; ++p) - { - if (c == p->code) - { - const char *s; - int len; - - if (p->set_last_name != NULL) - di->last_name = d_make_sub (di, p->set_last_name, - p->set_last_name_len); - if (verbose) - { - s = p->full_expansion; - len = p->full_len; - } - else - { - s = p->simple_expansion; - len = p->simple_len; - } - di->expansion += len; - return d_make_sub (di, s, len); - } - } - - return NULL; - } -} - -/* Resize the print buffer. */ - -static void -d_print_resize (struct d_print_info *dpi, size_t add) -{ - size_t need; - - if (dpi->buf == NULL) - return; - need = dpi->len + add; - while (need > dpi->alc) - { - size_t newalc; - char *newbuf; - - newalc = dpi->alc * 2; - newbuf = (char *) realloc (dpi->buf, newalc); - if (newbuf == NULL) - { - free (dpi->buf); - dpi->buf = NULL; - dpi->allocation_failure = 1; - return; - } - dpi->buf = newbuf; - dpi->alc = newalc; - } -} - -/* Append a character to the print buffer. */ - -static void -d_print_append_char (struct d_print_info *dpi, int c) -{ - if (dpi->buf != NULL) - { - if (dpi->len >= dpi->alc) - { - d_print_resize (dpi, 1); - if (dpi->buf == NULL) - return; - } - - dpi->buf[dpi->len] = c; - ++dpi->len; - } -} - -/* Append a buffer to the print buffer. */ - -static void -d_print_append_buffer (struct d_print_info *dpi, const char *s, size_t l) -{ - if (dpi->buf != NULL) - { - if (dpi->len + l > dpi->alc) - { - d_print_resize (dpi, l); - if (dpi->buf == NULL) - return; - } - - memcpy (dpi->buf + dpi->len, s, l); - dpi->len += l; - } -} - -/* Indicate that an error occurred during printing. */ - -static void -d_print_error (struct d_print_info *dpi) -{ - free (dpi->buf); - dpi->buf = NULL; -} - -/* Turn components into a human readable string. OPTIONS is the - options bits passed to the demangler. DC is the tree to print. - ESTIMATE is a guess at the length of the result. This returns a - string allocated by malloc, or NULL on error. On success, this - sets *PALC to the size of the allocated buffer. On failure, this - sets *PALC to 0 for a bad parse, or to 1 for a memory allocation - failure. */ - -CP_STATIC_IF_GLIBCPP_V3 -char * -cplus_demangle_print (int options, const struct demangle_component *dc, - int estimate, size_t *palc) -{ - struct d_print_info dpi; - - dpi.options = options; - - dpi.alc = estimate + 1; - dpi.buf = (char *) malloc (dpi.alc); - if (dpi.buf == NULL) - { - *palc = 1; - return NULL; - } - - dpi.len = 0; - dpi.templates = NULL; - dpi.modifiers = NULL; - - dpi.allocation_failure = 0; - - d_print_comp (&dpi, dc); - - d_append_char (&dpi, '\0'); - - if (dpi.buf != NULL) - *palc = dpi.alc; - else - *palc = dpi.allocation_failure; - - return dpi.buf; -} - -/* Subroutine to handle components. */ - -static void -d_print_comp (struct d_print_info *dpi, - const struct demangle_component *dc) -{ - if (dc == NULL) - { - d_print_error (dpi); - return; - } - if (d_print_saw_error (dpi)) - return; - - switch (dc->type) - { - case DEMANGLE_COMPONENT_NAME: - if ((dpi->options & DMGL_JAVA) == 0) - d_append_buffer (dpi, dc->u.s_name.s, dc->u.s_name.len); - else - d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len); - return; - - case DEMANGLE_COMPONENT_QUAL_NAME: - case DEMANGLE_COMPONENT_LOCAL_NAME: - d_print_comp (dpi, d_left (dc)); - if ((dpi->options & DMGL_JAVA) == 0) - d_append_string_constant (dpi, "::"); - else - d_append_char (dpi, '.'); - d_print_comp (dpi, d_right (dc)); - return; - - case DEMANGLE_COMPONENT_TYPED_NAME: - { - struct d_print_mod *hold_modifiers; - struct demangle_component *typed_name; - struct d_print_mod adpm[4]; - unsigned int i; - struct d_print_template dpt; - - /* Pass the name down to the type so that it can be printed in - the right place for the type. We also have to pass down - any CV-qualifiers, which apply to the this parameter. */ - hold_modifiers = dpi->modifiers; - i = 0; - typed_name = d_left (dc); - while (typed_name != NULL) - { - if (i >= sizeof adpm / sizeof adpm[0]) - { - d_print_error (dpi); - return; - } - - adpm[i].next = dpi->modifiers; - dpi->modifiers = &adpm[i]; - adpm[i].mod = typed_name; - adpm[i].printed = 0; - adpm[i].templates = dpi->templates; - ++i; - - if (typed_name->type != DEMANGLE_COMPONENT_RESTRICT_THIS - && typed_name->type != DEMANGLE_COMPONENT_VOLATILE_THIS - && typed_name->type != DEMANGLE_COMPONENT_CONST_THIS) - break; - - typed_name = d_left (typed_name); - } - - /* If typed_name is a template, then it applies to the - function type as well. */ - if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE) - { - dpt.next = dpi->templates; - dpi->templates = &dpt; - dpt.template_decl = typed_name; - } - - /* If typed_name is a DEMANGLE_COMPONENT_LOCAL_NAME, then - there may be CV-qualifiers on its right argument which - really apply here; this happens when parsing a class which - is local to a function. */ - if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME) - { - struct demangle_component *local_name; - - local_name = d_right (typed_name); - while (local_name->type == DEMANGLE_COMPONENT_RESTRICT_THIS - || local_name->type == DEMANGLE_COMPONENT_VOLATILE_THIS - || local_name->type == DEMANGLE_COMPONENT_CONST_THIS) - { - if (i >= sizeof adpm / sizeof adpm[0]) - { - d_print_error (dpi); - return; - } - - adpm[i] = adpm[i - 1]; - adpm[i].next = &adpm[i - 1]; - dpi->modifiers = &adpm[i]; - - adpm[i - 1].mod = local_name; - adpm[i - 1].printed = 0; - adpm[i - 1].templates = dpi->templates; - ++i; - - local_name = d_left (local_name); - } - } - - d_print_comp (dpi, d_right (dc)); - - if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE) - dpi->templates = dpt.next; - - /* If the modifiers didn't get printed by the type, print them - now. */ - while (i > 0) - { - --i; - if (! adpm[i].printed) - { - d_append_char (dpi, ' '); - d_print_mod (dpi, adpm[i].mod); - } - } - - dpi->modifiers = hold_modifiers; - - return; - } - - case DEMANGLE_COMPONENT_TEMPLATE: - { - struct d_print_mod *hold_dpm; - - /* Don't push modifiers into a template definition. Doing so - could give the wrong definition for a template argument. - Instead, treat the template essentially as a name. */ - - hold_dpm = dpi->modifiers; - dpi->modifiers = NULL; - - d_print_comp (dpi, d_left (dc)); - if (d_last_char (dpi) == '<') - d_append_char (dpi, ' '); - d_append_char (dpi, '<'); - d_print_comp (dpi, d_right (dc)); - /* Avoid generating two consecutive '>' characters, to avoid - the C++ syntactic ambiguity. */ - if (d_last_char (dpi) == '>') - d_append_char (dpi, ' '); - d_append_char (dpi, '>'); - - dpi->modifiers = hold_dpm; - - return; - } - - case DEMANGLE_COMPONENT_TEMPLATE_PARAM: - { - long i; - struct demangle_component *a; - struct d_print_template *hold_dpt; - - if (dpi->templates == NULL) - { - d_print_error (dpi); - return; - } - i = dc->u.s_number.number; - for (a = d_right (dpi->templates->template_decl); - a != NULL; - a = d_right (a)) - { - if (a->type != DEMANGLE_COMPONENT_TEMPLATE_ARGLIST) - { - d_print_error (dpi); - return; - } - if (i <= 0) - break; - --i; - } - if (i != 0 || a == NULL) - { - d_print_error (dpi); - return; - } - - /* While processing this parameter, we need to pop the list of - templates. This is because the template parameter may - itself be a reference to a parameter of an outer - template. */ - - hold_dpt = dpi->templates; - dpi->templates = hold_dpt->next; - - d_print_comp (dpi, d_left (a)); - - dpi->templates = hold_dpt; - - return; - } - - case DEMANGLE_COMPONENT_CTOR: - d_print_comp (dpi, dc->u.s_ctor.name); - return; - - case DEMANGLE_COMPONENT_DTOR: - d_append_char (dpi, '~'); - d_print_comp (dpi, dc->u.s_dtor.name); - return; - - case DEMANGLE_COMPONENT_VTABLE: - d_append_string_constant (dpi, "vtable for "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_VTT: - d_append_string_constant (dpi, "VTT for "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: - d_append_string_constant (dpi, "construction vtable for "); - d_print_comp (dpi, d_left (dc)); - d_append_string_constant (dpi, "-in-"); - d_print_comp (dpi, d_right (dc)); - return; - - case DEMANGLE_COMPONENT_TYPEINFO: - d_append_string_constant (dpi, "typeinfo for "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_TYPEINFO_NAME: - d_append_string_constant (dpi, "typeinfo name for "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_TYPEINFO_FN: - d_append_string_constant (dpi, "typeinfo fn for "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_THUNK: - d_append_string_constant (dpi, "non-virtual thunk to "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_VIRTUAL_THUNK: - d_append_string_constant (dpi, "virtual thunk to "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_COVARIANT_THUNK: - d_append_string_constant (dpi, "covariant return thunk to "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_JAVA_CLASS: - d_append_string_constant (dpi, "java Class for "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_GUARD: - d_append_string_constant (dpi, "guard variable for "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_REFTEMP: - d_append_string_constant (dpi, "reference temporary for "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_HIDDEN_ALIAS: - d_append_string_constant (dpi, "hidden alias for "); - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_SUB_STD: - d_append_buffer (dpi, dc->u.s_string.string, dc->u.s_string.len); - return; - - case DEMANGLE_COMPONENT_RESTRICT: - case DEMANGLE_COMPONENT_VOLATILE: - case DEMANGLE_COMPONENT_CONST: - { - struct d_print_mod *pdpm; - - /* When printing arrays, it's possible to have cases where the - same CV-qualifier gets pushed on the stack multiple times. - We only need to print it once. */ - - for (pdpm = dpi->modifiers; pdpm != NULL; pdpm = pdpm->next) - { - if (! pdpm->printed) - { - if (pdpm->mod->type != DEMANGLE_COMPONENT_RESTRICT - && pdpm->mod->type != DEMANGLE_COMPONENT_VOLATILE - && pdpm->mod->type != DEMANGLE_COMPONENT_CONST) - break; - if (pdpm->mod->type == dc->type) - { - d_print_comp (dpi, d_left (dc)); - return; - } - } - } - } - /* Fall through. */ - case DEMANGLE_COMPONENT_RESTRICT_THIS: - case DEMANGLE_COMPONENT_VOLATILE_THIS: - case DEMANGLE_COMPONENT_CONST_THIS: - case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: - case DEMANGLE_COMPONENT_POINTER: - case DEMANGLE_COMPONENT_REFERENCE: - case DEMANGLE_COMPONENT_COMPLEX: - case DEMANGLE_COMPONENT_IMAGINARY: - { - /* We keep a list of modifiers on the stack. */ - struct d_print_mod dpm; - - dpm.next = dpi->modifiers; - dpi->modifiers = &dpm; - dpm.mod = dc; - dpm.printed = 0; - dpm.templates = dpi->templates; - - d_print_comp (dpi, d_left (dc)); - - /* If the modifier didn't get printed by the type, print it - now. */ - if (! dpm.printed) - d_print_mod (dpi, dc); - - dpi->modifiers = dpm.next; - - return; - } - - case DEMANGLE_COMPONENT_BUILTIN_TYPE: - if ((dpi->options & DMGL_JAVA) == 0) - d_append_buffer (dpi, dc->u.s_builtin.type->name, - dc->u.s_builtin.type->len); - else - d_append_buffer (dpi, dc->u.s_builtin.type->java_name, - dc->u.s_builtin.type->java_len); - return; - - case DEMANGLE_COMPONENT_VENDOR_TYPE: - d_print_comp (dpi, d_left (dc)); - return; - - case DEMANGLE_COMPONENT_FUNCTION_TYPE: - { - if ((dpi->options & DMGL_RET_POSTFIX) != 0) - d_print_function_type (dpi, dc, dpi->modifiers); - - /* Print return type if present */ - if (d_left (dc) != NULL) - { - struct d_print_mod dpm; - - /* We must pass this type down as a modifier in order to - print it in the right location. */ - dpm.next = dpi->modifiers; - dpi->modifiers = &dpm; - dpm.mod = dc; - dpm.printed = 0; - dpm.templates = dpi->templates; - - d_print_comp (dpi, d_left (dc)); - - dpi->modifiers = dpm.next; - - if (dpm.printed) - return; - - /* In standard prefix notation, there is a space between the - return type and the function signature. */ - if ((dpi->options & DMGL_RET_POSTFIX) == 0) - d_append_char (dpi, ' '); - } - - if ((dpi->options & DMGL_RET_POSTFIX) == 0) - d_print_function_type (dpi, dc, dpi->modifiers); - - return; - } - - case DEMANGLE_COMPONENT_ARRAY_TYPE: - { - struct d_print_mod *hold_modifiers; - struct d_print_mod adpm[4]; - unsigned int i; - struct d_print_mod *pdpm; - - /* We must pass this type down as a modifier in order to print - multi-dimensional arrays correctly. If the array itself is - CV-qualified, we act as though the element type were - CV-qualified. We do this by copying the modifiers down - rather than fiddling pointers, so that we don't wind up - with a d_print_mod higher on the stack pointing into our - stack frame after we return. */ - - hold_modifiers = dpi->modifiers; - - adpm[0].next = hold_modifiers; - dpi->modifiers = &adpm[0]; - adpm[0].mod = dc; - adpm[0].printed = 0; - adpm[0].templates = dpi->templates; - - i = 1; - pdpm = hold_modifiers; - while (pdpm != NULL - && (pdpm->mod->type == DEMANGLE_COMPONENT_RESTRICT - || pdpm->mod->type == DEMANGLE_COMPONENT_VOLATILE - || pdpm->mod->type == DEMANGLE_COMPONENT_CONST)) - { - if (! pdpm->printed) - { - if (i >= sizeof adpm / sizeof adpm[0]) - { - d_print_error (dpi); - return; - } - - adpm[i] = *pdpm; - adpm[i].next = dpi->modifiers; - dpi->modifiers = &adpm[i]; - pdpm->printed = 1; - ++i; - } - - pdpm = pdpm->next; - } - - d_print_comp (dpi, d_right (dc)); - - dpi->modifiers = hold_modifiers; - - if (adpm[0].printed) - return; - - while (i > 1) - { - --i; - d_print_mod (dpi, adpm[i].mod); - } - - d_print_array_type (dpi, dc, dpi->modifiers); - - return; - } - - case DEMANGLE_COMPONENT_PTRMEM_TYPE: - { - struct d_print_mod dpm; - - dpm.next = dpi->modifiers; - dpi->modifiers = &dpm; - dpm.mod = dc; - dpm.printed = 0; - dpm.templates = dpi->templates; - - d_print_comp (dpi, d_right (dc)); - - /* If the modifier didn't get printed by the type, print it - now. */ - if (! dpm.printed) - { - d_append_char (dpi, ' '); - d_print_comp (dpi, d_left (dc)); - d_append_string_constant (dpi, "::*"); - } - - dpi->modifiers = dpm.next; - - return; - } - - case DEMANGLE_COMPONENT_ARGLIST: - case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: - d_print_comp (dpi, d_left (dc)); - if (d_right (dc) != NULL) - { - d_append_string_constant (dpi, ", "); - d_print_comp (dpi, d_right (dc)); - } - return; - - case DEMANGLE_COMPONENT_OPERATOR: - { - char c; - - d_append_string_constant (dpi, "operator"); - c = dc->u.s_operator.op->name[0]; - if (IS_LOWER (c)) - d_append_char (dpi, ' '); - d_append_buffer (dpi, dc->u.s_operator.op->name, - dc->u.s_operator.op->len); - return; - } - - case DEMANGLE_COMPONENT_EXTENDED_OPERATOR: - d_append_string_constant (dpi, "operator "); - d_print_comp (dpi, dc->u.s_extended_operator.name); - return; - - case DEMANGLE_COMPONENT_CAST: - d_append_string_constant (dpi, "operator "); - d_print_cast (dpi, dc); - return; - - case DEMANGLE_COMPONENT_UNARY: - if (d_left (dc)->type != DEMANGLE_COMPONENT_CAST) - d_print_expr_op (dpi, d_left (dc)); - else - { - d_append_char (dpi, '('); - d_print_cast (dpi, d_left (dc)); - d_append_char (dpi, ')'); - } - d_append_char (dpi, '('); - d_print_comp (dpi, d_right (dc)); - d_append_char (dpi, ')'); - return; - - case DEMANGLE_COMPONENT_BINARY: - if (d_right (dc)->type != DEMANGLE_COMPONENT_BINARY_ARGS) - { - d_print_error (dpi); - return; - } - - /* We wrap an expression which uses the greater-than operator in - an extra layer of parens so that it does not get confused - with the '>' which ends the template parameters. */ - if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR - && d_left (dc)->u.s_operator.op->len == 1 - && d_left (dc)->u.s_operator.op->name[0] == '>') - d_append_char (dpi, '('); - - d_append_char (dpi, '('); - d_print_comp (dpi, d_left (d_right (dc))); - d_append_string_constant (dpi, ") "); - d_print_expr_op (dpi, d_left (dc)); - d_append_string_constant (dpi, " ("); - d_print_comp (dpi, d_right (d_right (dc))); - d_append_char (dpi, ')'); - - if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR - && d_left (dc)->u.s_operator.op->len == 1 - && d_left (dc)->u.s_operator.op->name[0] == '>') - d_append_char (dpi, ')'); - - return; - - case DEMANGLE_COMPONENT_BINARY_ARGS: - /* We should only see this as part of DEMANGLE_COMPONENT_BINARY. */ - d_print_error (dpi); - return; - - case DEMANGLE_COMPONENT_TRINARY: - if (d_right (dc)->type != DEMANGLE_COMPONENT_TRINARY_ARG1 - || d_right (d_right (dc))->type != DEMANGLE_COMPONENT_TRINARY_ARG2) - { - d_print_error (dpi); - return; - } - d_append_char (dpi, '('); - d_print_comp (dpi, d_left (d_right (dc))); - d_append_string_constant (dpi, ") "); - d_print_expr_op (dpi, d_left (dc)); - d_append_string_constant (dpi, " ("); - d_print_comp (dpi, d_left (d_right (d_right (dc)))); - d_append_string_constant (dpi, ") : ("); - d_print_comp (dpi, d_right (d_right (d_right (dc)))); - d_append_char (dpi, ')'); - return; - - case DEMANGLE_COMPONENT_TRINARY_ARG1: - case DEMANGLE_COMPONENT_TRINARY_ARG2: - /* We should only see these are part of DEMANGLE_COMPONENT_TRINARY. */ - d_print_error (dpi); - return; - - case DEMANGLE_COMPONENT_LITERAL: - case DEMANGLE_COMPONENT_LITERAL_NEG: - { - enum d_builtin_type_print tp; - - /* For some builtin types, produce simpler output. */ - tp = D_PRINT_DEFAULT; - if (d_left (dc)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) - { - tp = d_left (dc)->u.s_builtin.type->print; - switch (tp) - { - case D_PRINT_INT: - case D_PRINT_UNSIGNED: - case D_PRINT_LONG: - case D_PRINT_UNSIGNED_LONG: - case D_PRINT_LONG_LONG: - case D_PRINT_UNSIGNED_LONG_LONG: - if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME) - { - if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG) - d_append_char (dpi, '-'); - d_print_comp (dpi, d_right (dc)); - switch (tp) - { - default: - break; - case D_PRINT_UNSIGNED: - d_append_char (dpi, 'u'); - break; - case D_PRINT_LONG: - d_append_char (dpi, 'l'); - break; - case D_PRINT_UNSIGNED_LONG: - d_append_string_constant (dpi, "ul"); - break; - case D_PRINT_LONG_LONG: - d_append_string_constant (dpi, "ll"); - break; - case D_PRINT_UNSIGNED_LONG_LONG: - d_append_string_constant (dpi, "ull"); - break; - } - return; - } - break; - - case D_PRINT_BOOL: - if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME - && d_right (dc)->u.s_name.len == 1 - && dc->type == DEMANGLE_COMPONENT_LITERAL) - { - switch (d_right (dc)->u.s_name.s[0]) - { - case '0': - d_append_string_constant (dpi, "false"); - return; - case '1': - d_append_string_constant (dpi, "true"); - return; - default: - break; - } - } - break; - - default: - break; - } - } - - d_append_char (dpi, '('); - d_print_comp (dpi, d_left (dc)); - d_append_char (dpi, ')'); - if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG) - d_append_char (dpi, '-'); - if (tp == D_PRINT_FLOAT) - d_append_char (dpi, '['); - d_print_comp (dpi, d_right (dc)); - if (tp == D_PRINT_FLOAT) - d_append_char (dpi, ']'); - } - return; - - default: - d_print_error (dpi); - return; - } -} - -/* Print a Java dentifier. For Java we try to handle encoded extended - Unicode characters. The C++ ABI doesn't mention Unicode encoding, - so we don't it for C++. Characters are encoded as - __U+_. */ - -static void -d_print_java_identifier (struct d_print_info *dpi, const char *name, int len) -{ - const char *p; - const char *end; - - end = name + len; - for (p = name; p < end; ++p) - { - if (end - p > 3 - && p[0] == '_' - && p[1] == '_' - && p[2] == 'U') - { - unsigned long c; - const char *q; - - c = 0; - for (q = p + 3; q < end; ++q) - { - int dig; - - if (IS_DIGIT (*q)) - dig = *q - '0'; - else if (*q >= 'A' && *q <= 'F') - dig = *q - 'A' + 10; - else if (*q >= 'a' && *q <= 'f') - dig = *q - 'a' + 10; - else - break; - - c = c * 16 + dig; - } - /* If the Unicode character is larger than 256, we don't try - to deal with it here. FIXME. */ - if (q < end && *q == '_' && c < 256) - { - d_append_char (dpi, c); - p = q; - continue; - } - } - - d_append_char (dpi, *p); - } -} - -/* Print a list of modifiers. SUFFIX is 1 if we are printing - qualifiers on this after printing a function. */ - -static void -d_print_mod_list (struct d_print_info *dpi, - struct d_print_mod *mods, int suffix) -{ - struct d_print_template *hold_dpt; - - if (mods == NULL || d_print_saw_error (dpi)) - return; - - if (mods->printed - || (! suffix - && (mods->mod->type == DEMANGLE_COMPONENT_RESTRICT_THIS - || mods->mod->type == DEMANGLE_COMPONENT_VOLATILE_THIS - || mods->mod->type == DEMANGLE_COMPONENT_CONST_THIS))) - { - d_print_mod_list (dpi, mods->next, suffix); - return; - } - - mods->printed = 1; - - hold_dpt = dpi->templates; - dpi->templates = mods->templates; - - if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE) - { - d_print_function_type (dpi, mods->mod, mods->next); - dpi->templates = hold_dpt; - return; - } - else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE) - { - d_print_array_type (dpi, mods->mod, mods->next); - dpi->templates = hold_dpt; - return; - } - else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME) - { - struct d_print_mod *hold_modifiers; - struct demangle_component *dc; - - /* When this is on the modifier stack, we have pulled any - qualifiers off the right argument already. Otherwise, we - print it as usual, but don't let the left argument see any - modifiers. */ - - hold_modifiers = dpi->modifiers; - dpi->modifiers = NULL; - d_print_comp (dpi, d_left (mods->mod)); - dpi->modifiers = hold_modifiers; - - if ((dpi->options & DMGL_JAVA) == 0) - d_append_string_constant (dpi, "::"); - else - d_append_char (dpi, '.'); - - dc = d_right (mods->mod); - while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS - || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS - || dc->type == DEMANGLE_COMPONENT_CONST_THIS) - dc = d_left (dc); - - d_print_comp (dpi, dc); - - dpi->templates = hold_dpt; - return; - } - - d_print_mod (dpi, mods->mod); - - dpi->templates = hold_dpt; - - d_print_mod_list (dpi, mods->next, suffix); -} - -/* Print a modifier. */ - -static void -d_print_mod (struct d_print_info *dpi, - const struct demangle_component *mod) -{ - switch (mod->type) - { - case DEMANGLE_COMPONENT_RESTRICT: - case DEMANGLE_COMPONENT_RESTRICT_THIS: - d_append_string_constant (dpi, " restrict"); - return; - case DEMANGLE_COMPONENT_VOLATILE: - case DEMANGLE_COMPONENT_VOLATILE_THIS: - d_append_string_constant (dpi, " volatile"); - return; - case DEMANGLE_COMPONENT_CONST: - case DEMANGLE_COMPONENT_CONST_THIS: - d_append_string_constant (dpi, " const"); - return; - case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: - d_append_char (dpi, ' '); - d_print_comp (dpi, d_right (mod)); - return; - case DEMANGLE_COMPONENT_POINTER: - /* There is no pointer symbol in Java. */ - if ((dpi->options & DMGL_JAVA) == 0) - d_append_char (dpi, '*'); - return; - case DEMANGLE_COMPONENT_REFERENCE: - d_append_char (dpi, '&'); - return; - case DEMANGLE_COMPONENT_COMPLEX: - d_append_string_constant (dpi, "complex "); - return; - case DEMANGLE_COMPONENT_IMAGINARY: - d_append_string_constant (dpi, "imaginary "); - return; - case DEMANGLE_COMPONENT_PTRMEM_TYPE: - if (d_last_char (dpi) != '(') - d_append_char (dpi, ' '); - d_print_comp (dpi, d_left (mod)); - d_append_string_constant (dpi, "::*"); - return; - case DEMANGLE_COMPONENT_TYPED_NAME: - d_print_comp (dpi, d_left (mod)); - return; - default: - /* Otherwise, we have something that won't go back on the - modifier stack, so we can just print it. */ - d_print_comp (dpi, mod); - return; - } -} - -/* Print a function type, except for the return type. */ - -static void -d_print_function_type (struct d_print_info *dpi, - const struct demangle_component *dc, - struct d_print_mod *mods) -{ - int need_paren; - int saw_mod; - int need_space; - struct d_print_mod *p; - struct d_print_mod *hold_modifiers; - - need_paren = 0; - saw_mod = 0; - need_space = 0; - for (p = mods; p != NULL; p = p->next) - { - if (p->printed) - break; - - saw_mod = 1; - switch (p->mod->type) - { - case DEMANGLE_COMPONENT_POINTER: - case DEMANGLE_COMPONENT_REFERENCE: - need_paren = 1; - break; - case DEMANGLE_COMPONENT_RESTRICT: - case DEMANGLE_COMPONENT_VOLATILE: - case DEMANGLE_COMPONENT_CONST: - case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: - case DEMANGLE_COMPONENT_COMPLEX: - case DEMANGLE_COMPONENT_IMAGINARY: - case DEMANGLE_COMPONENT_PTRMEM_TYPE: - need_space = 1; - need_paren = 1; - break; - case DEMANGLE_COMPONENT_RESTRICT_THIS: - case DEMANGLE_COMPONENT_VOLATILE_THIS: - case DEMANGLE_COMPONENT_CONST_THIS: - break; - default: - break; - } - if (need_paren) - break; - } - - if (d_left (dc) != NULL && ! saw_mod) - need_paren = 1; - - if (need_paren) - { - if (! need_space) - { - if (d_last_char (dpi) != '(' - && d_last_char (dpi) != '*') - need_space = 1; - } - if (need_space && d_last_char (dpi) != ' ') - d_append_char (dpi, ' '); - d_append_char (dpi, '('); - } - - hold_modifiers = dpi->modifiers; - dpi->modifiers = NULL; - - d_print_mod_list (dpi, mods, 0); - - if (need_paren) - d_append_char (dpi, ')'); - - d_append_char (dpi, '('); - - if (d_right (dc) != NULL) - d_print_comp (dpi, d_right (dc)); - - d_append_char (dpi, ')'); - - d_print_mod_list (dpi, mods, 1); - - dpi->modifiers = hold_modifiers; -} - -/* Print an array type, except for the element type. */ - -static void -d_print_array_type (struct d_print_info *dpi, - const struct demangle_component *dc, - struct d_print_mod *mods) -{ - int need_space; - - need_space = 1; - if (mods != NULL) - { - int need_paren; - struct d_print_mod *p; - - need_paren = 0; - for (p = mods; p != NULL; p = p->next) - { - if (! p->printed) - { - if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE) - { - need_space = 0; - break; - } - else - { - need_paren = 1; - need_space = 1; - break; - } - } - } - - if (need_paren) - d_append_string_constant (dpi, " ("); - - d_print_mod_list (dpi, mods, 0); - - if (need_paren) - d_append_char (dpi, ')'); - } - - if (need_space) - d_append_char (dpi, ' '); - - d_append_char (dpi, '['); - - if (d_left (dc) != NULL) - d_print_comp (dpi, d_left (dc)); - - d_append_char (dpi, ']'); -} - -/* Print an operator in an expression. */ - -static void -d_print_expr_op (struct d_print_info *dpi, - const struct demangle_component *dc) -{ - if (dc->type == DEMANGLE_COMPONENT_OPERATOR) - d_append_buffer (dpi, dc->u.s_operator.op->name, - dc->u.s_operator.op->len); - else - d_print_comp (dpi, dc); -} - -/* Print a cast. */ - -static void -d_print_cast (struct d_print_info *dpi, - const struct demangle_component *dc) -{ - if (d_left (dc)->type != DEMANGLE_COMPONENT_TEMPLATE) - d_print_comp (dpi, d_left (dc)); - else - { - struct d_print_mod *hold_dpm; - struct d_print_template dpt; - - /* It appears that for a templated cast operator, we need to put - the template parameters in scope for the operator name, but - not for the parameters. The effect is that we need to handle - the template printing here. */ - - hold_dpm = dpi->modifiers; - dpi->modifiers = NULL; - - dpt.next = dpi->templates; - dpi->templates = &dpt; - dpt.template_decl = d_left (dc); - - d_print_comp (dpi, d_left (d_left (dc))); - - dpi->templates = dpt.next; - - if (d_last_char (dpi) == '<') - d_append_char (dpi, ' '); - d_append_char (dpi, '<'); - d_print_comp (dpi, d_right (d_left (dc))); - /* Avoid generating two consecutive '>' characters, to avoid - the C++ syntactic ambiguity. */ - if (d_last_char (dpi) == '>') - d_append_char (dpi, ' '); - d_append_char (dpi, '>'); - - dpi->modifiers = hold_dpm; - } -} - -/* Initialize the information structure we use to pass around - information. */ - -CP_STATIC_IF_GLIBCPP_V3 -void -cplus_demangle_init_info (const char *mangled, int options, size_t len, - struct d_info *di) -{ - di->s = mangled; - di->send = mangled + len; - di->options = options; - - di->n = mangled; - - /* We can not need more components than twice the number of chars in - the mangled string. Most components correspond directly to - chars, but the ARGLIST types are exceptions. */ - di->num_comps = 2 * len; - di->next_comp = 0; - - /* Similarly, we can not need more substitutions than there are - chars in the mangled string. */ - di->num_subs = len; - di->next_sub = 0; - di->did_subs = 0; - - di->last_name = NULL; - - di->expansion = 0; -} - -/* Entry point for the demangler. If MANGLED is a g++ v3 ABI mangled - name, return a buffer allocated with malloc holding the demangled - name. OPTIONS is the usual libiberty demangler options. On - success, this sets *PALC to the allocated size of the returned - buffer. On failure, this sets *PALC to 0 for a bad name, or 1 for - a memory allocation failure. On failure, this returns NULL. */ - -static char * -d_demangle (const char* mangled, int options, size_t *palc) -{ - size_t len; - int type; - struct d_info di; - struct demangle_component *dc; - int estimate; - char *ret; - - *palc = 0; - - len = strlen (mangled); - - if (mangled[0] == '_' && mangled[1] == 'Z') - type = 0; - else if (strncmp (mangled, "_GLOBAL_", 8) == 0 - && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$') - && (mangled[9] == 'D' || mangled[9] == 'I') - && mangled[10] == '_') - { - char *r; - - r = (char *) malloc (40 + len - 11); - if (r == NULL) - *palc = 1; - else - { - if (mangled[9] == 'I') - strcpy (r, "global constructors keyed to "); - else - strcpy (r, "global destructors keyed to "); - strcat (r, mangled + 11); - } - return r; - } - else - { - if ((options & DMGL_TYPES) == 0) - return NULL; - type = 1; - } - - cplus_demangle_init_info (mangled, options, len, &di); - - { -#ifdef CP_DYNAMIC_ARRAYS - __extension__ struct demangle_component comps[di.num_comps]; - __extension__ struct demangle_component *subs[di.num_subs]; - - di.comps = &comps[0]; - di.subs = &subs[0]; -#else - di.comps = ((struct demangle_component *) - malloc (di.num_comps * sizeof (struct demangle_component))); - di.subs = ((struct demangle_component **) - malloc (di.num_subs * sizeof (struct demangle_component *))); - if (di.comps == NULL || di.subs == NULL) - { - if (di.comps != NULL) - free (di.comps); - if (di.subs != NULL) - free (di.subs); - *palc = 1; - return NULL; - } -#endif - - if (! type) - dc = cplus_demangle_mangled_name (&di, 1); - else - dc = cplus_demangle_type (&di); - - /* If DMGL_PARAMS is set, then if we didn't consume the entire - mangled string, then we didn't successfully demangle it. If - DMGL_PARAMS is not set, we didn't look at the trailing - parameters. */ - if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0') - dc = NULL; - -#ifdef CP_DEMANGLE_DEBUG - if (dc == NULL) - printf ("failed demangling\n"); - else - d_dump (dc, 0); -#endif - - /* We try to guess the length of the demangled string, to minimize - calls to realloc during demangling. */ - estimate = len + di.expansion + 10 * di.did_subs; - estimate += estimate / 8; - - ret = NULL; - if (dc != NULL) - ret = cplus_demangle_print (options, dc, estimate, palc); - -#ifndef CP_DYNAMIC_ARRAYS - free (di.comps); - free (di.subs); -#endif - -#ifdef CP_DEMANGLE_DEBUG - if (ret != NULL) - { - int rlen; - - rlen = strlen (ret); - if (rlen > 2 * estimate) - printf ("*** Length %d much greater than estimate %d\n", - rlen, estimate); - else if (rlen > estimate) - printf ("*** Length %d greater than estimate %d\n", - rlen, estimate); - else if (rlen < estimate / 2) - printf ("*** Length %d much less than estimate %d\n", - rlen, estimate); - } -#endif - } - - return ret; -} - -#if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3) - -extern char *__cxa_demangle (const char *, char *, size_t *, int *); - -/* ia64 ABI-mandated entry point in the C++ runtime library for - performing demangling. MANGLED_NAME is a NUL-terminated character - string containing the name to be demangled. - - OUTPUT_BUFFER is a region of memory, allocated with malloc, of - *LENGTH bytes, into which the demangled name is stored. If - OUTPUT_BUFFER is not long enough, it is expanded using realloc. - OUTPUT_BUFFER may instead be NULL; in that case, the demangled name - is placed in a region of memory allocated with malloc. - - If LENGTH is non-NULL, the length of the buffer conaining the - demangled name, is placed in *LENGTH. - - The return value is a pointer to the start of the NUL-terminated - demangled name, or NULL if the demangling fails. The caller is - responsible for deallocating this memory using free. - - *STATUS is set to one of the following values: - 0: The demangling operation succeeded. - -1: A memory allocation failure occurred. - -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules. - -3: One of the arguments is invalid. - - The demangling is performed using the C++ ABI mangling rules, with - GNU extensions. */ - -char * -__cxa_demangle (const char *mangled_name, char *output_buffer, - size_t *length, int *status) -{ - char *demangled; - size_t alc; - - if (mangled_name == NULL) - { - if (status != NULL) - *status = -3; - return NULL; - } - - if (output_buffer != NULL && length == NULL) - { - if (status != NULL) - *status = -3; - return NULL; - } - - demangled = d_demangle (mangled_name, DMGL_PARAMS | DMGL_TYPES, &alc); - - if (demangled == NULL) - { - if (status != NULL) - { - if (alc == 1) - *status = -1; - else - *status = -2; - } - return NULL; - } - - if (output_buffer == NULL) - { - if (length != NULL) - *length = alc; - } - else - { - if (strlen (demangled) < *length) - { - strcpy (output_buffer, demangled); - free (demangled); - demangled = output_buffer; - } - else - { - free (output_buffer); - *length = alc; - } - } - - if (status != NULL) - *status = 0; - - return demangled; -} - -#else /* ! (IN_LIBGCC2 || IN_GLIBCPP_V3) */ - -/* Entry point for libiberty demangler. If MANGLED is a g++ v3 ABI - mangled name, return a buffer allocated with malloc holding the - demangled name. Otherwise, return NULL. */ - -char * -cplus_demangle_v3 (const char* mangled, int options) -{ - size_t alc; - - return d_demangle (mangled, options, &alc); -} - -/* Demangle a Java symbol. Java uses a subset of the V3 ABI C++ mangling - conventions, but the output formatting is a little different. - This instructs the C++ demangler not to emit pointer characters ("*"), and - to use Java's namespace separator symbol ("." instead of "::"). It then - does an additional pass over the demangled output to replace instances - of JArray with TYPE[]. */ - -char * -java_demangle_v3 (const char* mangled) -{ - size_t alc; - char *demangled; - int nesting; - char *from; - char *to; - - demangled = d_demangle (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX, - &alc); - - if (demangled == NULL) - return NULL; - - nesting = 0; - from = demangled; - to = from; - while (*from != '\0') - { - if (strncmp (from, "JArray<", 7) == 0) - { - from += 7; - ++nesting; - } - else if (nesting > 0 && *from == '>') - { - while (to > demangled && to[-1] == ' ') - --to; - *to++ = '['; - *to++ = ']'; - --nesting; - ++from; - } - else - *to++ = *from++; - } - - *to = '\0'; - - return demangled; -} - -#endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */ - -#ifndef IN_GLIBCPP_V3 - -/* Demangle a string in order to find out whether it is a constructor - or destructor. Return non-zero on success. Set *CTOR_KIND and - *DTOR_KIND appropriately. */ - -static int -is_ctor_or_dtor (const char *mangled, - enum gnu_v3_ctor_kinds *ctor_kind, - enum gnu_v3_dtor_kinds *dtor_kind) -{ - struct d_info di; - struct demangle_component *dc; - int ret; - - *ctor_kind = (enum gnu_v3_ctor_kinds) 0; - *dtor_kind = (enum gnu_v3_dtor_kinds) 0; - - cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di); - - { -#ifdef CP_DYNAMIC_ARRAYS - __extension__ struct demangle_component comps[di.num_comps]; - __extension__ struct demangle_component *subs[di.num_subs]; - - di.comps = &comps[0]; - di.subs = &subs[0]; -#else - di.comps = ((struct demangle_component *) - malloc (di.num_comps * sizeof (struct demangle_component))); - di.subs = ((struct demangle_component **) - malloc (di.num_subs * sizeof (struct demangle_component *))); - if (di.comps == NULL || di.subs == NULL) - { - if (di.comps != NULL) - free (di.comps); - if (di.subs != NULL) - free (di.subs); - return 0; - } -#endif - - dc = cplus_demangle_mangled_name (&di, 1); - - /* Note that because we did not pass DMGL_PARAMS, we don't expect - to demangle the entire string. */ - - ret = 0; - while (dc != NULL) - { - switch (dc->type) - { - default: - dc = NULL; - break; - case DEMANGLE_COMPONENT_TYPED_NAME: - case DEMANGLE_COMPONENT_TEMPLATE: - case DEMANGLE_COMPONENT_RESTRICT_THIS: - case DEMANGLE_COMPONENT_VOLATILE_THIS: - case DEMANGLE_COMPONENT_CONST_THIS: - dc = d_left (dc); - break; - case DEMANGLE_COMPONENT_QUAL_NAME: - case DEMANGLE_COMPONENT_LOCAL_NAME: - dc = d_right (dc); - break; - case DEMANGLE_COMPONENT_CTOR: - *ctor_kind = dc->u.s_ctor.kind; - ret = 1; - dc = NULL; - break; - case DEMANGLE_COMPONENT_DTOR: - *dtor_kind = dc->u.s_dtor.kind; - ret = 1; - dc = NULL; - break; - } - } - -#ifndef CP_DYNAMIC_ARRAYS - free (di.subs); - free (di.comps); -#endif - } - - return ret; -} - -/* Return whether NAME is the mangled form of a g++ V3 ABI constructor - name. A non-zero return indicates the type of constructor. */ - -enum gnu_v3_ctor_kinds -is_gnu_v3_mangled_ctor (const char *name) -{ - enum gnu_v3_ctor_kinds ctor_kind; - enum gnu_v3_dtor_kinds dtor_kind; - - if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind)) - return (enum gnu_v3_ctor_kinds) 0; - return ctor_kind; -} - - -/* Return whether NAME is the mangled form of a g++ V3 ABI destructor - name. A non-zero return indicates the type of destructor. */ - -enum gnu_v3_dtor_kinds -is_gnu_v3_mangled_dtor (const char *name) -{ - enum gnu_v3_ctor_kinds ctor_kind; - enum gnu_v3_dtor_kinds dtor_kind; - - if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind)) - return (enum gnu_v3_dtor_kinds) 0; - return dtor_kind; -} - -#endif /* IN_GLIBCPP_V3 */ - -#ifdef STANDALONE_DEMANGLER - -#include "getopt.h" -#include "dyn-string.h" - -static void print_usage (FILE* fp, int exit_value); - -#define IS_ALPHA(CHAR) \ - (((CHAR) >= 'a' && (CHAR) <= 'z') \ - || ((CHAR) >= 'A' && (CHAR) <= 'Z')) - -/* Non-zero if CHAR is a character than can occur in a mangled name. */ -#define is_mangled_char(CHAR) \ - (IS_ALPHA (CHAR) || IS_DIGIT (CHAR) \ - || (CHAR) == '_' || (CHAR) == '.' || (CHAR) == '$') - -/* The name of this program, as invoked. */ -const char* program_name; - -/* Prints usage summary to FP and then exits with EXIT_VALUE. */ - -static void -print_usage (FILE* fp, int exit_value) -{ - fprintf (fp, "Usage: %s [options] [names ...]\n", program_name); - fprintf (fp, "Options:\n"); - fprintf (fp, " -h,--help Display this message.\n"); - fprintf (fp, " -p,--no-params Don't display function parameters\n"); - fprintf (fp, " -v,--verbose Produce verbose demanglings.\n"); - fprintf (fp, "If names are provided, they are demangled. Otherwise filters standard input.\n"); - - exit (exit_value); -} - -/* Option specification for getopt_long. */ -static const struct option long_options[] = -{ - { "help", no_argument, NULL, 'h' }, - { "no-params", no_argument, NULL, 'p' }, - { "verbose", no_argument, NULL, 'v' }, - { NULL, no_argument, NULL, 0 }, -}; - -/* Main entry for a demangling filter executable. It will demangle - its command line arguments, if any. If none are provided, it will - filter stdin to stdout, replacing any recognized mangled C++ names - with their demangled equivalents. */ - -int -main (int argc, char *argv[]) -{ - int i; - int opt_char; - int options = DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES; - - /* Use the program name of this program, as invoked. */ - program_name = argv[0]; - - /* Parse options. */ - do - { - opt_char = getopt_long (argc, argv, "hpv", long_options, NULL); - switch (opt_char) - { - case '?': /* Unrecognized option. */ - print_usage (stderr, 1); - break; - - case 'h': - print_usage (stdout, 0); - break; - - case 'p': - options &= ~ DMGL_PARAMS; - break; - - case 'v': - options |= DMGL_VERBOSE; - break; - } - } - while (opt_char != -1); - - if (optind == argc) - /* No command line arguments were provided. Filter stdin. */ - { - dyn_string_t mangled = dyn_string_new (3); - char *s; - - /* Read all of input. */ - while (!feof (stdin)) - { - char c; - - /* Pile characters into mangled until we hit one that can't - occur in a mangled name. */ - c = getchar (); - while (!feof (stdin) && is_mangled_char (c)) - { - dyn_string_append_char (mangled, c); - if (feof (stdin)) - break; - c = getchar (); - } - - if (dyn_string_length (mangled) > 0) - { -#ifdef IN_GLIBCPP_V3 - s = __cxa_demangle (dyn_string_buf (mangled), NULL, NULL, NULL); -#else - s = cplus_demangle_v3 (dyn_string_buf (mangled), options); -#endif - - if (s != NULL) - { - fputs (s, stdout); - free (s); - } - else - { - /* It might not have been a mangled name. Print the - original text. */ - fputs (dyn_string_buf (mangled), stdout); - } - - dyn_string_clear (mangled); - } - - /* If we haven't hit EOF yet, we've read one character that - can't occur in a mangled name, so print it out. */ - if (!feof (stdin)) - putchar (c); - } - - dyn_string_delete (mangled); - } - else - /* Demangle command line arguments. */ - { - /* Loop over command line arguments. */ - for (i = optind; i < argc; ++i) - { - char *s; -#ifdef IN_GLIBCPP_V3 - int status; -#endif - - /* Attempt to demangle. */ -#ifdef IN_GLIBCPP_V3 - s = __cxa_demangle (argv[i], NULL, NULL, &status); -#else - s = cplus_demangle_v3 (argv[i], options); -#endif - - /* If it worked, print the demangled name. */ - if (s != NULL) - { - printf ("%s\n", s); - free (s); - } - else - { -#ifdef IN_GLIBCPP_V3 - fprintf (stderr, "Failed: %s (status %d)\n", argv[i], status); -#else - fprintf (stderr, "Failed: %s\n", argv[i]); -#endif - } - } - } - - return 0; -} - -#endif /* STANDALONE_DEMANGLER */ diff --git a/libiberty/cp-demangle.h b/libiberty/cp-demangle.h deleted file mode 100644 index 2517a57e69b..00000000000 --- a/libiberty/cp-demangle.h +++ /dev/null @@ -1,161 +0,0 @@ -/* Internal demangler interface for g++ V3 ABI. - Copyright (C) 2003, 2004 Free Software Foundation, Inc. - Written by Ian Lance Taylor . - - This file is part of the libiberty library, which is part of GCC. - - 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. - - In addition to the permissions in the GNU General Public License, the - Free Software Foundation gives you unlimited permission to link the - compiled version of this file into combinations with other programs, - and to distribute those combinations without any restriction coming - from the use of this file. (The General Public License restrictions - do apply in other respects; for example, they cover modification of - the file, and distribution when not linked into a combined - executable.) - - 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -*/ - -/* This file provides some definitions shared by cp-demangle.c and - cp-demint.c. It should not be included by any other files. */ - -/* Information we keep for operators. */ - -struct demangle_operator_info -{ - /* Mangled name. */ - const char *code; - /* Real name. */ - const char *name; - /* Length of real name. */ - int len; - /* Number of arguments. */ - int args; -}; - -/* How to print the value of a builtin type. */ - -enum d_builtin_type_print -{ - /* Print as (type)val. */ - D_PRINT_DEFAULT, - /* Print as integer. */ - D_PRINT_INT, - /* Print as unsigned integer, with trailing "u". */ - D_PRINT_UNSIGNED, - /* Print as long, with trailing "l". */ - D_PRINT_LONG, - /* Print as unsigned long, with trailing "ul". */ - D_PRINT_UNSIGNED_LONG, - /* Print as long long, with trailing "ll". */ - D_PRINT_LONG_LONG, - /* Print as unsigned long long, with trailing "ull". */ - D_PRINT_UNSIGNED_LONG_LONG, - /* Print as bool. */ - D_PRINT_BOOL, - /* Print as float--put value in square brackets. */ - D_PRINT_FLOAT, - /* Print in usual way, but here to detect void. */ - D_PRINT_VOID -}; - -/* Information we keep for a builtin type. */ - -struct demangle_builtin_type_info -{ - /* Type name. */ - const char *name; - /* Length of type name. */ - int len; - /* Type name when using Java. */ - const char *java_name; - /* Length of java name. */ - int java_len; - /* How to print a value of this type. */ - enum d_builtin_type_print print; -}; - -/* The information structure we pass around. */ - -struct d_info -{ - /* The string we are demangling. */ - const char *s; - /* The end of the string we are demangling. */ - const char *send; - /* The options passed to the demangler. */ - int options; - /* The next character in the string to consider. */ - const char *n; - /* The array of components. */ - struct demangle_component *comps; - /* The index of the next available component. */ - int next_comp; - /* The number of available component structures. */ - int num_comps; - /* The array of substitutions. */ - struct demangle_component **subs; - /* The index of the next substitution. */ - int next_sub; - /* The number of available entries in the subs array. */ - int num_subs; - /* The number of substitutions which we actually made from the subs - array, plus the number of template parameter references we - saw. */ - int did_subs; - /* The last name we saw, for constructors and destructors. */ - struct demangle_component *last_name; - /* A running total of the length of large expansions from the - mangled name to the demangled name, such as standard - substitutions and builtin types. */ - int expansion; -}; - -#define d_peek_char(di) (*((di)->n)) -#define d_peek_next_char(di) ((di)->n[1]) -#define d_advance(di, i) ((di)->n += (i)) -#define d_next_char(di) (*((di)->n++)) -#define d_str(di) ((di)->n) - -/* Functions and arrays in cp-demangle.c which are referenced by - functions in cp-demint.c. */ -#ifdef IN_GLIBCPP_V3 -#define CP_STATIC_IF_GLIBCPP_V3 static -#else -#define CP_STATIC_IF_GLIBCPP_V3 extern -#endif - -CP_STATIC_IF_GLIBCPP_V3 -const struct demangle_operator_info cplus_demangle_operators[]; - -#define D_BUILTIN_TYPE_COUNT (26) - -CP_STATIC_IF_GLIBCPP_V3 -const struct demangle_builtin_type_info -cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT]; - -CP_STATIC_IF_GLIBCPP_V3 -struct demangle_component * -cplus_demangle_mangled_name (struct d_info *, int); - -CP_STATIC_IF_GLIBCPP_V3 -struct demangle_component * -cplus_demangle_type (struct d_info *); - -extern void -cplus_demangle_init_info (const char *, int, size_t, struct d_info *); - -/* cp-demangle.c needs to define this a little differently */ -#undef CP_STATIC_IF_GLIBCPP_V3 diff --git a/libiberty/cp-demint.c b/libiberty/cp-demint.c deleted file mode 100644 index 2e8f8d2d057..00000000000 --- a/libiberty/cp-demint.c +++ /dev/null @@ -1,234 +0,0 @@ -/* Demangler component interface functions. - Copyright (C) 2004 Free Software Foundation, Inc. - Written by Ian Lance Taylor . - - This file is part of the libiberty library, which is part of GCC. - - 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. - - In addition to the permissions in the GNU General Public License, the - Free Software Foundation gives you unlimited permission to link the - compiled version of this file into combinations with other programs, - and to distribute those combinations without any restriction coming - from the use of this file. (The General Public License restrictions - do apply in other respects; for example, they cover modification of - the file, and distribution when not linked into a combined - executable.) - - 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -*/ - -/* This file implements a few interface functions which are provided - for use with struct demangle_component trees. These functions are - declared in demangle.h. These functions are closely tied to the - demangler code in cp-demangle.c, and other interface functions can - be found in that file. We put these functions in a separate file - because they are not needed by the demangler, and so we avoid - having them pulled in by programs which only need the - demangler. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif - -#include "ansidecl.h" -#include "libiberty.h" -#include "demangle.h" -#include "cp-demangle.h" - -/* Fill in most component types. */ - -int -cplus_demangle_fill_component (struct demangle_component *p, - enum demangle_component_type type, - struct demangle_component *left, - struct demangle_component *right) -{ - if (p == NULL) - return 0; - switch (type) - { - case DEMANGLE_COMPONENT_QUAL_NAME: - case DEMANGLE_COMPONENT_LOCAL_NAME: - case DEMANGLE_COMPONENT_TYPED_NAME: - case DEMANGLE_COMPONENT_TEMPLATE: - case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: - case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: - case DEMANGLE_COMPONENT_FUNCTION_TYPE: - case DEMANGLE_COMPONENT_ARRAY_TYPE: - case DEMANGLE_COMPONENT_PTRMEM_TYPE: - case DEMANGLE_COMPONENT_ARGLIST: - case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: - case DEMANGLE_COMPONENT_UNARY: - case DEMANGLE_COMPONENT_BINARY: - case DEMANGLE_COMPONENT_BINARY_ARGS: - case DEMANGLE_COMPONENT_TRINARY: - case DEMANGLE_COMPONENT_TRINARY_ARG1: - case DEMANGLE_COMPONENT_TRINARY_ARG2: - case DEMANGLE_COMPONENT_LITERAL: - case DEMANGLE_COMPONENT_LITERAL_NEG: - break; - - /* These component types only have one subtree. */ - case DEMANGLE_COMPONENT_VTABLE: - case DEMANGLE_COMPONENT_VTT: - case DEMANGLE_COMPONENT_TYPEINFO: - case DEMANGLE_COMPONENT_TYPEINFO_NAME: - case DEMANGLE_COMPONENT_TYPEINFO_FN: - case DEMANGLE_COMPONENT_THUNK: - case DEMANGLE_COMPONENT_VIRTUAL_THUNK: - case DEMANGLE_COMPONENT_COVARIANT_THUNK: - case DEMANGLE_COMPONENT_JAVA_CLASS: - case DEMANGLE_COMPONENT_GUARD: - case DEMANGLE_COMPONENT_REFTEMP: - case DEMANGLE_COMPONENT_RESTRICT: - case DEMANGLE_COMPONENT_VOLATILE: - case DEMANGLE_COMPONENT_CONST: - case DEMANGLE_COMPONENT_RESTRICT_THIS: - case DEMANGLE_COMPONENT_VOLATILE_THIS: - case DEMANGLE_COMPONENT_CONST_THIS: - case DEMANGLE_COMPONENT_POINTER: - case DEMANGLE_COMPONENT_REFERENCE: - case DEMANGLE_COMPONENT_COMPLEX: - case DEMANGLE_COMPONENT_IMAGINARY: - case DEMANGLE_COMPONENT_VENDOR_TYPE: - case DEMANGLE_COMPONENT_CAST: - if (right != NULL) - return 0; - break; - - default: - /* Other types do not use subtrees. */ - return 0; - } - - p->type = type; - p->u.s_binary.left = left; - p->u.s_binary.right = right; - - return 1; -} - -/* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE. */ - -int -cplus_demangle_fill_builtin_type (struct demangle_component *p, - const char *type_name) -{ - int len; - unsigned int i; - - if (p == NULL || type_name == NULL) - return 0; - len = strlen (type_name); - for (i = 0; i < D_BUILTIN_TYPE_COUNT; ++i) - { - if (len == cplus_demangle_builtin_types[i].len - && strcmp (type_name, cplus_demangle_builtin_types[i].name) == 0) - { - p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE; - p->u.s_builtin.type = &cplus_demangle_builtin_types[i]; - return 1; - } - } - return 0; -} - -/* Fill in a DEMANGLE_COMPONENT_OPERATOR. */ - -int -cplus_demangle_fill_operator (struct demangle_component *p, - const char *opname, int args) -{ - int len; - unsigned int i; - - if (p == NULL || opname == NULL) - return 0; - len = strlen (opname); - for (i = 0; cplus_demangle_operators[i].name != NULL; ++i) - { - if (len == cplus_demangle_operators[i].len - && args == cplus_demangle_operators[i].args - && strcmp (opname, cplus_demangle_operators[i].name) == 0) - { - p->type = DEMANGLE_COMPONENT_OPERATOR; - p->u.s_operator.op = &cplus_demangle_operators[i]; - return 1; - } - } - return 0; -} - -/* Translate a mangled name into components. */ - -struct demangle_component * -cplus_demangle_v3_components (const char *mangled, int options, void **mem) -{ - size_t len; - int type; - struct d_info di; - struct demangle_component *dc; - - len = strlen (mangled); - - if (mangled[0] == '_' && mangled[1] == 'Z') - type = 0; - else - { - if ((options & DMGL_TYPES) == 0) - return NULL; - type = 1; - } - - cplus_demangle_init_info (mangled, options, len, &di); - - di.comps = ((struct demangle_component *) - malloc (di.num_comps * sizeof (struct demangle_component))); - di.subs = ((struct demangle_component **) - malloc (di.num_subs * sizeof (struct demangle_component *))); - if (di.comps == NULL || di.subs == NULL) - { - if (di.comps != NULL) - free (di.comps); - if (di.subs != NULL) - free (di.subs); - return NULL; - } - - if (! type) - dc = cplus_demangle_mangled_name (&di, 1); - else - dc = cplus_demangle_type (&di); - - /* If DMGL_PARAMS is set, then if we didn't consume the entire - mangled string, then we didn't successfully demangle it. */ - if ((options & DMGL_PARAMS) != 0 && d_peek_char (&di) != '\0') - dc = NULL; - - free (di.subs); - - if (dc != NULL) - *mem = di.comps; - else - free (di.comps); - - return dc; -} diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c deleted file mode 100644 index 1f8b1fc31e4..00000000000 --- a/libiberty/cplus-dem.c +++ /dev/null @@ -1,4717 +0,0 @@ -/* Demangler for GNU C++ - Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - Written by James Clark (jjc@jclark.uucp) - Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling - Modified by Satish Pai (pai@apollo.hp.com) for HP demangling - -This file is part of the libiberty library. -Libiberty 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. - -In addition to the permissions in the GNU Library General Public -License, the Free Software Foundation gives you unlimited permission -to link the compiled version of this file into combinations with other -programs, and to distribute those combinations without any restriction -coming from the use of this file. (The Library Public License -restrictions do apply in other respects; for example, they cover -modification of the file, and distribution when not linked into a -combined executable.) - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* This file exports two functions; cplus_mangle_opname and cplus_demangle. - - This file imports xmalloc and xrealloc, which are like malloc and - realloc except that they generate a fatal error if there is no - available memory. */ - -/* This file lives in both GCC and libiberty. When making changes, please - try not to break either. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "safe-ctype.h" - -#include -#include -#include - -#ifdef HAVE_STDLIB_H -#include -#else -char * malloc (); -char * realloc (); -#endif - -#include -#undef CURRENT_DEMANGLING_STYLE -#define CURRENT_DEMANGLING_STYLE work->options - -#include "libiberty.h" - -static char *ada_demangle (const char *, int); - -#define min(X,Y) (((X) < (Y)) ? (X) : (Y)) - -/* A value at least one greater than the maximum number of characters - that will be output when using the `%d' format with `printf'. */ -#define INTBUF_SIZE 32 - -extern void fancy_abort (void) ATTRIBUTE_NORETURN; - -/* In order to allow a single demangler executable to demangle strings - using various common values of CPLUS_MARKER, as well as any specific - one set at compile time, we maintain a string containing all the - commonly used ones, and check to see if the marker we are looking for - is in that string. CPLUS_MARKER is usually '$' on systems where the - assembler can deal with that. Where the assembler can't, it's usually - '.' (but on many systems '.' is used for other things). We put the - current defined CPLUS_MARKER first (which defaults to '$'), followed - by the next most common value, followed by an explicit '$' in case - the value of CPLUS_MARKER is not '$'. - - We could avoid this if we could just get g++ to tell us what the actual - cplus marker character is as part of the debug information, perhaps by - ensuring that it is the character that terminates the gcc_compiled - marker symbol (FIXME). */ - -#if !defined (CPLUS_MARKER) -#define CPLUS_MARKER '$' -#endif - -enum demangling_styles current_demangling_style = auto_demangling; - -static char cplus_markers[] = { CPLUS_MARKER, '.', '$', '\0' }; - -static char char_str[2] = { '\000', '\000' }; - -void -set_cplus_marker_for_demangling (int ch) -{ - cplus_markers[0] = ch; -} - -typedef struct string /* Beware: these aren't required to be */ -{ /* '\0' terminated. */ - char *b; /* pointer to start of string */ - char *p; /* pointer after last character */ - char *e; /* pointer after end of allocated space */ -} string; - -/* Stuff that is shared between sub-routines. - Using a shared structure allows cplus_demangle to be reentrant. */ - -struct work_stuff -{ - int options; - char **typevec; - char **ktypevec; - char **btypevec; - int numk; - int numb; - int ksize; - int bsize; - int ntypes; - int typevec_size; - int constructor; - int destructor; - int static_type; /* A static member function */ - int temp_start; /* index in demangled to start of template args */ - int type_quals; /* The type qualifiers. */ - int dllimported; /* Symbol imported from a PE DLL */ - char **tmpl_argvec; /* Template function arguments. */ - int ntmpl_args; /* The number of template function arguments. */ - int forgetting_types; /* Nonzero if we are not remembering the types - we see. */ - string* previous_argument; /* The last function argument demangled. */ - int nrepeats; /* The number of times to repeat the previous - argument. */ -}; - -#define PRINT_ANSI_QUALIFIERS (work -> options & DMGL_ANSI) -#define PRINT_ARG_TYPES (work -> options & DMGL_PARAMS) - -static const struct optable -{ - const char *const in; - const char *const out; - const int flags; -} optable[] = { - {"nw", " new", DMGL_ANSI}, /* new (1.92, ansi) */ - {"dl", " delete", DMGL_ANSI}, /* new (1.92, ansi) */ - {"new", " new", 0}, /* old (1.91, and 1.x) */ - {"delete", " delete", 0}, /* old (1.91, and 1.x) */ - {"vn", " new []", DMGL_ANSI}, /* GNU, pending ansi */ - {"vd", " delete []", DMGL_ANSI}, /* GNU, pending ansi */ - {"as", "=", DMGL_ANSI}, /* ansi */ - {"ne", "!=", DMGL_ANSI}, /* old, ansi */ - {"eq", "==", DMGL_ANSI}, /* old, ansi */ - {"ge", ">=", DMGL_ANSI}, /* old, ansi */ - {"gt", ">", DMGL_ANSI}, /* old, ansi */ - {"le", "<=", DMGL_ANSI}, /* old, ansi */ - {"lt", "<", DMGL_ANSI}, /* old, ansi */ - {"plus", "+", 0}, /* old */ - {"pl", "+", DMGL_ANSI}, /* ansi */ - {"apl", "+=", DMGL_ANSI}, /* ansi */ - {"minus", "-", 0}, /* old */ - {"mi", "-", DMGL_ANSI}, /* ansi */ - {"ami", "-=", DMGL_ANSI}, /* ansi */ - {"mult", "*", 0}, /* old */ - {"ml", "*", DMGL_ANSI}, /* ansi */ - {"amu", "*=", DMGL_ANSI}, /* ansi (ARM/Lucid) */ - {"aml", "*=", DMGL_ANSI}, /* ansi (GNU/g++) */ - {"convert", "+", 0}, /* old (unary +) */ - {"negate", "-", 0}, /* old (unary -) */ - {"trunc_mod", "%", 0}, /* old */ - {"md", "%", DMGL_ANSI}, /* ansi */ - {"amd", "%=", DMGL_ANSI}, /* ansi */ - {"trunc_div", "/", 0}, /* old */ - {"dv", "/", DMGL_ANSI}, /* ansi */ - {"adv", "/=", DMGL_ANSI}, /* ansi */ - {"truth_andif", "&&", 0}, /* old */ - {"aa", "&&", DMGL_ANSI}, /* ansi */ - {"truth_orif", "||", 0}, /* old */ - {"oo", "||", DMGL_ANSI}, /* ansi */ - {"truth_not", "!", 0}, /* old */ - {"nt", "!", DMGL_ANSI}, /* ansi */ - {"postincrement","++", 0}, /* old */ - {"pp", "++", DMGL_ANSI}, /* ansi */ - {"postdecrement","--", 0}, /* old */ - {"mm", "--", DMGL_ANSI}, /* ansi */ - {"bit_ior", "|", 0}, /* old */ - {"or", "|", DMGL_ANSI}, /* ansi */ - {"aor", "|=", DMGL_ANSI}, /* ansi */ - {"bit_xor", "^", 0}, /* old */ - {"er", "^", DMGL_ANSI}, /* ansi */ - {"aer", "^=", DMGL_ANSI}, /* ansi */ - {"bit_and", "&", 0}, /* old */ - {"ad", "&", DMGL_ANSI}, /* ansi */ - {"aad", "&=", DMGL_ANSI}, /* ansi */ - {"bit_not", "~", 0}, /* old */ - {"co", "~", DMGL_ANSI}, /* ansi */ - {"call", "()", 0}, /* old */ - {"cl", "()", DMGL_ANSI}, /* ansi */ - {"alshift", "<<", 0}, /* old */ - {"ls", "<<", DMGL_ANSI}, /* ansi */ - {"als", "<<=", DMGL_ANSI}, /* ansi */ - {"arshift", ">>", 0}, /* old */ - {"rs", ">>", DMGL_ANSI}, /* ansi */ - {"ars", ">>=", DMGL_ANSI}, /* ansi */ - {"component", "->", 0}, /* old */ - {"pt", "->", DMGL_ANSI}, /* ansi; Lucid C++ form */ - {"rf", "->", DMGL_ANSI}, /* ansi; ARM/GNU form */ - {"indirect", "*", 0}, /* old */ - {"method_call", "->()", 0}, /* old */ - {"addr", "&", 0}, /* old (unary &) */ - {"array", "[]", 0}, /* old */ - {"vc", "[]", DMGL_ANSI}, /* ansi */ - {"compound", ", ", 0}, /* old */ - {"cm", ", ", DMGL_ANSI}, /* ansi */ - {"cond", "?:", 0}, /* old */ - {"cn", "?:", DMGL_ANSI}, /* pseudo-ansi */ - {"max", ">?", 0}, /* old */ - {"mx", ">?", DMGL_ANSI}, /* pseudo-ansi */ - {"min", "*", DMGL_ANSI}, /* ansi */ - {"sz", "sizeof ", DMGL_ANSI} /* pseudo-ansi */ -}; - -/* These values are used to indicate the various type varieties. - They are all non-zero so that they can be used as `success' - values. */ -typedef enum type_kind_t -{ - tk_none, - tk_pointer, - tk_reference, - tk_integral, - tk_bool, - tk_char, - tk_real -} type_kind_t; - -const struct demangler_engine libiberty_demanglers[] = -{ - { - NO_DEMANGLING_STYLE_STRING, - no_demangling, - "Demangling disabled" - } - , - { - AUTO_DEMANGLING_STYLE_STRING, - auto_demangling, - "Automatic selection based on executable" - } - , - { - GNU_DEMANGLING_STYLE_STRING, - gnu_demangling, - "GNU (g++) style demangling" - } - , - { - LUCID_DEMANGLING_STYLE_STRING, - lucid_demangling, - "Lucid (lcc) style demangling" - } - , - { - ARM_DEMANGLING_STYLE_STRING, - arm_demangling, - "ARM style demangling" - } - , - { - HP_DEMANGLING_STYLE_STRING, - hp_demangling, - "HP (aCC) style demangling" - } - , - { - EDG_DEMANGLING_STYLE_STRING, - edg_demangling, - "EDG style demangling" - } - , - { - GNU_V3_DEMANGLING_STYLE_STRING, - gnu_v3_demangling, - "GNU (g++) V3 ABI-style demangling" - } - , - { - JAVA_DEMANGLING_STYLE_STRING, - java_demangling, - "Java style demangling" - } - , - { - GNAT_DEMANGLING_STYLE_STRING, - gnat_demangling, - "GNAT style demangling" - } - , - { - NULL, unknown_demangling, NULL - } -}; - -#define STRING_EMPTY(str) ((str) -> b == (str) -> p) -#define APPEND_BLANK(str) {if (!STRING_EMPTY(str)) \ - string_append(str, " ");} -#define LEN_STRING(str) ( (STRING_EMPTY(str))?0:((str)->p - (str)->b)) - -/* The scope separator appropriate for the language being demangled. */ - -#define SCOPE_STRING(work) ((work->options & DMGL_JAVA) ? "." : "::") - -#define ARM_VTABLE_STRING "__vtbl__" /* Lucid/ARM virtual table prefix */ -#define ARM_VTABLE_STRLEN 8 /* strlen (ARM_VTABLE_STRING) */ - -/* Prototypes for local functions */ - -static void delete_work_stuff (struct work_stuff *); - -static void delete_non_B_K_work_stuff (struct work_stuff *); - -static char *mop_up (struct work_stuff *, string *, int); - -static void squangle_mop_up (struct work_stuff *); - -static void work_stuff_copy_to_from (struct work_stuff *, struct work_stuff *); - -#if 0 -static int -demangle_method_args (struct work_stuff *, const char **, string *); -#endif - -static char * -internal_cplus_demangle (struct work_stuff *, const char *); - -static int -demangle_template_template_parm (struct work_stuff *work, - const char **, string *); - -static int -demangle_template (struct work_stuff *work, const char **, string *, - string *, int, int); - -static int -arm_pt (struct work_stuff *, const char *, int, const char **, - const char **); - -static int -demangle_class_name (struct work_stuff *, const char **, string *); - -static int -demangle_qualified (struct work_stuff *, const char **, string *, - int, int); - -static int demangle_class (struct work_stuff *, const char **, string *); - -static int demangle_fund_type (struct work_stuff *, const char **, string *); - -static int demangle_signature (struct work_stuff *, const char **, string *); - -static int demangle_prefix (struct work_stuff *, const char **, string *); - -static int gnu_special (struct work_stuff *, const char **, string *); - -static int arm_special (const char **, string *); - -static void string_need (string *, int); - -static void string_delete (string *); - -static void -string_init (string *); - -static void string_clear (string *); - -#if 0 -static int string_empty (string *); -#endif - -static void string_append (string *, const char *); - -static void string_appends (string *, string *); - -static void string_appendn (string *, const char *, int); - -static void string_prepend (string *, const char *); - -static void string_prependn (string *, const char *, int); - -static void string_append_template_idx (string *, int); - -static int get_count (const char **, int *); - -static int consume_count (const char **); - -static int consume_count_with_underscores (const char**); - -static int demangle_args (struct work_stuff *, const char **, string *); - -static int demangle_nested_args (struct work_stuff*, const char**, string*); - -static int do_type (struct work_stuff *, const char **, string *); - -static int do_arg (struct work_stuff *, const char **, string *); - -static void -demangle_function_name (struct work_stuff *, const char **, string *, - const char *); - -static int -iterate_demangle_function (struct work_stuff *, - const char **, string *, const char *); - -static void remember_type (struct work_stuff *, const char *, int); - -static void remember_Btype (struct work_stuff *, const char *, int, int); - -static int register_Btype (struct work_stuff *); - -static void remember_Ktype (struct work_stuff *, const char *, int); - -static void forget_types (struct work_stuff *); - -static void forget_B_and_K_types (struct work_stuff *); - -static void string_prepends (string *, string *); - -static int -demangle_template_value_parm (struct work_stuff*, const char**, - string*, type_kind_t); - -static int -do_hpacc_template_const_value (struct work_stuff *, const char **, string *); - -static int -do_hpacc_template_literal (struct work_stuff *, const char **, string *); - -static int snarf_numeric_literal (const char **, string *); - -/* There is a TYPE_QUAL value for each type qualifier. They can be - combined by bitwise-or to form the complete set of qualifiers for a - type. */ - -#define TYPE_UNQUALIFIED 0x0 -#define TYPE_QUAL_CONST 0x1 -#define TYPE_QUAL_VOLATILE 0x2 -#define TYPE_QUAL_RESTRICT 0x4 - -static int code_for_qualifier (int); - -static const char* qualifier_string (int); - -static const char* demangle_qualifier (int); - -static int demangle_expression (struct work_stuff *, const char **, string *, - type_kind_t); - -static int -demangle_integral_value (struct work_stuff *, const char **, string *); - -static int -demangle_real_value (struct work_stuff *, const char **, string *); - -static void -demangle_arm_hp_template (struct work_stuff *, const char **, int, string *); - -static void -recursively_demangle (struct work_stuff *, const char **, string *, int); - -static void grow_vect (char **, size_t *, size_t, int); - -/* Translate count to integer, consuming tokens in the process. - Conversion terminates on the first non-digit character. - - Trying to consume something that isn't a count results in no - consumption of input and a return of -1. - - Overflow consumes the rest of the digits, and returns -1. */ - -static int -consume_count (const char **type) -{ - int count = 0; - - if (! ISDIGIT ((unsigned char)**type)) - return -1; - - while (ISDIGIT ((unsigned char)**type)) - { - count *= 10; - - /* Check for overflow. - We assume that count is represented using two's-complement; - no power of two is divisible by ten, so if an overflow occurs - when multiplying by ten, the result will not be a multiple of - ten. */ - if ((count % 10) != 0) - { - while (ISDIGIT ((unsigned char) **type)) - (*type)++; - return -1; - } - - count += **type - '0'; - (*type)++; - } - - if (count < 0) - count = -1; - - return (count); -} - - -/* Like consume_count, but for counts that are preceded and followed - by '_' if they are greater than 10. Also, -1 is returned for - failure, since 0 can be a valid value. */ - -static int -consume_count_with_underscores (const char **mangled) -{ - int idx; - - if (**mangled == '_') - { - (*mangled)++; - if (!ISDIGIT ((unsigned char)**mangled)) - return -1; - - idx = consume_count (mangled); - if (**mangled != '_') - /* The trailing underscore was missing. */ - return -1; - - (*mangled)++; - } - else - { - if (**mangled < '0' || **mangled > '9') - return -1; - - idx = **mangled - '0'; - (*mangled)++; - } - - return idx; -} - -/* C is the code for a type-qualifier. Return the TYPE_QUAL - corresponding to this qualifier. */ - -static int -code_for_qualifier (int c) -{ - switch (c) - { - case 'C': - return TYPE_QUAL_CONST; - - case 'V': - return TYPE_QUAL_VOLATILE; - - case 'u': - return TYPE_QUAL_RESTRICT; - - default: - break; - } - - /* C was an invalid qualifier. */ - abort (); -} - -/* Return the string corresponding to the qualifiers given by - TYPE_QUALS. */ - -static const char* -qualifier_string (int type_quals) -{ - switch (type_quals) - { - case TYPE_UNQUALIFIED: - return ""; - - case TYPE_QUAL_CONST: - return "const"; - - case TYPE_QUAL_VOLATILE: - return "volatile"; - - case TYPE_QUAL_RESTRICT: - return "__restrict"; - - case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE: - return "const volatile"; - - case TYPE_QUAL_CONST | TYPE_QUAL_RESTRICT: - return "const __restrict"; - - case TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT: - return "volatile __restrict"; - - case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT: - return "const volatile __restrict"; - - default: - break; - } - - /* TYPE_QUALS was an invalid qualifier set. */ - abort (); -} - -/* C is the code for a type-qualifier. Return the string - corresponding to this qualifier. This function should only be - called with a valid qualifier code. */ - -static const char* -demangle_qualifier (int c) -{ - return qualifier_string (code_for_qualifier (c)); -} - -int -cplus_demangle_opname (const char *opname, char *result, int options) -{ - int len, len1, ret; - string type; - struct work_stuff work[1]; - const char *tem; - - len = strlen(opname); - result[0] = '\0'; - ret = 0; - memset ((char *) work, 0, sizeof (work)); - work->options = options; - - if (opname[0] == '_' && opname[1] == '_' - && opname[2] == 'o' && opname[3] == 'p') - { - /* ANSI. */ - /* type conversion operator. */ - tem = opname + 4; - if (do_type (work, &tem, &type)) - { - strcat (result, "operator "); - strncat (result, type.b, type.p - type.b); - string_delete (&type); - ret = 1; - } - } - else if (opname[0] == '_' && opname[1] == '_' - && ISLOWER((unsigned char)opname[2]) - && ISLOWER((unsigned char)opname[3])) - { - if (opname[4] == '\0') - { - /* Operator. */ - size_t i; - for (i = 0; i < ARRAY_SIZE (optable); i++) - { - if (strlen (optable[i].in) == 2 - && memcmp (optable[i].in, opname + 2, 2) == 0) - { - strcat (result, "operator"); - strcat (result, optable[i].out); - ret = 1; - break; - } - } - } - else - { - if (opname[2] == 'a' && opname[5] == '\0') - { - /* Assignment. */ - size_t i; - for (i = 0; i < ARRAY_SIZE (optable); i++) - { - if (strlen (optable[i].in) == 3 - && memcmp (optable[i].in, opname + 2, 3) == 0) - { - strcat (result, "operator"); - strcat (result, optable[i].out); - ret = 1; - break; - } - } - } - } - } - else if (len >= 3 - && opname[0] == 'o' - && opname[1] == 'p' - && strchr (cplus_markers, opname[2]) != NULL) - { - /* see if it's an assignment expression */ - if (len >= 10 /* op$assign_ */ - && memcmp (opname + 3, "assign_", 7) == 0) - { - size_t i; - for (i = 0; i < ARRAY_SIZE (optable); i++) - { - len1 = len - 10; - if ((int) strlen (optable[i].in) == len1 - && memcmp (optable[i].in, opname + 10, len1) == 0) - { - strcat (result, "operator"); - strcat (result, optable[i].out); - strcat (result, "="); - ret = 1; - break; - } - } - } - else - { - size_t i; - for (i = 0; i < ARRAY_SIZE (optable); i++) - { - len1 = len - 3; - if ((int) strlen (optable[i].in) == len1 - && memcmp (optable[i].in, opname + 3, len1) == 0) - { - strcat (result, "operator"); - strcat (result, optable[i].out); - ret = 1; - break; - } - } - } - } - else if (len >= 5 && memcmp (opname, "type", 4) == 0 - && strchr (cplus_markers, opname[4]) != NULL) - { - /* type conversion operator */ - tem = opname + 5; - if (do_type (work, &tem, &type)) - { - strcat (result, "operator "); - strncat (result, type.b, type.p - type.b); - string_delete (&type); - ret = 1; - } - } - squangle_mop_up (work); - return ret; - -} - -/* Takes operator name as e.g. "++" and returns mangled - operator name (e.g. "postincrement_expr"), or NULL if not found. - - If OPTIONS & DMGL_ANSI == 1, return the ANSI name; - if OPTIONS & DMGL_ANSI == 0, return the old GNU name. */ - -const char * -cplus_mangle_opname (const char *opname, int options) -{ - size_t i; - int len; - - len = strlen (opname); - for (i = 0; i < ARRAY_SIZE (optable); i++) - { - if ((int) strlen (optable[i].out) == len - && (options & DMGL_ANSI) == (optable[i].flags & DMGL_ANSI) - && memcmp (optable[i].out, opname, len) == 0) - return optable[i].in; - } - return (0); -} - -/* Add a routine to set the demangling style to be sure it is valid and - allow for any demangler initialization that maybe necessary. */ - -enum demangling_styles -cplus_demangle_set_style (enum demangling_styles style) -{ - const struct demangler_engine *demangler = libiberty_demanglers; - - for (; demangler->demangling_style != unknown_demangling; ++demangler) - if (style == demangler->demangling_style) - { - current_demangling_style = style; - return current_demangling_style; - } - - return unknown_demangling; -} - -/* Do string name to style translation */ - -enum demangling_styles -cplus_demangle_name_to_style (const char *name) -{ - const struct demangler_engine *demangler = libiberty_demanglers; - - for (; demangler->demangling_style != unknown_demangling; ++demangler) - if (strcmp (name, demangler->demangling_style_name) == 0) - return demangler->demangling_style; - - return unknown_demangling; -} - -/* char *cplus_demangle (const char *mangled, int options) - - If MANGLED is a mangled function name produced by GNU C++, then - a pointer to a @code{malloc}ed string giving a C++ representation - of the name will be returned; otherwise NULL will be returned. - It is the caller's responsibility to free the string which - is returned. - - The OPTIONS arg may contain one or more of the following bits: - - DMGL_ANSI ANSI qualifiers such as `const' and `void' are - included. - DMGL_PARAMS Function parameters are included. - - For example, - - cplus_demangle ("foo__1Ai", DMGL_PARAMS) => "A::foo(int)" - cplus_demangle ("foo__1Ai", DMGL_PARAMS | DMGL_ANSI) => "A::foo(int)" - cplus_demangle ("foo__1Ai", 0) => "A::foo" - - cplus_demangle ("foo__1Afe", DMGL_PARAMS) => "A::foo(float,...)" - cplus_demangle ("foo__1Afe", DMGL_PARAMS | DMGL_ANSI)=> "A::foo(float,...)" - cplus_demangle ("foo__1Afe", 0) => "A::foo" - - Note that any leading underscores, or other such characters prepended by - the compilation system, are presumed to have already been stripped from - MANGLED. */ - -char * -cplus_demangle (const char *mangled, int options) -{ - char *ret; - struct work_stuff work[1]; - - if (current_demangling_style == no_demangling) - return xstrdup (mangled); - - memset ((char *) work, 0, sizeof (work)); - work->options = options; - if ((work->options & DMGL_STYLE_MASK) == 0) - work->options |= (int) current_demangling_style & DMGL_STYLE_MASK; - - /* The V3 ABI demangling is implemented elsewhere. */ - if (GNU_V3_DEMANGLING || AUTO_DEMANGLING) - { - ret = cplus_demangle_v3 (mangled, work->options); - if (ret || GNU_V3_DEMANGLING) - return ret; - } - - if (JAVA_DEMANGLING) - { - ret = java_demangle_v3 (mangled); - if (ret) - return ret; - } - - if (GNAT_DEMANGLING) - return ada_demangle(mangled,options); - - ret = internal_cplus_demangle (work, mangled); - squangle_mop_up (work); - return (ret); -} - - -/* Assuming *OLD_VECT points to an array of *SIZE objects of size - ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects, - updating *OLD_VECT and *SIZE as necessary. */ - -static void -grow_vect (char **old_vect, size_t *size, size_t min_size, int element_size) -{ - if (*size < min_size) - { - *size *= 2; - if (*size < min_size) - *size = min_size; - *old_vect = XRESIZEVAR (char, *old_vect, *size * element_size); - } -} - -/* Demangle ada names: - 1. Discard final __{DIGIT}+ or ${DIGIT}+ - 2. Convert other instances of embedded "__" to `.'. - 3. Discard leading _ada_. - 4. Remove everything after first ___ if it is followed by 'X'. - 5. Put symbols that should be suppressed in <...> brackets. - The resulting string is valid until the next call of ada_demangle. */ - -static char * -ada_demangle (const char *mangled, int option ATTRIBUTE_UNUSED) -{ - int i, j; - int len0; - const char* p; - char *demangled = NULL; - int changed; - size_t demangled_size = 0; - - changed = 0; - - if (strncmp (mangled, "_ada_", 5) == 0) - { - mangled += 5; - changed = 1; - } - - if (mangled[0] == '_' || mangled[0] == '<') - goto Suppress; - - p = strstr (mangled, "___"); - if (p == NULL) - len0 = strlen (mangled); - else - { - if (p[3] == 'X') - { - len0 = p - mangled; - changed = 1; - } - else - goto Suppress; - } - - /* Make demangled big enough for possible expansion by operator name. */ - grow_vect (&demangled, - &demangled_size, 2 * len0 + 1, - sizeof (char)); - - if (ISDIGIT ((unsigned char) mangled[len0 - 1])) { - for (i = len0 - 2; i >= 0 && ISDIGIT ((unsigned char) mangled[i]); i -= 1) - ; - if (i > 1 && mangled[i] == '_' && mangled[i - 1] == '_') - { - len0 = i - 1; - changed = 1; - } - else if (mangled[i] == '$') - { - len0 = i; - changed = 1; - } - } - - for (i = 0, j = 0; i < len0 && ! ISALPHA ((unsigned char)mangled[i]); - i += 1, j += 1) - demangled[j] = mangled[i]; - - while (i < len0) - { - if (i < len0 - 2 && mangled[i] == '_' && mangled[i + 1] == '_') - { - demangled[j] = '.'; - changed = 1; - i += 2; j += 1; - } - else - { - demangled[j] = mangled[i]; - i += 1; j += 1; - } - } - demangled[j] = '\000'; - - for (i = 0; demangled[i] != '\0'; i += 1) - if (ISUPPER ((unsigned char)demangled[i]) || demangled[i] == ' ') - goto Suppress; - - if (! changed) - return NULL; - else - return demangled; - - Suppress: - grow_vect (&demangled, - &demangled_size, strlen (mangled) + 3, - sizeof (char)); - - if (mangled[0] == '<') - strcpy (demangled, mangled); - else - sprintf (demangled, "<%s>", mangled); - - return demangled; -} - -/* This function performs most of what cplus_demangle use to do, but - to be able to demangle a name with a B, K or n code, we need to - have a longer term memory of what types have been seen. The original - now initializes and cleans up the squangle code info, while internal - calls go directly to this routine to avoid resetting that info. */ - -static char * -internal_cplus_demangle (struct work_stuff *work, const char *mangled) -{ - - string decl; - int success = 0; - char *demangled = NULL; - int s1, s2, s3, s4; - s1 = work->constructor; - s2 = work->destructor; - s3 = work->static_type; - s4 = work->type_quals; - work->constructor = work->destructor = 0; - work->type_quals = TYPE_UNQUALIFIED; - work->dllimported = 0; - - if ((mangled != NULL) && (*mangled != '\0')) - { - string_init (&decl); - - /* First check to see if gnu style demangling is active and if the - string to be demangled contains a CPLUS_MARKER. If so, attempt to - recognize one of the gnu special forms rather than looking for a - standard prefix. In particular, don't worry about whether there - is a "__" string in the mangled string. Consider "_$_5__foo" for - example. */ - - if ((AUTO_DEMANGLING || GNU_DEMANGLING)) - { - success = gnu_special (work, &mangled, &decl); - } - if (!success) - { - success = demangle_prefix (work, &mangled, &decl); - } - if (success && (*mangled != '\0')) - { - success = demangle_signature (work, &mangled, &decl); - } - if (work->constructor == 2) - { - string_prepend (&decl, "global constructors keyed to "); - work->constructor = 0; - } - else if (work->destructor == 2) - { - string_prepend (&decl, "global destructors keyed to "); - work->destructor = 0; - } - else if (work->dllimported == 1) - { - string_prepend (&decl, "import stub for "); - work->dllimported = 0; - } - demangled = mop_up (work, &decl, success); - } - work->constructor = s1; - work->destructor = s2; - work->static_type = s3; - work->type_quals = s4; - return demangled; -} - - -/* Clear out and squangling related storage */ -static void -squangle_mop_up (struct work_stuff *work) -{ - /* clean up the B and K type mangling types. */ - forget_B_and_K_types (work); - if (work -> btypevec != NULL) - { - free ((char *) work -> btypevec); - } - if (work -> ktypevec != NULL) - { - free ((char *) work -> ktypevec); - } -} - - -/* Copy the work state and storage. */ - -static void -work_stuff_copy_to_from (struct work_stuff *to, struct work_stuff *from) -{ - int i; - - delete_work_stuff (to); - - /* Shallow-copy scalars. */ - memcpy (to, from, sizeof (*to)); - - /* Deep-copy dynamic storage. */ - if (from->typevec_size) - to->typevec = XNEWVEC (char *, from->typevec_size); - - for (i = 0; i < from->ntypes; i++) - { - int len = strlen (from->typevec[i]) + 1; - - to->typevec[i] = XNEWVEC (char, len); - memcpy (to->typevec[i], from->typevec[i], len); - } - - if (from->ksize) - to->ktypevec = XNEWVEC (char *, from->ksize); - - for (i = 0; i < from->numk; i++) - { - int len = strlen (from->ktypevec[i]) + 1; - - to->ktypevec[i] = XNEWVEC (char, len); - memcpy (to->ktypevec[i], from->ktypevec[i], len); - } - - if (from->bsize) - to->btypevec = XNEWVEC (char *, from->bsize); - - for (i = 0; i < from->numb; i++) - { - int len = strlen (from->btypevec[i]) + 1; - - to->btypevec[i] = XNEWVEC (char , len); - memcpy (to->btypevec[i], from->btypevec[i], len); - } - - if (from->ntmpl_args) - to->tmpl_argvec = XNEWVEC (char *, from->ntmpl_args); - - for (i = 0; i < from->ntmpl_args; i++) - { - int len = strlen (from->tmpl_argvec[i]) + 1; - - to->tmpl_argvec[i] = XNEWVEC (char, len); - memcpy (to->tmpl_argvec[i], from->tmpl_argvec[i], len); - } - - if (from->previous_argument) - { - to->previous_argument = XNEW (string); - string_init (to->previous_argument); - string_appends (to->previous_argument, from->previous_argument); - } -} - - -/* Delete dynamic stuff in work_stuff that is not to be re-used. */ - -static void -delete_non_B_K_work_stuff (struct work_stuff *work) -{ - /* Discard the remembered types, if any. */ - - forget_types (work); - if (work -> typevec != NULL) - { - free ((char *) work -> typevec); - work -> typevec = NULL; - work -> typevec_size = 0; - } - if (work->tmpl_argvec) - { - int i; - - for (i = 0; i < work->ntmpl_args; i++) - if (work->tmpl_argvec[i]) - free ((char*) work->tmpl_argvec[i]); - - free ((char*) work->tmpl_argvec); - work->tmpl_argvec = NULL; - } - if (work->previous_argument) - { - string_delete (work->previous_argument); - free ((char*) work->previous_argument); - work->previous_argument = NULL; - } -} - - -/* Delete all dynamic storage in work_stuff. */ -static void -delete_work_stuff (struct work_stuff *work) -{ - delete_non_B_K_work_stuff (work); - squangle_mop_up (work); -} - - -/* Clear out any mangled storage */ - -static char * -mop_up (struct work_stuff *work, string *declp, int success) -{ - char *demangled = NULL; - - delete_non_B_K_work_stuff (work); - - /* If demangling was successful, ensure that the demangled string is null - terminated and return it. Otherwise, free the demangling decl. */ - - if (!success) - { - string_delete (declp); - } - else - { - string_appendn (declp, "", 1); - demangled = declp->b; - } - return (demangled); -} - -/* - -LOCAL FUNCTION - - demangle_signature -- demangle the signature part of a mangled name - -SYNOPSIS - - static int - demangle_signature (struct work_stuff *work, const char **mangled, - string *declp); - -DESCRIPTION - - Consume and demangle the signature portion of the mangled name. - - DECLP is the string where demangled output is being built. At - entry it contains the demangled root name from the mangled name - prefix. I.E. either a demangled operator name or the root function - name. In some special cases, it may contain nothing. - - *MANGLED points to the current unconsumed location in the mangled - name. As tokens are consumed and demangling is performed, the - pointer is updated to continuously point at the next token to - be consumed. - - Demangling GNU style mangled names is nasty because there is no - explicit token that marks the start of the outermost function - argument list. */ - -static int -demangle_signature (struct work_stuff *work, - const char **mangled, string *declp) -{ - int success = 1; - int func_done = 0; - int expect_func = 0; - int expect_return_type = 0; - const char *oldmangled = NULL; - string trawname; - string tname; - - while (success && (**mangled != '\0')) - { - switch (**mangled) - { - case 'Q': - oldmangled = *mangled; - success = demangle_qualified (work, mangled, declp, 1, 0); - if (success) - remember_type (work, oldmangled, *mangled - oldmangled); - if (AUTO_DEMANGLING || GNU_DEMANGLING) - expect_func = 1; - oldmangled = NULL; - break; - - case 'K': - oldmangled = *mangled; - success = demangle_qualified (work, mangled, declp, 1, 0); - if (AUTO_DEMANGLING || GNU_DEMANGLING) - { - expect_func = 1; - } - oldmangled = NULL; - break; - - case 'S': - /* Static member function */ - if (oldmangled == NULL) - { - oldmangled = *mangled; - } - (*mangled)++; - work -> static_type = 1; - break; - - case 'C': - case 'V': - case 'u': - work->type_quals |= code_for_qualifier (**mangled); - - /* a qualified member function */ - if (oldmangled == NULL) - oldmangled = *mangled; - (*mangled)++; - break; - - case 'L': - /* Local class name follows after "Lnnn_" */ - if (HP_DEMANGLING) - { - while (**mangled && (**mangled != '_')) - (*mangled)++; - if (!**mangled) - success = 0; - else - (*mangled)++; - } - else - success = 0; - break; - - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - if (oldmangled == NULL) - { - oldmangled = *mangled; - } - work->temp_start = -1; /* uppermost call to demangle_class */ - success = demangle_class (work, mangled, declp); - if (success) - { - remember_type (work, oldmangled, *mangled - oldmangled); - } - if (AUTO_DEMANGLING || GNU_DEMANGLING || EDG_DEMANGLING) - { - /* EDG and others will have the "F", so we let the loop cycle - if we are looking at one. */ - if (**mangled != 'F') - expect_func = 1; - } - oldmangled = NULL; - break; - - case 'B': - { - string s; - success = do_type (work, mangled, &s); - if (success) - { - string_append (&s, SCOPE_STRING (work)); - string_prepends (declp, &s); - string_delete (&s); - } - oldmangled = NULL; - expect_func = 1; - } - break; - - case 'F': - /* Function */ - /* ARM/HP style demangling includes a specific 'F' character after - the class name. For GNU style, it is just implied. So we can - safely just consume any 'F' at this point and be compatible - with either style. */ - - oldmangled = NULL; - func_done = 1; - (*mangled)++; - - /* For lucid/ARM/HP style we have to forget any types we might - have remembered up to this point, since they were not argument - types. GNU style considers all types seen as available for - back references. See comment in demangle_args() */ - - if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) - { - forget_types (work); - } - success = demangle_args (work, mangled, declp); - /* After picking off the function args, we expect to either - find the function return type (preceded by an '_') or the - end of the string. */ - if (success && (AUTO_DEMANGLING || EDG_DEMANGLING) && **mangled == '_') - { - ++(*mangled); - /* At this level, we do not care about the return type. */ - success = do_type (work, mangled, &tname); - string_delete (&tname); - } - - break; - - case 't': - /* G++ Template */ - string_init(&trawname); - string_init(&tname); - if (oldmangled == NULL) - { - oldmangled = *mangled; - } - success = demangle_template (work, mangled, &tname, - &trawname, 1, 1); - if (success) - { - remember_type (work, oldmangled, *mangled - oldmangled); - } - string_append (&tname, SCOPE_STRING (work)); - - string_prepends(declp, &tname); - if (work -> destructor & 1) - { - string_prepend (&trawname, "~"); - string_appends (declp, &trawname); - work->destructor -= 1; - } - if ((work->constructor & 1) || (work->destructor & 1)) - { - string_appends (declp, &trawname); - work->constructor -= 1; - } - string_delete(&trawname); - string_delete(&tname); - oldmangled = NULL; - expect_func = 1; - break; - - case '_': - if ((AUTO_DEMANGLING || GNU_DEMANGLING) && expect_return_type) - { - /* Read the return type. */ - string return_type; - - (*mangled)++; - success = do_type (work, mangled, &return_type); - APPEND_BLANK (&return_type); - - string_prepends (declp, &return_type); - string_delete (&return_type); - break; - } - else - /* At the outermost level, we cannot have a return type specified, - so if we run into another '_' at this point we are dealing with - a mangled name that is either bogus, or has been mangled by - some algorithm we don't know how to deal with. So just - reject the entire demangling. */ - /* However, "_nnn" is an expected suffix for alternate entry point - numbered nnn for a function, with HP aCC, so skip over that - without reporting failure. pai/1997-09-04 */ - if (HP_DEMANGLING) - { - (*mangled)++; - while (**mangled && ISDIGIT ((unsigned char)**mangled)) - (*mangled)++; - } - else - success = 0; - break; - - case 'H': - if (AUTO_DEMANGLING || GNU_DEMANGLING) - { - /* A G++ template function. Read the template arguments. */ - success = demangle_template (work, mangled, declp, 0, 0, - 0); - if (!(work->constructor & 1)) - expect_return_type = 1; - (*mangled)++; - break; - } - else - /* fall through */ - {;} - - default: - if (AUTO_DEMANGLING || GNU_DEMANGLING) - { - /* Assume we have stumbled onto the first outermost function - argument token, and start processing args. */ - func_done = 1; - success = demangle_args (work, mangled, declp); - } - else - { - /* Non-GNU demanglers use a specific token to mark the start - of the outermost function argument tokens. Typically 'F', - for ARM/HP-demangling, for example. So if we find something - we are not prepared for, it must be an error. */ - success = 0; - } - break; - } - /* - if (AUTO_DEMANGLING || GNU_DEMANGLING) - */ - { - if (success && expect_func) - { - func_done = 1; - if (LUCID_DEMANGLING || ARM_DEMANGLING || EDG_DEMANGLING) - { - forget_types (work); - } - success = demangle_args (work, mangled, declp); - /* Since template include the mangling of their return types, - we must set expect_func to 0 so that we don't try do - demangle more arguments the next time we get here. */ - expect_func = 0; - } - } - } - if (success && !func_done) - { - if (AUTO_DEMANGLING || GNU_DEMANGLING) - { - /* With GNU style demangling, bar__3foo is 'foo::bar(void)', and - bar__3fooi is 'foo::bar(int)'. We get here when we find the - first case, and need to ensure that the '(void)' gets added to - the current declp. Note that with ARM/HP, the first case - represents the name of a static data member 'foo::bar', - which is in the current declp, so we leave it alone. */ - success = demangle_args (work, mangled, declp); - } - } - if (success && PRINT_ARG_TYPES) - { - if (work->static_type) - string_append (declp, " static"); - if (work->type_quals != TYPE_UNQUALIFIED) - { - APPEND_BLANK (declp); - string_append (declp, qualifier_string (work->type_quals)); - } - } - - return (success); -} - -#if 0 - -static int -demangle_method_args (struct work_stuff *work, const char **mangled, - string *declp) -{ - int success = 0; - - if (work -> static_type) - { - string_append (declp, *mangled + 1); - *mangled += strlen (*mangled); - success = 1; - } - else - { - success = demangle_args (work, mangled, declp); - } - return (success); -} - -#endif - -static int -demangle_template_template_parm (struct work_stuff *work, - const char **mangled, string *tname) -{ - int i; - int r; - int need_comma = 0; - int success = 1; - string temp; - - string_append (tname, "template <"); - /* get size of template parameter list */ - if (get_count (mangled, &r)) - { - for (i = 0; i < r; i++) - { - if (need_comma) - { - string_append (tname, ", "); - } - - /* Z for type parameters */ - if (**mangled == 'Z') - { - (*mangled)++; - string_append (tname, "class"); - } - /* z for template parameters */ - else if (**mangled == 'z') - { - (*mangled)++; - success = - demangle_template_template_parm (work, mangled, tname); - if (!success) - { - break; - } - } - else - { - /* temp is initialized in do_type */ - success = do_type (work, mangled, &temp); - if (success) - { - string_appends (tname, &temp); - } - string_delete(&temp); - if (!success) - { - break; - } - } - need_comma = 1; - } - - } - if (tname->p[-1] == '>') - string_append (tname, " "); - string_append (tname, "> class"); - return (success); -} - -static int -demangle_expression (struct work_stuff *work, const char **mangled, - string *s, type_kind_t tk) -{ - int need_operator = 0; - int success; - - success = 1; - string_appendn (s, "(", 1); - (*mangled)++; - while (success && **mangled != 'W' && **mangled != '\0') - { - if (need_operator) - { - size_t i; - size_t len; - - success = 0; - - len = strlen (*mangled); - - for (i = 0; i < ARRAY_SIZE (optable); ++i) - { - size_t l = strlen (optable[i].in); - - if (l <= len - && memcmp (optable[i].in, *mangled, l) == 0) - { - string_appendn (s, " ", 1); - string_append (s, optable[i].out); - string_appendn (s, " ", 1); - success = 1; - (*mangled) += l; - break; - } - } - - if (!success) - break; - } - else - need_operator = 1; - - success = demangle_template_value_parm (work, mangled, s, tk); - } - - if (**mangled != 'W') - success = 0; - else - { - string_appendn (s, ")", 1); - (*mangled)++; - } - - return success; -} - -static int -demangle_integral_value (struct work_stuff *work, - const char **mangled, string *s) -{ - int success; - - if (**mangled == 'E') - success = demangle_expression (work, mangled, s, tk_integral); - else if (**mangled == 'Q' || **mangled == 'K') - success = demangle_qualified (work, mangled, s, 0, 1); - else - { - int value; - - /* By default, we let the number decide whether we shall consume an - underscore. */ - int multidigit_without_leading_underscore = 0; - int leave_following_underscore = 0; - - success = 0; - - if (**mangled == '_') - { - if (mangled[0][1] == 'm') - { - /* Since consume_count_with_underscores does not handle the - `m'-prefix we must do it here, using consume_count and - adjusting underscores: we have to consume the underscore - matching the prepended one. */ - multidigit_without_leading_underscore = 1; - string_appendn (s, "-", 1); - (*mangled) += 2; - } - else - { - /* Do not consume a following underscore; - consume_count_with_underscores will consume what - should be consumed. */ - leave_following_underscore = 1; - } - } - else - { - /* Negative numbers are indicated with a leading `m'. */ - if (**mangled == 'm') - { - string_appendn (s, "-", 1); - (*mangled)++; - } - /* Since consume_count_with_underscores does not handle - multi-digit numbers that do not start with an underscore, - and this number can be an integer template parameter, - we have to call consume_count. */ - multidigit_without_leading_underscore = 1; - /* These multi-digit numbers never end on an underscore, - so if there is one then don't eat it. */ - leave_following_underscore = 1; - } - - /* We must call consume_count if we expect to remove a trailing - underscore, since consume_count_with_underscores expects - the leading underscore (that we consumed) if it is to handle - multi-digit numbers. */ - if (multidigit_without_leading_underscore) - value = consume_count (mangled); - else - value = consume_count_with_underscores (mangled); - - if (value != -1) - { - char buf[INTBUF_SIZE]; - sprintf (buf, "%d", value); - string_append (s, buf); - - /* Numbers not otherwise delimited, might have an underscore - appended as a delimeter, which we should skip. - - ??? This used to always remove a following underscore, which - is wrong. If other (arbitrary) cases are followed by an - underscore, we need to do something more radical. */ - - if ((value > 9 || multidigit_without_leading_underscore) - && ! leave_following_underscore - && **mangled == '_') - (*mangled)++; - - /* All is well. */ - success = 1; - } - } - - return success; -} - -/* Demangle the real value in MANGLED. */ - -static int -demangle_real_value (struct work_stuff *work, - const char **mangled, string *s) -{ - if (**mangled == 'E') - return demangle_expression (work, mangled, s, tk_real); - - if (**mangled == 'm') - { - string_appendn (s, "-", 1); - (*mangled)++; - } - while (ISDIGIT ((unsigned char)**mangled)) - { - string_appendn (s, *mangled, 1); - (*mangled)++; - } - if (**mangled == '.') /* fraction */ - { - string_appendn (s, ".", 1); - (*mangled)++; - while (ISDIGIT ((unsigned char)**mangled)) - { - string_appendn (s, *mangled, 1); - (*mangled)++; - } - } - if (**mangled == 'e') /* exponent */ - { - string_appendn (s, "e", 1); - (*mangled)++; - while (ISDIGIT ((unsigned char)**mangled)) - { - string_appendn (s, *mangled, 1); - (*mangled)++; - } - } - - return 1; -} - -static int -demangle_template_value_parm (struct work_stuff *work, const char **mangled, - string *s, type_kind_t tk) -{ - int success = 1; - - if (**mangled == 'Y') - { - /* The next argument is a template parameter. */ - int idx; - - (*mangled)++; - idx = consume_count_with_underscores (mangled); - if (idx == -1 - || (work->tmpl_argvec && idx >= work->ntmpl_args) - || consume_count_with_underscores (mangled) == -1) - return -1; - if (work->tmpl_argvec) - string_append (s, work->tmpl_argvec[idx]); - else - string_append_template_idx (s, idx); - } - else if (tk == tk_integral) - success = demangle_integral_value (work, mangled, s); - else if (tk == tk_char) - { - char tmp[2]; - int val; - if (**mangled == 'm') - { - string_appendn (s, "-", 1); - (*mangled)++; - } - string_appendn (s, "'", 1); - val = consume_count(mangled); - if (val <= 0) - success = 0; - else - { - tmp[0] = (char)val; - tmp[1] = '\0'; - string_appendn (s, &tmp[0], 1); - string_appendn (s, "'", 1); - } - } - else if (tk == tk_bool) - { - int val = consume_count (mangled); - if (val == 0) - string_appendn (s, "false", 5); - else if (val == 1) - string_appendn (s, "true", 4); - else - success = 0; - } - else if (tk == tk_real) - success = demangle_real_value (work, mangled, s); - else if (tk == tk_pointer || tk == tk_reference) - { - if (**mangled == 'Q') - success = demangle_qualified (work, mangled, s, - /*isfuncname=*/0, - /*append=*/1); - else - { - int symbol_len = consume_count (mangled); - if (symbol_len == -1) - return -1; - if (symbol_len == 0) - string_appendn (s, "0", 1); - else - { - char *p = XNEWVEC (char, symbol_len + 1), *q; - strncpy (p, *mangled, symbol_len); - p [symbol_len] = '\0'; - /* We use cplus_demangle here, rather than - internal_cplus_demangle, because the name of the entity - mangled here does not make use of any of the squangling - or type-code information we have built up thus far; it is - mangled independently. */ - q = cplus_demangle (p, work->options); - if (tk == tk_pointer) - string_appendn (s, "&", 1); - /* FIXME: Pointer-to-member constants should get a - qualifying class name here. */ - if (q) - { - string_append (s, q); - free (q); - } - else - string_append (s, p); - free (p); - } - *mangled += symbol_len; - } - } - - return success; -} - -/* Demangle the template name in MANGLED. The full name of the - template (e.g., S) is placed in TNAME. The name without the - template parameters (e.g. S) is placed in TRAWNAME if TRAWNAME is - non-NULL. If IS_TYPE is nonzero, this template is a type template, - not a function template. If both IS_TYPE and REMEMBER are nonzero, - the template is remembered in the list of back-referenceable - types. */ - -static int -demangle_template (struct work_stuff *work, const char **mangled, - string *tname, string *trawname, - int is_type, int remember) -{ - int i; - int r; - int need_comma = 0; - int success = 0; - int is_java_array = 0; - string temp; - - (*mangled)++; - if (is_type) - { - /* get template name */ - if (**mangled == 'z') - { - int idx; - (*mangled)++; - (*mangled)++; - - idx = consume_count_with_underscores (mangled); - if (idx == -1 - || (work->tmpl_argvec && idx >= work->ntmpl_args) - || consume_count_with_underscores (mangled) == -1) - return (0); - - if (work->tmpl_argvec) - { - string_append (tname, work->tmpl_argvec[idx]); - if (trawname) - string_append (trawname, work->tmpl_argvec[idx]); - } - else - { - string_append_template_idx (tname, idx); - if (trawname) - string_append_template_idx (trawname, idx); - } - } - else - { - if ((r = consume_count (mangled)) <= 0 - || (int) strlen (*mangled) < r) - { - return (0); - } - is_java_array = (work -> options & DMGL_JAVA) - && strncmp (*mangled, "JArray1Z", 8) == 0; - if (! is_java_array) - { - string_appendn (tname, *mangled, r); - } - if (trawname) - string_appendn (trawname, *mangled, r); - *mangled += r; - } - } - if (!is_java_array) - string_append (tname, "<"); - /* get size of template parameter list */ - if (!get_count (mangled, &r)) - { - return (0); - } - if (!is_type) - { - /* Create an array for saving the template argument values. */ - work->tmpl_argvec = XNEWVEC (char *, r); - work->ntmpl_args = r; - for (i = 0; i < r; i++) - work->tmpl_argvec[i] = 0; - } - for (i = 0; i < r; i++) - { - if (need_comma) - { - string_append (tname, ", "); - } - /* Z for type parameters */ - if (**mangled == 'Z') - { - (*mangled)++; - /* temp is initialized in do_type */ - success = do_type (work, mangled, &temp); - if (success) - { - string_appends (tname, &temp); - - if (!is_type) - { - /* Save the template argument. */ - int len = temp.p - temp.b; - work->tmpl_argvec[i] = XNEWVEC (char, len + 1); - memcpy (work->tmpl_argvec[i], temp.b, len); - work->tmpl_argvec[i][len] = '\0'; - } - } - string_delete(&temp); - if (!success) - { - break; - } - } - /* z for template parameters */ - else if (**mangled == 'z') - { - int r2; - (*mangled)++; - success = demangle_template_template_parm (work, mangled, tname); - - if (success - && (r2 = consume_count (mangled)) > 0 - && (int) strlen (*mangled) >= r2) - { - string_append (tname, " "); - string_appendn (tname, *mangled, r2); - if (!is_type) - { - /* Save the template argument. */ - int len = r2; - work->tmpl_argvec[i] = XNEWVEC (char, len + 1); - memcpy (work->tmpl_argvec[i], *mangled, len); - work->tmpl_argvec[i][len] = '\0'; - } - *mangled += r2; - } - if (!success) - { - break; - } - } - else - { - string param; - string* s; - - /* otherwise, value parameter */ - - /* temp is initialized in do_type */ - success = do_type (work, mangled, &temp); - string_delete(&temp); - if (!success) - break; - - if (!is_type) - { - s = ¶m; - string_init (s); - } - else - s = tname; - - success = demangle_template_value_parm (work, mangled, s, - (type_kind_t) success); - - if (!success) - { - if (!is_type) - string_delete (s); - success = 0; - break; - } - - if (!is_type) - { - int len = s->p - s->b; - work->tmpl_argvec[i] = XNEWVEC (char, len + 1); - memcpy (work->tmpl_argvec[i], s->b, len); - work->tmpl_argvec[i][len] = '\0'; - - string_appends (tname, s); - string_delete (s); - } - } - need_comma = 1; - } - if (is_java_array) - { - string_append (tname, "[]"); - } - else - { - if (tname->p[-1] == '>') - string_append (tname, " "); - string_append (tname, ">"); - } - - if (is_type && remember) - { - const int bindex = register_Btype (work); - remember_Btype (work, tname->b, LEN_STRING (tname), bindex); - } - - /* - if (work -> static_type) - { - string_append (declp, *mangled + 1); - *mangled += strlen (*mangled); - success = 1; - } - else - { - success = demangle_args (work, mangled, declp); - } - } - */ - return (success); -} - -static int -arm_pt (struct work_stuff *work, const char *mangled, - int n, const char **anchor, const char **args) -{ - /* Check if ARM template with "__pt__" in it ("parameterized type") */ - /* Allow HP also here, because HP's cfront compiler follows ARM to some extent */ - if ((ARM_DEMANGLING || HP_DEMANGLING) && (*anchor = strstr (mangled, "__pt__"))) - { - int len; - *args = *anchor + 6; - len = consume_count (args); - if (len == -1) - return 0; - if (*args + len == mangled + n && **args == '_') - { - ++*args; - return 1; - } - } - if (AUTO_DEMANGLING || EDG_DEMANGLING) - { - if ((*anchor = strstr (mangled, "__tm__")) - || (*anchor = strstr (mangled, "__ps__")) - || (*anchor = strstr (mangled, "__pt__"))) - { - int len; - *args = *anchor + 6; - len = consume_count (args); - if (len == -1) - return 0; - if (*args + len == mangled + n && **args == '_') - { - ++*args; - return 1; - } - } - else if ((*anchor = strstr (mangled, "__S"))) - { - int len; - *args = *anchor + 3; - len = consume_count (args); - if (len == -1) - return 0; - if (*args + len == mangled + n && **args == '_') - { - ++*args; - return 1; - } - } - } - - return 0; -} - -static void -demangle_arm_hp_template (struct work_stuff *work, const char **mangled, - int n, string *declp) -{ - const char *p; - const char *args; - const char *e = *mangled + n; - string arg; - - /* Check for HP aCC template spec: classXt1t2 where t1, t2 are - template args */ - if (HP_DEMANGLING && ((*mangled)[n] == 'X')) - { - char *start_spec_args = NULL; - int hold_options; - - /* First check for and omit template specialization pseudo-arguments, - such as in "Spec<#1,#1.*>" */ - start_spec_args = strchr (*mangled, '<'); - if (start_spec_args && (start_spec_args - *mangled < n)) - string_appendn (declp, *mangled, start_spec_args - *mangled); - else - string_appendn (declp, *mangled, n); - (*mangled) += n + 1; - string_init (&arg); - if (work->temp_start == -1) /* non-recursive call */ - work->temp_start = declp->p - declp->b; - - /* We want to unconditionally demangle parameter types in - template parameters. */ - hold_options = work->options; - work->options |= DMGL_PARAMS; - - string_append (declp, "<"); - while (1) - { - string_delete (&arg); - switch (**mangled) - { - case 'T': - /* 'T' signals a type parameter */ - (*mangled)++; - if (!do_type (work, mangled, &arg)) - goto hpacc_template_args_done; - break; - - case 'U': - case 'S': - /* 'U' or 'S' signals an integral value */ - if (!do_hpacc_template_const_value (work, mangled, &arg)) - goto hpacc_template_args_done; - break; - - case 'A': - /* 'A' signals a named constant expression (literal) */ - if (!do_hpacc_template_literal (work, mangled, &arg)) - goto hpacc_template_args_done; - break; - - default: - /* Today, 1997-09-03, we have only the above types - of template parameters */ - /* FIXME: maybe this should fail and return null */ - goto hpacc_template_args_done; - } - string_appends (declp, &arg); - /* Check if we're at the end of template args. - 0 if at end of static member of template class, - _ if done with template args for a function */ - if ((**mangled == '\000') || (**mangled == '_')) - break; - else - string_append (declp, ","); - } - hpacc_template_args_done: - string_append (declp, ">"); - string_delete (&arg); - if (**mangled == '_') - (*mangled)++; - work->options = hold_options; - return; - } - /* ARM template? (Also handles HP cfront extensions) */ - else if (arm_pt (work, *mangled, n, &p, &args)) - { - int hold_options; - string type_str; - - string_init (&arg); - string_appendn (declp, *mangled, p - *mangled); - if (work->temp_start == -1) /* non-recursive call */ - work->temp_start = declp->p - declp->b; - - /* We want to unconditionally demangle parameter types in - template parameters. */ - hold_options = work->options; - work->options |= DMGL_PARAMS; - - string_append (declp, "<"); - /* should do error checking here */ - while (args < e) { - string_delete (&arg); - - /* Check for type or literal here */ - switch (*args) - { - /* HP cfront extensions to ARM for template args */ - /* spec: Xt1Lv1 where t1 is a type, v1 is a literal value */ - /* FIXME: We handle only numeric literals for HP cfront */ - case 'X': - /* A typed constant value follows */ - args++; - if (!do_type (work, &args, &type_str)) - goto cfront_template_args_done; - string_append (&arg, "("); - string_appends (&arg, &type_str); - string_delete (&type_str); - string_append (&arg, ")"); - if (*args != 'L') - goto cfront_template_args_done; - args++; - /* Now snarf a literal value following 'L' */ - if (!snarf_numeric_literal (&args, &arg)) - goto cfront_template_args_done; - break; - - case 'L': - /* Snarf a literal following 'L' */ - args++; - if (!snarf_numeric_literal (&args, &arg)) - goto cfront_template_args_done; - break; - default: - /* Not handling other HP cfront stuff */ - { - const char* old_args = args; - if (!do_type (work, &args, &arg)) - goto cfront_template_args_done; - - /* Fail if we didn't make any progress: prevent infinite loop. */ - if (args == old_args) - { - work->options = hold_options; - return; - } - } - } - string_appends (declp, &arg); - string_append (declp, ","); - } - cfront_template_args_done: - string_delete (&arg); - if (args >= e) - --declp->p; /* remove extra comma */ - string_append (declp, ">"); - work->options = hold_options; - } - else if (n>10 && strncmp (*mangled, "_GLOBAL_", 8) == 0 - && (*mangled)[9] == 'N' - && (*mangled)[8] == (*mangled)[10] - && strchr (cplus_markers, (*mangled)[8])) - { - /* A member of the anonymous namespace. */ - string_append (declp, "{anonymous}"); - } - else - { - if (work->temp_start == -1) /* non-recursive call only */ - work->temp_start = 0; /* disable in recursive calls */ - string_appendn (declp, *mangled, n); - } - *mangled += n; -} - -/* Extract a class name, possibly a template with arguments, from the - mangled string; qualifiers, local class indicators, etc. have - already been dealt with */ - -static int -demangle_class_name (struct work_stuff *work, const char **mangled, - string *declp) -{ - int n; - int success = 0; - - n = consume_count (mangled); - if (n == -1) - return 0; - if ((int) strlen (*mangled) >= n) - { - demangle_arm_hp_template (work, mangled, n, declp); - success = 1; - } - - return (success); -} - -/* - -LOCAL FUNCTION - - demangle_class -- demangle a mangled class sequence - -SYNOPSIS - - static int - demangle_class (struct work_stuff *work, const char **mangled, - strint *declp) - -DESCRIPTION - - DECLP points to the buffer into which demangling is being done. - - *MANGLED points to the current token to be demangled. On input, - it points to a mangled class (I.E. "3foo", "13verylongclass", etc.) - On exit, it points to the next token after the mangled class on - success, or the first unconsumed token on failure. - - If the CONSTRUCTOR or DESTRUCTOR flags are set in WORK, then - we are demangling a constructor or destructor. In this case - we prepend "class::class" or "class::~class" to DECLP. - - Otherwise, we prepend "class::" to the current DECLP. - - Reset the constructor/destructor flags once they have been - "consumed". This allows demangle_class to be called later during - the same demangling, to do normal class demangling. - - Returns 1 if demangling is successful, 0 otherwise. - -*/ - -static int -demangle_class (struct work_stuff *work, const char **mangled, string *declp) -{ - int success = 0; - int btype; - string class_name; - char *save_class_name_end = 0; - - string_init (&class_name); - btype = register_Btype (work); - if (demangle_class_name (work, mangled, &class_name)) - { - save_class_name_end = class_name.p; - if ((work->constructor & 1) || (work->destructor & 1)) - { - /* adjust so we don't include template args */ - if (work->temp_start && (work->temp_start != -1)) - { - class_name.p = class_name.b + work->temp_start; - } - string_prepends (declp, &class_name); - if (work -> destructor & 1) - { - string_prepend (declp, "~"); - work -> destructor -= 1; - } - else - { - work -> constructor -= 1; - } - } - class_name.p = save_class_name_end; - remember_Ktype (work, class_name.b, LEN_STRING(&class_name)); - remember_Btype (work, class_name.b, LEN_STRING(&class_name), btype); - string_prepend (declp, SCOPE_STRING (work)); - string_prepends (declp, &class_name); - success = 1; - } - string_delete (&class_name); - return (success); -} - - -/* Called when there's a "__" in the mangled name, with `scan' pointing to - the rightmost guess. - - Find the correct "__"-sequence where the function name ends and the - signature starts, which is ambiguous with GNU mangling. - Call demangle_signature here, so we can make sure we found the right - one; *mangled will be consumed so caller will not make further calls to - demangle_signature. */ - -static int -iterate_demangle_function (struct work_stuff *work, const char **mangled, - string *declp, const char *scan) -{ - const char *mangle_init = *mangled; - int success = 0; - string decl_init; - struct work_stuff work_init; - - if (*(scan + 2) == '\0') - return 0; - - /* Do not iterate for some demangling modes, or if there's only one - "__"-sequence. This is the normal case. */ - if (ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING - || strstr (scan + 2, "__") == NULL) - { - demangle_function_name (work, mangled, declp, scan); - return 1; - } - - /* Save state so we can restart if the guess at the correct "__" was - wrong. */ - string_init (&decl_init); - string_appends (&decl_init, declp); - memset (&work_init, 0, sizeof work_init); - work_stuff_copy_to_from (&work_init, work); - - /* Iterate over occurrences of __, allowing names and types to have a - "__" sequence in them. We must start with the first (not the last) - occurrence, since "__" most often occur between independent mangled - parts, hence starting at the last occurence inside a signature - might get us a "successful" demangling of the signature. */ - - while (scan[2]) - { - demangle_function_name (work, mangled, declp, scan); - success = demangle_signature (work, mangled, declp); - if (success) - break; - - /* Reset demangle state for the next round. */ - *mangled = mangle_init; - string_clear (declp); - string_appends (declp, &decl_init); - work_stuff_copy_to_from (work, &work_init); - - /* Leave this underscore-sequence. */ - scan += 2; - - /* Scan for the next "__" sequence. */ - while (*scan && (scan[0] != '_' || scan[1] != '_')) - scan++; - - /* Move to last "__" in this sequence. */ - while (*scan && *scan == '_') - scan++; - scan -= 2; - } - - /* Delete saved state. */ - delete_work_stuff (&work_init); - string_delete (&decl_init); - - return success; -} - -/* - -LOCAL FUNCTION - - demangle_prefix -- consume the mangled name prefix and find signature - -SYNOPSIS - - static int - demangle_prefix (struct work_stuff *work, const char **mangled, - string *declp); - -DESCRIPTION - - Consume and demangle the prefix of the mangled name. - While processing the function name root, arrange to call - demangle_signature if the root is ambiguous. - - DECLP points to the string buffer into which demangled output is - placed. On entry, the buffer is empty. On exit it contains - the root function name, the demangled operator name, or in some - special cases either nothing or the completely demangled result. - - MANGLED points to the current pointer into the mangled name. As each - token of the mangled name is consumed, it is updated. Upon entry - the current mangled name pointer points to the first character of - the mangled name. Upon exit, it should point to the first character - of the signature if demangling was successful, or to the first - unconsumed character if demangling of the prefix was unsuccessful. - - Returns 1 on success, 0 otherwise. - */ - -static int -demangle_prefix (struct work_stuff *work, const char **mangled, - string *declp) -{ - int success = 1; - const char *scan; - int i; - - if (strlen(*mangled) > 6 - && (strncmp(*mangled, "_imp__", 6) == 0 - || strncmp(*mangled, "__imp_", 6) == 0)) - { - /* it's a symbol imported from a PE dynamic library. Check for both - new style prefix _imp__ and legacy __imp_ used by older versions - of dlltool. */ - (*mangled) += 6; - work->dllimported = 1; - } - else if (strlen(*mangled) >= 11 && strncmp(*mangled, "_GLOBAL_", 8) == 0) - { - char *marker = strchr (cplus_markers, (*mangled)[8]); - if (marker != NULL && *marker == (*mangled)[10]) - { - if ((*mangled)[9] == 'D') - { - /* it's a GNU global destructor to be executed at program exit */ - (*mangled) += 11; - work->destructor = 2; - if (gnu_special (work, mangled, declp)) - return success; - } - else if ((*mangled)[9] == 'I') - { - /* it's a GNU global constructor to be executed at program init */ - (*mangled) += 11; - work->constructor = 2; - if (gnu_special (work, mangled, declp)) - return success; - } - } - } - else if ((ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) && strncmp(*mangled, "__std__", 7) == 0) - { - /* it's a ARM global destructor to be executed at program exit */ - (*mangled) += 7; - work->destructor = 2; - } - else if ((ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) && strncmp(*mangled, "__sti__", 7) == 0) - { - /* it's a ARM global constructor to be executed at program initial */ - (*mangled) += 7; - work->constructor = 2; - } - - /* This block of code is a reduction in strength time optimization - of: - scan = strstr (*mangled, "__"); */ - - { - scan = *mangled; - - do { - scan = strchr (scan, '_'); - } while (scan != NULL && *++scan != '_'); - - if (scan != NULL) --scan; - } - - if (scan != NULL) - { - /* We found a sequence of two or more '_', ensure that we start at - the last pair in the sequence. */ - i = strspn (scan, "_"); - if (i > 2) - { - scan += (i - 2); - } - } - - if (scan == NULL) - { - success = 0; - } - else if (work -> static_type) - { - if (!ISDIGIT ((unsigned char)scan[0]) && (scan[0] != 't')) - { - success = 0; - } - } - else if ((scan == *mangled) - && (ISDIGIT ((unsigned char)scan[2]) || (scan[2] == 'Q') - || (scan[2] == 't') || (scan[2] == 'K') || (scan[2] == 'H'))) - { - /* The ARM says nothing about the mangling of local variables. - But cfront mangles local variables by prepending __ - to them. As an extension to ARM demangling we handle this case. */ - if ((LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING) - && ISDIGIT ((unsigned char)scan[2])) - { - *mangled = scan + 2; - consume_count (mangled); - string_append (declp, *mangled); - *mangled += strlen (*mangled); - success = 1; - } - else - { - /* A GNU style constructor starts with __[0-9Qt]. But cfront uses - names like __Q2_3foo3bar for nested type names. So don't accept - this style of constructor for cfront demangling. A GNU - style member-template constructor starts with 'H'. */ - if (!(LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING)) - work -> constructor += 1; - *mangled = scan + 2; - } - } - else if (ARM_DEMANGLING && scan[2] == 'p' && scan[3] == 't') - { - /* Cfront-style parameterized type. Handled later as a signature. */ - success = 1; - - /* ARM template? */ - demangle_arm_hp_template (work, mangled, strlen (*mangled), declp); - } - else if (EDG_DEMANGLING && ((scan[2] == 't' && scan[3] == 'm') - || (scan[2] == 'p' && scan[3] == 's') - || (scan[2] == 'p' && scan[3] == 't'))) - { - /* EDG-style parameterized type. Handled later as a signature. */ - success = 1; - - /* EDG template? */ - demangle_arm_hp_template (work, mangled, strlen (*mangled), declp); - } - else if ((scan == *mangled) && !ISDIGIT ((unsigned char)scan[2]) - && (scan[2] != 't')) - { - /* Mangled name starts with "__". Skip over any leading '_' characters, - then find the next "__" that separates the prefix from the signature. - */ - if (!(ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) - || (arm_special (mangled, declp) == 0)) - { - while (*scan == '_') - { - scan++; - } - if ((scan = strstr (scan, "__")) == NULL || (*(scan + 2) == '\0')) - { - /* No separator (I.E. "__not_mangled"), or empty signature - (I.E. "__not_mangled_either__") */ - success = 0; - } - else - return iterate_demangle_function (work, mangled, declp, scan); - } - } - else if (*(scan + 2) != '\0') - { - /* Mangled name does not start with "__" but does have one somewhere - in there with non empty stuff after it. Looks like a global - function name. Iterate over all "__":s until the right - one is found. */ - return iterate_demangle_function (work, mangled, declp, scan); - } - else - { - /* Doesn't look like a mangled name */ - success = 0; - } - - if (!success && (work->constructor == 2 || work->destructor == 2)) - { - string_append (declp, *mangled); - *mangled += strlen (*mangled); - success = 1; - } - return (success); -} - -/* - -LOCAL FUNCTION - - gnu_special -- special handling of gnu mangled strings - -SYNOPSIS - - static int - gnu_special (struct work_stuff *work, const char **mangled, - string *declp); - - -DESCRIPTION - - Process some special GNU style mangling forms that don't fit - the normal pattern. For example: - - _$_3foo (destructor for class foo) - _vt$foo (foo virtual table) - _vt$foo$bar (foo::bar virtual table) - __vt_foo (foo virtual table, new style with thunks) - _3foo$varname (static data member) - _Q22rs2tu$vw (static data member) - __t6vector1Zii (constructor with template) - __thunk_4__$_7ostream (virtual function thunk) - */ - -static int -gnu_special (struct work_stuff *work, const char **mangled, string *declp) -{ - int n; - int success = 1; - const char *p; - - if ((*mangled)[0] == '_' - && strchr (cplus_markers, (*mangled)[1]) != NULL - && (*mangled)[2] == '_') - { - /* Found a GNU style destructor, get past "__" */ - (*mangled) += 3; - work -> destructor += 1; - } - else if ((*mangled)[0] == '_' - && (((*mangled)[1] == '_' - && (*mangled)[2] == 'v' - && (*mangled)[3] == 't' - && (*mangled)[4] == '_') - || ((*mangled)[1] == 'v' - && (*mangled)[2] == 't' - && strchr (cplus_markers, (*mangled)[3]) != NULL))) - { - /* Found a GNU style virtual table, get past "_vt" - and create the decl. Note that we consume the entire mangled - input string, which means that demangle_signature has no work - to do. */ - if ((*mangled)[2] == 'v') - (*mangled) += 5; /* New style, with thunks: "__vt_" */ - else - (*mangled) += 4; /* Old style, no thunks: "_vt" */ - while (**mangled != '\0') - { - switch (**mangled) - { - case 'Q': - case 'K': - success = demangle_qualified (work, mangled, declp, 0, 1); - break; - case 't': - success = demangle_template (work, mangled, declp, 0, 1, - 1); - break; - default: - if (ISDIGIT((unsigned char)*mangled[0])) - { - n = consume_count(mangled); - /* We may be seeing a too-large size, or else a - "." indicating a static local symbol. In - any case, declare victory and move on; *don't* try - to use n to allocate. */ - if (n > (int) strlen (*mangled)) - { - success = 1; - break; - } - } - else - { - n = strcspn (*mangled, cplus_markers); - } - string_appendn (declp, *mangled, n); - (*mangled) += n; - } - - p = strpbrk (*mangled, cplus_markers); - if (success && ((p == NULL) || (p == *mangled))) - { - if (p != NULL) - { - string_append (declp, SCOPE_STRING (work)); - (*mangled)++; - } - } - else - { - success = 0; - break; - } - } - if (success) - string_append (declp, " virtual table"); - } - else if ((*mangled)[0] == '_' - && (strchr("0123456789Qt", (*mangled)[1]) != NULL) - && (p = strpbrk (*mangled, cplus_markers)) != NULL) - { - /* static data member, "_3foo$varname" for example */ - (*mangled)++; - switch (**mangled) - { - case 'Q': - case 'K': - success = demangle_qualified (work, mangled, declp, 0, 1); - break; - case 't': - success = demangle_template (work, mangled, declp, 0, 1, 1); - break; - default: - n = consume_count (mangled); - if (n < 0 || n > (long) strlen (*mangled)) - { - success = 0; - break; - } - - if (n > 10 && strncmp (*mangled, "_GLOBAL_", 8) == 0 - && (*mangled)[9] == 'N' - && (*mangled)[8] == (*mangled)[10] - && strchr (cplus_markers, (*mangled)[8])) - { - /* A member of the anonymous namespace. There's information - about what identifier or filename it was keyed to, but - it's just there to make the mangled name unique; we just - step over it. */ - string_append (declp, "{anonymous}"); - (*mangled) += n; - - /* Now p points to the marker before the N, so we need to - update it to the first marker after what we consumed. */ - p = strpbrk (*mangled, cplus_markers); - break; - } - - string_appendn (declp, *mangled, n); - (*mangled) += n; - } - if (success && (p == *mangled)) - { - /* Consumed everything up to the cplus_marker, append the - variable name. */ - (*mangled)++; - string_append (declp, SCOPE_STRING (work)); - n = strlen (*mangled); - string_appendn (declp, *mangled, n); - (*mangled) += n; - } - else - { - success = 0; - } - } - else if (strncmp (*mangled, "__thunk_", 8) == 0) - { - int delta; - - (*mangled) += 8; - delta = consume_count (mangled); - if (delta == -1) - success = 0; - else - { - char *method = internal_cplus_demangle (work, ++*mangled); - - if (method) - { - char buf[50]; - sprintf (buf, "virtual function thunk (delta:%d) for ", -delta); - string_append (declp, buf); - string_append (declp, method); - free (method); - n = strlen (*mangled); - (*mangled) += n; - } - else - { - success = 0; - } - } - } - else if (strncmp (*mangled, "__t", 3) == 0 - && ((*mangled)[3] == 'i' || (*mangled)[3] == 'f')) - { - p = (*mangled)[3] == 'i' ? " type_info node" : " type_info function"; - (*mangled) += 4; - switch (**mangled) - { - case 'Q': - case 'K': - success = demangle_qualified (work, mangled, declp, 0, 1); - break; - case 't': - success = demangle_template (work, mangled, declp, 0, 1, 1); - break; - default: - success = do_type (work, mangled, declp); - break; - } - if (success && **mangled != '\0') - success = 0; - if (success) - string_append (declp, p); - } - else - { - success = 0; - } - return (success); -} - -static void -recursively_demangle(struct work_stuff *work, const char **mangled, - string *result, int namelength) -{ - char * recurse = (char *)NULL; - char * recurse_dem = (char *)NULL; - - recurse = XNEWVEC (char, namelength + 1); - memcpy (recurse, *mangled, namelength); - recurse[namelength] = '\000'; - - recurse_dem = cplus_demangle (recurse, work->options); - - if (recurse_dem) - { - string_append (result, recurse_dem); - free (recurse_dem); - } - else - { - string_appendn (result, *mangled, namelength); - } - free (recurse); - *mangled += namelength; -} - -/* - -LOCAL FUNCTION - - arm_special -- special handling of ARM/lucid mangled strings - -SYNOPSIS - - static int - arm_special (const char **mangled, - string *declp); - - -DESCRIPTION - - Process some special ARM style mangling forms that don't fit - the normal pattern. For example: - - __vtbl__3foo (foo virtual table) - __vtbl__3foo__3bar (bar::foo virtual table) - - */ - -static int -arm_special (const char **mangled, string *declp) -{ - int n; - int success = 1; - const char *scan; - - if (strncmp (*mangled, ARM_VTABLE_STRING, ARM_VTABLE_STRLEN) == 0) - { - /* Found a ARM style virtual table, get past ARM_VTABLE_STRING - and create the decl. Note that we consume the entire mangled - input string, which means that demangle_signature has no work - to do. */ - scan = *mangled + ARM_VTABLE_STRLEN; - while (*scan != '\0') /* first check it can be demangled */ - { - n = consume_count (&scan); - if (n == -1) - { - return (0); /* no good */ - } - scan += n; - if (scan[0] == '_' && scan[1] == '_') - { - scan += 2; - } - } - (*mangled) += ARM_VTABLE_STRLEN; - while (**mangled != '\0') - { - n = consume_count (mangled); - if (n == -1 - || n > (long) strlen (*mangled)) - return 0; - string_prependn (declp, *mangled, n); - (*mangled) += n; - if ((*mangled)[0] == '_' && (*mangled)[1] == '_') - { - string_prepend (declp, "::"); - (*mangled) += 2; - } - } - string_append (declp, " virtual table"); - } - else - { - success = 0; - } - return (success); -} - -/* - -LOCAL FUNCTION - - demangle_qualified -- demangle 'Q' qualified name strings - -SYNOPSIS - - static int - demangle_qualified (struct work_stuff *, const char *mangled, - string *result, int isfuncname, int append); - -DESCRIPTION - - Demangle a qualified name, such as "Q25Outer5Inner" which is - the mangled form of "Outer::Inner". The demangled output is - prepended or appended to the result string according to the - state of the append flag. - - If isfuncname is nonzero, then the qualified name we are building - is going to be used as a member function name, so if it is a - constructor or destructor function, append an appropriate - constructor or destructor name. I.E. for the above example, - the result for use as a constructor is "Outer::Inner::Inner" - and the result for use as a destructor is "Outer::Inner::~Inner". - -BUGS - - Numeric conversion is ASCII dependent (FIXME). - - */ - -static int -demangle_qualified (struct work_stuff *work, const char **mangled, - string *result, int isfuncname, int append) -{ - int qualifiers = 0; - int success = 1; - char num[2]; - string temp; - string last_name; - int bindex = register_Btype (work); - - /* We only make use of ISFUNCNAME if the entity is a constructor or - destructor. */ - isfuncname = (isfuncname - && ((work->constructor & 1) || (work->destructor & 1))); - - string_init (&temp); - string_init (&last_name); - - if ((*mangled)[0] == 'K') - { - /* Squangling qualified name reuse */ - int idx; - (*mangled)++; - idx = consume_count_with_underscores (mangled); - if (idx == -1 || idx >= work -> numk) - success = 0; - else - string_append (&temp, work -> ktypevec[idx]); - } - else - switch ((*mangled)[1]) - { - case '_': - /* GNU mangled name with more than 9 classes. The count is preceded - by an underscore (to distinguish it from the <= 9 case) and followed - by an underscore. */ - (*mangled)++; - qualifiers = consume_count_with_underscores (mangled); - if (qualifiers == -1) - success = 0; - break; - - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - /* The count is in a single digit. */ - num[0] = (*mangled)[1]; - num[1] = '\0'; - qualifiers = atoi (num); - - /* If there is an underscore after the digit, skip it. This is - said to be for ARM-qualified names, but the ARM makes no - mention of such an underscore. Perhaps cfront uses one. */ - if ((*mangled)[2] == '_') - { - (*mangled)++; - } - (*mangled) += 2; - break; - - case '0': - default: - success = 0; - } - - if (!success) - return success; - - /* Pick off the names and collect them in the temp buffer in the order - in which they are found, separated by '::'. */ - - while (qualifiers-- > 0) - { - int remember_K = 1; - string_clear (&last_name); - - if (*mangled[0] == '_') - (*mangled)++; - - if (*mangled[0] == 't') - { - /* Here we always append to TEMP since we will want to use - the template name without the template parameters as a - constructor or destructor name. The appropriate - (parameter-less) value is returned by demangle_template - in LAST_NAME. We do not remember the template type here, - in order to match the G++ mangling algorithm. */ - success = demangle_template(work, mangled, &temp, - &last_name, 1, 0); - if (!success) - break; - } - else if (*mangled[0] == 'K') - { - int idx; - (*mangled)++; - idx = consume_count_with_underscores (mangled); - if (idx == -1 || idx >= work->numk) - success = 0; - else - string_append (&temp, work->ktypevec[idx]); - remember_K = 0; - - if (!success) break; - } - else - { - if (EDG_DEMANGLING) - { - int namelength; - /* Now recursively demangle the qualifier - * This is necessary to deal with templates in - * mangling styles like EDG */ - namelength = consume_count (mangled); - if (namelength == -1) - { - success = 0; - break; - } - recursively_demangle(work, mangled, &temp, namelength); - } - else - { - string_delete (&last_name); - success = do_type (work, mangled, &last_name); - if (!success) - break; - string_appends (&temp, &last_name); - } - } - - if (remember_K) - remember_Ktype (work, temp.b, LEN_STRING (&temp)); - - if (qualifiers > 0) - string_append (&temp, SCOPE_STRING (work)); - } - - remember_Btype (work, temp.b, LEN_STRING (&temp), bindex); - - /* If we are using the result as a function name, we need to append - the appropriate '::' separated constructor or destructor name. - We do this here because this is the most convenient place, where - we already have a pointer to the name and the length of the name. */ - - if (isfuncname) - { - string_append (&temp, SCOPE_STRING (work)); - if (work -> destructor & 1) - string_append (&temp, "~"); - string_appends (&temp, &last_name); - } - - /* Now either prepend the temp buffer to the result, or append it, - depending upon the state of the append flag. */ - - if (append) - string_appends (result, &temp); - else - { - if (!STRING_EMPTY (result)) - string_append (&temp, SCOPE_STRING (work)); - string_prepends (result, &temp); - } - - string_delete (&last_name); - string_delete (&temp); - return (success); -} - -/* - -LOCAL FUNCTION - - get_count -- convert an ascii count to integer, consuming tokens - -SYNOPSIS - - static int - get_count (const char **type, int *count) - -DESCRIPTION - - Assume that *type points at a count in a mangled name; set - *count to its value, and set *type to the next character after - the count. There are some weird rules in effect here. - - If *type does not point at a string of digits, return zero. - - If *type points at a string of digits followed by an - underscore, set *count to their value as an integer, advance - *type to point *after the underscore, and return 1. - - If *type points at a string of digits not followed by an - underscore, consume only the first digit. Set *count to its - value as an integer, leave *type pointing after that digit, - and return 1. - - The excuse for this odd behavior: in the ARM and HP demangling - styles, a type can be followed by a repeat count of the form - `Nxy', where: - - `x' is a single digit specifying how many additional copies - of the type to append to the argument list, and - - `y' is one or more digits, specifying the zero-based index of - the first repeated argument in the list. Yes, as you're - unmangling the name you can figure this out yourself, but - it's there anyway. - - So, for example, in `bar__3fooFPiN51', the first argument is a - pointer to an integer (`Pi'), and then the next five arguments - are the same (`N5'), and the first repeat is the function's - second argument (`1'). -*/ - -static int -get_count (const char **type, int *count) -{ - const char *p; - int n; - - if (!ISDIGIT ((unsigned char)**type)) - return (0); - else - { - *count = **type - '0'; - (*type)++; - if (ISDIGIT ((unsigned char)**type)) - { - p = *type; - n = *count; - do - { - n *= 10; - n += *p - '0'; - p++; - } - while (ISDIGIT ((unsigned char)*p)); - if (*p == '_') - { - *type = p + 1; - *count = n; - } - } - } - return (1); -} - -/* RESULT will be initialised here; it will be freed on failure. The - value returned is really a type_kind_t. */ - -static int -do_type (struct work_stuff *work, const char **mangled, string *result) -{ - int n; - int done; - int success; - string decl; - const char *remembered_type; - int type_quals; - type_kind_t tk = tk_none; - - string_init (&decl); - string_init (result); - - done = 0; - success = 1; - while (success && !done) - { - int member; - switch (**mangled) - { - - /* A pointer type */ - case 'P': - case 'p': - (*mangled)++; - if (! (work -> options & DMGL_JAVA)) - string_prepend (&decl, "*"); - if (tk == tk_none) - tk = tk_pointer; - break; - - /* A reference type */ - case 'R': - (*mangled)++; - string_prepend (&decl, "&"); - if (tk == tk_none) - tk = tk_reference; - break; - - /* An array */ - case 'A': - { - ++(*mangled); - if (!STRING_EMPTY (&decl) - && (decl.b[0] == '*' || decl.b[0] == '&')) - { - string_prepend (&decl, "("); - string_append (&decl, ")"); - } - string_append (&decl, "["); - if (**mangled != '_') - success = demangle_template_value_parm (work, mangled, &decl, - tk_integral); - if (**mangled == '_') - ++(*mangled); - string_append (&decl, "]"); - break; - } - - /* A back reference to a previously seen type */ - case 'T': - (*mangled)++; - if (!get_count (mangled, &n) || n >= work -> ntypes) - { - success = 0; - } - else - { - remembered_type = work -> typevec[n]; - mangled = &remembered_type; - } - break; - - /* A function */ - case 'F': - (*mangled)++; - if (!STRING_EMPTY (&decl) - && (decl.b[0] == '*' || decl.b[0] == '&')) - { - string_prepend (&decl, "("); - string_append (&decl, ")"); - } - /* After picking off the function args, we expect to either find the - function return type (preceded by an '_') or the end of the - string. */ - if (!demangle_nested_args (work, mangled, &decl) - || (**mangled != '_' && **mangled != '\0')) - { - success = 0; - break; - } - if (success && (**mangled == '_')) - (*mangled)++; - break; - - case 'M': - case 'O': - { - type_quals = TYPE_UNQUALIFIED; - - member = **mangled == 'M'; - (*mangled)++; - - string_append (&decl, ")"); - - /* We don't need to prepend `::' for a qualified name; - demangle_qualified will do that for us. */ - if (**mangled != 'Q') - string_prepend (&decl, SCOPE_STRING (work)); - - if (ISDIGIT ((unsigned char)**mangled)) - { - n = consume_count (mangled); - if (n == -1 - || (int) strlen (*mangled) < n) - { - success = 0; - break; - } - string_prependn (&decl, *mangled, n); - *mangled += n; - } - else if (**mangled == 'X' || **mangled == 'Y') - { - string temp; - do_type (work, mangled, &temp); - string_prepends (&decl, &temp); - string_delete (&temp); - } - else if (**mangled == 't') - { - string temp; - string_init (&temp); - success = demangle_template (work, mangled, &temp, - NULL, 1, 1); - if (success) - { - string_prependn (&decl, temp.b, temp.p - temp.b); - string_delete (&temp); - } - else - break; - } - else if (**mangled == 'Q') - { - success = demangle_qualified (work, mangled, &decl, - /*isfuncnam=*/0, - /*append=*/0); - if (!success) - break; - } - else - { - success = 0; - break; - } - - string_prepend (&decl, "("); - if (member) - { - switch (**mangled) - { - case 'C': - case 'V': - case 'u': - type_quals |= code_for_qualifier (**mangled); - (*mangled)++; - break; - - default: - break; - } - - if (*(*mangled)++ != 'F') - { - success = 0; - break; - } - } - if ((member && !demangle_nested_args (work, mangled, &decl)) - || **mangled != '_') - { - success = 0; - break; - } - (*mangled)++; - if (! PRINT_ANSI_QUALIFIERS) - { - break; - } - if (type_quals != TYPE_UNQUALIFIED) - { - APPEND_BLANK (&decl); - string_append (&decl, qualifier_string (type_quals)); - } - break; - } - case 'G': - (*mangled)++; - break; - - case 'C': - case 'V': - case 'u': - if (PRINT_ANSI_QUALIFIERS) - { - if (!STRING_EMPTY (&decl)) - string_prepend (&decl, " "); - - string_prepend (&decl, demangle_qualifier (**mangled)); - } - (*mangled)++; - break; - /* - } - */ - - /* fall through */ - default: - done = 1; - break; - } - } - - if (success) switch (**mangled) - { - /* A qualified name, such as "Outer::Inner". */ - case 'Q': - case 'K': - { - success = demangle_qualified (work, mangled, result, 0, 1); - break; - } - - /* A back reference to a previously seen squangled type */ - case 'B': - (*mangled)++; - if (!get_count (mangled, &n) || n >= work -> numb) - success = 0; - else - string_append (result, work->btypevec[n]); - break; - - case 'X': - case 'Y': - /* A template parm. We substitute the corresponding argument. */ - { - int idx; - - (*mangled)++; - idx = consume_count_with_underscores (mangled); - - if (idx == -1 - || (work->tmpl_argvec && idx >= work->ntmpl_args) - || consume_count_with_underscores (mangled) == -1) - { - success = 0; - break; - } - - if (work->tmpl_argvec) - string_append (result, work->tmpl_argvec[idx]); - else - string_append_template_idx (result, idx); - - success = 1; - } - break; - - default: - success = demangle_fund_type (work, mangled, result); - if (tk == tk_none) - tk = (type_kind_t) success; - break; - } - - if (success) - { - if (!STRING_EMPTY (&decl)) - { - string_append (result, " "); - string_appends (result, &decl); - } - } - else - string_delete (result); - string_delete (&decl); - - if (success) - /* Assume an integral type, if we're not sure. */ - return (int) ((tk == tk_none) ? tk_integral : tk); - else - return 0; -} - -/* Given a pointer to a type string that represents a fundamental type - argument (int, long, unsigned int, etc) in TYPE, a pointer to the - string in which the demangled output is being built in RESULT, and - the WORK structure, decode the types and add them to the result. - - For example: - - "Ci" => "const int" - "Sl" => "signed long" - "CUs" => "const unsigned short" - - The value returned is really a type_kind_t. */ - -static int -demangle_fund_type (struct work_stuff *work, - const char **mangled, string *result) -{ - int done = 0; - int success = 1; - char buf[INTBUF_SIZE + 5 /* 'int%u_t' */]; - unsigned int dec = 0; - type_kind_t tk = tk_integral; - - /* First pick off any type qualifiers. There can be more than one. */ - - while (!done) - { - switch (**mangled) - { - case 'C': - case 'V': - case 'u': - if (PRINT_ANSI_QUALIFIERS) - { - if (!STRING_EMPTY (result)) - string_prepend (result, " "); - string_prepend (result, demangle_qualifier (**mangled)); - } - (*mangled)++; - break; - case 'U': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "unsigned"); - break; - case 'S': /* signed char only */ - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "signed"); - break; - case 'J': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "__complex"); - break; - default: - done = 1; - break; - } - } - - /* Now pick off the fundamental type. There can be only one. */ - - switch (**mangled) - { - case '\0': - case '_': - break; - case 'v': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "void"); - break; - case 'x': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "long long"); - break; - case 'l': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "long"); - break; - case 'i': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "int"); - break; - case 's': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "short"); - break; - case 'b': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "bool"); - tk = tk_bool; - break; - case 'c': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "char"); - tk = tk_char; - break; - case 'w': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "wchar_t"); - tk = tk_char; - break; - case 'r': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "long double"); - tk = tk_real; - break; - case 'd': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "double"); - tk = tk_real; - break; - case 'f': - (*mangled)++; - APPEND_BLANK (result); - string_append (result, "float"); - tk = tk_real; - break; - case 'G': - (*mangled)++; - if (!ISDIGIT ((unsigned char)**mangled)) - { - success = 0; - break; - } - case 'I': - (*mangled)++; - if (**mangled == '_') - { - int i; - (*mangled)++; - for (i = 0; - i < (long) sizeof (buf) - 1 && **mangled && **mangled != '_'; - (*mangled)++, i++) - buf[i] = **mangled; - if (**mangled != '_') - { - success = 0; - break; - } - buf[i] = '\0'; - (*mangled)++; - } - else - { - strncpy (buf, *mangled, 2); - buf[2] = '\0'; - *mangled += min (strlen (*mangled), 2); - } - sscanf (buf, "%x", &dec); - sprintf (buf, "int%u_t", dec); - APPEND_BLANK (result); - string_append (result, buf); - break; - - /* fall through */ - /* An explicit type, such as "6mytype" or "7integer" */ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - int bindex = register_Btype (work); - string btype; - string_init (&btype); - if (demangle_class_name (work, mangled, &btype)) { - remember_Btype (work, btype.b, LEN_STRING (&btype), bindex); - APPEND_BLANK (result); - string_appends (result, &btype); - } - else - success = 0; - string_delete (&btype); - break; - } - case 't': - { - string btype; - string_init (&btype); - success = demangle_template (work, mangled, &btype, 0, 1, 1); - string_appends (result, &btype); - string_delete (&btype); - break; - } - default: - success = 0; - break; - } - - return success ? ((int) tk) : 0; -} - - -/* Handle a template's value parameter for HP aCC (extension from ARM) - **mangled points to 'S' or 'U' */ - -static int -do_hpacc_template_const_value (struct work_stuff *work ATTRIBUTE_UNUSED, - const char **mangled, string *result) -{ - int unsigned_const; - - if (**mangled != 'U' && **mangled != 'S') - return 0; - - unsigned_const = (**mangled == 'U'); - - (*mangled)++; - - switch (**mangled) - { - case 'N': - string_append (result, "-"); - /* fall through */ - case 'P': - (*mangled)++; - break; - case 'M': - /* special case for -2^31 */ - string_append (result, "-2147483648"); - (*mangled)++; - return 1; - default: - return 0; - } - - /* We have to be looking at an integer now */ - if (!(ISDIGIT ((unsigned char)**mangled))) - return 0; - - /* We only deal with integral values for template - parameters -- so it's OK to look only for digits */ - while (ISDIGIT ((unsigned char)**mangled)) - { - char_str[0] = **mangled; - string_append (result, char_str); - (*mangled)++; - } - - if (unsigned_const) - string_append (result, "U"); - - /* FIXME? Some day we may have 64-bit (or larger :-) ) constants - with L or LL suffixes. pai/1997-09-03 */ - - return 1; /* success */ -} - -/* Handle a template's literal parameter for HP aCC (extension from ARM) - **mangled is pointing to the 'A' */ - -static int -do_hpacc_template_literal (struct work_stuff *work, const char **mangled, - string *result) -{ - int literal_len = 0; - char * recurse; - char * recurse_dem; - - if (**mangled != 'A') - return 0; - - (*mangled)++; - - literal_len = consume_count (mangled); - - if (literal_len <= 0) - return 0; - - /* Literal parameters are names of arrays, functions, etc. and the - canonical representation uses the address operator */ - string_append (result, "&"); - - /* Now recursively demangle the literal name */ - recurse = XNEWVEC (char, literal_len + 1); - memcpy (recurse, *mangled, literal_len); - recurse[literal_len] = '\000'; - - recurse_dem = cplus_demangle (recurse, work->options); - - if (recurse_dem) - { - string_append (result, recurse_dem); - free (recurse_dem); - } - else - { - string_appendn (result, *mangled, literal_len); - } - (*mangled) += literal_len; - free (recurse); - - return 1; -} - -static int -snarf_numeric_literal (const char **args, string *arg) -{ - if (**args == '-') - { - char_str[0] = '-'; - string_append (arg, char_str); - (*args)++; - } - else if (**args == '+') - (*args)++; - - if (!ISDIGIT ((unsigned char)**args)) - return 0; - - while (ISDIGIT ((unsigned char)**args)) - { - char_str[0] = **args; - string_append (arg, char_str); - (*args)++; - } - - return 1; -} - -/* Demangle the next argument, given by MANGLED into RESULT, which - *should be an uninitialized* string. It will be initialized here, - and free'd should anything go wrong. */ - -static int -do_arg (struct work_stuff *work, const char **mangled, string *result) -{ - /* Remember where we started so that we can record the type, for - non-squangling type remembering. */ - const char *start = *mangled; - - string_init (result); - - if (work->nrepeats > 0) - { - --work->nrepeats; - - if (work->previous_argument == 0) - return 0; - - /* We want to reissue the previous type in this argument list. */ - string_appends (result, work->previous_argument); - return 1; - } - - if (**mangled == 'n') - { - /* A squangling-style repeat. */ - (*mangled)++; - work->nrepeats = consume_count(mangled); - - if (work->nrepeats <= 0) - /* This was not a repeat count after all. */ - return 0; - - if (work->nrepeats > 9) - { - if (**mangled != '_') - /* The repeat count should be followed by an '_' in this - case. */ - return 0; - else - (*mangled)++; - } - - /* Now, the repeat is all set up. */ - return do_arg (work, mangled, result); - } - - /* Save the result in WORK->previous_argument so that we can find it - if it's repeated. Note that saving START is not good enough: we - do not want to add additional types to the back-referenceable - type vector when processing a repeated type. */ - if (work->previous_argument) - string_delete (work->previous_argument); - else - work->previous_argument = XNEW (string); - - if (!do_type (work, mangled, work->previous_argument)) - return 0; - - string_appends (result, work->previous_argument); - - remember_type (work, start, *mangled - start); - return 1; -} - -static void -remember_type (struct work_stuff *work, const char *start, int len) -{ - char *tem; - - if (work->forgetting_types) - return; - - if (work -> ntypes >= work -> typevec_size) - { - if (work -> typevec_size == 0) - { - work -> typevec_size = 3; - work -> typevec = XNEWVEC (char *, work->typevec_size); - } - else - { - work -> typevec_size *= 2; - work -> typevec - = XRESIZEVEC (char *, work->typevec, work->typevec_size); - } - } - tem = XNEWVEC (char, len + 1); - memcpy (tem, start, len); - tem[len] = '\0'; - work -> typevec[work -> ntypes++] = tem; -} - - -/* Remember a K type class qualifier. */ -static void -remember_Ktype (struct work_stuff *work, const char *start, int len) -{ - char *tem; - - if (work -> numk >= work -> ksize) - { - if (work -> ksize == 0) - { - work -> ksize = 5; - work -> ktypevec = XNEWVEC (char *, work->ksize); - } - else - { - work -> ksize *= 2; - work -> ktypevec - = XRESIZEVEC (char *, work->ktypevec, work->ksize); - } - } - tem = XNEWVEC (char, len + 1); - memcpy (tem, start, len); - tem[len] = '\0'; - work -> ktypevec[work -> numk++] = tem; -} - -/* Register a B code, and get an index for it. B codes are registered - as they are seen, rather than as they are completed, so map > - registers map > as B0, and temp as B1 */ - -static int -register_Btype (struct work_stuff *work) -{ - int ret; - - if (work -> numb >= work -> bsize) - { - if (work -> bsize == 0) - { - work -> bsize = 5; - work -> btypevec = XNEWVEC (char *, work->bsize); - } - else - { - work -> bsize *= 2; - work -> btypevec - = XRESIZEVEC (char *, work->btypevec, work->bsize); - } - } - ret = work -> numb++; - work -> btypevec[ret] = NULL; - return(ret); -} - -/* Store a value into a previously registered B code type. */ - -static void -remember_Btype (struct work_stuff *work, const char *start, - int len, int index) -{ - char *tem; - - tem = XNEWVEC (char, len + 1); - memcpy (tem, start, len); - tem[len] = '\0'; - work -> btypevec[index] = tem; -} - -/* Lose all the info related to B and K type codes. */ -static void -forget_B_and_K_types (struct work_stuff *work) -{ - int i; - - while (work -> numk > 0) - { - i = --(work -> numk); - if (work -> ktypevec[i] != NULL) - { - free (work -> ktypevec[i]); - work -> ktypevec[i] = NULL; - } - } - - while (work -> numb > 0) - { - i = --(work -> numb); - if (work -> btypevec[i] != NULL) - { - free (work -> btypevec[i]); - work -> btypevec[i] = NULL; - } - } -} -/* Forget the remembered types, but not the type vector itself. */ - -static void -forget_types (struct work_stuff *work) -{ - int i; - - while (work -> ntypes > 0) - { - i = --(work -> ntypes); - if (work -> typevec[i] != NULL) - { - free (work -> typevec[i]); - work -> typevec[i] = NULL; - } - } -} - -/* Process the argument list part of the signature, after any class spec - has been consumed, as well as the first 'F' character (if any). For - example: - - "__als__3fooRT0" => process "RT0" - "complexfunc5__FPFPc_PFl_i" => process "PFPc_PFl_i" - - DECLP must be already initialised, usually non-empty. It won't be freed - on failure. - - Note that g++ differs significantly from ARM and lucid style mangling - with regards to references to previously seen types. For example, given - the source fragment: - - class foo { - public: - foo::foo (int, foo &ia, int, foo &ib, int, foo &ic); - }; - - foo::foo (int, foo &ia, int, foo &ib, int, foo &ic) { ia = ib = ic; } - void foo (int, foo &ia, int, foo &ib, int, foo &ic) { ia = ib = ic; } - - g++ produces the names: - - __3fooiRT0iT2iT2 - foo__FiR3fooiT1iT1 - - while lcc (and presumably other ARM style compilers as well) produces: - - foo__FiR3fooT1T2T1T2 - __ct__3fooFiR3fooT1T2T1T2 - - Note that g++ bases its type numbers starting at zero and counts all - previously seen types, while lucid/ARM bases its type numbers starting - at one and only considers types after it has seen the 'F' character - indicating the start of the function args. For lucid/ARM style, we - account for this difference by discarding any previously seen types when - we see the 'F' character, and subtracting one from the type number - reference. - - */ - -static int -demangle_args (struct work_stuff *work, const char **mangled, - string *declp) -{ - string arg; - int need_comma = 0; - int r; - int t; - const char *tem; - char temptype; - - if (PRINT_ARG_TYPES) - { - string_append (declp, "("); - if (**mangled == '\0') - { - string_append (declp, "void"); - } - } - - while ((**mangled != '_' && **mangled != '\0' && **mangled != 'e') - || work->nrepeats > 0) - { - if ((**mangled == 'N') || (**mangled == 'T')) - { - temptype = *(*mangled)++; - - if (temptype == 'N') - { - if (!get_count (mangled, &r)) - { - return (0); - } - } - else - { - r = 1; - } - if ((HP_DEMANGLING || ARM_DEMANGLING || EDG_DEMANGLING) && work -> ntypes >= 10) - { - /* If we have 10 or more types we might have more than a 1 digit - index so we'll have to consume the whole count here. This - will lose if the next thing is a type name preceded by a - count but it's impossible to demangle that case properly - anyway. Eg if we already have 12 types is T12Pc "(..., type1, - Pc, ...)" or "(..., type12, char *, ...)" */ - if ((t = consume_count(mangled)) <= 0) - { - return (0); - } - } - else - { - if (!get_count (mangled, &t)) - { - return (0); - } - } - if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) - { - t--; - } - /* Validate the type index. Protect against illegal indices from - malformed type strings. */ - if ((t < 0) || (t >= work -> ntypes)) - { - return (0); - } - while (work->nrepeats > 0 || --r >= 0) - { - tem = work -> typevec[t]; - if (need_comma && PRINT_ARG_TYPES) - { - string_append (declp, ", "); - } - if (!do_arg (work, &tem, &arg)) - { - return (0); - } - if (PRINT_ARG_TYPES) - { - string_appends (declp, &arg); - } - string_delete (&arg); - need_comma = 1; - } - } - else - { - if (need_comma && PRINT_ARG_TYPES) - string_append (declp, ", "); - if (!do_arg (work, mangled, &arg)) - return (0); - if (PRINT_ARG_TYPES) - string_appends (declp, &arg); - string_delete (&arg); - need_comma = 1; - } - } - - if (**mangled == 'e') - { - (*mangled)++; - if (PRINT_ARG_TYPES) - { - if (need_comma) - { - string_append (declp, ","); - } - string_append (declp, "..."); - } - } - - if (PRINT_ARG_TYPES) - { - string_append (declp, ")"); - } - return (1); -} - -/* Like demangle_args, but for demangling the argument lists of function - and method pointers or references, not top-level declarations. */ - -static int -demangle_nested_args (struct work_stuff *work, const char **mangled, - string *declp) -{ - string* saved_previous_argument; - int result; - int saved_nrepeats; - - /* The G++ name-mangling algorithm does not remember types on nested - argument lists, unless -fsquangling is used, and in that case the - type vector updated by remember_type is not used. So, we turn - off remembering of types here. */ - ++work->forgetting_types; - - /* For the repeat codes used with -fsquangling, we must keep track of - the last argument. */ - saved_previous_argument = work->previous_argument; - saved_nrepeats = work->nrepeats; - work->previous_argument = 0; - work->nrepeats = 0; - - /* Actually demangle the arguments. */ - result = demangle_args (work, mangled, declp); - - /* Restore the previous_argument field. */ - if (work->previous_argument) - { - string_delete (work->previous_argument); - free ((char *) work->previous_argument); - } - work->previous_argument = saved_previous_argument; - --work->forgetting_types; - work->nrepeats = saved_nrepeats; - - return result; -} - -static void -demangle_function_name (struct work_stuff *work, const char **mangled, - string *declp, const char *scan) -{ - size_t i; - string type; - const char *tem; - - string_appendn (declp, (*mangled), scan - (*mangled)); - string_need (declp, 1); - *(declp -> p) = '\0'; - - /* Consume the function name, including the "__" separating the name - from the signature. We are guaranteed that SCAN points to the - separator. */ - - (*mangled) = scan + 2; - /* We may be looking at an instantiation of a template function: - foo__Xt1t2_Ft3t4, where t1, t2, ... are template arguments and a - following _F marks the start of the function arguments. Handle - the template arguments first. */ - - if (HP_DEMANGLING && (**mangled == 'X')) - { - demangle_arm_hp_template (work, mangled, 0, declp); - /* This leaves MANGLED pointing to the 'F' marking func args */ - } - - if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) - { - - /* See if we have an ARM style constructor or destructor operator. - If so, then just record it, clear the decl, and return. - We can't build the actual constructor/destructor decl until later, - when we recover the class name from the signature. */ - - if (strcmp (declp -> b, "__ct") == 0) - { - work -> constructor += 1; - string_clear (declp); - return; - } - else if (strcmp (declp -> b, "__dt") == 0) - { - work -> destructor += 1; - string_clear (declp); - return; - } - } - - if (declp->p - declp->b >= 3 - && declp->b[0] == 'o' - && declp->b[1] == 'p' - && strchr (cplus_markers, declp->b[2]) != NULL) - { - /* see if it's an assignment expression */ - if (declp->p - declp->b >= 10 /* op$assign_ */ - && memcmp (declp->b + 3, "assign_", 7) == 0) - { - for (i = 0; i < ARRAY_SIZE (optable); i++) - { - int len = declp->p - declp->b - 10; - if ((int) strlen (optable[i].in) == len - && memcmp (optable[i].in, declp->b + 10, len) == 0) - { - string_clear (declp); - string_append (declp, "operator"); - string_append (declp, optable[i].out); - string_append (declp, "="); - break; - } - } - } - else - { - for (i = 0; i < ARRAY_SIZE (optable); i++) - { - int len = declp->p - declp->b - 3; - if ((int) strlen (optable[i].in) == len - && memcmp (optable[i].in, declp->b + 3, len) == 0) - { - string_clear (declp); - string_append (declp, "operator"); - string_append (declp, optable[i].out); - break; - } - } - } - } - else if (declp->p - declp->b >= 5 && memcmp (declp->b, "type", 4) == 0 - && strchr (cplus_markers, declp->b[4]) != NULL) - { - /* type conversion operator */ - tem = declp->b + 5; - if (do_type (work, &tem, &type)) - { - string_clear (declp); - string_append (declp, "operator "); - string_appends (declp, &type); - string_delete (&type); - } - } - else if (declp->b[0] == '_' && declp->b[1] == '_' - && declp->b[2] == 'o' && declp->b[3] == 'p') - { - /* ANSI. */ - /* type conversion operator. */ - tem = declp->b + 4; - if (do_type (work, &tem, &type)) - { - string_clear (declp); - string_append (declp, "operator "); - string_appends (declp, &type); - string_delete (&type); - } - } - else if (declp->b[0] == '_' && declp->b[1] == '_' - && ISLOWER((unsigned char)declp->b[2]) - && ISLOWER((unsigned char)declp->b[3])) - { - if (declp->b[4] == '\0') - { - /* Operator. */ - for (i = 0; i < ARRAY_SIZE (optable); i++) - { - if (strlen (optable[i].in) == 2 - && memcmp (optable[i].in, declp->b + 2, 2) == 0) - { - string_clear (declp); - string_append (declp, "operator"); - string_append (declp, optable[i].out); - break; - } - } - } - else - { - if (declp->b[2] == 'a' && declp->b[5] == '\0') - { - /* Assignment. */ - for (i = 0; i < ARRAY_SIZE (optable); i++) - { - if (strlen (optable[i].in) == 3 - && memcmp (optable[i].in, declp->b + 2, 3) == 0) - { - string_clear (declp); - string_append (declp, "operator"); - string_append (declp, optable[i].out); - break; - } - } - } - } - } -} - -/* a mini string-handling package */ - -static void -string_need (string *s, int n) -{ - int tem; - - if (s->b == NULL) - { - if (n < 32) - { - n = 32; - } - s->p = s->b = XNEWVEC (char, n); - s->e = s->b + n; - } - else if (s->e - s->p < n) - { - tem = s->p - s->b; - n += tem; - n *= 2; - s->b = XRESIZEVEC (char, s->b, n); - s->p = s->b + tem; - s->e = s->b + n; - } -} - -static void -string_delete (string *s) -{ - if (s->b != NULL) - { - free (s->b); - s->b = s->e = s->p = NULL; - } -} - -static void -string_init (string *s) -{ - s->b = s->p = s->e = NULL; -} - -static void -string_clear (string *s) -{ - s->p = s->b; -} - -#if 0 - -static int -string_empty (string *s) -{ - return (s->b == s->p); -} - -#endif - -static void -string_append (string *p, const char *s) -{ - int n; - if (s == NULL || *s == '\0') - return; - n = strlen (s); - string_need (p, n); - memcpy (p->p, s, n); - p->p += n; -} - -static void -string_appends (string *p, string *s) -{ - int n; - - if (s->b != s->p) - { - n = s->p - s->b; - string_need (p, n); - memcpy (p->p, s->b, n); - p->p += n; - } -} - -static void -string_appendn (string *p, const char *s, int n) -{ - if (n != 0) - { - string_need (p, n); - memcpy (p->p, s, n); - p->p += n; - } -} - -static void -string_prepend (string *p, const char *s) -{ - if (s != NULL && *s != '\0') - { - string_prependn (p, s, strlen (s)); - } -} - -static void -string_prepends (string *p, string *s) -{ - if (s->b != s->p) - { - string_prependn (p, s->b, s->p - s->b); - } -} - -static void -string_prependn (string *p, const char *s, int n) -{ - char *q; - - if (n != 0) - { - string_need (p, n); - for (q = p->p - 1; q >= p->b; q--) - { - q[n] = q[0]; - } - memcpy (p->b, s, n); - p->p += n; - } -} - -static void -string_append_template_idx (string *s, int idx) -{ - char buf[INTBUF_SIZE + 1 /* 'T' */]; - sprintf(buf, "T%d", idx); - string_append (s, buf); -} diff --git a/libiberty/dyn-string.c b/libiberty/dyn-string.c deleted file mode 100644 index 9de50eda0e8..00000000000 --- a/libiberty/dyn-string.c +++ /dev/null @@ -1,397 +0,0 @@ -/* An abstract string datatype. - Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc. - Contributed by Mark Mitchell (mark@markmitchell.com). - -This file is part of GNU CC. - -GNU CC 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, or (at your option) -any later version. - -In addition to the permissions in the GNU General Public License, the -Free Software Foundation gives you unlimited permission to link the -compiled version of this file into combinations with other programs, -and to distribute those combinations without any restriction coming -from the use of this file. (The General Public License restrictions -do apply in other respects; for example, they cover modification of -the file, and distribution when not linked into a combined -executable.) - -GNU CC 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 GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#ifdef HAVE_STRING_H -#include -#endif - -#ifdef HAVE_STDLIB_H -#include -#endif - -#include "libiberty.h" -#include "dyn-string.h" - -/* Performs in-place initialization of a dyn_string struct. This - function can be used with a dyn_string struct on the stack or - embedded in another object. The contents of of the string itself - are still dynamically allocated. The string initially is capable - of holding at least SPACE characeters, including the terminating - NUL. If SPACE is 0, it will silently be increated to 1. - - If RETURN_ON_ALLOCATION_FAILURE is defined and memory allocation - fails, returns 0. Otherwise returns 1. */ - -int -dyn_string_init (struct dyn_string *ds_struct_ptr, int space) -{ - /* We need at least one byte in which to store the terminating NUL. */ - if (space == 0) - space = 1; - -#ifdef RETURN_ON_ALLOCATION_FAILURE - ds_struct_ptr->s = (char *) malloc (space); - if (ds_struct_ptr->s == NULL) - return 0; -#else - ds_struct_ptr->s = XNEWVEC (char, space); -#endif - ds_struct_ptr->allocated = space; - ds_struct_ptr->length = 0; - ds_struct_ptr->s[0] = '\0'; - - return 1; -} - -/* Create a new dynamic string capable of holding at least SPACE - characters, including the terminating NUL. If SPACE is 0, it will - be silently increased to 1. If RETURN_ON_ALLOCATION_FAILURE is - defined and memory allocation fails, returns NULL. Otherwise - returns the newly allocated string. */ - -dyn_string_t -dyn_string_new (int space) -{ - dyn_string_t result; -#ifdef RETURN_ON_ALLOCATION_FAILURE - result = (dyn_string_t) malloc (sizeof (struct dyn_string)); - if (result == NULL) - return NULL; - if (!dyn_string_init (result, space)) - { - free (result); - return NULL; - } -#else - result = XNEW (struct dyn_string); - dyn_string_init (result, space); -#endif - return result; -} - -/* Free the memory used by DS. */ - -void -dyn_string_delete (dyn_string_t ds) -{ - free (ds->s); - free (ds); -} - -/* Returns the contents of DS in a buffer allocated with malloc. It - is the caller's responsibility to deallocate the buffer using free. - DS is then set to the empty string. Deletes DS itself. */ - -char* -dyn_string_release (dyn_string_t ds) -{ - /* Store the old buffer. */ - char* result = ds->s; - /* The buffer is no longer owned by DS. */ - ds->s = NULL; - /* Delete DS. */ - free (ds); - /* Return the old buffer. */ - return result; -} - -/* Increase the capacity of DS so it can hold at least SPACE - characters, plus the terminating NUL. This function will not (at - present) reduce the capacity of DS. Returns DS on success. - - If RETURN_ON_ALLOCATION_FAILURE is defined and a memory allocation - operation fails, deletes DS and returns NULL. */ - -dyn_string_t -dyn_string_resize (dyn_string_t ds, int space) -{ - int new_allocated = ds->allocated; - - /* Increase SPACE to hold the NUL termination. */ - ++space; - - /* Increase allocation by factors of two. */ - while (space > new_allocated) - new_allocated *= 2; - - if (new_allocated != ds->allocated) - { - ds->allocated = new_allocated; - /* We actually need more space. */ -#ifdef RETURN_ON_ALLOCATION_FAILURE - ds->s = (char *) realloc (ds->s, ds->allocated); - if (ds->s == NULL) - { - free (ds); - return NULL; - } -#else - ds->s = XRESIZEVEC (char, ds->s, ds->allocated); -#endif - } - - return ds; -} - -/* Sets the contents of DS to the empty string. */ - -void -dyn_string_clear (dyn_string_t ds) -{ - /* A dyn_string always has room for at least the NUL terminator. */ - ds->s[0] = '\0'; - ds->length = 0; -} - -/* Makes the contents of DEST the same as the contents of SRC. DEST - and SRC must be distinct. Returns 1 on success. On failure, if - RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ - -int -dyn_string_copy (dyn_string_t dest, dyn_string_t src) -{ - if (dest == src) - abort (); - - /* Make room in DEST. */ - if (dyn_string_resize (dest, src->length) == NULL) - return 0; - /* Copy DEST into SRC. */ - strcpy (dest->s, src->s); - /* Update the size of DEST. */ - dest->length = src->length; - return 1; -} - -/* Copies SRC, a NUL-terminated string, into DEST. Returns 1 on - success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST - and returns 0. */ - -int -dyn_string_copy_cstr (dyn_string_t dest, const char *src) -{ - int length = strlen (src); - /* Make room in DEST. */ - if (dyn_string_resize (dest, length) == NULL) - return 0; - /* Copy DEST into SRC. */ - strcpy (dest->s, src); - /* Update the size of DEST. */ - dest->length = length; - return 1; -} - -/* Inserts SRC at the beginning of DEST. DEST is expanded as - necessary. SRC and DEST must be distinct. Returns 1 on success. - On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and - returns 0. */ - -int -dyn_string_prepend (dyn_string_t dest, dyn_string_t src) -{ - return dyn_string_insert (dest, 0, src); -} - -/* Inserts SRC, a NUL-terminated string, at the beginning of DEST. - DEST is expanded as necessary. Returns 1 on success. On failure, - if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ - -int -dyn_string_prepend_cstr (dyn_string_t dest, const char *src) -{ - return dyn_string_insert_cstr (dest, 0, src); -} - -/* Inserts SRC into DEST starting at position POS. DEST is expanded - as necessary. SRC and DEST must be distinct. Returns 1 on - success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST - and returns 0. */ - -int -dyn_string_insert (dyn_string_t dest, int pos, dyn_string_t src) -{ - int i; - - if (src == dest) - abort (); - - if (dyn_string_resize (dest, dest->length + src->length) == NULL) - return 0; - /* Make room for the insertion. Be sure to copy the NUL. */ - for (i = dest->length; i >= pos; --i) - dest->s[i + src->length] = dest->s[i]; - /* Splice in the new stuff. */ - strncpy (dest->s + pos, src->s, src->length); - /* Compute the new length. */ - dest->length += src->length; - return 1; -} - -/* Inserts SRC, a NUL-terminated string, into DEST starting at - position POS. DEST is expanded as necessary. Returns 1 on - success. On failure, RETURN_ON_ALLOCATION_FAILURE, deletes DEST - and returns 0. */ - -int -dyn_string_insert_cstr (dyn_string_t dest, int pos, const char *src) -{ - int i; - int length = strlen (src); - - if (dyn_string_resize (dest, dest->length + length) == NULL) - return 0; - /* Make room for the insertion. Be sure to copy the NUL. */ - for (i = dest->length; i >= pos; --i) - dest->s[i + length] = dest->s[i]; - /* Splice in the new stuff. */ - strncpy (dest->s + pos, src, length); - /* Compute the new length. */ - dest->length += length; - return 1; -} - -/* Inserts character C into DEST starting at position POS. DEST is - expanded as necessary. Returns 1 on success. On failure, - RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ - -int -dyn_string_insert_char (dyn_string_t dest, int pos, int c) -{ - int i; - - if (dyn_string_resize (dest, dest->length + 1) == NULL) - return 0; - /* Make room for the insertion. Be sure to copy the NUL. */ - for (i = dest->length; i >= pos; --i) - dest->s[i + 1] = dest->s[i]; - /* Add the new character. */ - dest->s[pos] = c; - /* Compute the new length. */ - ++dest->length; - return 1; -} - -/* Append S to DS, resizing DS if necessary. Returns 1 on success. - On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and - returns 0. */ - -int -dyn_string_append (dyn_string_t dest, dyn_string_t s) -{ - if (dyn_string_resize (dest, dest->length + s->length) == 0) - return 0; - strcpy (dest->s + dest->length, s->s); - dest->length += s->length; - return 1; -} - -/* Append the NUL-terminated string S to DS, resizing DS if necessary. - Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE, - deletes DEST and returns 0. */ - -int -dyn_string_append_cstr (dyn_string_t dest, const char *s) -{ - int len = strlen (s); - - /* The new length is the old length plus the size of our string, plus - one for the null at the end. */ - if (dyn_string_resize (dest, dest->length + len) == NULL) - return 0; - strcpy (dest->s + dest->length, s); - dest->length += len; - return 1; -} - -/* Appends C to the end of DEST. Returns 1 on success. On failiure, - if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ - -int -dyn_string_append_char (dyn_string_t dest, int c) -{ - /* Make room for the extra character. */ - if (dyn_string_resize (dest, dest->length + 1) == NULL) - return 0; - /* Append the character; it will overwrite the old NUL. */ - dest->s[dest->length] = c; - /* Add a new NUL at the end. */ - dest->s[dest->length + 1] = '\0'; - /* Update the length. */ - ++(dest->length); - return 1; -} - -/* Sets the contents of DEST to the substring of SRC starting at START - and ending before END. START must be less than or equal to END, - and both must be between zero and the length of SRC, inclusive. - Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE, - deletes DEST and returns 0. */ - -int -dyn_string_substring (dyn_string_t dest, dyn_string_t src, - int start, int end) -{ - int i; - int length = end - start; - - if (start > end || start > src->length || end > src->length) - abort (); - - /* Make room for the substring. */ - if (dyn_string_resize (dest, length) == NULL) - return 0; - /* Copy the characters in the substring, */ - for (i = length; --i >= 0; ) - dest->s[i] = src->s[start + i]; - /* NUL-terimate the result. */ - dest->s[length] = '\0'; - /* Record the length of the substring. */ - dest->length = length; - - return 1; -} - -/* Returns non-zero if DS1 and DS2 have the same contents. */ - -int -dyn_string_eq (dyn_string_t ds1, dyn_string_t ds2) -{ - /* If DS1 and DS2 have different lengths, they must not be the same. */ - if (ds1->length != ds2->length) - return 0; - else - return !strcmp (ds1->s, ds2->s); -} diff --git a/libiberty/fdmatch.c b/libiberty/fdmatch.c deleted file mode 100644 index f613cb3c01e..00000000000 --- a/libiberty/fdmatch.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Compare two open file descriptors to see if they refer to the same file. - Copyright (C) 1991 Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - - -/* - -@deftypefn Extension int fdmatch (int @var{fd1}, int @var{fd2}) - -Check to see if two open file descriptors refer to the same file. -This is useful, for example, when we have an open file descriptor for -an unnamed file, and the name of a file that we believe to correspond -to that fd. This can happen when we are exec'd with an already open -file (@code{stdout} for example) or from the SVR4 @file{/proc} calls -that return open file descriptors for mapped address spaces. All we -have to do is open the file by name and check the two file descriptors -for a match, which is done by comparing major and minor device numbers -and inode numbers. - -@end deftypefn - -BUGS - - (FIXME: does this work for networks?) - It works for NFS, which assigns a device number to each mount. - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "ansidecl.h" -#include "libiberty.h" -#include -#include - -int fdmatch (int fd1, int fd2) -{ - struct stat sbuf1; - struct stat sbuf2; - - if ((fstat (fd1, &sbuf1) == 0) && - (fstat (fd2, &sbuf2) == 0) && - (sbuf1.st_dev == sbuf2.st_dev) && - (sbuf1.st_ino == sbuf2.st_ino)) - { - return (1); - } - else - { - return (0); - } -} diff --git a/libiberty/ffs.c b/libiberty/ffs.c deleted file mode 100644 index 603cbe8ed99..00000000000 --- a/libiberty/ffs.c +++ /dev/null @@ -1,26 +0,0 @@ -/* ffs -- Find the first bit set in the parameter - -@deftypefn Supplemental int ffs (int @var{valu}) - -Find the first (least significant) bit set in @var{valu}. Bits are -numbered from right to left, starting with bit 1 (corresponding to the -value 1). If @var{valu} is zero, zero is returned. - -@end deftypefn - -*/ - -int -ffs (register int valu) -{ - register int bit; - - if (valu == 0) - return 0; - - for (bit = 1; !(valu & 1); bit++) - valu >>= 1; - - return bit; -} - diff --git a/libiberty/fibheap.c b/libiberty/fibheap.c deleted file mode 100644 index c032149c0c2..00000000000 --- a/libiberty/fibheap.c +++ /dev/null @@ -1,478 +0,0 @@ -/* A Fibonacci heap datatype. - Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. - Contributed by Daniel Berlin (dan@cgsoftware.com). - -This file is part of GNU CC. - -GNU CC 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, or (at your option) -any later version. - -GNU CC 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 GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#ifdef HAVE_LIMITS_H -#include -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif -#include "libiberty.h" -#include "fibheap.h" - - -#define FIBHEAPKEY_MIN LONG_MIN - -static void fibheap_ins_root (fibheap_t, fibnode_t); -static void fibheap_rem_root (fibheap_t, fibnode_t); -static void fibheap_consolidate (fibheap_t); -static void fibheap_link (fibheap_t, fibnode_t, fibnode_t); -static void fibheap_cut (fibheap_t, fibnode_t, fibnode_t); -static void fibheap_cascading_cut (fibheap_t, fibnode_t); -static fibnode_t fibheap_extr_min_node (fibheap_t); -static int fibheap_compare (fibheap_t, fibnode_t, fibnode_t); -static int fibheap_comp_data (fibheap_t, fibheapkey_t, void *, fibnode_t); -static fibnode_t fibnode_new (void); -static void fibnode_insert_after (fibnode_t, fibnode_t); -#define fibnode_insert_before(a, b) fibnode_insert_after (a->left, b) -static fibnode_t fibnode_remove (fibnode_t); - - -/* Create a new fibonacci heap. */ -fibheap_t -fibheap_new (void) -{ - return (fibheap_t) xcalloc (1, sizeof (struct fibheap)); -} - -/* Create a new fibonacci heap node. */ -static fibnode_t -fibnode_new (void) -{ - fibnode_t node; - - node = (fibnode_t) xcalloc (1, sizeof *node); - node->left = node; - node->right = node; - - return node; -} - -static inline int -fibheap_compare (fibheap_t heap ATTRIBUTE_UNUSED, fibnode_t a, fibnode_t b) -{ - if (a->key < b->key) - return -1; - if (a->key > b->key) - return 1; - return 0; -} - -static inline int -fibheap_comp_data (fibheap_t heap, fibheapkey_t key, void *data, fibnode_t b) -{ - struct fibnode a; - - a.key = key; - a.data = data; - - return fibheap_compare (heap, &a, b); -} - -/* Insert DATA, with priority KEY, into HEAP. */ -fibnode_t -fibheap_insert (fibheap_t heap, fibheapkey_t key, void *data) -{ - fibnode_t node; - - /* Create the new node. */ - node = fibnode_new (); - - /* Set the node's data. */ - node->data = data; - node->key = key; - - /* Insert it into the root list. */ - fibheap_ins_root (heap, node); - - /* If their was no minimum, or this key is less than the min, - it's the new min. */ - if (heap->min == NULL || node->key < heap->min->key) - heap->min = node; - - heap->nodes++; - - return node; -} - -/* Return the data of the minimum node (if we know it). */ -void * -fibheap_min (fibheap_t heap) -{ - /* If there is no min, we can't easily return it. */ - if (heap->min == NULL) - return NULL; - return heap->min->data; -} - -/* Return the key of the minimum node (if we know it). */ -fibheapkey_t -fibheap_min_key (fibheap_t heap) -{ - /* If there is no min, we can't easily return it. */ - if (heap->min == NULL) - return 0; - return heap->min->key; -} - -/* Union HEAPA and HEAPB into a new heap. */ -fibheap_t -fibheap_union (fibheap_t heapa, fibheap_t heapb) -{ - fibnode_t a_root, b_root, temp; - - /* If one of the heaps is empty, the union is just the other heap. */ - if ((a_root = heapa->root) == NULL) - { - free (heapa); - return heapb; - } - if ((b_root = heapb->root) == NULL) - { - free (heapb); - return heapa; - } - - /* Merge them to the next nodes on the opposite chain. */ - a_root->left->right = b_root; - b_root->left->right = a_root; - temp = a_root->left; - a_root->left = b_root->left; - b_root->left = temp; - heapa->nodes += heapb->nodes; - - /* And set the new minimum, if it's changed. */ - if (fibheap_compare (heapa, heapb->min, heapa->min) < 0) - heapa->min = heapb->min; - - free (heapb); - return heapa; -} - -/* Extract the data of the minimum node from HEAP. */ -void * -fibheap_extract_min (fibheap_t heap) -{ - fibnode_t z; - void *ret = NULL; - - /* If we don't have a min set, it means we have no nodes. */ - if (heap->min != NULL) - { - /* Otherwise, extract the min node, free the node, and return the - node's data. */ - z = fibheap_extr_min_node (heap); - ret = z->data; - free (z); - } - - return ret; -} - -/* Replace both the KEY and the DATA associated with NODE. */ -void * -fibheap_replace_key_data (fibheap_t heap, fibnode_t node, - fibheapkey_t key, void *data) -{ - void *odata; - fibheapkey_t okey; - fibnode_t y; - - /* If we wanted to, we could actually do a real increase by redeleting and - inserting. However, this would require O (log n) time. So just bail out - for now. */ - if (fibheap_comp_data (heap, key, data, node) > 0) - return NULL; - - odata = node->data; - okey = node->key; - node->data = data; - node->key = key; - y = node->parent; - - if (okey == key) - return odata; - - /* These two compares are specifically <= 0 to make sure that in the case - of equality, a node we replaced the data on, becomes the new min. This - is needed so that delete's call to extractmin gets the right node. */ - if (y != NULL && fibheap_compare (heap, node, y) <= 0) - { - fibheap_cut (heap, node, y); - fibheap_cascading_cut (heap, y); - } - - if (fibheap_compare (heap, node, heap->min) <= 0) - heap->min = node; - - return odata; -} - -/* Replace the DATA associated with NODE. */ -void * -fibheap_replace_data (fibheap_t heap, fibnode_t node, void *data) -{ - return fibheap_replace_key_data (heap, node, node->key, data); -} - -/* Replace the KEY associated with NODE. */ -fibheapkey_t -fibheap_replace_key (fibheap_t heap, fibnode_t node, fibheapkey_t key) -{ - int okey = node->key; - fibheap_replace_key_data (heap, node, key, node->data); - return okey; -} - -/* Delete NODE from HEAP. */ -void * -fibheap_delete_node (fibheap_t heap, fibnode_t node) -{ - void *ret = node->data; - - /* To perform delete, we just make it the min key, and extract. */ - fibheap_replace_key (heap, node, FIBHEAPKEY_MIN); - fibheap_extract_min (heap); - - return ret; -} - -/* Delete HEAP. */ -void -fibheap_delete (fibheap_t heap) -{ - while (heap->min != NULL) - free (fibheap_extr_min_node (heap)); - - free (heap); -} - -/* Determine if HEAP is empty. */ -int -fibheap_empty (fibheap_t heap) -{ - return heap->nodes == 0; -} - -/* Extract the minimum node of the heap. */ -static fibnode_t -fibheap_extr_min_node (fibheap_t heap) -{ - fibnode_t ret = heap->min; - fibnode_t x, y, orig; - - /* Attach the child list of the minimum node to the root list of the heap. - If there is no child list, we don't do squat. */ - for (x = ret->child, orig = NULL; x != orig && x != NULL; x = y) - { - if (orig == NULL) - orig = x; - y = x->right; - x->parent = NULL; - fibheap_ins_root (heap, x); - } - - /* Remove the old root. */ - fibheap_rem_root (heap, ret); - heap->nodes--; - - /* If we are left with no nodes, then the min is NULL. */ - if (heap->nodes == 0) - heap->min = NULL; - else - { - /* Otherwise, consolidate to find new minimum, as well as do the reorg - work that needs to be done. */ - heap->min = ret->right; - fibheap_consolidate (heap); - } - - return ret; -} - -/* Insert NODE into the root list of HEAP. */ -static void -fibheap_ins_root (fibheap_t heap, fibnode_t node) -{ - /* If the heap is currently empty, the new node becomes the singleton - circular root list. */ - if (heap->root == NULL) - { - heap->root = node; - node->left = node; - node->right = node; - return; - } - - /* Otherwise, insert it in the circular root list between the root - and it's right node. */ - fibnode_insert_after (heap->root, node); -} - -/* Remove NODE from the rootlist of HEAP. */ -static void -fibheap_rem_root (fibheap_t heap, fibnode_t node) -{ - if (node->left == node) - heap->root = NULL; - else - heap->root = fibnode_remove (node); -} - -/* Consolidate the heap. */ -static void -fibheap_consolidate (fibheap_t heap) -{ - fibnode_t a[1 + 8 * sizeof (long)]; - fibnode_t w; - fibnode_t y; - fibnode_t x; - int i; - int d; - int D; - - D = 1 + 8 * sizeof (long); - - memset (a, 0, sizeof (fibnode_t) * D); - - while ((w = heap->root) != NULL) - { - x = w; - fibheap_rem_root (heap, w); - d = x->degree; - while (a[d] != NULL) - { - y = a[d]; - if (fibheap_compare (heap, x, y) > 0) - { - fibnode_t temp; - temp = x; - x = y; - y = temp; - } - fibheap_link (heap, y, x); - a[d] = NULL; - d++; - } - a[d] = x; - } - heap->min = NULL; - for (i = 0; i < D; i++) - if (a[i] != NULL) - { - fibheap_ins_root (heap, a[i]); - if (heap->min == NULL || fibheap_compare (heap, a[i], heap->min) < 0) - heap->min = a[i]; - } -} - -/* Make NODE a child of PARENT. */ -static void -fibheap_link (fibheap_t heap ATTRIBUTE_UNUSED, - fibnode_t node, fibnode_t parent) -{ - if (parent->child == NULL) - parent->child = node; - else - fibnode_insert_before (parent->child, node); - node->parent = parent; - parent->degree++; - node->mark = 0; -} - -/* Remove NODE from PARENT's child list. */ -static void -fibheap_cut (fibheap_t heap, fibnode_t node, fibnode_t parent) -{ - fibnode_remove (node); - parent->degree--; - fibheap_ins_root (heap, node); - node->parent = NULL; - node->mark = 0; -} - -static void -fibheap_cascading_cut (fibheap_t heap, fibnode_t y) -{ - fibnode_t z; - - while ((z = y->parent) != NULL) - { - if (y->mark == 0) - { - y->mark = 1; - return; - } - else - { - fibheap_cut (heap, y, z); - y = z; - } - } -} - -static void -fibnode_insert_after (fibnode_t a, fibnode_t b) -{ - if (a == a->right) - { - a->right = b; - a->left = b; - b->right = a; - b->left = a; - } - else - { - b->right = a->right; - a->right->left = b; - a->right = b; - b->left = a; - } -} - -static fibnode_t -fibnode_remove (fibnode_t node) -{ - fibnode_t ret; - - if (node == node->left) - ret = NULL; - else - ret = node->left; - - if (node->parent != NULL && node->parent->child == node) - node->parent->child = ret; - - node->right->left = node->left; - node->left->right = node->right; - - node->parent = NULL; - node->left = node; - node->right = node; - - return ret; -} diff --git a/libiberty/floatformat.c b/libiberty/floatformat.c deleted file mode 100644 index 0bbb8ed9889..00000000000 --- a/libiberty/floatformat.c +++ /dev/null @@ -1,642 +0,0 @@ -/* IEEE floating point support routines, for GDB, the GNU Debugger. - Copyright 1991, 1994, 1999, 2000, 2003, 2005, 2006 - Free Software Foundation, Inc. - -This file is part of GDB. - -This program 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* This is needed to pick up the NAN macro on some systems. */ -#define _GNU_SOURCE - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#ifdef HAVE_STRING_H -#include -#endif - -/* On some platforms, provides DBL_QNAN. */ -#ifdef STDC_HEADERS -#include -#endif - -#include "ansidecl.h" -#include "libiberty.h" -#include "floatformat.h" - -#ifndef INFINITY -#ifdef HUGE_VAL -#define INFINITY HUGE_VAL -#else -#define INFINITY (1.0 / 0.0) -#endif -#endif - -#ifndef NAN -#ifdef DBL_QNAN -#define NAN DBL_QNAN -#else -#define NAN (0.0 / 0.0) -#endif -#endif - -static unsigned long get_field (const unsigned char *, - enum floatformat_byteorders, - unsigned int, - unsigned int, - unsigned int); -static int floatformat_always_valid (const struct floatformat *fmt, - const void *from); - -static int -floatformat_always_valid (const struct floatformat *fmt ATTRIBUTE_UNUSED, - const void *from ATTRIBUTE_UNUSED) -{ - return 1; -} - -/* The odds that CHAR_BIT will be anything but 8 are low enough that I'm not - going to bother with trying to muck around with whether it is defined in - a system header, what we do if not, etc. */ -#define FLOATFORMAT_CHAR_BIT 8 - -/* floatformats for IEEE single and double, big and little endian. */ -const struct floatformat floatformat_ieee_single_big = -{ - floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23, - floatformat_intbit_no, - "floatformat_ieee_single_big", - floatformat_always_valid -}; -const struct floatformat floatformat_ieee_single_little = -{ - floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23, - floatformat_intbit_no, - "floatformat_ieee_single_little", - floatformat_always_valid -}; -const struct floatformat floatformat_ieee_double_big = -{ - floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52, - floatformat_intbit_no, - "floatformat_ieee_double_big", - floatformat_always_valid -}; -const struct floatformat floatformat_ieee_double_little = -{ - floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52, - floatformat_intbit_no, - "floatformat_ieee_double_little", - floatformat_always_valid -}; - -/* floatformat for IEEE double, little endian byte order, with big endian word - ordering, as on the ARM. */ - -const struct floatformat floatformat_ieee_double_littlebyte_bigword = -{ - floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52, - floatformat_intbit_no, - "floatformat_ieee_double_littlebyte_bigword", - floatformat_always_valid -}; - -/* floatformat for VAX. Not quite IEEE, but close enough. */ - -const struct floatformat floatformat_vax_f = -{ - floatformat_vax, 32, 0, 1, 8, 129, 0, 9, 23, - floatformat_intbit_no, - "floatformat_vax_f", - floatformat_always_valid -}; -const struct floatformat floatformat_vax_d = -{ - floatformat_vax, 64, 0, 1, 8, 129, 0, 9, 55, - floatformat_intbit_no, - "floatformat_vax_d", - floatformat_always_valid -}; -const struct floatformat floatformat_vax_g = -{ - floatformat_vax, 64, 0, 1, 11, 1025, 0, 12, 52, - floatformat_intbit_no, - "floatformat_vax_g", - floatformat_always_valid -}; - -static int floatformat_i387_ext_is_valid (const struct floatformat *fmt, - const void *from); - -static int -floatformat_i387_ext_is_valid (const struct floatformat *fmt, const void *from) -{ - /* In the i387 double-extended format, if the exponent is all ones, - then the integer bit must be set. If the exponent is neither 0 - nor ~0, the intbit must also be set. Only if the exponent is - zero can it be zero, and then it must be zero. */ - unsigned long exponent, int_bit; - const unsigned char *ufrom = (const unsigned char *) from; - - exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize, - fmt->exp_start, fmt->exp_len); - int_bit = get_field (ufrom, fmt->byteorder, fmt->totalsize, - fmt->man_start, 1); - - if ((exponent == 0) != (int_bit == 0)) - return 0; - else - return 1; -} - -const struct floatformat floatformat_i387_ext = -{ - floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64, - floatformat_intbit_yes, - "floatformat_i387_ext", - floatformat_i387_ext_is_valid -}; -const struct floatformat floatformat_m68881_ext = -{ - /* Note that the bits from 16 to 31 are unused. */ - floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64, - floatformat_intbit_yes, - "floatformat_m68881_ext", - floatformat_always_valid -}; -const struct floatformat floatformat_i960_ext = -{ - /* Note that the bits from 0 to 15 are unused. */ - floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64, - floatformat_intbit_yes, - "floatformat_i960_ext", - floatformat_always_valid -}; -const struct floatformat floatformat_m88110_ext = -{ - floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64, - floatformat_intbit_yes, - "floatformat_m88110_ext", - floatformat_always_valid -}; -const struct floatformat floatformat_m88110_harris_ext = -{ - /* Harris uses raw format 128 bytes long, but the number is just an ieee - double, and the last 64 bits are wasted. */ - floatformat_big,128, 0, 1, 11, 0x3ff, 0x7ff, 12, 52, - floatformat_intbit_no, - "floatformat_m88110_ext_harris", - floatformat_always_valid -}; -const struct floatformat floatformat_arm_ext_big = -{ - /* Bits 1 to 16 are unused. */ - floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64, - floatformat_intbit_yes, - "floatformat_arm_ext_big", - floatformat_always_valid -}; -const struct floatformat floatformat_arm_ext_littlebyte_bigword = -{ - /* Bits 1 to 16 are unused. */ - floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64, - floatformat_intbit_yes, - "floatformat_arm_ext_littlebyte_bigword", - floatformat_always_valid -}; -const struct floatformat floatformat_ia64_spill_big = -{ - floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64, - floatformat_intbit_yes, - "floatformat_ia64_spill_big", - floatformat_always_valid -}; -const struct floatformat floatformat_ia64_spill_little = -{ - floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64, - floatformat_intbit_yes, - "floatformat_ia64_spill_little", - floatformat_always_valid -}; -const struct floatformat floatformat_ia64_quad_big = -{ - floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112, - floatformat_intbit_no, - "floatformat_ia64_quad_big", - floatformat_always_valid -}; -const struct floatformat floatformat_ia64_quad_little = -{ - floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112, - floatformat_intbit_no, - "floatformat_ia64_quad_little", - floatformat_always_valid -}; - -/* Extract a field which starts at START and is LEN bits long. DATA and - TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */ -static unsigned long -get_field (const unsigned char *data, enum floatformat_byteorders order, - unsigned int total_len, unsigned int start, unsigned int len) -{ - unsigned long result; - unsigned int cur_byte; - int cur_bitshift; - - /* Start at the least significant part of the field. */ - cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT; - if (order == floatformat_little) - cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1; - cur_bitshift = - ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT; - result = *(data + cur_byte) >> (-cur_bitshift); - cur_bitshift += FLOATFORMAT_CHAR_BIT; - if (order == floatformat_little) - ++cur_byte; - else - --cur_byte; - - /* Move towards the most significant part of the field. */ - while ((unsigned int) cur_bitshift < len) - { - if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT) - /* This is the last byte; zero out the bits which are not part of - this field. */ - result |= - (*(data + cur_byte) & ((1 << (len - cur_bitshift)) - 1)) - << cur_bitshift; - else - result |= *(data + cur_byte) << cur_bitshift; - cur_bitshift += FLOATFORMAT_CHAR_BIT; - if (order == floatformat_little) - ++cur_byte; - else - --cur_byte; - } - return result; -} - -#ifndef min -#define min(a, b) ((a) < (b) ? (a) : (b)) -#endif - -/* Convert from FMT to a double. - FROM is the address of the extended float. - Store the double in *TO. */ - -void -floatformat_to_double (const struct floatformat *fmt, - const void *from, double *to) -{ - const unsigned char *ufrom = (const unsigned char *) from; - double dto; - long exponent; - unsigned long mant; - unsigned int mant_bits, mant_off; - int mant_bits_left; - int special_exponent; /* It's a NaN, denorm or zero */ - - exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize, - fmt->exp_start, fmt->exp_len); - - /* If the exponent indicates a NaN, we don't have information to - decide what to do. So we handle it like IEEE, except that we - don't try to preserve the type of NaN. FIXME. */ - if ((unsigned long) exponent == fmt->exp_nan) - { - int nan; - - mant_off = fmt->man_start; - mant_bits_left = fmt->man_len; - nan = 0; - while (mant_bits_left > 0) - { - mant_bits = min (mant_bits_left, 32); - - if (get_field (ufrom, fmt->byteorder, fmt->totalsize, - mant_off, mant_bits) != 0) - { - /* This is a NaN. */ - nan = 1; - break; - } - - mant_off += mant_bits; - mant_bits_left -= mant_bits; - } - - /* On certain systems (such as GNU/Linux), the use of the - INFINITY macro below may generate a warning that can not be - silenced due to a bug in GCC (PR preprocessor/11931). The - preprocessor fails to recognise the __extension__ keyword in - conjunction with the GNU/C99 extension for hexadecimal - floating point constants and will issue a warning when - compiling with -pedantic. */ - if (nan) - dto = NAN; - else - dto = INFINITY; - - if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1)) - dto = -dto; - - *to = dto; - - return; - } - - mant_bits_left = fmt->man_len; - mant_off = fmt->man_start; - dto = 0.0; - - special_exponent = exponent == 0 || (unsigned long) exponent == fmt->exp_nan; - - /* Don't bias zero's, denorms or NaNs. */ - if (!special_exponent) - exponent -= fmt->exp_bias; - - /* Build the result algebraically. Might go infinite, underflow, etc; - who cares. */ - - /* If this format uses a hidden bit, explicitly add it in now. Otherwise, - increment the exponent by one to account for the integer bit. */ - - if (!special_exponent) - { - if (fmt->intbit == floatformat_intbit_no) - dto = ldexp (1.0, exponent); - else - exponent++; - } - - while (mant_bits_left > 0) - { - mant_bits = min (mant_bits_left, 32); - - mant = get_field (ufrom, fmt->byteorder, fmt->totalsize, - mant_off, mant_bits); - - /* Handle denormalized numbers. FIXME: What should we do for - non-IEEE formats? */ - if (special_exponent && exponent == 0 && mant != 0) - dto += ldexp ((double)mant, - (- fmt->exp_bias - - mant_bits - - (mant_off - fmt->man_start) - + 1)); - else - dto += ldexp ((double)mant, exponent - mant_bits); - if (exponent != 0) - exponent -= mant_bits; - mant_off += mant_bits; - mant_bits_left -= mant_bits; - } - - /* Negate it if negative. */ - if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1)) - dto = -dto; - *to = dto; -} - -static void put_field (unsigned char *, enum floatformat_byteorders, - unsigned int, - unsigned int, - unsigned int, - unsigned long); - -/* Set a field which starts at START and is LEN bits long. DATA and - TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */ -static void -put_field (unsigned char *data, enum floatformat_byteorders order, - unsigned int total_len, unsigned int start, unsigned int len, - unsigned long stuff_to_put) -{ - unsigned int cur_byte; - int cur_bitshift; - - /* Start at the least significant part of the field. */ - cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT; - if (order == floatformat_little) - cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1; - cur_bitshift = - ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT; - *(data + cur_byte) &= - ~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1) << (-cur_bitshift)); - *(data + cur_byte) |= - (stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift); - cur_bitshift += FLOATFORMAT_CHAR_BIT; - if (order == floatformat_little) - ++cur_byte; - else - --cur_byte; - - /* Move towards the most significant part of the field. */ - while ((unsigned int) cur_bitshift < len) - { - if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT) - { - /* This is the last byte. */ - *(data + cur_byte) &= - ~((1 << (len - cur_bitshift)) - 1); - *(data + cur_byte) |= (stuff_to_put >> cur_bitshift); - } - else - *(data + cur_byte) = ((stuff_to_put >> cur_bitshift) - & ((1 << FLOATFORMAT_CHAR_BIT) - 1)); - cur_bitshift += FLOATFORMAT_CHAR_BIT; - if (order == floatformat_little) - ++cur_byte; - else - --cur_byte; - } -} - -/* The converse: convert the double *FROM to an extended float - and store where TO points. Neither FROM nor TO have any alignment - restrictions. */ - -void -floatformat_from_double (const struct floatformat *fmt, - const double *from, void *to) -{ - double dfrom; - int exponent; - double mant; - unsigned int mant_bits, mant_off; - int mant_bits_left; - unsigned char *uto = (unsigned char *) to; - - dfrom = *from; - memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT); - - /* If negative, set the sign bit. */ - if (dfrom < 0) - { - put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1); - dfrom = -dfrom; - } - - if (dfrom == 0) - { - /* 0.0. */ - return; - } - - if (dfrom != dfrom) - { - /* NaN. */ - put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, - fmt->exp_len, fmt->exp_nan); - /* Be sure it's not infinity, but NaN value is irrelevant. */ - put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start, - 32, 1); - return; - } - - if (dfrom + dfrom == dfrom) - { - /* This can only happen for an infinite value (or zero, which we - already handled above). */ - put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, - fmt->exp_len, fmt->exp_nan); - return; - } - - mant = frexp (dfrom, &exponent); - if (exponent + fmt->exp_bias - 1 > 0) - put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, - fmt->exp_len, exponent + fmt->exp_bias - 1); - else - { - /* Handle a denormalized number. FIXME: What should we do for - non-IEEE formats? */ - put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, - fmt->exp_len, 0); - mant = ldexp (mant, exponent + fmt->exp_bias - 1); - } - - mant_bits_left = fmt->man_len; - mant_off = fmt->man_start; - while (mant_bits_left > 0) - { - unsigned long mant_long; - mant_bits = mant_bits_left < 32 ? mant_bits_left : 32; - - mant *= 4294967296.0; - mant_long = (unsigned long)mant; - mant -= mant_long; - - /* If the integer bit is implicit, and we are not creating a - denormalized number, then we need to discard it. */ - if ((unsigned int) mant_bits_left == fmt->man_len - && fmt->intbit == floatformat_intbit_no - && exponent + fmt->exp_bias - 1 > 0) - { - mant_long &= 0x7fffffff; - mant_bits -= 1; - } - else if (mant_bits < 32) - { - /* The bits we want are in the most significant MANT_BITS bits of - mant_long. Move them to the least significant. */ - mant_long >>= 32 - mant_bits; - } - - put_field (uto, fmt->byteorder, fmt->totalsize, - mant_off, mant_bits, mant_long); - mant_off += mant_bits; - mant_bits_left -= mant_bits; - } -} - -/* Return non-zero iff the data at FROM is a valid number in format FMT. */ - -int -floatformat_is_valid (const struct floatformat *fmt, const void *from) -{ - return fmt->is_valid (fmt, from); -} - - -#ifdef IEEE_DEBUG - -#include - -/* This is to be run on a host which uses IEEE floating point. */ - -void -ieee_test (double n) -{ - double result; - - floatformat_to_double (&floatformat_ieee_double_little, &n, &result); - if ((n != result && (! isnan (n) || ! isnan (result))) - || (n < 0 && result >= 0) - || (n >= 0 && result < 0)) - printf ("Differ(to): %.20g -> %.20g\n", n, result); - - floatformat_from_double (&floatformat_ieee_double_little, &n, &result); - if ((n != result && (! isnan (n) || ! isnan (result))) - || (n < 0 && result >= 0) - || (n >= 0 && result < 0)) - printf ("Differ(from): %.20g -> %.20g\n", n, result); - -#if 0 - { - char exten[16]; - - floatformat_from_double (&floatformat_m68881_ext, &n, exten); - floatformat_to_double (&floatformat_m68881_ext, exten, &result); - if (n != result) - printf ("Differ(to+from): %.20g -> %.20g\n", n, result); - } -#endif - -#if IEEE_DEBUG > 1 - /* This is to be run on a host which uses 68881 format. */ - { - long double ex = *(long double *)exten; - if (ex != n) - printf ("Differ(from vs. extended): %.20g\n", n); - } -#endif -} - -int -main (void) -{ - ieee_test (0.0); - ieee_test (0.5); - ieee_test (256.0); - ieee_test (0.12345); - ieee_test (234235.78907234); - ieee_test (-512.0); - ieee_test (-0.004321); - ieee_test (1.2E-70); - ieee_test (1.2E-316); - ieee_test (4.9406564584124654E-324); - ieee_test (- 4.9406564584124654E-324); - ieee_test (- 0.0); - ieee_test (- INFINITY); - ieee_test (- NAN); - ieee_test (INFINITY); - ieee_test (NAN); - return 0; -} -#endif diff --git a/libiberty/fnmatch.c b/libiberty/fnmatch.c deleted file mode 100644 index fc897be2c6f..00000000000 --- a/libiberty/fnmatch.c +++ /dev/null @@ -1,220 +0,0 @@ -/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. - -NOTE: This source is derived from an old version taken from the GNU C -Library (glibc). - -This program 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, 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, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -#if defined (CONFIG_BROKETS) -/* We use instead of "config.h" so that a compilation - using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h - (which it would do because it found this file in $srcdir). */ -#include -#else -#include "config.h" -#endif -#endif - - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -/* This code to undef const added in libiberty. */ -#ifndef __STDC__ -/* This is a separate conditional since some stdc systems - reject `defined (const)'. */ -#ifndef const -#define const -#endif -#endif - -#include -#include -#include - -/* Comment out all this code if we are using the GNU C Library, and are not - actually compiling the library itself. This code is part of the GNU C - Library, but also included in many other GNU distributions. Compiling - and linking in this code is a waste when using the GNU C library - (especially if it is a shared library). Rather than having every GNU - program understand `configure --with-gnu-libc' and omit the object files, - it is simpler to just do this in the source for each such file. */ - -#if defined (_LIBC) || !defined (__GNU_LIBRARY__) - - -#if !defined(__GNU_LIBRARY__) && !defined(STDC_HEADERS) -extern int errno; -#endif - -/* Match STRING against the filename pattern PATTERN, returning zero if - it matches, nonzero if not. */ -int -fnmatch (const char *pattern, const char *string, int flags) -{ - register const char *p = pattern, *n = string; - register unsigned char c; - -#define FOLD(c) ((flags & FNM_CASEFOLD) ? TOLOWER (c) : (c)) - - while ((c = *p++) != '\0') - { - c = FOLD (c); - - switch (c) - { - case '?': - if (*n == '\0') - return FNM_NOMATCH; - else if ((flags & FNM_FILE_NAME) && *n == '/') - return FNM_NOMATCH; - else if ((flags & FNM_PERIOD) && *n == '.' && - (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) - return FNM_NOMATCH; - break; - - case '\\': - if (!(flags & FNM_NOESCAPE)) - { - c = *p++; - c = FOLD (c); - } - if (FOLD ((unsigned char)*n) != c) - return FNM_NOMATCH; - break; - - case '*': - if ((flags & FNM_PERIOD) && *n == '.' && - (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) - return FNM_NOMATCH; - - for (c = *p++; c == '?' || c == '*'; c = *p++, ++n) - if (((flags & FNM_FILE_NAME) && *n == '/') || - (c == '?' && *n == '\0')) - return FNM_NOMATCH; - - if (c == '\0') - return 0; - - { - unsigned char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c; - c1 = FOLD (c1); - for (--p; *n != '\0'; ++n) - if ((c == '[' || FOLD ((unsigned char)*n) == c1) && - fnmatch (p, n, flags & ~FNM_PERIOD) == 0) - return 0; - return FNM_NOMATCH; - } - - case '[': - { - /* Nonzero if the sense of the character class is inverted. */ - register int negate; - - if (*n == '\0') - return FNM_NOMATCH; - - if ((flags & FNM_PERIOD) && *n == '.' && - (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) - return FNM_NOMATCH; - - negate = (*p == '!' || *p == '^'); - if (negate) - ++p; - - c = *p++; - for (;;) - { - register unsigned char cstart = c, cend = c; - - if (!(flags & FNM_NOESCAPE) && c == '\\') - cstart = cend = *p++; - - cstart = cend = FOLD (cstart); - - if (c == '\0') - /* [ (unterminated) loses. */ - return FNM_NOMATCH; - - c = *p++; - c = FOLD (c); - - if ((flags & FNM_FILE_NAME) && c == '/') - /* [/] can never match. */ - return FNM_NOMATCH; - - if (c == '-' && *p != ']') - { - cend = *p++; - if (!(flags & FNM_NOESCAPE) && cend == '\\') - cend = *p++; - if (cend == '\0') - return FNM_NOMATCH; - cend = FOLD (cend); - - c = *p++; - } - - if (FOLD ((unsigned char)*n) >= cstart - && FOLD ((unsigned char)*n) <= cend) - goto matched; - - if (c == ']') - break; - } - if (!negate) - return FNM_NOMATCH; - break; - - matched:; - /* Skip the rest of the [...] that already matched. */ - while (c != ']') - { - if (c == '\0') - /* [... (unterminated) loses. */ - return FNM_NOMATCH; - - c = *p++; - if (!(flags & FNM_NOESCAPE) && c == '\\') - /* XXX 1003.2d11 is unclear if this is right. */ - ++p; - } - if (negate) - return FNM_NOMATCH; - } - break; - - default: - if (c != FOLD ((unsigned char)*n)) - return FNM_NOMATCH; - } - - ++n; - } - - if (*n == '\0') - return 0; - - if ((flags & FNM_LEADING_DIR) && *n == '/') - /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ - return 0; - - return FNM_NOMATCH; -} - -#endif /* _LIBC or not __GNU_LIBRARY__. */ diff --git a/libiberty/fnmatch.txh b/libiberty/fnmatch.txh deleted file mode 100644 index 92e11bcb388..00000000000 --- a/libiberty/fnmatch.txh +++ /dev/null @@ -1,48 +0,0 @@ -@deftypefn Replacement int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags}) - -Matches @var{string} against @var{pattern}, returning zero if it -matches, @code{FNM_NOMATCH} if not. @var{pattern} may contain the -wildcards @code{?} to match any one character, @code{*} to match any -zero or more characters, or a set of alternate characters in square -brackets, like @samp{[a-gt8]}, which match one character (@code{a} -through @code{g}, or @code{t}, or @code{8}, in this example) if that one -character is in the set. A set may be inverted (i.e., match anything -except what's in the set) by giving @code{^} or @code{!} as the first -character in the set. To include those characters in the set, list them -as anything other than the first character of the set. To include a -dash in the set, list it last in the set. A backslash character makes -the following character not special, so for example you could match -against a literal asterisk with @samp{\*}. To match a literal -backslash, use @samp{\\}. - -@code{flags} controls various aspects of the matching process, and is a -boolean OR of zero or more of the following values (defined in -@code{}): - -@table @code - -@item FNM_PATHNAME -@itemx FNM_FILE_NAME -@var{string} is assumed to be a path name. No wildcard will ever match -@code{/}. - -@item FNM_NOESCAPE -Do not interpret backslashes as quoting the following special character. - -@item FNM_PERIOD -A leading period (at the beginning of @var{string}, or if -@code{FNM_PATHNAME} after a slash) is not matched by @code{*} or -@code{?} but must be matched explicitly. - -@item FNM_LEADING_DIR -Means that @var{string} also matches @var{pattern} if some initial part -of @var{string} matches, and is followed by @code{/} and zero or more -characters. For example, @samp{foo*} would match either @samp{foobar} -or @samp{foobar/grill}. - -@item FNM_CASEFOLD -Ignores case when performing the comparison. - -@end table - -@end deftypefn diff --git a/libiberty/fopen_unlocked.c b/libiberty/fopen_unlocked.c deleted file mode 100644 index 3c3cefed76b..00000000000 --- a/libiberty/fopen_unlocked.c +++ /dev/null @@ -1,126 +0,0 @@ -/* Implement fopen_unlocked and related functions. - Copyright (C) 2005 Free Software Foundation, Inc. - Written by Kaveh R. Ghazi . - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* - -@deftypefn Extension void unlock_stream (FILE * @var{stream}) - -If the OS supports it, ensure that the supplied stream is setup to -avoid any multi-threaded locking. Otherwise leave the @code{FILE} -pointer unchanged. If the @var{stream} is @code{NULL} do nothing. - -@end deftypefn - -@deftypefn Extension void unlock_std_streams (void) - -If the OS supports it, ensure that the standard I/O streams, -@code{stdin}, @code{stdout} and @code{stderr} are setup to avoid any -multi-threaded locking. Otherwise do nothing. - -@end deftypefn - -@deftypefn Extension {FILE *} fopen_unlocked (const char *@var{path}, const char * @var{mode}) - -Opens and returns a @code{FILE} pointer via @code{fopen}. If the -operating system supports it, ensure that the stream is setup to avoid -any multi-threaded locking. Otherwise return the @code{FILE} pointer -unchanged. - -@end deftypefn - -@deftypefn Extension {FILE *} fdopen_unlocked (int @var{fildes}, const char * @var{mode}) - -Opens and returns a @code{FILE} pointer via @code{fdopen}. If the -operating system supports it, ensure that the stream is setup to avoid -any multi-threaded locking. Otherwise return the @code{FILE} pointer -unchanged. - -@end deftypefn - -@deftypefn Extension {FILE *} freopen_unlocked (const char * @var{path}, const char * @var{mode}, FILE * @var{stream}) - -Opens and returns a @code{FILE} pointer via @code{freopen}. If the -operating system supports it, ensure that the stream is setup to avoid -any multi-threaded locking. Otherwise return the @code{FILE} pointer -unchanged. - -@end deftypefn - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include -#ifdef HAVE_STDIO_EXT_H -#include -#endif - -#include "libiberty.h" - -/* This is an inline helper function to consolidate attempts to unlock - a stream. */ - -static inline void -unlock_1 (FILE *const fp ATTRIBUTE_UNUSED) -{ -#if defined(HAVE___FSETLOCKING) && defined(FSETLOCKING_BYCALLER) - if (fp) - __fsetlocking (fp, FSETLOCKING_BYCALLER); -#endif -} - -void -unlock_stream (FILE *fp) -{ - unlock_1 (fp); -} - -void -unlock_std_streams (void) -{ - unlock_1 (stdin); - unlock_1 (stdout); - unlock_1 (stderr); -} - -FILE * -fopen_unlocked (const char *path, const char *mode) -{ - FILE *const fp = fopen (path, mode); - unlock_1 (fp); - return fp; -} - -FILE * -fdopen_unlocked (int fildes, const char *mode) -{ - FILE *const fp = fdopen (fildes, mode); - unlock_1 (fp); - return fp; -} - -FILE * -freopen_unlocked (const char *path, const char *mode, FILE *stream) -{ - FILE *const fp = freopen (path, mode, stream); - unlock_1 (fp); - return fp; -} diff --git a/libiberty/functions.texi b/libiberty/functions.texi deleted file mode 100644 index 68c064817db..00000000000 --- a/libiberty/functions.texi +++ /dev/null @@ -1,1534 +0,0 @@ -@c Automatically generated from *.c and others (the comments before -@c each entry tell you which file and where in that file). DO NOT EDIT! -@c Edit the *.c files, configure with --enable-maintainer-mode, -@c and let gather-docs build you a new copy. - -@c safe-ctype.c:25 -@defvr Extension HOST_CHARSET -This macro indicates the basic character set and encoding used by the -host: more precisely, the encoding used for character constants in -preprocessor @samp{#if} statements (the C "execution character set"). -It is defined by @file{safe-ctype.h}, and will be an integer constant -with one of the following values: - -@ftable @code -@item HOST_CHARSET_UNKNOWN -The host character set is unknown - that is, not one of the next two -possibilities. - -@item HOST_CHARSET_ASCII -The host character set is ASCII. - -@item HOST_CHARSET_EBCDIC -The host character set is some variant of EBCDIC. (Only one of the -nineteen EBCDIC varying characters is tested; exercise caution.) -@end ftable -@end defvr - -@c alloca.c:26 -@deftypefn Replacement void* alloca (size_t @var{size}) - -This function allocates memory which will be automatically reclaimed -after the procedure exits. The @libib{} implementation does not free -the memory immediately but will do so eventually during subsequent -calls to this function. Memory is allocated using @code{xmalloc} under -normal circumstances. - -The header file @file{alloca-conf.h} can be used in conjunction with the -GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make -available this function. The @code{AC_FUNC_ALLOCA} test requires that -client code use a block of preprocessor code to be safe (see the Autoconf -manual for more); this header incorporates that logic and more, including -the possibility of a GCC built-in function. - -@end deftypefn - -@c asprintf.c:32 -@deftypefn Extension int asprintf (char **@var{resptr}, const char *@var{format}, ...) - -Like @code{sprintf}, but instead of passing a pointer to a buffer, you -pass a pointer to a pointer. This function will compute the size of -the buffer needed, allocate memory with @code{malloc}, and store a -pointer to the allocated memory in @code{*@var{resptr}}. The value -returned is the same as @code{sprintf} would return. If memory could -not be allocated, minus one is returned and @code{NULL} is stored in -@code{*@var{resptr}}. - -@end deftypefn - -@c atexit.c:6 -@deftypefn Supplemental int atexit (void (*@var{f})()) - -Causes function @var{f} to be called at exit. Returns 0. - -@end deftypefn - -@c basename.c:6 -@deftypefn Supplemental char* basename (const char *@var{name}) - -Returns a pointer to the last component of pathname @var{name}. -Behavior is undefined if the pathname ends in a directory separator. - -@end deftypefn - -@c bcmp.c:6 -@deftypefn Supplemental int bcmp (char *@var{x}, char *@var{y}, int @var{count}) - -Compares the first @var{count} bytes of two areas of memory. Returns -zero if they are the same, nonzero otherwise. Returns zero if -@var{count} is zero. A nonzero result only indicates a difference, -it does not indicate any sorting order (say, by having a positive -result mean @var{x} sorts before @var{y}). - -@end deftypefn - -@c bcopy.c:3 -@deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length}) - -Copies @var{length} bytes from memory region @var{in} to region -@var{out}. The use of @code{bcopy} is deprecated in new programs. - -@end deftypefn - -@c bsearch.c:33 -@deftypefn Supplemental void* bsearch (const void *@var{key}, const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, int (*@var{compar})(const void *, const void *)) - -Performs a search over an array of @var{nmemb} elements pointed to by -@var{base} for a member that matches the object pointed to by @var{key}. -The size of each member is specified by @var{size}. The array contents -should be sorted in ascending order according to the @var{compar} -comparison function. This routine should take two arguments pointing to -the @var{key} and to an array member, in that order, and should return an -integer less than, equal to, or greater than zero if the @var{key} object -is respectively less than, matching, or greater than the array member. - -@end deftypefn - -@c argv.c:124 -@deftypefn Extension char** buildargv (char *@var{sp}) - -Given a pointer to a string, parse the string extracting fields -separated by whitespace and optionally enclosed within either single -or double quotes (which are stripped off), and build a vector of -pointers to copies of the string for each field. The input string -remains unchanged. The last element of the vector is followed by a -@code{NULL} element. - -All of the memory for the pointer array and copies of the string -is obtained from @code{malloc}. All of the memory can be returned to the -system with the single function call @code{freeargv}, which takes the -returned result of @code{buildargv}, as it's argument. - -Returns a pointer to the argument vector if successful. Returns -@code{NULL} if @var{sp} is @code{NULL} or if there is insufficient -memory to complete building the argument vector. - -If the input is a null string (as opposed to a @code{NULL} pointer), -then buildarg returns an argument vector that has one arg, a null -string. - -@end deftypefn - -@c bzero.c:6 -@deftypefn Supplemental void bzero (char *@var{mem}, int @var{count}) - -Zeros @var{count} bytes starting at @var{mem}. Use of this function -is deprecated in favor of @code{memset}. - -@end deftypefn - -@c calloc.c:6 -@deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize}) - -Uses @code{malloc} to allocate storage for @var{nelem} objects of -@var{elsize} bytes each, then zeros the memory. - -@end deftypefn - -@c choose-temp.c:42 -@deftypefn Extension char* choose_temp_base (void) - -Return a prefix for temporary file names or @code{NULL} if unable to -find one. The current directory is chosen if all else fails so the -program is exited if a temporary directory can't be found (@code{mktemp} -fails). The buffer for the result is obtained with @code{xmalloc}. - -This function is provided for backwards compatability only. Its use is -not recommended. - -@end deftypefn - -@c make-temp-file.c:87 -@deftypefn Replacement char* choose_tmpdir () - -Returns a pointer to a directory path suitable for creating temporary -files in. - -@end deftypefn - -@c clock.c:27 -@deftypefn Supplemental long clock (void) - -Returns an approximation of the CPU time used by the process as a -@code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the -number of seconds used. - -@end deftypefn - -@c concat.c:24 -@deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @dots{}, @code{NULL}) - -Concatenate zero or more of strings and return the result in freshly -@code{xmalloc}ed memory. Returns @code{NULL} if insufficient memory is -available. The argument list is terminated by the first @code{NULL} -pointer encountered. Pointers to empty strings are ignored. - -@end deftypefn - -@c argv.c:52 -@deftypefn Extension char** dupargv (char **@var{vector}) - -Duplicate an argument vector. Simply scans through @var{vector}, -duplicating each argument until the terminating @code{NULL} is found. -Returns a pointer to the argument vector if successful. Returns -@code{NULL} if there is insufficient memory to complete building the -argument vector. - -@end deftypefn - -@c strerror.c:567 -@deftypefn Extension int errno_max (void) - -Returns the maximum @code{errno} value for which a corresponding -symbolic name or message is available. Note that in the case where we -use the @code{sys_errlist} supplied by the system, it is possible for -there to be more symbolic names than messages, or vice versa. In -fact, the manual page for @code{perror(3C)} explicitly warns that one -should check the size of the table (@code{sys_nerr}) before indexing -it, since new error codes may be added to the system before they are -added to the table. Thus @code{sys_nerr} might be smaller than value -implied by the largest @code{errno} value defined in @code{}. - -We return the maximum value that can be used to obtain a meaningful -symbolic name or message. - -@end deftypefn - -@c argv.c:293 -@deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp}) - -The @var{argcp} and @code{argvp} arguments are pointers to the usual -@code{argc} and @code{argv} arguments to @code{main}. This function -looks for arguments that begin with the character @samp{@@}. Any such -arguments are interpreted as ``response files''. The contents of the -response file are interpreted as additional command line options. In -particular, the file is separated into whitespace-separated strings; -each such string is taken as a command-line option. The new options -are inserted in place of the option naming the response file, and -@code{*argcp} and @code{*argvp} will be updated. If the value of -@code{*argvp} is modified by this function, then the new value has -been dynamically allocated and can be deallocated by the caller with -@code{freeargv}. However, most callers will simply call -@code{expandargv} near the beginning of @code{main} and allow the -operating system to free the memory when the program exits. - -@end deftypefn - -@c fdmatch.c:23 -@deftypefn Extension int fdmatch (int @var{fd1}, int @var{fd2}) - -Check to see if two open file descriptors refer to the same file. -This is useful, for example, when we have an open file descriptor for -an unnamed file, and the name of a file that we believe to correspond -to that fd. This can happen when we are exec'd with an already open -file (@code{stdout} for example) or from the SVR4 @file{/proc} calls -that return open file descriptors for mapped address spaces. All we -have to do is open the file by name and check the two file descriptors -for a match, which is done by comparing major and minor device numbers -and inode numbers. - -@end deftypefn - -@c fopen_unlocked.c:48 -@deftypefn Extension {FILE *} fdopen_unlocked (int @var{fildes}, const char * @var{mode}) - -Opens and returns a @code{FILE} pointer via @code{fdopen}. If the -operating system supports it, ensure that the stream is setup to avoid -any multi-threaded locking. Otherwise return the @code{FILE} pointer -unchanged. - -@end deftypefn - -@c ffs.c:3 -@deftypefn Supplemental int ffs (int @var{valu}) - -Find the first (least significant) bit set in @var{valu}. Bits are -numbered from right to left, starting with bit 1 (corresponding to the -value 1). If @var{valu} is zero, zero is returned. - -@end deftypefn - -@c fnmatch.txh:1 -@deftypefn Replacement int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags}) - -Matches @var{string} against @var{pattern}, returning zero if it -matches, @code{FNM_NOMATCH} if not. @var{pattern} may contain the -wildcards @code{?} to match any one character, @code{*} to match any -zero or more characters, or a set of alternate characters in square -brackets, like @samp{[a-gt8]}, which match one character (@code{a} -through @code{g}, or @code{t}, or @code{8}, in this example) if that one -character is in the set. A set may be inverted (i.e., match anything -except what's in the set) by giving @code{^} or @code{!} as the first -character in the set. To include those characters in the set, list them -as anything other than the first character of the set. To include a -dash in the set, list it last in the set. A backslash character makes -the following character not special, so for example you could match -against a literal asterisk with @samp{\*}. To match a literal -backslash, use @samp{\\}. - -@code{flags} controls various aspects of the matching process, and is a -boolean OR of zero or more of the following values (defined in -@code{}): - -@table @code - -@item FNM_PATHNAME -@itemx FNM_FILE_NAME -@var{string} is assumed to be a path name. No wildcard will ever match -@code{/}. - -@item FNM_NOESCAPE -Do not interpret backslashes as quoting the following special character. - -@item FNM_PERIOD -A leading period (at the beginning of @var{string}, or if -@code{FNM_PATHNAME} after a slash) is not matched by @code{*} or -@code{?} but must be matched explicitly. - -@item FNM_LEADING_DIR -Means that @var{string} also matches @var{pattern} if some initial part -of @var{string} matches, and is followed by @code{/} and zero or more -characters. For example, @samp{foo*} would match either @samp{foobar} -or @samp{foobar/grill}. - -@item FNM_CASEFOLD -Ignores case when performing the comparison. - -@end table - -@end deftypefn - -@c fopen_unlocked.c:39 -@deftypefn Extension {FILE *} fopen_unlocked (const char *@var{path}, const char * @var{mode}) - -Opens and returns a @code{FILE} pointer via @code{fopen}. If the -operating system supports it, ensure that the stream is setup to avoid -any multi-threaded locking. Otherwise return the @code{FILE} pointer -unchanged. - -@end deftypefn - -@c argv.c:97 -@deftypefn Extension void freeargv (char **@var{vector}) - -Free an argument vector that was built using @code{buildargv}. Simply -scans through @var{vector}, freeing the memory for each argument until -the terminating @code{NULL} is found, and then frees @var{vector} -itself. - -@end deftypefn - -@c fopen_unlocked.c:57 -@deftypefn Extension {FILE *} freopen_unlocked (const char * @var{path}, const char * @var{mode}, FILE * @var{stream}) - -Opens and returns a @code{FILE} pointer via @code{freopen}. If the -operating system supports it, ensure that the stream is setup to avoid -any multi-threaded locking. Otherwise return the @code{FILE} pointer -unchanged. - -@end deftypefn - -@c getruntime.c:82 -@deftypefn Replacement long get_run_time (void) - -Returns the time used so far, in microseconds. If possible, this is -the time used by this process, else it is the elapsed time since the -process started. - -@end deftypefn - -@c getcwd.c:6 -@deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len}) - -Copy the absolute pathname for the current working directory into -@var{pathname}, which is assumed to point to a buffer of at least -@var{len} bytes, and return a pointer to the buffer. If the current -directory's path doesn't fit in @var{len} characters, the result is -@code{NULL} and @code{errno} is set. If @var{pathname} is a null pointer, -@code{getcwd} will obtain @var{len} bytes of space using -@code{malloc}. - -@end deftypefn - -@c getpagesize.c:5 -@deftypefn Supplemental int getpagesize (void) - -Returns the number of bytes in a page of memory. This is the -granularity of many of the system memory management routines. No -guarantee is made as to whether or not it is the same as the basic -memory management hardware page size. - -@end deftypefn - -@c getpwd.c:5 -@deftypefn Supplemental char* getpwd (void) - -Returns the current working directory. This implementation caches the -result on the assumption that the process will not call @code{chdir} -between calls to @code{getpwd}. - -@end deftypefn - -@c gettimeofday.c:12 -@deftypefn Supplemental int gettimeofday (struct timeval *@var{tp}, void *@var{tz}) - -Writes the current time to @var{tp}. This implementation requires -that @var{tz} be NULL. Returns 0 on success, -1 on failure. - -@end deftypefn - -@c hex.c:33 -@deftypefn Extension void hex_init (void) - -Initializes the array mapping the current character set to -corresponding hex values. This function must be called before any -call to @code{hex_p} or @code{hex_value}. If you fail to call it, a -default ASCII-based table will normally be used on ASCII systems. - -@end deftypefn - -@c hex.c:42 -@deftypefn Extension int hex_p (int @var{c}) - -Evaluates to non-zero if the given character is a valid hex character, -or zero if it is not. Note that the value you pass will be cast to -@code{unsigned char} within the macro. - -@end deftypefn - -@c hex.c:50 -@deftypefn Extension {unsigned int} hex_value (int @var{c}) - -Returns the numeric equivalent of the given character when interpreted -as a hexidecimal digit. The result is undefined if you pass an -invalid hex digit. Note that the value you pass will be cast to -@code{unsigned char} within the macro. - -The @code{hex_value} macro returns @code{unsigned int}, rather than -signed @code{int}, to make it easier to use in parsing addresses from -hex dump files: a signed @code{int} would be sign-extended when -converted to a wider unsigned type --- like @code{bfd_vma}, on some -systems. - -@end deftypefn - -@c index.c:5 -@deftypefn Supplemental char* index (char *@var{s}, int @var{c}) - -Returns a pointer to the first occurrence of the character @var{c} in -the string @var{s}, or @code{NULL} if not found. The use of @code{index} is -deprecated in new programs in favor of @code{strchr}. - -@end deftypefn - -@c insque.c:6 -@deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred}) -@deftypefnx Supplemental void remque (struct qelem *@var{elem}) - -Routines to manipulate queues built from doubly linked lists. The -@code{insque} routine inserts @var{elem} in the queue immediately -after @var{pred}. The @code{remque} routine removes @var{elem} from -its containing queue. These routines expect to be passed pointers to -structures which have as their first members a forward pointer and a -back pointer, like this prototype (although no prototype is provided): - -@example -struct qelem @{ - struct qelem *q_forw; - struct qelem *q_back; - char q_data[]; -@}; -@end example - -@end deftypefn - -@c safe-ctype.c:46 -@deffn Extension ISALPHA (@var{c}) -@deffnx Extension ISALNUM (@var{c}) -@deffnx Extension ISBLANK (@var{c}) -@deffnx Extension ISCNTRL (@var{c}) -@deffnx Extension ISDIGIT (@var{c}) -@deffnx Extension ISGRAPH (@var{c}) -@deffnx Extension ISLOWER (@var{c}) -@deffnx Extension ISPRINT (@var{c}) -@deffnx Extension ISPUNCT (@var{c}) -@deffnx Extension ISSPACE (@var{c}) -@deffnx Extension ISUPPER (@var{c}) -@deffnx Extension ISXDIGIT (@var{c}) - -These twelve macros are defined by @file{safe-ctype.h}. Each has the -same meaning as the corresponding macro (with name in lowercase) -defined by the standard header @file{ctype.h}. For example, -@code{ISALPHA} returns true for alphabetic characters and false for -others. However, there are two differences between these macros and -those provided by @file{ctype.h}: - -@itemize @bullet -@item These macros are guaranteed to have well-defined behavior for all -values representable by @code{signed char} and @code{unsigned char}, and -for @code{EOF}. - -@item These macros ignore the current locale; they are true for these -fixed sets of characters: -@multitable {@code{XDIGIT}} {yada yada yada yada yada yada yada yada} -@item @code{ALPHA} @tab @kbd{A-Za-z} -@item @code{ALNUM} @tab @kbd{A-Za-z0-9} -@item @code{BLANK} @tab @kbd{space tab} -@item @code{CNTRL} @tab @code{!PRINT} -@item @code{DIGIT} @tab @kbd{0-9} -@item @code{GRAPH} @tab @code{ALNUM || PUNCT} -@item @code{LOWER} @tab @kbd{a-z} -@item @code{PRINT} @tab @code{GRAPH ||} @kbd{space} -@item @code{PUNCT} @tab @kbd{`~!@@#$%^&*()_-=+[@{]@}\|;:'",<.>/?} -@item @code{SPACE} @tab @kbd{space tab \n \r \f \v} -@item @code{UPPER} @tab @kbd{A-Z} -@item @code{XDIGIT} @tab @kbd{0-9A-Fa-f} -@end multitable - -Note that, if the host character set is ASCII or a superset thereof, -all these macros will return false for all values of @code{char} outside -the range of 7-bit ASCII. In particular, both ISPRINT and ISCNTRL return -false for characters with numeric values from 128 to 255. -@end itemize -@end deffn - -@c safe-ctype.c:95 -@deffn Extension ISIDNUM (@var{c}) -@deffnx Extension ISIDST (@var{c}) -@deffnx Extension IS_VSPACE (@var{c}) -@deffnx Extension IS_NVSPACE (@var{c}) -@deffnx Extension IS_SPACE_OR_NUL (@var{c}) -@deffnx Extension IS_ISOBASIC (@var{c}) -These six macros are defined by @file{safe-ctype.h} and provide -additional character classes which are useful when doing lexical -analysis of C or similar languages. They are true for the following -sets of characters: - -@multitable {@code{SPACE_OR_NUL}} {yada yada yada yada yada yada yada yada} -@item @code{IDNUM} @tab @kbd{A-Za-z0-9_} -@item @code{IDST} @tab @kbd{A-Za-z_} -@item @code{VSPACE} @tab @kbd{\r \n} -@item @code{NVSPACE} @tab @kbd{space tab \f \v \0} -@item @code{SPACE_OR_NUL} @tab @code{VSPACE || NVSPACE} -@item @code{ISOBASIC} @tab @code{VSPACE || NVSPACE || PRINT} -@end multitable -@end deffn - -@c lbasename.c:23 -@deftypefn Replacement {const char*} lbasename (const char *@var{name}) - -Given a pointer to a string containing a typical pathname -(@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the -last component of the pathname (@samp{ls.c} in this case). The -returned pointer is guaranteed to lie within the original -string. This latter fact is not true of many vendor C -libraries, which return special strings or modify the passed -strings for particular input. - -In particular, the empty string returns the same empty string, -and a path ending in @code{/} returns the empty string after it. - -@end deftypefn - -@c lrealpath.c:25 -@deftypefn Replacement {const char*} lrealpath (const char *@var{name}) - -Given a pointer to a string containing a pathname, returns a canonical -version of the filename. Symlinks will be resolved, and ``.'' and ``..'' -components will be simplified. The returned value will be allocated using -@code{malloc}, or @code{NULL} will be returned on a memory allocation error. - -@end deftypefn - -@c make-relative-prefix.c:24 -@deftypefn Extension {const char*} make_relative_prefix (const char *@var{progname}, const char *@var{bin_prefix}, const char *@var{prefix}) - -Given three paths @var{progname}, @var{bin_prefix}, @var{prefix}, -return the path that is in the same position relative to -@var{progname}'s directory as @var{prefix} is relative to -@var{bin_prefix}. That is, a string starting with the directory -portion of @var{progname}, followed by a relative pathname of the -difference between @var{bin_prefix} and @var{prefix}. - -If @var{progname} does not contain any directory separators, -@code{make_relative_prefix} will search @env{PATH} to find a program -named @var{progname}. Also, if @var{progname} is a symbolic link, -the symbolic link will be resolved. - -For example, if @var{bin_prefix} is @code{/alpha/beta/gamma/gcc/delta}, -@var{prefix} is @code{/alpha/beta/gamma/omega/}, and @var{progname} is -@code{/red/green/blue/gcc}, then this function will return -@code{/red/green/blue/../../omega/}. - -The return value is normally allocated via @code{malloc}. If no -relative prefix can be found, return @code{NULL}. - -@end deftypefn - -@c make-temp-file.c:137 -@deftypefn Replacement char* make_temp_file (const char *@var{suffix}) - -Return a temporary file name (as a string) or @code{NULL} if unable to -create one. @var{suffix} is a suffix to append to the file name. The -string is @code{malloc}ed, and the temporary file has been created. - -@end deftypefn - -@c memchr.c:3 -@deftypefn Supplemental void* memchr (const void *@var{s}, int @var{c}, size_t @var{n}) - -This function searches memory starting at @code{*@var{s}} for the -character @var{c}. The search only ends with the first occurrence of -@var{c}, or after @var{length} characters; in particular, a null -character does not terminate the search. If the character @var{c} is -found within @var{length} characters of @code{*@var{s}}, a pointer -to the character is returned. If @var{c} is not found, then @code{NULL} is -returned. - -@end deftypefn - -@c memcmp.c:6 -@deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, size_t @var{count}) - -Compares the first @var{count} bytes of two areas of memory. Returns -zero if they are the same, a value less than zero if @var{x} is -lexically less than @var{y}, or a value greater than zero if @var{x} -is lexically greater than @var{y}. Note that lexical order is determined -as if comparing unsigned char arrays. - -@end deftypefn - -@c memcpy.c:6 -@deftypefn Supplemental void* memcpy (void *@var{out}, const void *@var{in}, size_t @var{length}) - -Copies @var{length} bytes from memory region @var{in} to region -@var{out}. Returns a pointer to @var{out}. - -@end deftypefn - -@c memmove.c:6 -@deftypefn Supplemental void* memmove (void *@var{from}, const void *@var{to}, size_t @var{count}) - -Copies @var{count} bytes from memory area @var{from} to memory area -@var{to}, returning a pointer to @var{to}. - -@end deftypefn - -@c mempcpy.c:23 -@deftypefn Supplemental void* mempcpy (void *@var{out}, const void *@var{in}, size_t @var{length}) - -Copies @var{length} bytes from memory region @var{in} to region -@var{out}. Returns a pointer to @var{out} + @var{length}. - -@end deftypefn - -@c memset.c:6 -@deftypefn Supplemental void* memset (void *@var{s}, int @var{c}, size_t @var{count}) - -Sets the first @var{count} bytes of @var{s} to the constant byte -@var{c}, returning a pointer to @var{s}. - -@end deftypefn - -@c mkstemps.c:54 -@deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len}) - -Generate a unique temporary file name from @var{pattern}. -@var{pattern} has the form: - -@example - @var{path}/ccXXXXXX@var{suffix} -@end example - -@var{suffix_len} tells us how long @var{suffix} is (it can be zero -length). The last six characters of @var{pattern} before @var{suffix} -must be @samp{XXXXXX}; they are replaced with a string that makes the -filename unique. Returns a file descriptor open on the file for -reading and writing. - -@end deftypefn - -@c pexecute.txh:244 -@deftypefn Extension void pex_free (struct pex_obj @var{obj}) - -Clean up and free all data associated with @var{obj}. - -@end deftypefn - -@c pexecute.txh:219 -@deftypefn Extension int pex_get_status (struct pex_obj *@var{obj}, int @var{count}, int *@var{vector}) - -Returns the exit status of all programs run using @var{obj}. -@var{count} is the number of results expected. The results will be -placed into @var{vector}. The results are in the order of the calls -to @code{pex_run}. Returns 0 on error, 1 on success. - -@end deftypefn - -@c pexecute.txh:228 -@deftypefn Extension int pex_get_times (struct pex_obj *@var{obj}, int @var{count}, struct pex_time *@var{vector}) - -Returns the process execution times of all programs run using -@var{obj}. @var{count} is the number of results expected. The -results will be placed into @var{vector}. The results are in the -order of the calls to @code{pex_run}. Returns 0 on error, 1 on -success. - -@code{struct pex_time} has the following fields of the type -@code{unsigned long}: @code{user_seconds}, -@code{user_microseconds}, @code{system_seconds}, -@code{system_microseconds}. On systems which do not support reporting -process times, all the fields will be set to @code{0}. - -@end deftypefn - -@c pexecute.txh:2 -@deftypefn Extension {struct pex_obj *} pex_init (int @var{flags}, const char *@var{pname}, const char *@var{tempbase}) - -Prepare to execute one or more programs, with standard output of each -program fed to standard input of the next. This is a system -independent interface to execute a pipeline. - -@var{flags} is a bitwise combination of the following: - -@table @code - -@vindex PEX_RECORD_TIMES -@item PEX_RECORD_TIMES -Record subprocess times if possible. - -@vindex PEX_USE_PIPES -@item PEX_USE_PIPES -Use pipes for communication between processes, if possible. - -@vindex PEX_SAVE_TEMPS -@item PEX_SAVE_TEMPS -Don't delete temporary files used for communication between -processes. - -@end table - -@var{pname} is the name of program to be executed, used in error -messages. @var{tempbase} is a base name to use for any required -temporary files; it may be @code{NULL} to use a randomly chosen name. - -@end deftypefn - -@c pexecute.txh:146 -@deftypefn Extension {FILE *} pex_input_file (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{in_name}) - -Return a stream for a temporary file to pass to the first program in -the pipeline as input. - -The name of the input file is chosen according to the same rules -@code{pex_run} uses to choose output file names, based on -@var{in_name}, @var{obj} and the @code{PEX_SUFFIX} bit in @var{flags}. - -Don't call @code{fclose} on the returned stream; the first call to -@code{pex_run} closes it automatically. - -If @var{flags} includes @code{PEX_BINARY_OUTPUT}, open the stream in -binary mode; otherwise, open it in the default mode. Including -@code{PEX_BINARY_OUTPUT} in @var{flags} has no effect on Unix. -@end deftypefn - -@c pexecute.txh:163 -@deftypefn Extension {FILE *} pex_input_pipe (struct pex_obj *@var{obj}, int @var{binary}) - -Return a stream @var{fp} for a pipe connected to the standard input of -the first program in the pipeline; @var{fp} is opened for writing. -You must have passed @code{PEX_USE_PIPES} to the @code{pex_init} call -that returned @var{obj}. - -You must close @var{fp} using @code{fclose} yourself when you have -finished writing data to the pipeline. - -The file descriptor underlying @var{fp} is marked not to be inherited -by child processes. - -On systems that do not support pipes, this function returns -@code{NULL}, and sets @code{errno} to @code{EINVAL}. If you would -like to write code that is portable to all systems the @code{pex} -functions support, consider using @code{pex_input_file} instead. - -There are two opportunities for deadlock using -@code{pex_input_pipe}: - -@itemize @bullet -@item -Most systems' pipes can buffer only a fixed amount of data; a process -that writes to a full pipe blocks. Thus, if you write to @file{fp} -before starting the first process, you run the risk of blocking when -there is no child process yet to read the data and allow you to -continue. @code{pex_input_pipe} makes no promises about the -size of the pipe's buffer, so if you need to write any data at all -before starting the first process in the pipeline, consider using -@code{pex_input_file} instead. - -@item -Using @code{pex_input_pipe} and @code{pex_read_output} together -may also cause deadlock. If the output pipe fills up, so that each -program in the pipeline is waiting for the next to read more data, and -you fill the input pipe by writing more data to @var{fp}, then there -is no way to make progress: the only process that could read data from -the output pipe is you, but you are blocked on the input pipe. - -@end itemize - -@end deftypefn - -@c pexecute.txh:250 -@deftypefn Extension {const char *} pex_one (int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{pname}, const char *@var{outname}, const char *@var{errname}, int *@var{status}, int *@var{err}) - -An interface to permit the easy execution of a -single program. The return value and most of the parameters are as -for a call to @code{pex_run}. @var{flags} is restricted to a -combination of @code{PEX_SEARCH}, @code{PEX_STDERR_TO_STDOUT}, and -@code{PEX_BINARY_OUTPUT}. @var{outname} is interpreted as if -@code{PEX_LAST} were set. On a successful return, @code{*@var{status}} will -be set to the exit status of the program. - -@end deftypefn - -@c pexecute.txh:207 -@deftypefn Extension {FILE *} pex_read_output (struct pex_obj *@var{obj}, int @var{binary}) - -Returns a @code{FILE} pointer which may be used to read the standard -output of the last program in the pipeline. When this is used, -@code{PEX_LAST} should not be used in a call to @code{pex_run}. After -this is called, @code{pex_run} may no longer be called with the same -@var{obj}. @var{binary} should be non-zero if the file should be -opened in binary mode. Don't call @code{fclose} on the returned file; -it will be closed by @code{pex_free}. - -@end deftypefn - -@c pexecute.txh:33 -@deftypefn Extension {const char *} pex_run (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{outname}, const char *@var{errname}, int *@var{err}) - -Execute one program in a pipeline. On success this returns -@code{NULL}. On failure it returns an error message, a statically -allocated string. - -@var{obj} is returned by a previous call to @code{pex_init}. - -@var{flags} is a bitwise combination of the following: - -@table @code - -@vindex PEX_LAST -@item PEX_LAST -This must be set on the last program in the pipeline. In particular, -it should be set when executing a single program. The standard output -of the program will be sent to @var{outname}, or, if @var{outname} is -@code{NULL}, to the standard output of the calling program. Do @emph{not} -set this bit if you want to call @code{pex_read_output} -(described below). After a call to @code{pex_run} with this bit set, -@var{pex_run} may no longer be called with the same @var{obj}. - -@vindex PEX_SEARCH -@item PEX_SEARCH -Search for the program using the user's executable search path. - -@vindex PEX_SUFFIX -@item PEX_SUFFIX -@var{outname} is a suffix. See the description of @var{outname}, -below. - -@vindex PEX_STDERR_TO_STDOUT -@item PEX_STDERR_TO_STDOUT -Send the program's standard error to standard output, if possible. - -@vindex PEX_BINARY_INPUT -@vindex PEX_BINARY_OUTPUT -@item PEX_BINARY_INPUT -@itemx PEX_BINARY_OUTPUT -The standard input (output) of the program should be read (written) in -binary mode rather than text mode. These flags are ignored on systems -which do not distinguish binary mode and text mode, such as Unix. For -proper behavior these flags should match appropriately---a call to -@code{pex_run} using @code{PEX_BINARY_OUTPUT} should be followed by a -call using @code{PEX_BINARY_INPUT}. -@end table - -@var{executable} is the program to execute. @var{argv} is the set of -arguments to pass to the program; normally @code{@var{argv}[0]} will -be a copy of @var{executable}. - -@var{outname} is used to set the name of the file to use for standard -output. There are two cases in which no output file will be used: - -@enumerate -@item -if @code{PEX_LAST} is not set in @var{flags}, and @code{PEX_USE_PIPES} -was set in the call to @code{pex_init}, and the system supports pipes - -@item -if @code{PEX_LAST} is set in @var{flags}, and @var{outname} is -@code{NULL} -@end enumerate - -@noindent -Otherwise the code will use a file to hold standard -output. If @code{PEX_LAST} is not set, this file is considered to be -a temporary file, and it will be removed when no longer needed, unless -@code{PEX_SAVE_TEMPS} was set in the call to @code{pex_init}. - -There are two cases to consider when setting the name of the file to -hold standard output. - -@enumerate -@item -@code{PEX_SUFFIX} is set in @var{flags}. In this case -@var{outname} may not be @code{NULL}. If the @var{tempbase} parameter -to @code{pex_init} was not @code{NULL}, then the output file name is -the concatenation of @var{tempbase} and @var{outname}. If -@var{tempbase} was @code{NULL}, then the output file name is a random -file name ending in @var{outname}. - -@item -@code{PEX_SUFFIX} was not set in @var{flags}. In this -case, if @var{outname} is not @code{NULL}, it is used as the output -file name. If @var{outname} is @code{NULL}, and @var{tempbase} was -not NULL, the output file name is randomly chosen using -@var{tempbase}. Otherwise the output file name is chosen completely -at random. -@end enumerate - -@var{errname} is the file name to use for standard error output. If -it is @code{NULL}, standard error is the same as the caller's. -Otherwise, standard error is written to the named file. - -On an error return, the code sets @code{*@var{err}} to an @code{errno} -value, or to 0 if there is no relevant @code{errno}. - -@end deftypefn - -@c pexecute.txh:133 -@deftypefn Extension {const char *} pex_run_in_environment (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, char * const *@var{env}, int @var{env_size}, const char *@var{outname}, const char *@var{errname}, int *@var{err}) - -Execute one program in a pipeline, permitting the environment for the -program to be specified. Behaviour and parameters not listed below are -as for @code{pex_run}. - -@var{env} is the environment for the child process, specified as an array of -character pointers. Each element of the array should point to a string of the -form @code{VAR=VALUE}, with the exception of the last element that must be -@code{NULL}. - -@end deftypefn - -@c pexecute.txh:262 -@deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int flags) - -This is the old interface to execute one or more programs. It is -still supported for compatibility purposes, but is no longer -documented. - -@end deftypefn - -@c strsignal.c:539 -@deftypefn Supplemental void psignal (unsigned @var{signo}, char *@var{message}) - -Print @var{message} to the standard error, followed by a colon, -followed by the description of the signal specified by @var{signo}, -followed by a newline. - -@end deftypefn - -@c putenv.c:21 -@deftypefn Supplemental int putenv (const char *@var{string}) - -Uses @code{setenv} or @code{unsetenv} to put @var{string} into -the environment or remove it. If @var{string} is of the form -@samp{name=value} the string is added; if no @samp{=} is present the -name is unset/removed. - -@end deftypefn - -@c pexecute.txh:270 -@deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags}) - -Another part of the old execution interface. - -@end deftypefn - -@c random.c:39 -@deftypefn Supplement {long int} random (void) -@deftypefnx Supplement void srandom (unsigned int @var{seed}) -@deftypefnx Supplement void* initstate (unsigned int @var{seed}, void *@var{arg_state}, unsigned long @var{n}) -@deftypefnx Supplement void* setstate (void *@var{arg_state}) - -Random number functions. @code{random} returns a random number in the -range 0 to @code{LONG_MAX}. @code{srandom} initializes the random -number generator to some starting point determined by @var{seed} -(else, the values returned by @code{random} are always the same for each -run of the program). @code{initstate} and @code{setstate} allow fine-grained -control over the state of the random number generator. - -@end deftypefn - -@c concat.c:173 -@deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @dots{}, @code{NULL}) - -Same as @code{concat}, except that if @var{optr} is not @code{NULL} it -is freed after the string is created. This is intended to be useful -when you're extending an existing string or building up a string in a -loop: - -@example - str = reconcat (str, "pre-", str, NULL); -@end example - -@end deftypefn - -@c rename.c:6 -@deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new}) - -Renames a file from @var{old} to @var{new}. If @var{new} already -exists, it is removed. - -@end deftypefn - -@c rindex.c:5 -@deftypefn Supplemental char* rindex (const char *@var{s}, int @var{c}) - -Returns a pointer to the last occurrence of the character @var{c} in -the string @var{s}, or @code{NULL} if not found. The use of @code{rindex} is -deprecated in new programs in favor of @code{strrchr}. - -@end deftypefn - -@c setenv.c:22 -@deftypefn Supplemental int setenv (const char *@var{name}, const char *@var{value}, int @var{overwrite}) -@deftypefnx Supplemental void unsetenv (const char *@var{name}) - -@code{setenv} adds @var{name} to the environment with value -@var{value}. If the name was already present in the environment, -the new value will be stored only if @var{overwrite} is nonzero. -The companion @code{unsetenv} function removes @var{name} from the -environment. This implementation is not safe for multithreaded code. - -@end deftypefn - -@c strsignal.c:348 -@deftypefn Extension int signo_max (void) - -Returns the maximum signal value for which a corresponding symbolic -name or message is available. Note that in the case where we use the -@code{sys_siglist} supplied by the system, it is possible for there to -be more symbolic names than messages, or vice versa. In fact, the -manual page for @code{psignal(3b)} explicitly warns that one should -check the size of the table (@code{NSIG}) before indexing it, since -new signal codes may be added to the system before they are added to -the table. Thus @code{NSIG} might be smaller than value implied by -the largest signo value defined in @code{}. - -We return the maximum value that can be used to obtain a meaningful -symbolic name or message. - -@end deftypefn - -@c sigsetmask.c:8 -@deftypefn Supplemental int sigsetmask (int @var{set}) - -Sets the signal mask to the one provided in @var{set} and returns -the old mask (which, for libiberty's implementation, will always -be the value @code{1}). - -@end deftypefn - -@c snprintf.c:28 -@deftypefn Supplemental int snprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, ...) - -This function is similar to sprintf, but it will print at most @var{n} -characters. On error the return value is -1, otherwise it returns the -number of characters that would have been printed had @var{n} been -sufficiently large, regardless of the actual value of @var{n}. Note -some pre-C99 system libraries do not implement this correctly so users -cannot generally rely on the return value if the system version of -this function is used. - -@end deftypefn - -@c spaces.c:22 -@deftypefn Extension char* spaces (int @var{count}) - -Returns a pointer to a memory region filled with the specified -number of spaces and null terminated. The returned pointer is -valid until at least the next call. - -@end deftypefn - -@c stpcpy.c:23 -@deftypefn Supplemental char* stpcpy (char *@var{dst}, const char *@var{src}) - -Copies the string @var{src} into @var{dst}. Returns a pointer to -@var{dst} + strlen(@var{src}). - -@end deftypefn - -@c stpncpy.c:23 -@deftypefn Supplemental char* stpncpy (char *@var{dst}, const char *@var{src}, size_t @var{len}) - -Copies the string @var{src} into @var{dst}, copying exactly @var{len} -and padding with zeros if necessary. If @var{len} < strlen(@var{src}) -then return @var{dst} + @var{len}, otherwise returns @var{dst} + -strlen(@var{src}). - -@end deftypefn - -@c strcasecmp.c:15 -@deftypefn Supplemental int strcasecmp (const char *@var{s1}, const char *@var{s2}) - -A case-insensitive @code{strcmp}. - -@end deftypefn - -@c strchr.c:6 -@deftypefn Supplemental char* strchr (const char *@var{s}, int @var{c}) - -Returns a pointer to the first occurrence of the character @var{c} in -the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the -null character, the results are undefined. - -@end deftypefn - -@c strdup.c:3 -@deftypefn Supplemental char* strdup (const char *@var{s}) - -Returns a pointer to a copy of @var{s} in memory obtained from -@code{malloc}, or @code{NULL} if insufficient memory was available. - -@end deftypefn - -@c strerror.c:670 -@deftypefn Replacement {const char*} strerrno (int @var{errnum}) - -Given an error number returned from a system call (typically returned -in @code{errno}), returns a pointer to a string containing the -symbolic name of that error number, as found in @code{}. - -If the supplied error number is within the valid range of indices for -symbolic names, but no name is available for the particular error -number, then returns the string @samp{Error @var{num}}, where @var{num} -is the error number. - -If the supplied error number is not within the range of valid -indices, then returns @code{NULL}. - -The contents of the location pointed to are only guaranteed to be -valid until the next call to @code{strerrno}. - -@end deftypefn - -@c strerror.c:603 -@deftypefn Supplemental char* strerror (int @var{errnoval}) - -Maps an @code{errno} number to an error message string, the contents -of which are implementation defined. On systems which have the -external variables @code{sys_nerr} and @code{sys_errlist}, these -strings will be the same as the ones used by @code{perror}. - -If the supplied error number is within the valid range of indices for -the @code{sys_errlist}, but no message is available for the particular -error number, then returns the string @samp{Error @var{num}}, where -@var{num} is the error number. - -If the supplied error number is not a valid index into -@code{sys_errlist}, returns @code{NULL}. - -The returned string is only guaranteed to be valid only until the -next call to @code{strerror}. - -@end deftypefn - -@c strncasecmp.c:15 -@deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2}) - -A case-insensitive @code{strncmp}. - -@end deftypefn - -@c strncmp.c:6 -@deftypefn Supplemental int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n}) - -Compares the first @var{n} bytes of two strings, returning a value as -@code{strcmp}. - -@end deftypefn - -@c strndup.c:23 -@deftypefn Extension char* strndup (const char *@var{s}, size_t @var{n}) - -Returns a pointer to a copy of @var{s} with at most @var{n} characters -in memory obtained from @code{malloc}, or @code{NULL} if insufficient -memory was available. The result is always NUL terminated. - -@end deftypefn - -@c strrchr.c:6 -@deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c}) - -Returns a pointer to the last occurrence of the character @var{c} in -the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the -null character, the results are undefined. - -@end deftypefn - -@c strsignal.c:383 -@deftypefn Supplemental {const char *} strsignal (int @var{signo}) - -Maps an signal number to an signal message string, the contents of -which are implementation defined. On systems which have the external -variable @code{sys_siglist}, these strings will be the same as the -ones used by @code{psignal()}. - -If the supplied signal number is within the valid range of indices for -the @code{sys_siglist}, but no message is available for the particular -signal number, then returns the string @samp{Signal @var{num}}, where -@var{num} is the signal number. - -If the supplied signal number is not a valid index into -@code{sys_siglist}, returns @code{NULL}. - -The returned string is only guaranteed to be valid only until the next -call to @code{strsignal}. - -@end deftypefn - -@c strsignal.c:446 -@deftypefn Extension {const char*} strsigno (int @var{signo}) - -Given an signal number, returns a pointer to a string containing the -symbolic name of that signal number, as found in @code{}. - -If the supplied signal number is within the valid range of indices for -symbolic names, but no name is available for the particular signal -number, then returns the string @samp{Signal @var{num}}, where -@var{num} is the signal number. - -If the supplied signal number is not within the range of valid -indices, then returns @code{NULL}. - -The contents of the location pointed to are only guaranteed to be -valid until the next call to @code{strsigno}. - -@end deftypefn - -@c strstr.c:6 -@deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub}) - -This function searches for the substring @var{sub} in the string -@var{string}, not including the terminating null characters. A pointer -to the first occurrence of @var{sub} is returned, or @code{NULL} if the -substring is absent. If @var{sub} points to a string with zero -length, the function returns @var{string}. - -@end deftypefn - -@c strtod.c:27 -@deftypefn Supplemental double strtod (const char *@var{string}, char **@var{endptr}) - -This ISO C function converts the initial portion of @var{string} to a -@code{double}. If @var{endptr} is not @code{NULL}, a pointer to the -character after the last character used in the conversion is stored in -the location referenced by @var{endptr}. If no conversion is -performed, zero is returned and the value of @var{string} is stored in -the location referenced by @var{endptr}. - -@end deftypefn - -@c strerror.c:729 -@deftypefn Extension int strtoerrno (const char *@var{name}) - -Given the symbolic name of a error number (e.g., @code{EACCES}), map it -to an errno value. If no translation is found, returns 0. - -@end deftypefn - -@c strtol.c:33 -@deftypefn Supplemental {long int} strtol (const char *@var{string}, char **@var{endptr}, int @var{base}) -@deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, char **@var{endptr}, int @var{base}) - -The @code{strtol} function converts the string in @var{string} to a -long integer value according to the given @var{base}, which must be -between 2 and 36 inclusive, or be the special value 0. If @var{base} -is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x} -to indicate bases 8 and 16, respectively, else default to base 10. -When the base is 16 (either explicitly or implicitly), a prefix of -@code{0x} is allowed. The handling of @var{endptr} is as that of -@code{strtod} above. The @code{strtoul} function is the same, except -that the converted value is unsigned. - -@end deftypefn - -@c strsignal.c:500 -@deftypefn Extension int strtosigno (const char *@var{name}) - -Given the symbolic name of a signal, map it to a signal number. If no -translation is found, returns 0. - -@end deftypefn - -@c strverscmp.c:25 -@deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2}) -The @code{strverscmp} function compares the string @var{s1} against -@var{s2}, considering them as holding indices/version numbers. Return -value follows the same conventions as found in the @code{strverscmp} -function. In fact, if @var{s1} and @var{s2} contain no digits, -@code{strverscmp} behaves like @code{strcmp}. - -Basically, we compare strings normally (character by character), until -we find a digit in each string - then we enter a special comparison -mode, where each sequence of digits is taken as a whole. If we reach the -end of these two parts without noticing a difference, we return to the -standard comparison mode. There are two types of numeric parts: -"integral" and "fractional" (those begin with a '0'). The types -of the numeric parts affect the way we sort them: - -@itemize @bullet -@item -integral/integral: we compare values as you would expect. - -@item -fractional/integral: the fractional part is less than the integral one. -Again, no surprise. - -@item -fractional/fractional: the things become a bit more complex. -If the common prefix contains only leading zeroes, the longest part is less -than the other one; else the comparison behaves normally. -@end itemize - -@smallexample -strverscmp ("no digit", "no digit") - @result{} 0 // @r{same behavior as strcmp.} -strverscmp ("item#99", "item#100") - @result{} <0 // @r{same prefix, but 99 < 100.} -strverscmp ("alpha1", "alpha001") - @result{} >0 // @r{fractional part inferior to integral one.} -strverscmp ("part1_f012", "part1_f01") - @result{} >0 // @r{two fractional parts.} -strverscmp ("foo.009", "foo.0") - @result{} <0 // @r{idem, but with leading zeroes only.} -@end smallexample - -This function is especially useful when dealing with filename sorting, -because filenames frequently hold indices/version numbers. -@end deftypefun - -@c tmpnam.c:3 -@deftypefn Supplemental char* tmpnam (char *@var{s}) - -This function attempts to create a name for a temporary file, which -will be a valid file name yet not exist when @code{tmpnam} checks for -it. @var{s} must point to a buffer of at least @code{L_tmpnam} bytes, -or be @code{NULL}. Use of this function creates a security risk, and it must -not be used in new projects. Use @code{mkstemp} instead. - -@end deftypefn - -@c unlink-if-ordinary.c:27 -@deftypefn Supplemental int unlink_if_ordinary (const char*) - -Unlinks the named file, unless it is special (e.g. a device file). -Returns 0 when the file was unlinked, a negative value (and errno set) when -there was an error deleting the file, and a positive value if no attempt -was made to unlink the file because it is special. - -@end deftypefn - -@c fopen_unlocked.c:31 -@deftypefn Extension void unlock_std_streams (void) - -If the OS supports it, ensure that the standard I/O streams, -@code{stdin}, @code{stdout} and @code{stderr} are setup to avoid any -multi-threaded locking. Otherwise do nothing. - -@end deftypefn - -@c fopen_unlocked.c:23 -@deftypefn Extension void unlock_stream (FILE * @var{stream}) - -If the OS supports it, ensure that the supplied stream is setup to -avoid any multi-threaded locking. Otherwise leave the @code{FILE} -pointer unchanged. If the @var{stream} is @code{NULL} do nothing. - -@end deftypefn - -@c vasprintf.c:47 -@deftypefn Extension int vasprintf (char **@var{resptr}, const char *@var{format}, va_list @var{args}) - -Like @code{vsprintf}, but instead of passing a pointer to a buffer, -you pass a pointer to a pointer. This function will compute the size -of the buffer needed, allocate memory with @code{malloc}, and store a -pointer to the allocated memory in @code{*@var{resptr}}. The value -returned is the same as @code{vsprintf} would return. If memory could -not be allocated, minus one is returned and @code{NULL} is stored in -@code{*@var{resptr}}. - -@end deftypefn - -@c vfork.c:6 -@deftypefn Supplemental int vfork (void) - -Emulates @code{vfork} by calling @code{fork} and returning its value. - -@end deftypefn - -@c vprintf.c:3 -@deftypefn Supplemental int vprintf (const char *@var{format}, va_list @var{ap}) -@deftypefnx Supplemental int vfprintf (FILE *@var{stream}, const char *@var{format}, va_list @var{ap}) -@deftypefnx Supplemental int vsprintf (char *@var{str}, const char *@var{format}, va_list @var{ap}) - -These functions are the same as @code{printf}, @code{fprintf}, and -@code{sprintf}, respectively, except that they are called with a -@code{va_list} instead of a variable number of arguments. Note that -they do not call @code{va_end}; this is the application's -responsibility. In @libib{} they are implemented in terms of the -nonstandard but common function @code{_doprnt}. - -@end deftypefn - -@c vsnprintf.c:28 -@deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, va_list @var{ap}) - -This function is similar to vsprintf, but it will print at most -@var{n} characters. On error the return value is -1, otherwise it -returns the number of characters that would have been printed had -@var{n} been sufficiently large, regardless of the actual value of -@var{n}. Note some pre-C99 system libraries do not implement this -correctly so users cannot generally rely on the return value if the -system version of this function is used. - -@end deftypefn - -@c waitpid.c:3 -@deftypefn Supplemental int waitpid (int @var{pid}, int *@var{status}, int) - -This is a wrapper around the @code{wait} function. Any ``special'' -values of @var{pid} depend on your implementation of @code{wait}, as -does the return value. The third argument is unused in @libib{}. - -@end deftypefn - -@c xatexit.c:11 -@deftypefun int xatexit (void (*@var{fn}) (void)) - -Behaves as the standard @code{atexit} function, but with no limit on -the number of registered functions. Returns 0 on success, or @minus{}1 on -failure. If you use @code{xatexit} to register functions, you must use -@code{xexit} to terminate your program. - -@end deftypefun - -@c xmalloc.c:38 -@deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize}) - -Allocate memory without fail, and set it to zero. This routine functions -like @code{calloc}, but will behave the same as @code{xmalloc} if memory -cannot be found. - -@end deftypefn - -@c xexit.c:22 -@deftypefn Replacement void xexit (int @var{code}) - -Terminates the program. If any functions have been registered with -the @code{xatexit} replacement function, they will be called first. -Termination is handled via the system's normal @code{exit} call. - -@end deftypefn - -@c xmalloc.c:22 -@deftypefn Replacement void* xmalloc (size_t) - -Allocate memory without fail. If @code{malloc} fails, this will print -a message to @code{stderr} (using the name set by -@code{xmalloc_set_program_name}, -if any) and then call @code{xexit}. Note that it is therefore safe for -a program to contain @code{#define malloc xmalloc} in its source. - -@end deftypefn - -@c xmalloc.c:53 -@deftypefn Replacement void xmalloc_failed (size_t) - -This function is not meant to be called by client code, and is listed -here for completeness only. If any of the allocation routines fail, this -function will be called to print an error message and terminate execution. - -@end deftypefn - -@c xmalloc.c:46 -@deftypefn Replacement void xmalloc_set_program_name (const char *@var{name}) - -You can use this to set the name of the program used by -@code{xmalloc_failed} when printing a failure message. - -@end deftypefn - -@c xmemdup.c:7 -@deftypefn Replacement void* xmemdup (void *@var{input}, size_t @var{copy_size}, size_t @var{alloc_size}) - -Duplicates a region of memory without fail. First, @var{alloc_size} bytes -are allocated, then @var{copy_size} bytes from @var{input} are copied into -it, and the new memory is returned. If fewer bytes are copied than were -allocated, the remaining memory is zeroed. - -@end deftypefn - -@c xmalloc.c:32 -@deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size}) -Reallocate memory without fail. This routine functions like @code{realloc}, -but will behave the same as @code{xmalloc} if memory cannot be found. - -@end deftypefn - -@c xstrdup.c:7 -@deftypefn Replacement char* xstrdup (const char *@var{s}) - -Duplicates a character string without fail, using @code{xmalloc} to -obtain memory. - -@end deftypefn - -@c xstrerror.c:7 -@deftypefn Replacement char* xstrerror (int @var{errnum}) - -Behaves exactly like the standard @code{strerror} function, but -will never return a @code{NULL} pointer. - -@end deftypefn - -@c xstrndup.c:23 -@deftypefn Replacement char* xstrndup (const char *@var{s}, size_t @var{n}) - -Returns a pointer to a copy of @var{s} with at most @var{n} characters -without fail, using @code{xmalloc} to obtain memory. The result is -always NUL terminated. - -@end deftypefn - - diff --git a/libiberty/gather-docs b/libiberty/gather-docs deleted file mode 100644 index be4dbbfc1e2..00000000000 --- a/libiberty/gather-docs +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/perl -# -*- perl -*- - -# Copyright (C) 2001 -# Free Software Foundation -# -# This file is part of the libiberty library. -# Libiberty 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. -# -# Libiberty 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 libiberty; see the file COPYING.LIB. If not, -# write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# Originally written by DJ Delorie - - - -# This program looks for texinfo snippets in source files and other -# files, and builds per-category files with entries sorted in -# alphabetical order. - -# The syntax it looks for is lines starting with '@def' in *.c and -# other files (see TEXIFILES in Makefile.in). Entries are terminated -# at the next @def* (which begins a new entry) or, for C files, a line -# that begins with '*/' without leading spaces (this assumes that the -# texinfo snippet is within a C-style /* */ comment). - -# - - - -if ($ARGV[0] eq "-v") { - $verbose = 1; - shift; -} - -$srcdir = shift; -$outfile = shift; - -if ($outfile !~ /\S/ || ! -f "$srcdir/Makefile.in" ) { - print STDERR "Usage: gather-docs [-v] srcdir outfile.txi [files with snippets in them ...]\n"; - exit 1; -} - -$errors = 0; - -for $in (@ARGV) { - - if (!open(IN, "$srcdir/$in")) { - print STDERR "Cannot open $srcdir/$in for reading: $!\n"; - $errors ++; - - } else { - $first = 1; - $pertinent = 0; - $man_mode = 0; - $line = 0; - - while () { - $line ++; - $pertinent = 1 if /^\@def[a-z]*[a-wyz] /; - $pertinent = 0 if /^\*\//; - next unless $pertinent; - - if (/^\@def[a-z]*[a-wyz] /) { - - ($name) = m/[^\(]* ([^\( \t\r\n]+) *\(/; - $name =~ s/[ ]*$//; - $key = $name; - $key =~ tr/A-Z/a-z/; - $key =~ s/[^a-z0-9]+/ /g; - $name{$key} = $node; - $lines{$key} = ''; - $src_file{$key} = $in; - $src_line{$key} = $line; - print "\nReading $in :" if $verbose && $first; - $first = 0; - print " $name" if $verbose; - $node_lines{$key} .= $_; - - } else { - $node_lines{$key} .= $_; - } - - $pertinent = 0 if /^\@end def/; - } - close (IN); - } -} - -print "\n" if $verbose; -exit $errors if $errors; - -if (!open (OUT, "> $outfile")) { - print STDERR "Cannot open $outfile for writing: $!\n"; - $errors ++; - next; -} -print "Writing $outfile\n" if $verbose; - -print OUT "\@c Automatically generated from *.c and others (the comments before\n"; -print OUT "\@c each entry tell you which file and where in that file). DO NOT EDIT!\n"; -print OUT "\@c Edit the *.c files, configure with --enable-maintainer-mode,\n"; -print OUT "\@c and let gather-docs build you a new copy.\n\n"; - -for $key (sort keys %name) { - print OUT "\@c $src_file{$key}:$src_line{$key}\n"; - print OUT $node_lines{$key}; - print OUT "\n"; -} - -if (! print OUT "\n") { - print STDERR "Disk full writing $srcdir/$cat.texi\n"; - $errors ++; -} - -close (OUT); - -exit $errors; diff --git a/libiberty/getcwd.c b/libiberty/getcwd.c deleted file mode 100644 index 28f26eb179f..00000000000 --- a/libiberty/getcwd.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Emulate getcwd using getwd. - This function is in the public domain. */ - -/* - -@deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len}) - -Copy the absolute pathname for the current working directory into -@var{pathname}, which is assumed to point to a buffer of at least -@var{len} bytes, and return a pointer to the buffer. If the current -directory's path doesn't fit in @var{len} characters, the result is -@code{NULL} and @code{errno} is set. If @var{pathname} is a null pointer, -@code{getcwd} will obtain @var{len} bytes of space using -@code{malloc}. - -@end deftypefn - -*/ - -#include "config.h" - -#ifdef HAVE_SYS_PARAM_H -#include -#endif -#include -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_STDLIB_H -#include -#endif - -extern char *getwd (); -extern int errno; - -#ifndef MAXPATHLEN -#define MAXPATHLEN 1024 -#endif - -char * -getcwd (char *buf, size_t len) -{ - char ourbuf[MAXPATHLEN]; - char *result; - - result = getwd (ourbuf); - if (result) { - if (strlen (ourbuf) >= len) { - errno = ERANGE; - return 0; - } - if (!buf) { - buf = (char*)malloc(len); - if (!buf) { - errno = ENOMEM; - return 0; - } - } - strcpy (buf, ourbuf); - } - return buf; -} diff --git a/libiberty/getopt.c b/libiberty/getopt.c deleted file mode 100644 index d9c3532ce11..00000000000 --- a/libiberty/getopt.c +++ /dev/null @@ -1,1052 +0,0 @@ -/* Getopt for GNU. - NOTE: getopt is now part of the C library, so if you don't know what - "Keep this file name-space clean" means, talk to drepper@gnu.org - before changing it! - - Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, - 1996, 1997, 1998, 2005 Free Software Foundation, Inc. - - NOTE: This source is derived from an old version taken from the GNU C - Library (glibc). - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, - USA. */ - -/* This tells Alpha OSF/1 not to define a getopt prototype in . - Ditto for AIX 3.2 and . */ -#ifndef _NO_PROTO -# define _NO_PROTO -#endif - -#ifdef HAVE_CONFIG_H -# include -#endif - -#if !defined __STDC__ || !__STDC__ -/* This is a separate conditional since some stdc systems - reject `defined (const)'. */ -# ifndef const -# define const -# endif -#endif - -#include "ansidecl.h" -#include - -/* Comment out all this code if we are using the GNU C Library, and are not - actually compiling the library itself. This code is part of the GNU C - Library, but also included in many other GNU distributions. Compiling - and linking in this code is a waste when using the GNU C library - (especially if it is a shared library). Rather than having every GNU - program understand `configure --with-gnu-libc' and omit the object files, - it is simpler to just do this in the source for each such file. */ - -#define GETOPT_INTERFACE_VERSION 2 -#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 -# include -# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION -# define ELIDE_CODE -# endif -#endif - -#ifndef ELIDE_CODE - - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -/* Don't include stdlib.h for non-GNU C libraries because some of them - contain conflicting prototypes for getopt. */ -# include -# include -#endif /* GNU C library. */ - -#ifdef VMS -# include -# if HAVE_STRING_H - 0 -# include -# endif -#endif - -#ifndef _ -/* This is for other GNU distributions with internationalized messages. - When compiling libc, the _ macro is predefined. */ -# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC -# include -# define _(msgid) gettext (msgid) -# else -# define _(msgid) (msgid) -# endif -#endif - -/* This version of `getopt' appears to the caller like standard Unix `getopt' - but it behaves differently for the user, since it allows the user - to intersperse the options with the other arguments. - - As `getopt' works, it permutes the elements of ARGV so that, - when it is done, all the options precede everything else. Thus - all application programs are extended to handle flexible argument order. - - Setting the environment variable POSIXLY_CORRECT disables permutation. - Then the behavior is completely standard. - - GNU application programs can use a third alternative mode in which - they can distinguish the relative order of options and other arguments. */ - -#include "getopt.h" - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -char *optarg = NULL; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns -1, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -/* 1003.2 says this must be 1 before any call. */ -int optind = 1; - -/* Formerly, initialization of getopt depended on optind==0, which - causes problems with re-calling getopt as programs generally don't - know that. */ - -int __getopt_initialized = 0; - -/* The next char to be scanned in the option-element - in which the last option character we returned was found. - This allows us to pick up the scan where we left off. - - If this is zero, or a null string, it means resume the scan - by advancing to the next ARGV-element. */ - -static char *nextchar; - -/* Callers store zero here to inhibit the error message - for unrecognized options. */ - -int opterr = 1; - -/* Set to an option character which was unrecognized. - This must be initialized on some systems to avoid linking in the - system's own getopt implementation. */ - -int optopt = '?'; - -/* Describe how to deal with options that follow non-option ARGV-elements. - - If the caller did not specify anything, - the default is REQUIRE_ORDER if the environment variable - POSIXLY_CORRECT is defined, PERMUTE otherwise. - - REQUIRE_ORDER means don't recognize them as options; - stop option processing when the first non-option is seen. - This is what Unix does. - This mode of operation is selected by either setting the environment - variable POSIXLY_CORRECT, or using `+' as the first character - of the list of option characters. - - PERMUTE is the default. We permute the contents of ARGV as we scan, - so that eventually all the non-options are at the end. This allows options - to be given in any order, even with programs that were not written to - expect this. - - RETURN_IN_ORDER is an option available to programs that were written - to expect options and other ARGV-elements in any order and that care about - the ordering of the two. We describe each non-option ARGV-element - as if it were the argument of an option with character code 1. - Using `-' as the first character of the list of option characters - selects this mode of operation. - - The special argument `--' forces an end of option-scanning regardless - of the value of `ordering'. In the case of RETURN_IN_ORDER, only - `--' can cause `getopt' to return -1 with `optind' != ARGC. */ - -static enum -{ - REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER -} ordering; - -/* Value of POSIXLY_CORRECT environment variable. */ -static char *posixly_correct; - -#ifdef __GNU_LIBRARY__ -/* We want to avoid inclusion of string.h with non-GNU libraries - because there are many ways it can cause trouble. - On some systems, it contains special magic macros that don't work - in GCC. */ -# include -# define my_index strchr -#else - -# if HAVE_STRING_H -# include -# else -# if HAVE_STRINGS_H -# include -# endif -# endif - -/* Avoid depending on library functions or files - whose names are inconsistent. */ - -#if HAVE_STDLIB_H && HAVE_DECL_GETENV -# include -#elif !defined(getenv) -# ifdef __cplusplus -extern "C" { -# endif /* __cplusplus */ -extern char *getenv (const char *); -# ifdef __cplusplus -} -# endif /* __cplusplus */ -#endif - -static char * -my_index (const char *str, int chr) -{ - while (*str) - { - if (*str == chr) - return (char *) str; - str++; - } - return 0; -} - -/* If using GCC, we can safely declare strlen this way. - If not using GCC, it is ok not to declare it. */ -#ifdef __GNUC__ -/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. - That was relevant to code that was here before. */ -# if (!defined __STDC__ || !__STDC__) && !defined strlen -/* gcc with -traditional declares the built-in strlen to return int, - and has done so at least since version 2.4.5. -- rms. */ -extern int strlen (const char *); -# endif /* not __STDC__ */ -#endif /* __GNUC__ */ - -#endif /* not __GNU_LIBRARY__ */ - -/* Handle permutation of arguments. */ - -/* Describe the part of ARGV that contains non-options that have - been skipped. `first_nonopt' is the index in ARGV of the first of them; - `last_nonopt' is the index after the last of them. */ - -static int first_nonopt; -static int last_nonopt; - -#ifdef _LIBC -/* Bash 2.0 gives us an environment variable containing flags - indicating ARGV elements that should not be considered arguments. */ - -/* Defined in getopt_init.c */ -extern char *__getopt_nonoption_flags; - -static int nonoption_flags_max_len; -static int nonoption_flags_len; - -static int original_argc; -static char *const *original_argv; - -/* Make sure the environment variable bash 2.0 puts in the environment - is valid for the getopt call we must make sure that the ARGV passed - to getopt is that one passed to the process. */ -static void -__attribute__ ((unused)) -store_args_and_env (int argc, char *const *argv) -{ - /* XXX This is no good solution. We should rather copy the args so - that we can compare them later. But we must not use malloc(3). */ - original_argc = argc; - original_argv = argv; -} -# ifdef text_set_element -text_set_element (__libc_subinit, store_args_and_env); -# endif /* text_set_element */ - -# define SWAP_FLAGS(ch1, ch2) \ - if (nonoption_flags_len > 0) \ - { \ - char __tmp = __getopt_nonoption_flags[ch1]; \ - __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ - __getopt_nonoption_flags[ch2] = __tmp; \ - } -#else /* !_LIBC */ -# define SWAP_FLAGS(ch1, ch2) -#endif /* _LIBC */ - -/* Exchange two adjacent subsequences of ARGV. - One subsequence is elements [first_nonopt,last_nonopt) - which contains all the non-options that have been skipped so far. - The other is elements [last_nonopt,optind), which contains all - the options processed since those non-options were skipped. - - `first_nonopt' and `last_nonopt' are relocated so that they describe - the new indices of the non-options in ARGV after they are moved. */ - -#if defined __STDC__ && __STDC__ -static void exchange (char **); -#endif - -static void -exchange (char **argv) -{ - int bottom = first_nonopt; - int middle = last_nonopt; - int top = optind; - char *tem; - - /* Exchange the shorter segment with the far end of the longer segment. - That puts the shorter segment into the right place. - It leaves the longer segment in the right place overall, - but it consists of two parts that need to be swapped next. */ - -#ifdef _LIBC - /* First make sure the handling of the `__getopt_nonoption_flags' - string can work normally. Our top argument must be in the range - of the string. */ - if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) - { - /* We must extend the array. The user plays games with us and - presents new arguments. */ - char *new_str = (char *) malloc (top + 1); - if (new_str == NULL) - nonoption_flags_len = nonoption_flags_max_len = 0; - else - { - memset (mempcpy (new_str, __getopt_nonoption_flags, - nonoption_flags_max_len), - '\0', top + 1 - nonoption_flags_max_len); - nonoption_flags_max_len = top + 1; - __getopt_nonoption_flags = new_str; - } - } -#endif - - while (top > middle && middle > bottom) - { - if (top - middle > middle - bottom) - { - /* Bottom segment is the short one. */ - int len = middle - bottom; - register int i; - - /* Swap it with the top part of the top segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[top - (middle - bottom) + i]; - argv[top - (middle - bottom) + i] = tem; - SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); - } - /* Exclude the moved bottom segment from further swapping. */ - top -= len; - } - else - { - /* Top segment is the short one. */ - int len = top - middle; - register int i; - - /* Swap it with the bottom part of the bottom segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[middle + i]; - argv[middle + i] = tem; - SWAP_FLAGS (bottom + i, middle + i); - } - /* Exclude the moved top segment from further swapping. */ - bottom += len; - } - } - - /* Update records for the slots the non-options now occupy. */ - - first_nonopt += (optind - last_nonopt); - last_nonopt = optind; -} - -/* Initialize the internal data when the first call is made. */ - -#if defined __STDC__ && __STDC__ -static const char *_getopt_initialize (int, char *const *, const char *); -#endif -static const char * -_getopt_initialize (int argc ATTRIBUTE_UNUSED, - char *const *argv ATTRIBUTE_UNUSED, - const char *optstring) -{ - /* Start processing options with ARGV-element 1 (since ARGV-element 0 - is the program name); the sequence of previously skipped - non-option ARGV-elements is empty. */ - - first_nonopt = last_nonopt = optind; - - nextchar = NULL; - - posixly_correct = getenv ("POSIXLY_CORRECT"); - - /* Determine how to handle the ordering of options and nonoptions. */ - - if (optstring[0] == '-') - { - ordering = RETURN_IN_ORDER; - ++optstring; - } - else if (optstring[0] == '+') - { - ordering = REQUIRE_ORDER; - ++optstring; - } - else if (posixly_correct != NULL) - ordering = REQUIRE_ORDER; - else - ordering = PERMUTE; - -#ifdef _LIBC - if (posixly_correct == NULL - && argc == original_argc && argv == original_argv) - { - if (nonoption_flags_max_len == 0) - { - if (__getopt_nonoption_flags == NULL - || __getopt_nonoption_flags[0] == '\0') - nonoption_flags_max_len = -1; - else - { - const char *orig_str = __getopt_nonoption_flags; - int len = nonoption_flags_max_len = strlen (orig_str); - if (nonoption_flags_max_len < argc) - nonoption_flags_max_len = argc; - __getopt_nonoption_flags = - (char *) malloc (nonoption_flags_max_len); - if (__getopt_nonoption_flags == NULL) - nonoption_flags_max_len = -1; - else - memset (mempcpy (__getopt_nonoption_flags, orig_str, len), - '\0', nonoption_flags_max_len - len); - } - } - nonoption_flags_len = nonoption_flags_max_len; - } - else - nonoption_flags_len = 0; -#endif - - return optstring; -} - -/* Scan elements of ARGV (whose length is ARGC) for option characters - given in OPTSTRING. - - If an element of ARGV starts with '-', and is not exactly "-" or "--", - then it is an option element. The characters of this element - (aside from the initial '-') are option characters. If `getopt' - is called repeatedly, it returns successively each of the option characters - from each of the option elements. - - If `getopt' finds another option character, it returns that character, - updating `optind' and `nextchar' so that the next call to `getopt' can - resume the scan with the following option character or ARGV-element. - - If there are no more option characters, `getopt' returns -1. - Then `optind' is the index in ARGV of the first ARGV-element - that is not an option. (The ARGV-elements have been permuted - so that those that are not options now come last.) - - OPTSTRING is a string containing the legitimate option characters. - If an option character is seen that is not listed in OPTSTRING, - return '?' after printing an error message. If you set `opterr' to - zero, the error message is suppressed but we still return '?'. - - If a char in OPTSTRING is followed by a colon, that means it wants an arg, - so the following text in the same ARGV-element, or the text of the following - ARGV-element, is returned in `optarg'. Two colons mean an option that - wants an optional arg; if there is text in the current ARGV-element, - it is returned in `optarg', otherwise `optarg' is set to zero. - - If OPTSTRING starts with `-' or `+', it requests different methods of - handling the non-option ARGV-elements. - See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. - - Long-named options begin with `--' instead of `-'. - Their names may be abbreviated as long as the abbreviation is unique - or is an exact match for some defined option. If they have an - argument, it follows the option name in the same ARGV-element, separated - from the option name by a `=', or else the in next ARGV-element. - When `getopt' finds a long-named option, it returns 0 if that option's - `flag' field is nonzero, the value of the option's `val' field - if the `flag' field is zero. - - The elements of ARGV aren't really const, because we permute them. - But we pretend they're const in the prototype to be compatible - with other systems. - - LONGOPTS is a vector of `struct option' terminated by an - element containing a name which is zero. - - LONGIND returns the index in LONGOPT of the long-named option found. - It is only valid when a long-named option has been found by the most - recent call. - - If LONG_ONLY is nonzero, '-' as well as '--' can introduce - long-named options. */ - -int -_getopt_internal (int argc, char *const *argv, const char *optstring, - const struct option *longopts, - int *longind, int long_only) -{ - optarg = NULL; - - if (optind == 0 || !__getopt_initialized) - { - if (optind == 0) - optind = 1; /* Don't scan ARGV[0], the program name. */ - optstring = _getopt_initialize (argc, argv, optstring); - __getopt_initialized = 1; - } - - /* Test whether ARGV[optind] points to a non-option argument. - Either it does not have option syntax, or there is an environment flag - from the shell indicating it is not an option. The later information - is only used when the used in the GNU libc. */ -#ifdef _LIBC -# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ - || (optind < nonoption_flags_len \ - && __getopt_nonoption_flags[optind] == '1')) -#else -# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') -#endif - - if (nextchar == NULL || *nextchar == '\0') - { - /* Advance to the next ARGV-element. */ - - /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been - moved back by the user (who may also have changed the arguments). */ - if (last_nonopt > optind) - last_nonopt = optind; - if (first_nonopt > optind) - first_nonopt = optind; - - if (ordering == PERMUTE) - { - /* If we have just processed some options following some non-options, - exchange them so that the options come first. */ - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (last_nonopt != optind) - first_nonopt = optind; - - /* Skip any additional non-options - and extend the range of non-options previously skipped. */ - - while (optind < argc && NONOPTION_P) - optind++; - last_nonopt = optind; - } - - /* The special ARGV-element `--' means premature end of options. - Skip it like a null option, - then exchange with previous non-options as if it were an option, - then skip everything else like a non-option. */ - - if (optind != argc && !strcmp (argv[optind], "--")) - { - optind++; - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (first_nonopt == last_nonopt) - first_nonopt = optind; - last_nonopt = argc; - - optind = argc; - } - - /* If we have done all the ARGV-elements, stop the scan - and back over any non-options that we skipped and permuted. */ - - if (optind == argc) - { - /* Set the next-arg-index to point at the non-options - that we previously skipped, so the caller will digest them. */ - if (first_nonopt != last_nonopt) - optind = first_nonopt; - return -1; - } - - /* If we have come to a non-option and did not permute it, - either stop the scan or describe it to the caller and pass it by. */ - - if (NONOPTION_P) - { - if (ordering == REQUIRE_ORDER) - return -1; - optarg = argv[optind++]; - return 1; - } - - /* We have found another option-ARGV-element. - Skip the initial punctuation. */ - - nextchar = (argv[optind] + 1 - + (longopts != NULL && argv[optind][1] == '-')); - } - - /* Decode the current option-ARGV-element. */ - - /* Check whether the ARGV-element is a long option. - - If long_only and the ARGV-element has the form "-f", where f is - a valid short option, don't consider it an abbreviated form of - a long option that starts with f. Otherwise there would be no - way to give the -f short option. - - On the other hand, if there's a long option "fubar" and - the ARGV-element is "-fu", do consider that an abbreviation of - the long option, just like "--fu", and not "-f" with arg "u". - - This distinction seems to be the most useful approach. */ - - if (longopts != NULL - && (argv[optind][1] == '-' - || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) - { - char *nameend; - const struct option *p; - const struct option *pfound = NULL; - int exact = 0; - int ambig = 0; - int indfound = -1; - int option_index; - - for (nameend = nextchar; *nameend && *nameend != '='; nameend++) - /* Do nothing. */ ; - - /* Test all long options for either exact match - or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; p++, option_index++) - if (!strncmp (p->name, nextchar, nameend - nextchar)) - { - if ((unsigned int) (nameend - nextchar) - == (unsigned int) strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else - /* Second or later nonexact match found. */ - ambig = 1; - } - - if (ambig && !exact) - { - if (opterr) - fprintf (stderr, _("%s: option `%s' is ambiguous\n"), - argv[0], argv[optind]); - nextchar += strlen (nextchar); - optind++; - optopt = 0; - return '?'; - } - - if (pfound != NULL) - { - option_index = indfound; - optind++; - if (*nameend) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - optarg = nameend + 1; - else - { - if (opterr) - { - if (argv[optind - 1][1] == '-') - /* --option */ - fprintf (stderr, - _("%s: option `--%s' doesn't allow an argument\n"), - argv[0], pfound->name); - else - /* +option or -option */ - fprintf (stderr, - _("%s: option `%c%s' doesn't allow an argument\n"), - argv[0], argv[optind - 1][0], pfound->name); - - nextchar += strlen (nextchar); - - optopt = pfound->val; - return '?'; - } - } - } - else if (pfound->has_arg == 1) - { - if (optind < argc) - optarg = argv[optind++]; - else - { - if (opterr) - fprintf (stderr, - _("%s: option `%s' requires an argument\n"), - argv[0], argv[optind - 1]); - nextchar += strlen (nextchar); - optopt = pfound->val; - return optstring[0] == ':' ? ':' : '?'; - } - } - nextchar += strlen (nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - - /* Can't find it as a long option. If this is not getopt_long_only, - or the option starts with '--' or is not a valid short - option, then it's an error. - Otherwise interpret it as a short option. */ - if (!long_only || argv[optind][1] == '-' - || my_index (optstring, *nextchar) == NULL) - { - if (opterr) - { - if (argv[optind][1] == '-') - /* --option */ - fprintf (stderr, _("%s: unrecognized option `--%s'\n"), - argv[0], nextchar); - else - /* +option or -option */ - fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), - argv[0], argv[optind][0], nextchar); - } - nextchar = (char *) ""; - optind++; - optopt = 0; - return '?'; - } - } - - /* Look at and handle the next short option-character. */ - - { - char c = *nextchar++; - char *temp = my_index (optstring, c); - - /* Increment `optind' when we start to process its last character. */ - if (*nextchar == '\0') - ++optind; - - if (temp == NULL || c == ':') - { - if (opterr) - { - if (posixly_correct) - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, _("%s: illegal option -- %c\n"), - argv[0], c); - else - fprintf (stderr, _("%s: invalid option -- %c\n"), - argv[0], c); - } - optopt = c; - return '?'; - } - /* Convenience. Treat POSIX -W foo same as long option --foo */ - if (temp[0] == 'W' && temp[1] == ';') - { - char *nameend; - const struct option *p; - const struct option *pfound = NULL; - int exact = 0; - int ambig = 0; - int indfound = 0; - int option_index; - - /* This is an option that requires an argument. */ - if (*nextchar != '\0') - { - optarg = nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - optind++; - } - else if (optind == argc) - { - if (opterr) - { - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, _("%s: option requires an argument -- %c\n"), - argv[0], c); - } - optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = '?'; - return c; - } - else - /* We already incremented `optind' once; - increment it again when taking next ARGV-elt as argument. */ - optarg = argv[optind++]; - - /* optarg is now the argument, see if it's in the - table of longopts. */ - - for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) - /* Do nothing. */ ; - - /* Test all long options for either exact match - or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; p++, option_index++) - if (!strncmp (p->name, nextchar, nameend - nextchar)) - { - if ((unsigned int) (nameend - nextchar) == strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else - /* Second or later nonexact match found. */ - ambig = 1; - } - if (ambig && !exact) - { - if (opterr) - fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), - argv[0], argv[optind]); - nextchar += strlen (nextchar); - optind++; - return '?'; - } - if (pfound != NULL) - { - option_index = indfound; - if (*nameend) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - optarg = nameend + 1; - else - { - if (opterr) - fprintf (stderr, _("\ -%s: option `-W %s' doesn't allow an argument\n"), - argv[0], pfound->name); - - nextchar += strlen (nextchar); - return '?'; - } - } - else if (pfound->has_arg == 1) - { - if (optind < argc) - optarg = argv[optind++]; - else - { - if (opterr) - fprintf (stderr, - _("%s: option `%s' requires an argument\n"), - argv[0], argv[optind - 1]); - nextchar += strlen (nextchar); - return optstring[0] == ':' ? ':' : '?'; - } - } - nextchar += strlen (nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - nextchar = NULL; - return 'W'; /* Let the application handle it. */ - } - if (temp[1] == ':') - { - if (temp[2] == ':') - { - /* This is an option that accepts an argument optionally. */ - if (*nextchar != '\0') - { - optarg = nextchar; - optind++; - } - else - optarg = NULL; - nextchar = NULL; - } - else - { - /* This is an option that requires an argument. */ - if (*nextchar != '\0') - { - optarg = nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - optind++; - } - else if (optind == argc) - { - if (opterr) - { - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, - _("%s: option requires an argument -- %c\n"), - argv[0], c); - } - optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = '?'; - } - else - /* We already incremented `optind' once; - increment it again when taking next ARGV-elt as argument. */ - optarg = argv[optind++]; - nextchar = NULL; - } - } - return c; - } -} - -int -getopt (int argc, char *const *argv, const char *optstring) -{ - return _getopt_internal (argc, argv, optstring, - (const struct option *) 0, - (int *) 0, - 0); -} - -#endif /* Not ELIDE_CODE. */ - -#ifdef TEST - -/* Compile with -DTEST to make an executable for use in testing - the above definition of `getopt'. */ - -int -main (int argc, char **argv) -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - - c = getopt (argc, argv, "abc:d:0123456789"); - if (c == -1) - break; - - switch (c) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (digit_optind != 0 && digit_optind != this_option_optind) - printf ("digits occur in two different argv-elements.\n"); - digit_optind = this_option_optind; - printf ("option %c\n", c); - break; - - case 'a': - printf ("option a\n"); - break; - - case 'b': - printf ("option b\n"); - break; - - case 'c': - printf ("option c with value `%s'\n", optarg); - break; - - case '?': - break; - - default: - printf ("?? getopt returned character code 0%o ??\n", c); - } - } - - if (optind < argc) - { - printf ("non-option ARGV-elements: "); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); - } - - exit (0); -} - -#endif /* TEST */ diff --git a/libiberty/getopt1.c b/libiberty/getopt1.c deleted file mode 100644 index 255b1445637..00000000000 --- a/libiberty/getopt1.c +++ /dev/null @@ -1,180 +0,0 @@ -/* getopt_long and getopt_long_only entry points for GNU getopt. - Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2005 - Free Software Foundation, Inc. - - NOTE: This source is derived from an old version taken from the GNU C - Library (glibc). - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, - USA. */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#if !defined __STDC__ || !__STDC__ -/* This is a separate conditional since some stdc systems - reject `defined (const)'. */ -#ifndef const -#define const -#endif -#endif - -#include - -#include "getopt.h" - -/* Comment out all this code if we are using the GNU C Library, and are not - actually compiling the library itself. This code is part of the GNU C - Library, but also included in many other GNU distributions. Compiling - and linking in this code is a waste when using the GNU C library - (especially if it is a shared library). Rather than having every GNU - program understand `configure --with-gnu-libc' and omit the object files, - it is simpler to just do this in the source for each such file. */ - -#define GETOPT_INTERFACE_VERSION 2 -#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 -#include -#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION -#define ELIDE_CODE -#endif -#endif - -#ifndef ELIDE_CODE - - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -#include -#endif - -#ifndef NULL -#define NULL 0 -#endif - -int -getopt_long (int argc, char *const *argv, const char *options, - const struct option *long_options, int *opt_index) -{ - return _getopt_internal (argc, argv, options, long_options, opt_index, 0); -} - -/* Like getopt_long, but '-' as well as '--' can indicate a long option. - If an option that starts with '-' (not '--') doesn't match a long option, - but does match a short option, it is parsed as a short option - instead. */ - -int -getopt_long_only (int argc, char *const *argv, const char *options, - const struct option *long_options, int *opt_index) -{ - return _getopt_internal (argc, argv, options, long_options, opt_index, 1); -} - - -#endif /* Not ELIDE_CODE. */ - -#ifdef TEST - -#include - -int -main (int argc, char **argv) -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - int option_index = 0; - static struct option long_options[] = - { - {"add", 1, 0, 0}, - {"append", 0, 0, 0}, - {"delete", 1, 0, 0}, - {"verbose", 0, 0, 0}, - {"create", 0, 0, 0}, - {"file", 1, 0, 0}, - {0, 0, 0, 0} - }; - - c = getopt_long (argc, argv, "abc:d:0123456789", - long_options, &option_index); - if (c == -1) - break; - - switch (c) - { - case 0: - printf ("option %s", long_options[option_index].name); - if (optarg) - printf (" with arg %s", optarg); - printf ("\n"); - break; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (digit_optind != 0 && digit_optind != this_option_optind) - printf ("digits occur in two different argv-elements.\n"); - digit_optind = this_option_optind; - printf ("option %c\n", c); - break; - - case 'a': - printf ("option a\n"); - break; - - case 'b': - printf ("option b\n"); - break; - - case 'c': - printf ("option c with value `%s'\n", optarg); - break; - - case 'd': - printf ("option d with value `%s'\n", optarg); - break; - - case '?': - break; - - default: - printf ("?? getopt returned character code 0%o ??\n", c); - } - } - - if (optind < argc) - { - printf ("non-option ARGV-elements: "); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); - } - - exit (0); -} - -#endif /* TEST */ diff --git a/libiberty/getpagesize.c b/libiberty/getpagesize.c deleted file mode 100644 index 1c3a26304ea..00000000000 --- a/libiberty/getpagesize.c +++ /dev/null @@ -1,90 +0,0 @@ -/* Emulation of getpagesize() for systems that need it. */ - -/* - -@deftypefn Supplemental int getpagesize (void) - -Returns the number of bytes in a page of memory. This is the -granularity of many of the system memory management routines. No -guarantee is made as to whether or not it is the same as the basic -memory management hardware page size. - -@end deftypefn - -BUGS - - Is intended as a reasonable replacement for systems where this - is not provided as a system call. The value of 4096 may or may - not be correct for the systems where it is returned as the default - value. - -*/ - -#ifndef VMS - -#include "config.h" - -#include -#ifdef HAVE_SYS_PARAM_H -#include -#endif - -#undef GNU_OUR_PAGESIZE -#if defined (HAVE_SYSCONF) && defined (HAVE_UNISTD_H) -#include -#ifdef _SC_PAGESIZE -#define GNU_OUR_PAGESIZE sysconf(_SC_PAGESIZE) -#endif -#endif - -#ifndef GNU_OUR_PAGESIZE -# ifdef PAGESIZE -# define GNU_OUR_PAGESIZE PAGESIZE -# else /* no PAGESIZE */ -# ifdef EXEC_PAGESIZE -# define GNU_OUR_PAGESIZE EXEC_PAGESIZE -# else /* no EXEC_PAGESIZE */ -# ifdef NBPG -# define GNU_OUR_PAGESIZE (NBPG * CLSIZE) -# ifndef CLSIZE -# define CLSIZE 1 -# endif /* CLSIZE */ -# else /* no NBPG */ -# ifdef NBPC -# define GNU_OUR_PAGESIZE NBPC -# else /* no NBPC */ -# define GNU_OUR_PAGESIZE 4096 /* Just punt and use reasonable value */ -# endif /* NBPC */ -# endif /* NBPG */ -# endif /* EXEC_PAGESIZE */ -# endif /* PAGESIZE */ -#endif /* GNU_OUR_PAGESIZE */ - -int -getpagesize (void) -{ - return (GNU_OUR_PAGESIZE); -} - -#else /* VMS */ - -#if 0 /* older distributions of gcc-vms are missing */ -#include -#endif -#ifndef SYI$_PAGE_SIZE /* VMS V5.4 and earlier didn't have this yet */ -#define SYI$_PAGE_SIZE 4452 -#endif -extern unsigned long lib$getsyi(const unsigned short *,...); - -int getpagesize (void) -{ - long pagsiz = 0L; - unsigned short itmcod = SYI$_PAGE_SIZE; - - (void) lib$getsyi (&itmcod, (void *) &pagsiz); - if (pagsiz == 0L) - pagsiz = 512L; /* VAX default */ - return (int) pagsiz; -} - -#endif /* VMS */ diff --git a/libiberty/getpwd.c b/libiberty/getpwd.c deleted file mode 100644 index fa5c132fd6b..00000000000 --- a/libiberty/getpwd.c +++ /dev/null @@ -1,128 +0,0 @@ -/* getpwd.c - get the working directory */ - -/* - -@deftypefn Supplemental char* getpwd (void) - -Returns the current working directory. This implementation caches the -result on the assumption that the process will not call @code{chdir} -between calls to @code{getpwd}. - -@end deftypefn - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#ifndef errno -extern int errno; -#endif - -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif -#ifdef HAVE_SYS_PARAM_H -#include -#endif -#if HAVE_SYS_STAT_H -#include -#endif -#if HAVE_LIMITS_H -#include -#endif - -#include "libiberty.h" - -/* Virtually every UN*X system now in common use (except for pre-4.3-tahoe - BSD systems) now provides getcwd as called for by POSIX. Allow for - the few exceptions to the general rule here. */ - -#if !defined(HAVE_GETCWD) && defined(HAVE_GETWD) -/* Prototype in case the system headers doesn't provide it. */ -extern char *getwd (); -#define getcwd(buf,len) getwd(buf) -#endif - -#ifdef MAXPATHLEN -#define GUESSPATHLEN (MAXPATHLEN + 1) -#else -#define GUESSPATHLEN 100 -#endif - -#if !(defined (VMS) || (defined(_WIN32) && !defined(__CYGWIN__))) - -/* Get the working directory. Use the PWD environment variable if it's - set correctly, since this is faster and gives more uniform answers - to the user. Yield the working directory if successful; otherwise, - yield 0 and set errno. */ - -char * -getpwd (void) -{ - static char *pwd; - static int failure_errno; - - char *p = pwd; - size_t s; - struct stat dotstat, pwdstat; - - if (!p && !(errno = failure_errno)) - { - if (! ((p = getenv ("PWD")) != 0 - && *p == '/' - && stat (p, &pwdstat) == 0 - && stat (".", &dotstat) == 0 - && dotstat.st_ino == pwdstat.st_ino - && dotstat.st_dev == pwdstat.st_dev)) - - /* The shortcut didn't work. Try the slow, ``sure'' way. */ - for (s = GUESSPATHLEN; !getcwd (p = XNEWVEC (char, s), s); s *= 2) - { - int e = errno; - free (p); -#ifdef ERANGE - if (e != ERANGE) -#endif - { - errno = failure_errno = e; - p = 0; - break; - } - } - - /* Cache the result. This assumes that the program does - not invoke chdir between calls to getpwd. */ - pwd = p; - } - return p; -} - -#else /* VMS || _WIN32 && !__CYGWIN__ */ - -#ifndef MAXPATHLEN -#define MAXPATHLEN 255 -#endif - -char * -getpwd (void) -{ - static char *pwd = 0; - - if (!pwd) - pwd = getcwd (XNEWVEC (char, MAXPATHLEN + 1), MAXPATHLEN + 1 -#ifdef VMS - , 0 -#endif - ); - return pwd; -} - -#endif /* VMS || _WIN32 && !__CYGWIN__ */ diff --git a/libiberty/getruntime.c b/libiberty/getruntime.c deleted file mode 100644 index 82f3d2e4185..00000000000 --- a/libiberty/getruntime.c +++ /dev/null @@ -1,116 +0,0 @@ -/* Return time used so far, in microseconds. - Copyright (C) 1994, 1999, 2002 Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#include "config.h" - -#include "ansidecl.h" -#include "libiberty.h" - -/* On some systems (such as WindISS), you must include - to get the definition of "time_t" before you include . */ -#include - -/* There are several ways to get elapsed execution time; unfortunately no - single way is available for all host systems, nor are there reliable - ways to find out which way is correct for a given host. */ - -#ifdef TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# ifdef HAVE_TIME_H -# include -# endif -# endif -#endif - -#if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H) -#include -#endif - -#ifdef HAVE_TIMES -#ifdef HAVE_SYS_PARAM_H -#include -#endif -#include -#endif - -#ifdef HAVE_UNISTD_H -#include -#endif - -/* This is a fallback; if wrong, it will likely make obviously wrong - results. */ - -#ifndef CLOCKS_PER_SEC -#define CLOCKS_PER_SEC 1 -#endif - -#ifdef _SC_CLK_TCK -#define GNU_HZ sysconf(_SC_CLK_TCK) -#else -#ifdef HZ -#define GNU_HZ HZ -#else -#ifdef CLOCKS_PER_SEC -#define GNU_HZ CLOCKS_PER_SEC -#endif -#endif -#endif - -/* - -@deftypefn Replacement long get_run_time (void) - -Returns the time used so far, in microseconds. If possible, this is -the time used by this process, else it is the elapsed time since the -process started. - -@end deftypefn - -*/ - -long -get_run_time (void) -{ -#if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H) - struct rusage rusage; - - getrusage (0, &rusage); - return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec - + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec); -#else /* ! HAVE_GETRUSAGE */ -#ifdef HAVE_TIMES - struct tms tms; - - times (&tms); - return (tms.tms_utime + tms.tms_stime) * (1000000 / GNU_HZ); -#else /* ! HAVE_TIMES */ - /* Fall back on clock and hope it's correctly implemented. */ - const long clocks_per_sec = CLOCKS_PER_SEC; - if (clocks_per_sec <= 1000000) - return clock () * (1000000 / clocks_per_sec); - else - return clock () / clocks_per_sec; -#endif /* HAVE_TIMES */ -#endif /* HAVE_GETRUSAGE */ -} diff --git a/libiberty/gettimeofday.c b/libiberty/gettimeofday.c deleted file mode 100644 index fca16794028..00000000000 --- a/libiberty/gettimeofday.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "config.h" -#include "libiberty.h" -#ifdef HAVE_TIME_H -#include -#endif -#ifdef HAVE_SYS_TIME_H -#include -#endif - -/* - -@deftypefn Supplemental int gettimeofday (struct timeval *@var{tp}, void *@var{tz}) - -Writes the current time to @var{tp}. This implementation requires -that @var{tz} be NULL. Returns 0 on success, -1 on failure. - -@end deftypefn - -*/ - -int -gettimeofday (struct timeval *tp, void *tz) -{ - if (tz) - abort (); - tp->tv_usec = 0; - if (time (&tp->tv_sec) == (time_t) -1) - return -1; - return 0; -} diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c deleted file mode 100644 index a5671a0a768..00000000000 --- a/libiberty/hashtab.c +++ /dev/null @@ -1,934 +0,0 @@ -/* An expandable hash tables datatype. - Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 - Free Software Foundation, Inc. - Contributed by Vladimir Makarov (vmakarov@cygnus.com). - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* This package implements basic hash table functionality. It is possible - to search for an entry, create an entry and destroy an entry. - - Elements in the table are generic pointers. - - The size of the table is not fixed; if the occupancy of the table - grows too high the hash table will be expanded. - - The abstract data implementation is based on generalized Algorithm D - from Knuth's book "The art of computer programming". Hash table is - expanded by creation of new hash table and transferring elements from - the old table to the new table. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_MALLOC_H -#include -#endif -#ifdef HAVE_LIMITS_H -#include -#endif -#ifdef HAVE_STDINT_H -#include -#endif - -#include - -#include "libiberty.h" -#include "ansidecl.h" -#include "hashtab.h" - -#ifndef CHAR_BIT -#define CHAR_BIT 8 -#endif - -static unsigned int higher_prime_index (unsigned long); -static hashval_t htab_mod_1 (hashval_t, hashval_t, hashval_t, int); -static hashval_t htab_mod (hashval_t, htab_t); -static hashval_t htab_mod_m2 (hashval_t, htab_t); -static hashval_t hash_pointer (const void *); -static int eq_pointer (const void *, const void *); -static int htab_expand (htab_t); -static PTR *find_empty_slot_for_expand (htab_t, hashval_t); - -/* At some point, we could make these be NULL, and modify the - hash-table routines to handle NULL specially; that would avoid - function-call overhead for the common case of hashing pointers. */ -htab_hash htab_hash_pointer = hash_pointer; -htab_eq htab_eq_pointer = eq_pointer; - -/* Table of primes and multiplicative inverses. - - Note that these are not minimally reduced inverses. Unlike when generating - code to divide by a constant, we want to be able to use the same algorithm - all the time. All of these inverses (are implied to) have bit 32 set. - - For the record, here's the function that computed the table; it's a - vastly simplified version of the function of the same name from gcc. */ - -#if 0 -unsigned int -ceil_log2 (unsigned int x) -{ - int i; - for (i = 31; i >= 0 ; --i) - if (x > (1u << i)) - return i+1; - abort (); -} - -unsigned int -choose_multiplier (unsigned int d, unsigned int *mlp, unsigned char *shiftp) -{ - unsigned long long mhigh; - double nx; - int lgup, post_shift; - int pow, pow2; - int n = 32, precision = 32; - - lgup = ceil_log2 (d); - pow = n + lgup; - pow2 = n + lgup - precision; - - nx = ldexp (1.0, pow) + ldexp (1.0, pow2); - mhigh = nx / d; - - *shiftp = lgup - 1; - *mlp = mhigh; - return mhigh >> 32; -} -#endif - -struct prime_ent -{ - hashval_t prime; - hashval_t inv; - hashval_t inv_m2; /* inverse of prime-2 */ - hashval_t shift; -}; - -static struct prime_ent const prime_tab[] = { - { 7, 0x24924925, 0x9999999b, 2 }, - { 13, 0x3b13b13c, 0x745d1747, 3 }, - { 31, 0x08421085, 0x1a7b9612, 4 }, - { 61, 0x0c9714fc, 0x15b1e5f8, 5 }, - { 127, 0x02040811, 0x0624dd30, 6 }, - { 251, 0x05197f7e, 0x073260a5, 7 }, - { 509, 0x01824366, 0x02864fc8, 8 }, - { 1021, 0x00c0906d, 0x014191f7, 9 }, - { 2039, 0x0121456f, 0x0161e69e, 10 }, - { 4093, 0x00300902, 0x00501908, 11 }, - { 8191, 0x00080041, 0x00180241, 12 }, - { 16381, 0x000c0091, 0x00140191, 13 }, - { 32749, 0x002605a5, 0x002a06e6, 14 }, - { 65521, 0x000f00e2, 0x00110122, 15 }, - { 131071, 0x00008001, 0x00018003, 16 }, - { 262139, 0x00014002, 0x0001c004, 17 }, - { 524287, 0x00002001, 0x00006001, 18 }, - { 1048573, 0x00003001, 0x00005001, 19 }, - { 2097143, 0x00004801, 0x00005801, 20 }, - { 4194301, 0x00000c01, 0x00001401, 21 }, - { 8388593, 0x00001e01, 0x00002201, 22 }, - { 16777213, 0x00000301, 0x00000501, 23 }, - { 33554393, 0x00001381, 0x00001481, 24 }, - { 67108859, 0x00000141, 0x000001c1, 25 }, - { 134217689, 0x000004e1, 0x00000521, 26 }, - { 268435399, 0x00000391, 0x000003b1, 27 }, - { 536870909, 0x00000019, 0x00000029, 28 }, - { 1073741789, 0x0000008d, 0x00000095, 29 }, - { 2147483647, 0x00000003, 0x00000007, 30 }, - /* Avoid "decimal constant so large it is unsigned" for 4294967291. */ - { 0xfffffffb, 0x00000006, 0x00000008, 31 } -}; - -/* The following function returns an index into the above table of the - nearest prime number which is greater than N, and near a power of two. */ - -static unsigned int -higher_prime_index (unsigned long n) -{ - unsigned int low = 0; - unsigned int high = sizeof(prime_tab) / sizeof(prime_tab[0]); - - while (low != high) - { - unsigned int mid = low + (high - low) / 2; - if (n > prime_tab[mid].prime) - low = mid + 1; - else - high = mid; - } - - /* If we've run out of primes, abort. */ - if (n > prime_tab[low].prime) - { - fprintf (stderr, "Cannot find prime bigger than %lu\n", n); - abort (); - } - - return low; -} - -/* Returns a hash code for P. */ - -static hashval_t -hash_pointer (const PTR p) -{ - return (hashval_t) ((long)p >> 3); -} - -/* Returns non-zero if P1 and P2 are equal. */ - -static int -eq_pointer (const PTR p1, const PTR p2) -{ - return p1 == p2; -} - - -/* The parens around the function names in the next two definitions - are essential in order to prevent macro expansions of the name. - The bodies, however, are expanded as expected, so they are not - recursive definitions. */ - -/* Return the current size of given hash table. */ - -#define htab_size(htab) ((htab)->size) - -size_t -(htab_size) (htab_t htab) -{ - return htab_size (htab); -} - -/* Return the current number of elements in given hash table. */ - -#define htab_elements(htab) ((htab)->n_elements - (htab)->n_deleted) - -size_t -(htab_elements) (htab_t htab) -{ - return htab_elements (htab); -} - -/* Return X % Y. */ - -static inline hashval_t -htab_mod_1 (hashval_t x, hashval_t y, hashval_t inv, int shift) -{ - /* The multiplicative inverses computed above are for 32-bit types, and - requires that we be able to compute a highpart multiply. */ -#ifdef UNSIGNED_64BIT_TYPE - __extension__ typedef UNSIGNED_64BIT_TYPE ull; - if (sizeof (hashval_t) * CHAR_BIT <= 32) - { - hashval_t t1, t2, t3, t4, q, r; - - t1 = ((ull)x * inv) >> 32; - t2 = x - t1; - t3 = t2 >> 1; - t4 = t1 + t3; - q = t4 >> shift; - r = x - (q * y); - - return r; - } -#endif - - /* Otherwise just use the native division routines. */ - return x % y; -} - -/* Compute the primary hash for HASH given HTAB's current size. */ - -static inline hashval_t -htab_mod (hashval_t hash, htab_t htab) -{ - const struct prime_ent *p = &prime_tab[htab->size_prime_index]; - return htab_mod_1 (hash, p->prime, p->inv, p->shift); -} - -/* Compute the secondary hash for HASH given HTAB's current size. */ - -static inline hashval_t -htab_mod_m2 (hashval_t hash, htab_t htab) -{ - const struct prime_ent *p = &prime_tab[htab->size_prime_index]; - return 1 + htab_mod_1 (hash, p->prime - 2, p->inv_m2, p->shift); -} - -/* This function creates table with length slightly longer than given - source length. Created hash table is initiated as empty (all the - hash table entries are HTAB_EMPTY_ENTRY). The function returns the - created hash table, or NULL if memory allocation fails. */ - -htab_t -htab_create_alloc (size_t size, htab_hash hash_f, htab_eq eq_f, - htab_del del_f, htab_alloc alloc_f, htab_free free_f) -{ - htab_t result; - unsigned int size_prime_index; - - size_prime_index = higher_prime_index (size); - size = prime_tab[size_prime_index].prime; - - result = (htab_t) (*alloc_f) (1, sizeof (struct htab)); - if (result == NULL) - return NULL; - result->entries = (PTR *) (*alloc_f) (size, sizeof (PTR)); - if (result->entries == NULL) - { - if (free_f != NULL) - (*free_f) (result); - return NULL; - } - result->size = size; - result->size_prime_index = size_prime_index; - result->hash_f = hash_f; - result->eq_f = eq_f; - result->del_f = del_f; - result->alloc_f = alloc_f; - result->free_f = free_f; - return result; -} - -/* As above, but use the variants of alloc_f and free_f which accept - an extra argument. */ - -htab_t -htab_create_alloc_ex (size_t size, htab_hash hash_f, htab_eq eq_f, - htab_del del_f, void *alloc_arg, - htab_alloc_with_arg alloc_f, - htab_free_with_arg free_f) -{ - htab_t result; - unsigned int size_prime_index; - - size_prime_index = higher_prime_index (size); - size = prime_tab[size_prime_index].prime; - - result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab)); - if (result == NULL) - return NULL; - result->entries = (PTR *) (*alloc_f) (alloc_arg, size, sizeof (PTR)); - if (result->entries == NULL) - { - if (free_f != NULL) - (*free_f) (alloc_arg, result); - return NULL; - } - result->size = size; - result->size_prime_index = size_prime_index; - result->hash_f = hash_f; - result->eq_f = eq_f; - result->del_f = del_f; - result->alloc_arg = alloc_arg; - result->alloc_with_arg_f = alloc_f; - result->free_with_arg_f = free_f; - return result; -} - -/* Update the function pointers and allocation parameter in the htab_t. */ - -void -htab_set_functions_ex (htab_t htab, htab_hash hash_f, htab_eq eq_f, - htab_del del_f, PTR alloc_arg, - htab_alloc_with_arg alloc_f, htab_free_with_arg free_f) -{ - htab->hash_f = hash_f; - htab->eq_f = eq_f; - htab->del_f = del_f; - htab->alloc_arg = alloc_arg; - htab->alloc_with_arg_f = alloc_f; - htab->free_with_arg_f = free_f; -} - -/* These functions exist solely for backward compatibility. */ - -#undef htab_create -htab_t -htab_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f) -{ - return htab_create_alloc (size, hash_f, eq_f, del_f, xcalloc, free); -} - -htab_t -htab_try_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f) -{ - return htab_create_alloc (size, hash_f, eq_f, del_f, calloc, free); -} - -/* This function frees all memory allocated for given hash table. - Naturally the hash table must already exist. */ - -void -htab_delete (htab_t htab) -{ - size_t size = htab_size (htab); - PTR *entries = htab->entries; - int i; - - if (htab->del_f) - for (i = size - 1; i >= 0; i--) - if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY) - (*htab->del_f) (entries[i]); - - if (htab->free_f != NULL) - { - (*htab->free_f) (entries); - (*htab->free_f) (htab); - } - else if (htab->free_with_arg_f != NULL) - { - (*htab->free_with_arg_f) (htab->alloc_arg, entries); - (*htab->free_with_arg_f) (htab->alloc_arg, htab); - } -} - -/* This function clears all entries in the given hash table. */ - -void -htab_empty (htab_t htab) -{ - size_t size = htab_size (htab); - PTR *entries = htab->entries; - int i; - - if (htab->del_f) - for (i = size - 1; i >= 0; i--) - if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY) - (*htab->del_f) (entries[i]); - - memset (entries, 0, size * sizeof (PTR)); -} - -/* Similar to htab_find_slot, but without several unwanted side effects: - - Does not call htab->eq_f when it finds an existing entry. - - Does not change the count of elements/searches/collisions in the - hash table. - This function also assumes there are no deleted entries in the table. - HASH is the hash value for the element to be inserted. */ - -static PTR * -find_empty_slot_for_expand (htab_t htab, hashval_t hash) -{ - hashval_t index = htab_mod (hash, htab); - size_t size = htab_size (htab); - PTR *slot = htab->entries + index; - hashval_t hash2; - - if (*slot == HTAB_EMPTY_ENTRY) - return slot; - else if (*slot == HTAB_DELETED_ENTRY) - abort (); - - hash2 = htab_mod_m2 (hash, htab); - for (;;) - { - index += hash2; - if (index >= size) - index -= size; - - slot = htab->entries + index; - if (*slot == HTAB_EMPTY_ENTRY) - return slot; - else if (*slot == HTAB_DELETED_ENTRY) - abort (); - } -} - -/* The following function changes size of memory allocated for the - entries and repeatedly inserts the table elements. The occupancy - of the table after the call will be about 50%. Naturally the hash - table must already exist. Remember also that the place of the - table entries is changed. If memory allocation failures are allowed, - this function will return zero, indicating that the table could not be - expanded. If all goes well, it will return a non-zero value. */ - -static int -htab_expand (htab_t htab) -{ - PTR *oentries; - PTR *olimit; - PTR *p; - PTR *nentries; - size_t nsize, osize, elts; - unsigned int oindex, nindex; - - oentries = htab->entries; - oindex = htab->size_prime_index; - osize = htab->size; - olimit = oentries + osize; - elts = htab_elements (htab); - - /* Resize only when table after removal of unused elements is either - too full or too empty. */ - if (elts * 2 > osize || (elts * 8 < osize && osize > 32)) - { - nindex = higher_prime_index (elts * 2); - nsize = prime_tab[nindex].prime; - } - else - { - nindex = oindex; - nsize = osize; - } - - if (htab->alloc_with_arg_f != NULL) - nentries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize, - sizeof (PTR *)); - else - nentries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *)); - if (nentries == NULL) - return 0; - htab->entries = nentries; - htab->size = nsize; - htab->size_prime_index = nindex; - htab->n_elements -= htab->n_deleted; - htab->n_deleted = 0; - - p = oentries; - do - { - PTR x = *p; - - if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY) - { - PTR *q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x)); - - *q = x; - } - - p++; - } - while (p < olimit); - - if (htab->free_f != NULL) - (*htab->free_f) (oentries); - else if (htab->free_with_arg_f != NULL) - (*htab->free_with_arg_f) (htab->alloc_arg, oentries); - return 1; -} - -/* This function searches for a hash table entry equal to the given - element. It cannot be used to insert or delete an element. */ - -PTR -htab_find_with_hash (htab_t htab, const PTR element, hashval_t hash) -{ - hashval_t index, hash2; - size_t size; - PTR entry; - - htab->searches++; - size = htab_size (htab); - index = htab_mod (hash, htab); - - entry = htab->entries[index]; - if (entry == HTAB_EMPTY_ENTRY - || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element))) - return entry; - - hash2 = htab_mod_m2 (hash, htab); - for (;;) - { - htab->collisions++; - index += hash2; - if (index >= size) - index -= size; - - entry = htab->entries[index]; - if (entry == HTAB_EMPTY_ENTRY - || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element))) - return entry; - } -} - -/* Like htab_find_slot_with_hash, but compute the hash value from the - element. */ - -PTR -htab_find (htab_t htab, const PTR element) -{ - return htab_find_with_hash (htab, element, (*htab->hash_f) (element)); -} - -/* This function searches for a hash table slot containing an entry - equal to the given element. To delete an entry, call this with - insert=NO_INSERT, then call htab_clear_slot on the slot returned - (possibly after doing some checks). To insert an entry, call this - with insert=INSERT, then write the value you want into the returned - slot. When inserting an entry, NULL may be returned if memory - allocation fails. */ - -PTR * -htab_find_slot_with_hash (htab_t htab, const PTR element, - hashval_t hash, enum insert_option insert) -{ - PTR *first_deleted_slot; - hashval_t index, hash2; - size_t size; - PTR entry; - - size = htab_size (htab); - if (insert == INSERT && size * 3 <= htab->n_elements * 4) - { - if (htab_expand (htab) == 0) - return NULL; - size = htab_size (htab); - } - - index = htab_mod (hash, htab); - - htab->searches++; - first_deleted_slot = NULL; - - entry = htab->entries[index]; - if (entry == HTAB_EMPTY_ENTRY) - goto empty_entry; - else if (entry == HTAB_DELETED_ENTRY) - first_deleted_slot = &htab->entries[index]; - else if ((*htab->eq_f) (entry, element)) - return &htab->entries[index]; - - hash2 = htab_mod_m2 (hash, htab); - for (;;) - { - htab->collisions++; - index += hash2; - if (index >= size) - index -= size; - - entry = htab->entries[index]; - if (entry == HTAB_EMPTY_ENTRY) - goto empty_entry; - else if (entry == HTAB_DELETED_ENTRY) - { - if (!first_deleted_slot) - first_deleted_slot = &htab->entries[index]; - } - else if ((*htab->eq_f) (entry, element)) - return &htab->entries[index]; - } - - empty_entry: - if (insert == NO_INSERT) - return NULL; - - if (first_deleted_slot) - { - htab->n_deleted--; - *first_deleted_slot = HTAB_EMPTY_ENTRY; - return first_deleted_slot; - } - - htab->n_elements++; - return &htab->entries[index]; -} - -/* Like htab_find_slot_with_hash, but compute the hash value from the - element. */ - -PTR * -htab_find_slot (htab_t htab, const PTR element, enum insert_option insert) -{ - return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element), - insert); -} - -/* This function deletes an element with the given value from hash - table (the hash is computed from the element). If there is no matching - element in the hash table, this function does nothing. */ - -void -htab_remove_elt (htab_t htab, PTR element) -{ - htab_remove_elt_with_hash (htab, element, (*htab->hash_f) (element)); -} - - -/* This function deletes an element with the given value from hash - table. If there is no matching element in the hash table, this - function does nothing. */ - -void -htab_remove_elt_with_hash (htab_t htab, PTR element, hashval_t hash) -{ - PTR *slot; - - slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT); - if (*slot == HTAB_EMPTY_ENTRY) - return; - - if (htab->del_f) - (*htab->del_f) (*slot); - - *slot = HTAB_DELETED_ENTRY; - htab->n_deleted++; -} - -/* This function clears a specified slot in a hash table. It is - useful when you've already done the lookup and don't want to do it - again. */ - -void -htab_clear_slot (htab_t htab, PTR *slot) -{ - if (slot < htab->entries || slot >= htab->entries + htab_size (htab) - || *slot == HTAB_EMPTY_ENTRY || *slot == HTAB_DELETED_ENTRY) - abort (); - - if (htab->del_f) - (*htab->del_f) (*slot); - - *slot = HTAB_DELETED_ENTRY; - htab->n_deleted++; -} - -/* This function scans over the entire hash table calling - CALLBACK for each live entry. If CALLBACK returns false, - the iteration stops. INFO is passed as CALLBACK's second - argument. */ - -void -htab_traverse_noresize (htab_t htab, htab_trav callback, PTR info) -{ - PTR *slot; - PTR *limit; - - slot = htab->entries; - limit = slot + htab_size (htab); - - do - { - PTR x = *slot; - - if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY) - if (!(*callback) (slot, info)) - break; - } - while (++slot < limit); -} - -/* Like htab_traverse_noresize, but does resize the table when it is - too empty to improve effectivity of subsequent calls. */ - -void -htab_traverse (htab_t htab, htab_trav callback, PTR info) -{ - if (htab_elements (htab) * 8 < htab_size (htab)) - htab_expand (htab); - - htab_traverse_noresize (htab, callback, info); -} - -/* Return the fraction of fixed collisions during all work with given - hash table. */ - -double -htab_collisions (htab_t htab) -{ - if (htab->searches == 0) - return 0.0; - - return (double) htab->collisions / (double) htab->searches; -} - -/* Hash P as a null-terminated string. - - Copied from gcc/hashtable.c. Zack had the following to say with respect - to applicability, though note that unlike hashtable.c, this hash table - implementation re-hashes rather than chain buckets. - - http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01021.html - From: Zack Weinberg - Date: Fri, 17 Aug 2001 02:15:56 -0400 - - I got it by extracting all the identifiers from all the source code - I had lying around in mid-1999, and testing many recurrences of - the form "H_n = H_{n-1} * K + c_n * L + M" where K, L, M were either - prime numbers or the appropriate identity. This was the best one. - I don't remember exactly what constituted "best", except I was - looking at bucket-length distributions mostly. - - So it should be very good at hashing identifiers, but might not be - as good at arbitrary strings. - - I'll add that it thoroughly trounces the hash functions recommended - for this use at http://burtleburtle.net/bob/hash/index.html, both - on speed and bucket distribution. I haven't tried it against the - function they just started using for Perl's hashes. */ - -hashval_t -htab_hash_string (const PTR p) -{ - const unsigned char *str = (const unsigned char *) p; - hashval_t r = 0; - unsigned char c; - - while ((c = *str++) != 0) - r = r * 67 + c - 113; - - return r; -} - -/* DERIVED FROM: --------------------------------------------------------------------- -lookup2.c, by Bob Jenkins, December 1996, Public Domain. -hash(), hash2(), hash3, and mix() are externally useful functions. -Routines to test the hash are included if SELF_TEST is defined. -You can use this free for any purpose. It has no warranty. --------------------------------------------------------------------- -*/ - -/* --------------------------------------------------------------------- -mix -- mix 3 32-bit values reversibly. -For every delta with one or two bit set, and the deltas of all three - high bits or all three low bits, whether the original value of a,b,c - is almost all zero or is uniformly distributed, -* If mix() is run forward or backward, at least 32 bits in a,b,c - have at least 1/4 probability of changing. -* If mix() is run forward, every bit of c will change between 1/3 and - 2/3 of the time. (Well, 22/100 and 78/100 for some 2-bit deltas.) -mix() was built out of 36 single-cycle latency instructions in a - structure that could supported 2x parallelism, like so: - a -= b; - a -= c; x = (c>>13); - b -= c; a ^= x; - b -= a; x = (a<<8); - c -= a; b ^= x; - c -= b; x = (b>>13); - ... - Unfortunately, superscalar Pentiums and Sparcs can't take advantage - of that parallelism. They've also turned some of those single-cycle - latency instructions into multi-cycle latency instructions. Still, - this is the fastest good hash I could find. There were about 2^^68 - to choose from. I only looked at a billion or so. --------------------------------------------------------------------- -*/ -/* same, but slower, works on systems that might have 8 byte hashval_t's */ -#define mix(a,b,c) \ -{ \ - a -= b; a -= c; a ^= (c>>13); \ - b -= c; b -= a; b ^= (a<< 8); \ - c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \ - a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \ - b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \ - c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \ - a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \ - b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \ - c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \ -} - -/* --------------------------------------------------------------------- -hash() -- hash a variable-length key into a 32-bit value - k : the key (the unaligned variable-length array of bytes) - len : the length of the key, counting by bytes - level : can be any 4-byte value -Returns a 32-bit value. Every bit of the key affects every bit of -the return value. Every 1-bit and 2-bit delta achieves avalanche. -About 36+6len instructions. - -The best hash table sizes are powers of 2. There is no need to do -mod a prime (mod is sooo slow!). If you need less than 32 bits, -use a bitmask. For example, if you need only 10 bits, do - h = (h & hashmask(10)); -In which case, the hash table should have hashsize(10) elements. - -If you are hashing n strings (ub1 **)k, do it like this: - for (i=0, h=0; i= 12) /* aligned */ - { - a += *(hashval_t *)(k+0); - b += *(hashval_t *)(k+4); - c += *(hashval_t *)(k+8); - mix(a,b,c); - k += 12; len -= 12; - } - else /* unaligned */ -#endif - while (len >= 12) - { - a += (k[0] +((hashval_t)k[1]<<8) +((hashval_t)k[2]<<16) +((hashval_t)k[3]<<24)); - b += (k[4] +((hashval_t)k[5]<<8) +((hashval_t)k[6]<<16) +((hashval_t)k[7]<<24)); - c += (k[8] +((hashval_t)k[9]<<8) +((hashval_t)k[10]<<16)+((hashval_t)k[11]<<24)); - mix(a,b,c); - k += 12; len -= 12; - } - - /*------------------------------------- handle the last 11 bytes */ - c += length; - switch(len) /* all the case statements fall through */ - { - case 11: c+=((hashval_t)k[10]<<24); - case 10: c+=((hashval_t)k[9]<<16); - case 9 : c+=((hashval_t)k[8]<<8); - /* the first byte of c is reserved for the length */ - case 8 : b+=((hashval_t)k[7]<<24); - case 7 : b+=((hashval_t)k[6]<<16); - case 6 : b+=((hashval_t)k[5]<<8); - case 5 : b+=k[4]; - case 4 : a+=((hashval_t)k[3]<<24); - case 3 : a+=((hashval_t)k[2]<<16); - case 2 : a+=((hashval_t)k[1]<<8); - case 1 : a+=k[0]; - /* case 0: nothing left to add */ - } - mix(a,b,c); - /*-------------------------------------------- report the result */ - return c; -} diff --git a/libiberty/hex.c b/libiberty/hex.c deleted file mode 100644 index 86ba0b5b872..00000000000 --- a/libiberty/hex.c +++ /dev/null @@ -1,192 +0,0 @@ -/* Hex character manipulation support. - Copyright (C) 1995, 2001 Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#include /* for EOF */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "libiberty.h" -#include "safe-ctype.h" /* for HOST_CHARSET_ASCII */ - -#if EOF != -1 - #error "hex.c requires EOF == -1" -#endif - -/* - -@deftypefn Extension void hex_init (void) - -Initializes the array mapping the current character set to -corresponding hex values. This function must be called before any -call to @code{hex_p} or @code{hex_value}. If you fail to call it, a -default ASCII-based table will normally be used on ASCII systems. - -@end deftypefn - -@deftypefn Extension int hex_p (int @var{c}) - -Evaluates to non-zero if the given character is a valid hex character, -or zero if it is not. Note that the value you pass will be cast to -@code{unsigned char} within the macro. - -@end deftypefn - -@deftypefn Extension {unsigned int} hex_value (int @var{c}) - -Returns the numeric equivalent of the given character when interpreted -as a hexidecimal digit. The result is undefined if you pass an -invalid hex digit. Note that the value you pass will be cast to -@code{unsigned char} within the macro. - -The @code{hex_value} macro returns @code{unsigned int}, rather than -signed @code{int}, to make it easier to use in parsing addresses from -hex dump files: a signed @code{int} would be sign-extended when -converted to a wider unsigned type --- like @code{bfd_vma}, on some -systems. - -@end deftypefn - -@undocumented _hex_array_size -@undocumented _hex_bad -@undocumented _hex_value - -*/ - - -/* Are we ASCII? */ -#if HOST_CHARSET == HOST_CHARSET_ASCII - -const unsigned char _hex_value[_hex_array_size] = -{ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* NUL SOH STX ETX */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* EOT ENQ ACK BEL */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* BS HT LF VT */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FF CR SO SI */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DLE DC1 DC2 DC3 */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DC4 NAK SYN ETB */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* CAN EM SUB ESC */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FS GS RS US */ - - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* SP ! " # */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* $ % & ' */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* ( ) * + */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* , - . / */ - 0, 1, 2, 3, /* 0 1 2 3 */ - 4, 5, 6, 7, /* 4 5 6 7 */ - 8, 9, _hex_bad, _hex_bad, /* 8 9 : ; */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* < = > ? */ - - _hex_bad, 10, 11, 12, /* @ A B C */ - 13, 14, 15, _hex_bad, /* D E F G */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* H I J K */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* L M N O */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* P Q R S */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* T U V W */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* X Y Z [ */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* \ ] ^ _ */ - - _hex_bad, 10, 11, 12, /* ` a b c */ - 13, 14, 15, _hex_bad, /* d e f g */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* h i j k */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* l m n o */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* p q r s */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* t u v w */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* x y z { */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* | } ~ DEL */ - - /* The high half of unsigned char, all values are _hex_bad. */ - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, - _hex_bad, _hex_bad, _hex_bad, _hex_bad, -}; -#define HEX_TABLE_INITIALIZED - -#else - -unsigned char _hex_value[_hex_array_size]; - -#endif /* not ASCII */ - -void -hex_init (void) -{ -#ifndef HEX_TABLE_INITIALIZED - int i; - - for (i=0; i<_hex_array_size; i++) - { - switch (i) - { - case '0': _hex_value[i] = 0; break; - case '1': _hex_value[i] = 1; break; - case '2': _hex_value[i] = 2; break; - case '3': _hex_value[i] = 3; break; - case '4': _hex_value[i] = 4; break; - case '5': _hex_value[i] = 5; break; - case '6': _hex_value[i] = 6; break; - case '7': _hex_value[i] = 7; break; - case '8': _hex_value[i] = 8; break; - case '9': _hex_value[i] = 9; break; - - case 'a': case 'A': _hex_value[i] = 10; break; - case 'b': case 'B': _hex_value[i] = 11; break; - case 'c': case 'C': _hex_value[i] = 12; break; - case 'd': case 'D': _hex_value[i] = 13; break; - case 'e': case 'E': _hex_value[i] = 14; break; - case 'f': case 'F': _hex_value[i] = 15; break; - - default: - _hex_value[i] = _hex_bad; - break; - } - } -#endif -} diff --git a/libiberty/index.c b/libiberty/index.c deleted file mode 100644 index acd0a45fc02..00000000000 --- a/libiberty/index.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Stub implementation of (obsolete) index(). */ - -/* - -@deftypefn Supplemental char* index (char *@var{s}, int @var{c}) - -Returns a pointer to the first occurrence of the character @var{c} in -the string @var{s}, or @code{NULL} if not found. The use of @code{index} is -deprecated in new programs in favor of @code{strchr}. - -@end deftypefn - -*/ - -extern char * strchr(const char *, int); - -char * -index (const char *s, int c) -{ - return strchr (s, c); -} diff --git a/libiberty/insque.c b/libiberty/insque.c deleted file mode 100644 index 3473bb92b31..00000000000 --- a/libiberty/insque.c +++ /dev/null @@ -1,50 +0,0 @@ -/* insque(3C) routines - This file is in the public domain. */ - -/* - -@deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred}) -@deftypefnx Supplemental void remque (struct qelem *@var{elem}) - -Routines to manipulate queues built from doubly linked lists. The -@code{insque} routine inserts @var{elem} in the queue immediately -after @var{pred}. The @code{remque} routine removes @var{elem} from -its containing queue. These routines expect to be passed pointers to -structures which have as their first members a forward pointer and a -back pointer, like this prototype (although no prototype is provided): - -@example -struct qelem @{ - struct qelem *q_forw; - struct qelem *q_back; - char q_data[]; -@}; -@end example - -@end deftypefn - -*/ - - -struct qelem { - struct qelem *q_forw; - struct qelem *q_back; -}; - - -void -insque (struct qelem *elem, struct qelem *pred) -{ - elem -> q_forw = pred -> q_forw; - pred -> q_forw -> q_back = elem; - elem -> q_back = pred; - pred -> q_forw = elem; -} - - -void -remque (struct qelem *elem) -{ - elem -> q_forw -> q_back = elem -> q_back; - elem -> q_back -> q_forw = elem -> q_forw; -} diff --git a/libiberty/lbasename.c b/libiberty/lbasename.c deleted file mode 100644 index 56fcd625072..00000000000 --- a/libiberty/lbasename.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Libiberty basename. Like basename, but is not overridden by the - system C library. - Copyright (C) 2001, 2002 Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* - -@deftypefn Replacement {const char*} lbasename (const char *@var{name}) - -Given a pointer to a string containing a typical pathname -(@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the -last component of the pathname (@samp{ls.c} in this case). The -returned pointer is guaranteed to lie within the original -string. This latter fact is not true of many vendor C -libraries, which return special strings or modify the passed -strings for particular input. - -In particular, the empty string returns the same empty string, -and a path ending in @code{/} returns the empty string after it. - -@end deftypefn - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "ansidecl.h" -#include "libiberty.h" -#include "safe-ctype.h" -#include "filenames.h" - -const char * -lbasename (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over a possible disk name. */ - if (ISALPHA (name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - - return base; -} diff --git a/libiberty/libiberty.texi b/libiberty/libiberty.texi deleted file mode 100644 index d3701e69dfa..00000000000 --- a/libiberty/libiberty.texi +++ /dev/null @@ -1,324 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@setfilename libiberty.info -@settitle @sc{gnu} libiberty -@c %**end of header - -@syncodeindex fn cp -@syncodeindex vr cp -@syncodeindex pg cp - -@finalout -@c %**end of header - -@dircategory GNU libraries -@direntry -* Libiberty: (libiberty). Library of utility functions which - are missing or broken on some systems. -@end direntry - -@macro libib -@code{libiberty} -@end macro - -@c The edition date is written in three locations. Search for 'thedate'. -@ifinfo -This manual describes the GNU @libib library of utility subroutines. -This edition accompanies GCC 3, September 2001. - -Copyright @copyright{} 2001 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, with no Front-Cover Texts, and with no - Back-Cover Texts. A copy of the license is included in the - section entitled ``GNU Free Documentation License''. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries a copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore -@end ifinfo - - -@c The edition date is written in three locations. Search for 'thedate'. -@titlepage -@title @sc{gnu} libiberty -@subtitle September 2001 -@subtitle for GCC 3 -@author Phil Edwards et al. -@page - - -@vskip 0pt plus 1filll -Copyright @copyright{} 2001 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, with no Front-Cover Texts, and with no - Back-Cover Texts. A copy of the license is included in the - section entitled ``GNU Free Documentation License''. - -@end titlepage -@contents -@page - -@ifnottex -@node Top,Using,, -@top Introduction - -The @libib{} library is a collection of subroutines used by various -GNU programs. It is available under the Library General Public -License; for more information, see @ref{Library Copying}. - -@c The edition date is written in three locations. Search for 'thedate'. -This edition accompanies GCC 3, September 2001. - -@end ifnottex - -@menu -* Using:: How to use libiberty in your code. - -* Overview:: Overview of available function groups. - -* Functions:: Available functions, macros, and global variables. - -* Obstacks:: Object Stacks. - -* Licenses:: The various licenses under which libiberty sources are - distributed. - -* Index:: Index of functions and categories. -@end menu - -@node Using -@chapter Using -@cindex using libiberty -@cindex libiberty usage -@cindex how to use - -@c THIS SECTION IS CRAP AND NEEDS REWRITING BADLY. - -To date, @libib{} is generally not installed on its own. It has evolved -over years but does not have its own version number nor release schedule. - -Possibly the easiest way to use @libib{} in your projects is to drop the -@libib{} code into your project's sources, and to build the library along -with your own sources; the library would then be linked in at the end. This -prevents any possible version mismatches with other copies of libiberty -elsewhere on the system. - -Passing @option{--enable-install-libiberty} to the @command{configure} -script when building @libib{} causes the header files and archive library -to be installed when @kbd{make install} is run. This option also takes -an (optional) argument to specify the installation location, in the same -manner as @option{--prefix}. - -For your own projects, an approach which offers stability and flexibility -is to include @libib{} with your code, but allow the end user to optionally -choose to use a previously-installed version instead. In this way the -user may choose (for example) to install @libib{} as part of GCC, and use -that version for all software built with that compiler. (This approach -has proven useful with software using the GNU @code{readline} library.) - -Making use of @libib{} code usually requires that you include one or more -header files from the @libib{} distribution. (They will be named as -necessary in the function descriptions.) At link time, you will need to -add @option{-liberty} to your link command invocation. - - -@node Overview -@chapter Overview - -Functions contained in @libib{} can be divided into three general categories. - - -@menu -* Supplemental Functions:: Providing functions which don't exist - on older operating systems. - -* Replacement Functions:: These functions are sometimes buggy or - unpredictable on some operating systems. - -* Extensions:: Functions which provide useful extensions - or safety wrappers around existing code. -@end menu - -@node Supplemental Functions -@section Supplemental Functions -@cindex supplemental functions -@cindex functions, supplemental -@cindex functions, missing - -Certain operating systems do not provide functions which have since -become standardized, or at least common. For example, the Single -Unix Specification Version 2 requires that the @code{basename} -function be provided, but an OS which predates that specification -might not have this function. This should not prevent well-written -code from running on such a system. - -Similarly, some functions exist only among a particular ``flavor'' -or ``family'' of operating systems. As an example, the @code{bzero} -function is often not present on systems outside the BSD-derived -family of systems. - -Many such functions are provided in @libib{}. They are quickly -listed here with little description, as systems which lack them -become less and less common. Each function @var{foo} is implemented -in @file{@var{foo}.c} but not declared in any @libib{} header file; more -comments and caveats for each function's implementation are often -available in the source file. Generally, the function can simply -be declared as @code{extern}. - - - -@node Replacement Functions -@section Replacement Functions -@cindex replacement functions -@cindex functions, replacement - -Some functions have extremely limited implementations on different -platforms. Other functions are tedious to use correctly; for example, -proper use of @code{malloc} calls for the return value to be checked and -appropriate action taken if memory has been exhausted. A group of -``replacement functions'' is available in @libib{} to address these issues -for some of the most commonly used subroutines. - -All of these functions are declared in the @file{libiberty.h} header -file. Many of the implementations will use preprocessor macros set by -GNU Autoconf, if you decide to make use of that program. Some of these -functions may call one another. - - -@menu -* Memory Allocation:: Testing and handling failed memory - requests automatically. -* Exit Handlers:: Calling routines on program exit. -* Error Reporting:: Mapping errno and signal numbers to - more useful string formats. -@end menu - -@node Memory Allocation -@subsection Memory Allocation -@cindex memory allocation - -The functions beginning with the letter @samp{x} are wrappers around -standard functions; the functions provided by the system environment -are called and their results checked before the results are passed back -to client code. If the standard functions fail, these wrappers will -terminate the program. Thus, these versions can be used with impunity. - - -@node Exit Handlers -@subsection Exit Handlers -@cindex exit handlers - -The existence and implementation of the @code{atexit} routine varies -amongst the flavors of Unix. @libib{} provides an unvarying dependable -implementation via @code{xatexit} and @code{xexit}. - - -@node Error Reporting -@subsection Error Reporting -@cindex error reporting - -These are a set of routines to facilitate programming with the system -@code{errno} interface. The @libib{} source file @file{strerror.c} -contains a good deal of documentation for these functions. - -@c signal stuff - - -@node Extensions -@section Extensions -@cindex extensions -@cindex functions, extension - -@libib{} includes additional functionality above and beyond standard -functions, which has proven generically useful in GNU programs, such as -obstacks and regex. These functions are often copied from other -projects as they gain popularity, and are included here to provide a -central location from which to use, maintain, and distribute them. - -@menu -* Obstacks:: Stacks of arbitrary objects. -@end menu - -@c This is generated from the glibc manual using a make-obstacks-texi.sh -@c script of Phil's. Hope it's accurate. -@include obstacks.texi - -@node Functions -@chapter Function, Variable, and Macro Listing. -@include functions.texi - -@node Licenses -@appendix Licenses - -@menu - -* Library Copying:: The GNU Library General Public License -* BSD:: Regents of the University of California - -@end menu - -@c This takes care of Library Copying. It is the copying-lib.texi from the -@c GNU web site, with its @node line altered to make makeinfo shut up. -@include copying-lib.texi - -@page -@node BSD -@appendixsec BSD - -Copyright @copyright{} 1990 Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -@enumerate - -@item -Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -@item -Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -@item -[rescinded 22 July 1999] - -@item -Neither the name of the University nor the names of its contributors -may be used to endorse or promote products derived from this software -without specific prior written permission. - -@end enumerate - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -@node Index -@unnumbered Index - -@printindex cp - -@bye - diff --git a/libiberty/lrealpath.c b/libiberty/lrealpath.c deleted file mode 100644 index b27c8de990e..00000000000 --- a/libiberty/lrealpath.c +++ /dev/null @@ -1,157 +0,0 @@ -/* Libiberty realpath. Like realpath, but more consistent behavior. - Based on gdb_realpath from GDB. - - Copyright 2003 Free Software Foundation, Inc. - - This file is part of the libiberty library. - - This program 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., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - -/* - -@deftypefn Replacement {const char*} lrealpath (const char *@var{name}) - -Given a pointer to a string containing a pathname, returns a canonical -version of the filename. Symlinks will be resolved, and ``.'' and ``..'' -components will be simplified. The returned value will be allocated using -@code{malloc}, or @code{NULL} will be returned on a memory allocation error. - -@end deftypefn - -*/ - -#include "config.h" -#include "ansidecl.h" -#include "libiberty.h" - -#ifdef HAVE_LIMITS_H -#include -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif - -/* On GNU libc systems the declaration is only visible with _GNU_SOURCE. */ -#if defined(HAVE_CANONICALIZE_FILE_NAME) \ - && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME) -extern char *canonicalize_file_name (const char *); -#endif - -#if defined(HAVE_REALPATH) -# if defined (PATH_MAX) -# define REALPATH_LIMIT PATH_MAX -# else -# if defined (MAXPATHLEN) -# define REALPATH_LIMIT MAXPATHLEN -# endif -# endif -#else - /* cygwin has realpath, so it won't get here. */ -# if defined (_WIN32) -# define WIN32_LEAN_AND_MEAN -# include /* for GetFullPathName */ -# endif -#endif - -char * -lrealpath (const char *filename) -{ - /* Method 1: The system has a compile time upper bound on a filename - path. Use that and realpath() to canonicalize the name. This is - the most common case. Note that, if there isn't a compile time - upper bound, you want to avoid realpath() at all costs. */ -#if defined(REALPATH_LIMIT) - { - char buf[REALPATH_LIMIT]; - const char *rp = realpath (filename, buf); - if (rp == NULL) - rp = filename; - return strdup (rp); - } -#endif /* REALPATH_LIMIT */ - - /* Method 2: The host system (i.e., GNU) has the function - canonicalize_file_name() which malloc's a chunk of memory and - returns that, use that. */ -#if defined(HAVE_CANONICALIZE_FILE_NAME) - { - char *rp = canonicalize_file_name (filename); - if (rp == NULL) - return strdup (filename); - else - return rp; - } -#endif - - /* Method 3: Now we're getting desperate! The system doesn't have a - compile time buffer size and no alternative function. Query the - OS, using pathconf(), for the buffer limit. Care is needed - though, some systems do not limit PATH_MAX (return -1 for - pathconf()) making it impossible to pass a correctly sized buffer - to realpath() (it could always overflow). On those systems, we - skip this. */ -#if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H) - { - /* Find out the max path size. */ - long path_max = pathconf ("/", _PC_PATH_MAX); - if (path_max > 0) - { - /* PATH_MAX is bounded. */ - char *buf, *rp, *ret; - buf = (char *) malloc (path_max); - if (buf == NULL) - return NULL; - rp = realpath (filename, buf); - ret = strdup (rp ? rp : filename); - free (buf); - return ret; - } - } -#endif - - /* The MS Windows method. If we don't have realpath, we assume we - don't have symlinks and just canonicalize to a Windows absolute - path. GetFullPath converts ../ and ./ in relative paths to - absolute paths, filling in current drive if one is not given - or using the current directory of a specified drive (eg, "E:foo"). - It also converts all forward slashes to back slashes. */ -#if defined (_WIN32) - { - char buf[MAX_PATH]; - char* basename; - DWORD len = GetFullPathName (filename, MAX_PATH, buf, &basename); - if (len == 0 || len > MAX_PATH - 1) - return strdup (filename); - else - { - /* The file system is case-preserving but case-insensitive, - Canonicalize to lowercase, using the codepage associated - with the process locale. */ - CharLowerBuff (buf, len); - return strdup (buf); - } - } -#endif - - /* This system is a lost cause, just duplicate the filename. */ - return strdup (filename); -} diff --git a/libiberty/maint-tool b/libiberty/maint-tool deleted file mode 100644 index 5584d9b5594..00000000000 --- a/libiberty/maint-tool +++ /dev/null @@ -1,296 +0,0 @@ -#!/usr/bin/perl -# -*- perl -*- - -# Copyright (C) 2001 -# Free Software Foundation -# -# This file is part of the libiberty library. -# Libiberty 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. -# -# Libiberty 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 libiberty; see the file COPYING.LIB. If not, -# write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# Originally written by DJ Delorie - - -# This is a trivial script which checks the lists of C and O files in -# the Makefile for consistency. - -$mode = shift; -$srcdir = "."; - -if ($mode eq "-s") { - $srcdir = shift; - $mode = shift; -} - -&missing() if $mode eq "missing"; -&undoc() if $mode eq "undoc"; -&deps() if $mode eq "deps"; - -exit 0; - -format STDOUT = -^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~ -$out - ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ -$out -. - -###################################################################### - -sub missing { - - opendir(S, $srcdir); - while ($f = readdir S) { - $have{$f} = 1; - } - closedir(S); - opendir(S, "."); - while ($f = readdir S) { - $have{$f} = 1; - } - closedir(S); - - for $a (@ARGV) { - $listed{$a} = 1; - $have{$a} = 0; - } - - for $f (sort keys %have) { - next unless $have{$f}; - if ($f =~ /\.c$/) { - print "S $f\n"; - } - } - for $f (sort keys %listed) { - if ($f =~ /(.*)\.c$/) { - $base = $1; - if (! $listed{"$base.o"}) { - print "O $f\n"; - } - } - } -} - -###################################################################### - -sub undoc { - - opendir(S, $srcdir); - while ($file = readdir S) { - if ($file =~ /\.texi$/) { - open(T, "$srcdir/$file"); - while () { - if (/^\@deftype[^\(]* ([^\s\(]+) *\(/) { - $documented{$1} = 1; - } - } - close(T); - } - if ($file =~ /\.c$/) { - open(C, "$srcdir/$file"); - while () { - if (/\@undocumented (\S+)/) { - $documented{$1} = 1; - } - if (/^static /) { - if (! /[\(;]/) { - s/[\r\n]+$/ /; - $_ .= ; - } - while ($_ =~ /\([^\)]*$/) { - s/[\r\n]+$/ /; - $_ .= ; - } - } - s/ VPARAMS([ \(])/$1/; - s/PREFIX\(([^\)]*)\)/byte_$1/; - if (/^static [^\(]* ([^\s\(]+) *\(.*\)$/) { - $documented{$1} = 1; - } - } - } - } - closedir(D); - - # $out = join(' ', sort keys %documented); - # write; - # print "\n"; - - system "etags $srcdir/*.c $srcdir/../include/*.h"; - open(TAGS, "TAGS"); - while () { - s/[\r\n]+$//; - if (/^\014$/) { - $filename = ; - $filename =~ s/[\r\n]+$//; - $filename =~ s/,\d+$//; - $filename =~ s@.*[/\\]@@; - next; - } - if ($filename =~ /\.c$/ ) { - next unless /^[_a-zA-Z]/; - } else { - next unless /^\# *define/; - s/\# *define *//; - } - - s/ VPARAMS//; - s/ *\177.*//; - s/,$//; - s/DEFUN\(//; - s/\(//; - - next if /^static /; - next if /\s/; - next if /^_/; - next if $documented{$_}; - next if /_H_?$/; - - if ($seen_in{$_} ne $filename) { - $saw{$_} ++; - } - $seen_in{$_} = $filename; - } - - for $k (keys %saw) { - delete $saw{$k} if $saw{$k} > 1; - } - - for $k (sort keys %saw) { - $fromfile{$seen_in{$k}} .= " " if $fromfile{$seen_in{$k}}; - $fromfile{$seen_in{$k}} .= $k; - } - - for $f (sort keys %fromfile) { - $out = "$f: $fromfile{$f}"; - write; - } -} - -###################################################################### - -sub deps_for { - my($f) = @_; - my(%d); - open(F, $f); - %d = (); - while () { - if (/^#\s*include\s+["<](.*)[">]/) { - $d{$1} = 1; - } - } - close(F); - return keys %d; -} - -sub canonicalize { - my ($p) = @_; - 0 while $p =~ s@/\./@/@g; - 0 while $p =~ s@^\./@@g; - 0 while $p =~ s@/[^/]+/\.\./@/@g; - return $p; -} - -sub locals_first { - my ($a,$b) = @_; - return -1 if $a eq "config.h"; - return 1 if $b eq "config.h"; - return $a cmp $b; -} - -sub deps { - - $crule = "\tif [ x\"\$(PICFLAG)\" != x ]; then \\\n"; - $crule .= "\t \$(COMPILE.c) \$(PICFLAG) \$< -o pic/\$@; \\\n"; - $crule .= "\telse true; fi\n"; - $crule .= "\t\$(COMPILE.c) \$< \$(OUTPUT_OPTION)\n"; - $crule .= "\n"; - - $incdir = shift @ARGV; - - opendir(INC, $incdir); - while ($f = readdir INC) { - next unless $f =~ /\.h$/; - $mine{$f} = "\$(INCDIR)/$f"; - $deps{$f} = join(' ', &deps_for("$incdir/$f")); - } - $mine{'config.h'} = "config.h"; - - opendir(INC, $srcdir); - while ($f = readdir INC) { - next unless $f =~ /\.h$/; - $mine{$f} = "\$(srcdir)/$f"; - $deps{$f} = join(' ', &deps_for("$srcdir/$f")); - } - $mine{'config.h'} = "config.h"; - - open(IN, "$srcdir/Makefile.in"); - open(OUT, ">$srcdir/Makefile.tmp"); - while () { - last if /remainder of this file/; - print OUT; - } - print OUT "# The dependencies in the remainder of this file are automatically\n"; - print OUT "# generated by \"make maint-deps\". Manual edits will be lost.\n\n"; - - opendir(S, $srcdir); - for $f (sort readdir S) { - if ($f =~ /\.c$/) { - - %scanned = (); - @pending = &deps_for("$srcdir/$f"); - while (@pending) { - @tmp = @pending; - @pending = (); - for $p (@tmp) { - next unless $mine{$p}; - if (!$scanned{$p}) { - push(@pending, split(' ', $deps{$p})); - $scanned{$p} = 1; - } - } - } - @deps = sort { &locals_first($a,$b) } keys %scanned; - $obj = $f; - $obj =~ s/\.c$/.o/; - $obj = "./$obj:"; - if ($#deps >= 0) { - print OUT "$obj \$(srcdir)/$f"; - $len = length("$obj $f"); - for $dt (@deps) { - $d = $mine{$dt}; - if ($len + length($d) > 70) { - printf OUT " \\\n\t$d"; - $len = 8 + length($d); - } else { - print OUT " $d"; - $len += length($d) + 1; - } - } - print OUT "\n"; - } else { - print OUT "$obj \$(srcdir)/$f\n"; - } - $c = $crule; - $c =~ s@\$\<@\$\(srcdir\)\/$f@g; - print OUT $c; - } - } - closedir(S); - close(IN); - close(OUT); - - rename("$srcdir/Makefile.tmp", "$srcdir/Makefile.in"); -} diff --git a/libiberty/make-relative-prefix.c b/libiberty/make-relative-prefix.c deleted file mode 100644 index 66ddcaa471b..00000000000 --- a/libiberty/make-relative-prefix.c +++ /dev/null @@ -1,389 +0,0 @@ -/* Relative (relocatable) prefix support. - Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - -This file is part of libiberty. - -GCC 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, or (at your option) any later -version. - -GCC 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 GCC; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA -02110-1301, USA. */ - -/* - -@deftypefn Extension {const char*} make_relative_prefix (const char *@var{progname}, const char *@var{bin_prefix}, const char *@var{prefix}) - -Given three paths @var{progname}, @var{bin_prefix}, @var{prefix}, -return the path that is in the same position relative to -@var{progname}'s directory as @var{prefix} is relative to -@var{bin_prefix}. That is, a string starting with the directory -portion of @var{progname}, followed by a relative pathname of the -difference between @var{bin_prefix} and @var{prefix}. - -If @var{progname} does not contain any directory separators, -@code{make_relative_prefix} will search @env{PATH} to find a program -named @var{progname}. Also, if @var{progname} is a symbolic link, -the symbolic link will be resolved. - -For example, if @var{bin_prefix} is @code{/alpha/beta/gamma/gcc/delta}, -@var{prefix} is @code{/alpha/beta/gamma/omega/}, and @var{progname} is -@code{/red/green/blue/gcc}, then this function will return -@code{/red/green/blue/../../omega/}. - -The return value is normally allocated via @code{malloc}. If no -relative prefix can be found, return @code{NULL}. - -@end deftypefn - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif - -#include - -#include "ansidecl.h" -#include "libiberty.h" - -#ifndef R_OK -#define R_OK 4 -#define W_OK 2 -#define X_OK 1 -#endif - -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) \ - || defined (__DJGPP__) || defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define HAVE_HOST_EXECUTABLE_SUFFIX -# define HOST_EXECUTABLE_SUFFIX ".exe" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# define PATH_SEPARATOR ';' -#else -# define PATH_SEPARATOR ':' -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif - -#define DIR_UP ".." - -static char *save_string (const char *, int); -static char **split_directories (const char *, int *); -static void free_split_directories (char **); - -static char * -save_string (const char *s, int len) -{ - char *result = (char *) malloc (len + 1); - - memcpy (result, s, len); - result[len] = 0; - return result; -} - -/* Split a filename into component directories. */ - -static char ** -split_directories (const char *name, int *ptr_num_dirs) -{ - int num_dirs = 0; - char **dirs; - const char *p, *q; - int ch; - - /* Count the number of directories. Special case MSDOS disk names as part - of the initial directory. */ - p = name; -#ifdef HAVE_DOS_BASED_FILE_SYSTEM - if (name[1] == ':' && IS_DIR_SEPARATOR (name[2])) - { - p += 3; - num_dirs++; - } -#endif /* HAVE_DOS_BASED_FILE_SYSTEM */ - - while ((ch = *p++) != '\0') - { - if (IS_DIR_SEPARATOR (ch)) - { - num_dirs++; - while (IS_DIR_SEPARATOR (*p)) - p++; - } - } - - dirs = (char **) malloc (sizeof (char *) * (num_dirs + 2)); - if (dirs == NULL) - return NULL; - - /* Now copy the directory parts. */ - num_dirs = 0; - p = name; -#ifdef HAVE_DOS_BASED_FILE_SYSTEM - if (name[1] == ':' && IS_DIR_SEPARATOR (name[2])) - { - dirs[num_dirs++] = save_string (p, 3); - if (dirs[num_dirs - 1] == NULL) - { - free (dirs); - return NULL; - } - p += 3; - } -#endif /* HAVE_DOS_BASED_FILE_SYSTEM */ - - q = p; - while ((ch = *p++) != '\0') - { - if (IS_DIR_SEPARATOR (ch)) - { - while (IS_DIR_SEPARATOR (*p)) - p++; - - dirs[num_dirs++] = save_string (q, p - q); - if (dirs[num_dirs - 1] == NULL) - { - dirs[num_dirs] = NULL; - free_split_directories (dirs); - return NULL; - } - q = p; - } - } - - if (p - 1 - q > 0) - dirs[num_dirs++] = save_string (q, p - 1 - q); - dirs[num_dirs] = NULL; - - if (dirs[num_dirs - 1] == NULL) - { - free_split_directories (dirs); - return NULL; - } - - if (ptr_num_dirs) - *ptr_num_dirs = num_dirs; - return dirs; -} - -/* Release storage held by split directories. */ - -static void -free_split_directories (char **dirs) -{ - int i = 0; - - while (dirs[i] != NULL) - free (dirs[i++]); - - free ((char *) dirs); -} - -/* Given three strings PROGNAME, BIN_PREFIX, PREFIX, return a string that gets - to PREFIX starting with the directory portion of PROGNAME and a relative - pathname of the difference between BIN_PREFIX and PREFIX. - - For example, if BIN_PREFIX is /alpha/beta/gamma/gcc/delta, PREFIX is - /alpha/beta/gamma/omega/, and PROGNAME is /red/green/blue/gcc, then this - function will return /red/green/blue/../../omega/. - - If no relative prefix can be found, return NULL. */ - -char * -make_relative_prefix (const char *progname, - const char *bin_prefix, const char *prefix) -{ - char **prog_dirs, **bin_dirs, **prefix_dirs; - int prog_num, bin_num, prefix_num; - int i, n, common; - int needed_len; - char *ret, *ptr, *full_progname = NULL; - - if (progname == NULL || bin_prefix == NULL || prefix == NULL) - return NULL; - - /* If there is no full pathname, try to find the program by checking in each - of the directories specified in the PATH environment variable. */ - if (lbasename (progname) == progname) - { - char *temp; - - temp = getenv ("PATH"); - if (temp) - { - char *startp, *endp, *nstore; - size_t prefixlen = strlen (temp) + 1; - if (prefixlen < 2) - prefixlen = 2; - - nstore = (char *) alloca (prefixlen + strlen (progname) + 1); - - startp = endp = temp; - while (1) - { - if (*endp == PATH_SEPARATOR || *endp == 0) - { - if (endp == startp) - { - nstore[0] = '.'; - nstore[1] = DIR_SEPARATOR; - nstore[2] = '\0'; - } - else - { - strncpy (nstore, startp, endp - startp); - if (! IS_DIR_SEPARATOR (endp[-1])) - { - nstore[endp - startp] = DIR_SEPARATOR; - nstore[endp - startp + 1] = 0; - } - else - nstore[endp - startp] = 0; - } - strcat (nstore, progname); - if (! access (nstore, X_OK) -#ifdef HAVE_HOST_EXECUTABLE_SUFFIX - || ! access (strcat (nstore, HOST_EXECUTABLE_SUFFIX), X_OK) -#endif - ) - { - progname = nstore; - break; - } - - if (*endp == 0) - break; - endp = startp = endp + 1; - } - else - endp++; - } - } - } - - full_progname = lrealpath (progname); - if (full_progname == NULL) - return NULL; - - prog_dirs = split_directories (full_progname, &prog_num); - bin_dirs = split_directories (bin_prefix, &bin_num); - free (full_progname); - if (bin_dirs == NULL || prog_dirs == NULL) - return NULL; - - /* Remove the program name from comparison of directory names. */ - prog_num--; - - /* If we are still installed in the standard location, we don't need to - specify relative directories. Also, if argv[0] still doesn't contain - any directory specifiers after the search above, then there is not much - we can do. */ - if (prog_num == bin_num) - { - for (i = 0; i < bin_num; i++) - { - if (strcmp (prog_dirs[i], bin_dirs[i]) != 0) - break; - } - - if (prog_num <= 0 || i == bin_num) - { - free_split_directories (prog_dirs); - free_split_directories (bin_dirs); - prog_dirs = bin_dirs = (char **) 0; - return NULL; - } - } - - prefix_dirs = split_directories (prefix, &prefix_num); - if (prefix_dirs == NULL) - { - free_split_directories (prog_dirs); - free_split_directories (bin_dirs); - return NULL; - } - - /* Find how many directories are in common between bin_prefix & prefix. */ - n = (prefix_num < bin_num) ? prefix_num : bin_num; - for (common = 0; common < n; common++) - { - if (strcmp (bin_dirs[common], prefix_dirs[common]) != 0) - break; - } - - /* If there are no common directories, there can be no relative prefix. */ - if (common == 0) - { - free_split_directories (prog_dirs); - free_split_directories (bin_dirs); - free_split_directories (prefix_dirs); - return NULL; - } - - /* Two passes: first figure out the size of the result string, and - then construct it. */ - needed_len = 0; - for (i = 0; i < prog_num; i++) - needed_len += strlen (prog_dirs[i]); - needed_len += sizeof (DIR_UP) * (bin_num - common); - for (i = common; i < prefix_num; i++) - needed_len += strlen (prefix_dirs[i]); - needed_len += 1; /* Trailing NUL. */ - - ret = (char *) malloc (needed_len); - if (ret == NULL) - return NULL; - - /* Build up the pathnames in argv[0]. */ - *ret = '\0'; - for (i = 0; i < prog_num; i++) - strcat (ret, prog_dirs[i]); - - /* Now build up the ..'s. */ - ptr = ret + strlen(ret); - for (i = common; i < bin_num; i++) - { - strcpy (ptr, DIR_UP); - ptr += sizeof (DIR_UP) - 1; - *(ptr++) = DIR_SEPARATOR; - } - *ptr = '\0'; - - /* Put in directories to move over to prefix. */ - for (i = common; i < prefix_num; i++) - strcat (ret, prefix_dirs[i]); - - free_split_directories (prog_dirs); - free_split_directories (bin_dirs); - free_split_directories (prefix_dirs); - - return ret; -} diff --git a/libiberty/make-temp-file.c b/libiberty/make-temp-file.c deleted file mode 100644 index 5e21414ad8e..00000000000 --- a/libiberty/make-temp-file.c +++ /dev/null @@ -1,177 +0,0 @@ -/* Utility to pick a temporary filename prefix. - Copyright (C) 1996, 1997, 1998, 2001 Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If not, -write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include /* May get P_tmpdir. */ -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_SYS_FILE_H -#include /* May get R_OK, etc. on some systems. */ -#endif - -#ifndef R_OK -#define R_OK 4 -#define W_OK 2 -#define X_OK 1 -#endif - -#include "libiberty.h" -extern int mkstemps (char *, int); - -/* '/' works just fine on MS-DOS based systems. */ -#ifndef DIR_SEPARATOR -#define DIR_SEPARATOR '/' -#endif - -/* Name of temporary file. - mktemp requires 6 trailing X's. */ -#define TEMP_FILE "ccXXXXXX" -#define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1) - -/* Subroutine of choose_tmpdir. - If BASE is non-NULL, return it. - Otherwise it checks if DIR is a usable directory. - If success, DIR is returned. - Otherwise NULL is returned. */ - -static inline const char *try_dir (const char *, const char *); - -static inline const char * -try_dir (const char *dir, const char *base) -{ - if (base != 0) - return base; - if (dir != 0 - && access (dir, R_OK | W_OK | X_OK) == 0) - return dir; - return 0; -} - -static const char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 }; -static const char usrtmp[] = -{ DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 }; -static const char vartmp[] = -{ DIR_SEPARATOR, 'v', 'a', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 }; - -static char *memoized_tmpdir; - -/* - -@deftypefn Replacement char* choose_tmpdir () - -Returns a pointer to a directory path suitable for creating temporary -files in. - -@end deftypefn - -*/ - -char * -choose_tmpdir (void) -{ - const char *base = 0; - char *tmpdir; - unsigned int len; - - if (memoized_tmpdir) - return memoized_tmpdir; - - base = try_dir (getenv ("TMPDIR"), base); - base = try_dir (getenv ("TMP"), base); - base = try_dir (getenv ("TEMP"), base); - -#ifdef P_tmpdir - base = try_dir (P_tmpdir, base); -#endif - - /* Try /var/tmp, /usr/tmp, then /tmp. */ - base = try_dir (vartmp, base); - base = try_dir (usrtmp, base); - base = try_dir (tmp, base); - - /* If all else fails, use the current directory! */ - if (base == 0) - base = "."; - - /* Append DIR_SEPARATOR to the directory we've chosen - and return it. */ - len = strlen (base); - tmpdir = XNEWVEC (char, len + 2); - strcpy (tmpdir, base); - tmpdir[len] = DIR_SEPARATOR; - tmpdir[len+1] = '\0'; - - memoized_tmpdir = tmpdir; - return tmpdir; -} - -/* - -@deftypefn Replacement char* make_temp_file (const char *@var{suffix}) - -Return a temporary file name (as a string) or @code{NULL} if unable to -create one. @var{suffix} is a suffix to append to the file name. The -string is @code{malloc}ed, and the temporary file has been created. - -@end deftypefn - -*/ - -char * -make_temp_file (const char *suffix) -{ - const char *base = choose_tmpdir (); - char *temp_filename; - int base_len, suffix_len; - int fd; - - if (suffix == 0) - suffix = ""; - - base_len = strlen (base); - suffix_len = strlen (suffix); - - temp_filename = XNEWVEC (char, base_len - + TEMP_FILE_LEN - + suffix_len + 1); - strcpy (temp_filename, base); - strcpy (temp_filename + base_len, TEMP_FILE); - strcpy (temp_filename + base_len + TEMP_FILE_LEN, suffix); - - fd = mkstemps (temp_filename, suffix_len); - /* If mkstemps failed, then something bad is happening. Maybe we should - issue a message about a possible security attack in progress? */ - if (fd == -1) - abort (); - /* Similarly if we can not close the file. */ - if (close (fd)) - abort (); - return temp_filename; -} diff --git a/libiberty/makefile.vms b/libiberty/makefile.vms deleted file mode 100644 index 6a7dd45718e..00000000000 --- a/libiberty/makefile.vms +++ /dev/null @@ -1,33 +0,0 @@ -# -# Makefile for libiberty under openVMS/Alpha -# -# For use with gnu-make for vms -# -# Created by Klaus K"ampf, kkaempf@progis.de -# -# - -OBJS=bcopy.obj,bcmp.obj,getopt.obj,obstack.obj,xexit.obj,xmalloc.obj,hex.obj,\ - getopt1.obj,cplus-dem.obj,strncasecmp.obj,strcasecmp.obj,strdup.obj,\ - concat.obj,getruntime.obj,getpagesize.obj,alloca.obj,xstrerror.obj,\ - xmemdup.obj,xstrdup.obj,xatexit.obj,choose-temp.obj,fnmatch.obj,objalloc.obj - -ifeq ($(CC),gcc) -CFLAGS=/include=([],[-.include]) -else -# assume dec c -CFLAGS=/noopt/debug/include=([],[-.include])/define=("const=")/warnings=disable=(missingreturn,implicitfunc) -endif - -libiberty.olb: config.h alloca-conf.h $(OBJS) - purge - lib/create libiberty *.obj - -config.h: config.h-vms - $(CP) $< $@ - -clean: - $$ purge - $(RM) config.h; - $(RM) *.obj; - $(RM) libiberty.olb; diff --git a/libiberty/md5.c b/libiberty/md5.c deleted file mode 100644 index 83e0beb339f..00000000000 --- a/libiberty/md5.c +++ /dev/null @@ -1,430 +0,0 @@ -/* md5.c - Functions to compute MD5 message digest of files or memory blocks - according to the definition of MD5 in RFC 1321 from April 1992. - Copyright (C) 1995, 1996 Free Software Foundation, Inc. - - NOTE: This source is derived from an old version taken from the GNU C - Library (glibc). - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Written by Ulrich Drepper , 1995. */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include - -#if STDC_HEADERS || defined _LIBC -# include -# include -#else -# ifndef HAVE_MEMCPY -# define memcpy(d, s, n) bcopy ((s), (d), (n)) -# endif -#endif - -#include "ansidecl.h" -#include "md5.h" - -#ifdef _LIBC -# include -# if __BYTE_ORDER == __BIG_ENDIAN -# define WORDS_BIGENDIAN 1 -# endif -#endif - -#ifdef WORDS_BIGENDIAN -# define SWAP(n) \ - (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) -#else -# define SWAP(n) (n) -#endif - - -/* This array contains the bytes used to pad the buffer to the next - 64-byte boundary. (RFC 1321, 3.1: Step 1) */ -static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; - - -/* Initialize structure containing state of computation. - (RFC 1321, 3.3: Step 3) */ -void -md5_init_ctx (struct md5_ctx *ctx) -{ - ctx->A = (md5_uint32) 0x67452301; - ctx->B = (md5_uint32) 0xefcdab89; - ctx->C = (md5_uint32) 0x98badcfe; - ctx->D = (md5_uint32) 0x10325476; - - ctx->total[0] = ctx->total[1] = 0; - ctx->buflen = 0; -} - -/* Put result from CTX in first 16 bytes following RESBUF. The result - must be in little endian byte order. - - IMPORTANT: On some systems it is required that RESBUF is correctly - aligned for a 32 bits value. */ -void * -md5_read_ctx (const struct md5_ctx *ctx, void *resbuf) -{ - ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A); - ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B); - ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C); - ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D); - - return resbuf; -} - -/* Process the remaining bytes in the internal buffer and the usual - prolog according to the standard and write the result to RESBUF. - - IMPORTANT: On some systems it is required that RESBUF is correctly - aligned for a 32 bits value. */ -void * -md5_finish_ctx (struct md5_ctx *ctx, void *resbuf) -{ - /* Take yet unprocessed bytes into account. */ - md5_uint32 bytes = ctx->buflen; - size_t pad; - - /* Now count remaining bytes. */ - ctx->total[0] += bytes; - if (ctx->total[0] < bytes) - ++ctx->total[1]; - - pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes; - memcpy (&ctx->buffer[bytes], fillbuf, pad); - - /* Put the 64-bit file length in *bits* at the end of the buffer. */ - *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3); - *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) | - (ctx->total[0] >> 29)); - - /* Process last bytes. */ - md5_process_block (ctx->buffer, bytes + pad + 8, ctx); - - return md5_read_ctx (ctx, resbuf); -} - -/* Compute MD5 message digest for bytes read from STREAM. The - resulting message digest number will be written into the 16 bytes - beginning at RESBLOCK. */ -int -md5_stream (FILE *stream, void *resblock) -{ - /* Important: BLOCKSIZE must be a multiple of 64. */ -#define BLOCKSIZE 4096 - struct md5_ctx ctx; - char buffer[BLOCKSIZE + 72]; - size_t sum; - - /* Initialize the computation context. */ - md5_init_ctx (&ctx); - - /* Iterate over full file contents. */ - while (1) - { - /* We read the file in blocks of BLOCKSIZE bytes. One call of the - computation function processes the whole buffer so that with the - next round of the loop another block can be read. */ - size_t n; - sum = 0; - - /* Read block. Take care for partial reads. */ - do - { - n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); - - sum += n; - } - while (sum < BLOCKSIZE && n != 0); - if (n == 0 && ferror (stream)) - return 1; - - /* If end of file is reached, end the loop. */ - if (n == 0) - break; - - /* Process buffer with BLOCKSIZE bytes. Note that - BLOCKSIZE % 64 == 0 - */ - md5_process_block (buffer, BLOCKSIZE, &ctx); - } - - /* Add the last bytes if necessary. */ - if (sum > 0) - md5_process_bytes (buffer, sum, &ctx); - - /* Construct result in desired memory. */ - md5_finish_ctx (&ctx, resblock); - return 0; -} - -/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The - result is always in little endian byte order, so that a byte-wise - output yields to the wanted ASCII representation of the message - digest. */ -void * -md5_buffer (const char *buffer, size_t len, void *resblock) -{ - struct md5_ctx ctx; - - /* Initialize the computation context. */ - md5_init_ctx (&ctx); - - /* Process whole buffer but last len % 64 bytes. */ - md5_process_bytes (buffer, len, &ctx); - - /* Put result in desired memory area. */ - return md5_finish_ctx (&ctx, resblock); -} - - -void -md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx) -{ - /* When we already have some bits in our internal buffer concatenate - both inputs first. */ - if (ctx->buflen != 0) - { - size_t left_over = ctx->buflen; - size_t add = 128 - left_over > len ? len : 128 - left_over; - - memcpy (&ctx->buffer[left_over], buffer, add); - ctx->buflen += add; - - if (left_over + add > 64) - { - md5_process_block (ctx->buffer, (left_over + add) & ~63, ctx); - /* The regions in the following copy operation cannot overlap. */ - memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63], - (left_over + add) & 63); - ctx->buflen = (left_over + add) & 63; - } - - buffer = (const void *) ((const char *) buffer + add); - len -= add; - } - - /* Process available complete blocks. */ - if (len > 64) - { -#if !_STRING_ARCH_unaligned -/* To check alignment gcc has an appropriate operator. Other - compilers don't. */ -# if __GNUC__ >= 2 -# define UNALIGNED_P(p) (((md5_uintptr) p) % __alignof__ (md5_uint32) != 0) -# else -# define UNALIGNED_P(p) (((md5_uintptr) p) % sizeof (md5_uint32) != 0) -# endif - if (UNALIGNED_P (buffer)) - while (len > 64) - { - md5_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); - buffer = (const char *) buffer + 64; - len -= 64; - } - else -#endif - md5_process_block (buffer, len & ~63, ctx); - buffer = (const void *) ((const char *) buffer + (len & ~63)); - len &= 63; - } - - /* Move remaining bytes in internal buffer. */ - if (len > 0) - { - memcpy (ctx->buffer, buffer, len); - ctx->buflen = len; - } -} - - -/* These are the four functions used in the four steps of the MD5 algorithm - and defined in the RFC 1321. The first function is a little bit optimized - (as found in Colin Plumbs public domain implementation). */ -/* #define FF(b, c, d) ((b & c) | (~b & d)) */ -#define FF(b, c, d) (d ^ (b & (c ^ d))) -#define FG(b, c, d) FF (d, b, c) -#define FH(b, c, d) (b ^ c ^ d) -#define FI(b, c, d) (c ^ (b | ~d)) - -/* Process LEN bytes of BUFFER, accumulating context into CTX. - It is assumed that LEN % 64 == 0. */ - -void -md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx) -{ - md5_uint32 correct_words[16]; - const md5_uint32 *words = (const md5_uint32 *) buffer; - size_t nwords = len / sizeof (md5_uint32); - const md5_uint32 *endp = words + nwords; - md5_uint32 A = ctx->A; - md5_uint32 B = ctx->B; - md5_uint32 C = ctx->C; - md5_uint32 D = ctx->D; - - /* First increment the byte count. RFC 1321 specifies the possible - length of the file up to 2^64 bits. Here we only compute the - number of bytes. Do a double word increment. */ - ctx->total[0] += len; - if (ctx->total[0] < len) - ++ctx->total[1]; - - /* Process all bytes in the buffer with 64 bytes in each round of - the loop. */ - while (words < endp) - { - md5_uint32 *cwp = correct_words; - md5_uint32 A_save = A; - md5_uint32 B_save = B; - md5_uint32 C_save = C; - md5_uint32 D_save = D; - - /* First round: using the given function, the context and a constant - the next context is computed. Because the algorithms processing - unit is a 32-bit word and it is determined to work on words in - little endian byte order we perhaps have to change the byte order - before the computation. To reduce the work for the next steps - we store the swapped words in the array CORRECT_WORDS. */ - -#define OP(a, b, c, d, s, T) \ - do \ - { \ - a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \ - ++words; \ - CYCLIC (a, s); \ - a += b; \ - } \ - while (0) - - /* It is unfortunate that C does not provide an operator for - cyclic rotation. Hope the C compiler is smart enough. */ -#define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s))) - - /* Before we start, one word to the strange constants. - They are defined in RFC 1321 as - - T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64 - */ - - /* Round 1. */ - OP (A, B, C, D, 7, (md5_uint32) 0xd76aa478); - OP (D, A, B, C, 12, (md5_uint32) 0xe8c7b756); - OP (C, D, A, B, 17, (md5_uint32) 0x242070db); - OP (B, C, D, A, 22, (md5_uint32) 0xc1bdceee); - OP (A, B, C, D, 7, (md5_uint32) 0xf57c0faf); - OP (D, A, B, C, 12, (md5_uint32) 0x4787c62a); - OP (C, D, A, B, 17, (md5_uint32) 0xa8304613); - OP (B, C, D, A, 22, (md5_uint32) 0xfd469501); - OP (A, B, C, D, 7, (md5_uint32) 0x698098d8); - OP (D, A, B, C, 12, (md5_uint32) 0x8b44f7af); - OP (C, D, A, B, 17, (md5_uint32) 0xffff5bb1); - OP (B, C, D, A, 22, (md5_uint32) 0x895cd7be); - OP (A, B, C, D, 7, (md5_uint32) 0x6b901122); - OP (D, A, B, C, 12, (md5_uint32) 0xfd987193); - OP (C, D, A, B, 17, (md5_uint32) 0xa679438e); - OP (B, C, D, A, 22, (md5_uint32) 0x49b40821); - - /* For the second to fourth round we have the possibly swapped words - in CORRECT_WORDS. Redefine the macro to take an additional first - argument specifying the function to use. */ -#undef OP -#define OP(a, b, c, d, k, s, T) \ - do \ - { \ - a += FX (b, c, d) + correct_words[k] + T; \ - CYCLIC (a, s); \ - a += b; \ - } \ - while (0) - -#define FX(b, c, d) FG (b, c, d) - - /* Round 2. */ - OP (A, B, C, D, 1, 5, (md5_uint32) 0xf61e2562); - OP (D, A, B, C, 6, 9, (md5_uint32) 0xc040b340); - OP (C, D, A, B, 11, 14, (md5_uint32) 0x265e5a51); - OP (B, C, D, A, 0, 20, (md5_uint32) 0xe9b6c7aa); - OP (A, B, C, D, 5, 5, (md5_uint32) 0xd62f105d); - OP (D, A, B, C, 10, 9, (md5_uint32) 0x02441453); - OP (C, D, A, B, 15, 14, (md5_uint32) 0xd8a1e681); - OP (B, C, D, A, 4, 20, (md5_uint32) 0xe7d3fbc8); - OP (A, B, C, D, 9, 5, (md5_uint32) 0x21e1cde6); - OP (D, A, B, C, 14, 9, (md5_uint32) 0xc33707d6); - OP (C, D, A, B, 3, 14, (md5_uint32) 0xf4d50d87); - OP (B, C, D, A, 8, 20, (md5_uint32) 0x455a14ed); - OP (A, B, C, D, 13, 5, (md5_uint32) 0xa9e3e905); - OP (D, A, B, C, 2, 9, (md5_uint32) 0xfcefa3f8); - OP (C, D, A, B, 7, 14, (md5_uint32) 0x676f02d9); - OP (B, C, D, A, 12, 20, (md5_uint32) 0x8d2a4c8a); - -#undef FX -#define FX(b, c, d) FH (b, c, d) - - /* Round 3. */ - OP (A, B, C, D, 5, 4, (md5_uint32) 0xfffa3942); - OP (D, A, B, C, 8, 11, (md5_uint32) 0x8771f681); - OP (C, D, A, B, 11, 16, (md5_uint32) 0x6d9d6122); - OP (B, C, D, A, 14, 23, (md5_uint32) 0xfde5380c); - OP (A, B, C, D, 1, 4, (md5_uint32) 0xa4beea44); - OP (D, A, B, C, 4, 11, (md5_uint32) 0x4bdecfa9); - OP (C, D, A, B, 7, 16, (md5_uint32) 0xf6bb4b60); - OP (B, C, D, A, 10, 23, (md5_uint32) 0xbebfbc70); - OP (A, B, C, D, 13, 4, (md5_uint32) 0x289b7ec6); - OP (D, A, B, C, 0, 11, (md5_uint32) 0xeaa127fa); - OP (C, D, A, B, 3, 16, (md5_uint32) 0xd4ef3085); - OP (B, C, D, A, 6, 23, (md5_uint32) 0x04881d05); - OP (A, B, C, D, 9, 4, (md5_uint32) 0xd9d4d039); - OP (D, A, B, C, 12, 11, (md5_uint32) 0xe6db99e5); - OP (C, D, A, B, 15, 16, (md5_uint32) 0x1fa27cf8); - OP (B, C, D, A, 2, 23, (md5_uint32) 0xc4ac5665); - -#undef FX -#define FX(b, c, d) FI (b, c, d) - - /* Round 4. */ - OP (A, B, C, D, 0, 6, (md5_uint32) 0xf4292244); - OP (D, A, B, C, 7, 10, (md5_uint32) 0x432aff97); - OP (C, D, A, B, 14, 15, (md5_uint32) 0xab9423a7); - OP (B, C, D, A, 5, 21, (md5_uint32) 0xfc93a039); - OP (A, B, C, D, 12, 6, (md5_uint32) 0x655b59c3); - OP (D, A, B, C, 3, 10, (md5_uint32) 0x8f0ccc92); - OP (C, D, A, B, 10, 15, (md5_uint32) 0xffeff47d); - OP (B, C, D, A, 1, 21, (md5_uint32) 0x85845dd1); - OP (A, B, C, D, 8, 6, (md5_uint32) 0x6fa87e4f); - OP (D, A, B, C, 15, 10, (md5_uint32) 0xfe2ce6e0); - OP (C, D, A, B, 6, 15, (md5_uint32) 0xa3014314); - OP (B, C, D, A, 13, 21, (md5_uint32) 0x4e0811a1); - OP (A, B, C, D, 4, 6, (md5_uint32) 0xf7537e82); - OP (D, A, B, C, 11, 10, (md5_uint32) 0xbd3af235); - OP (C, D, A, B, 2, 15, (md5_uint32) 0x2ad7d2bb); - OP (B, C, D, A, 9, 21, (md5_uint32) 0xeb86d391); - - /* Add the starting values of the context. */ - A += A_save; - B += B_save; - C += C_save; - D += D_save; - } - - /* Put checksum in context given as argument. */ - ctx->A = A; - ctx->B = B; - ctx->C = C; - ctx->D = D; -} diff --git a/libiberty/memchr.c b/libiberty/memchr.c deleted file mode 100644 index 451f817d320..00000000000 --- a/libiberty/memchr.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - -@deftypefn Supplemental void* memchr (const void *@var{s}, int @var{c}, size_t @var{n}) - -This function searches memory starting at @code{*@var{s}} for the -character @var{c}. The search only ends with the first occurrence of -@var{c}, or after @var{length} characters; in particular, a null -character does not terminate the search. If the character @var{c} is -found within @var{length} characters of @code{*@var{s}}, a pointer -to the character is returned. If @var{c} is not found, then @code{NULL} is -returned. - -@end deftypefn - -*/ - -#include -#include - -PTR -memchr (register const PTR src_void, int c, size_t length) -{ - const unsigned char *src = (const unsigned char *)src_void; - - while (length-- > 0) - { - if (*src == c) - return (PTR)src; - src++; - } - return NULL; -} diff --git a/libiberty/memcmp.c b/libiberty/memcmp.c deleted file mode 100644 index 39edfca98a6..00000000000 --- a/libiberty/memcmp.c +++ /dev/null @@ -1,34 +0,0 @@ -/* memcmp -- compare two memory regions. - This function is in the public domain. */ - -/* - -@deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, size_t @var{count}) - -Compares the first @var{count} bytes of two areas of memory. Returns -zero if they are the same, a value less than zero if @var{x} is -lexically less than @var{y}, or a value greater than zero if @var{x} -is lexically greater than @var{y}. Note that lexical order is determined -as if comparing unsigned char arrays. - -@end deftypefn - -*/ - -#include -#include - -int -memcmp (const PTR str1, const PTR str2, size_t count) -{ - register const unsigned char *s1 = (const unsigned char*)str1; - register const unsigned char *s2 = (const unsigned char*)str2; - - while (count-- > 0) - { - if (*s1++ != *s2++) - return s1[-1] < s2[-1] ? -1 : 1; - } - return 0; -} - diff --git a/libiberty/memcpy.c b/libiberty/memcpy.c deleted file mode 100644 index 9b5b24295df..00000000000 --- a/libiberty/memcpy.c +++ /dev/null @@ -1,25 +0,0 @@ -/* memcpy (the standard C function) - This function is in the public domain. */ - -/* - -@deftypefn Supplemental void* memcpy (void *@var{out}, const void *@var{in}, size_t @var{length}) - -Copies @var{length} bytes from memory region @var{in} to region -@var{out}. Returns a pointer to @var{out}. - -@end deftypefn - -*/ - -#include -#include - -void bcopy (const void*, void*, size_t); - -PTR -memcpy (PTR out, const PTR in, size_t length) -{ - bcopy(in, out, length); - return out; -} diff --git a/libiberty/memmove.c b/libiberty/memmove.c deleted file mode 100644 index 06a24fc2688..00000000000 --- a/libiberty/memmove.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Wrapper to implement ANSI C's memmove using BSD's bcopy. */ -/* This function is in the public domain. --Per Bothner. */ - -/* - -@deftypefn Supplemental void* memmove (void *@var{from}, const void *@var{to}, size_t @var{count}) - -Copies @var{count} bytes from memory area @var{from} to memory area -@var{to}, returning a pointer to @var{to}. - -@end deftypefn - -*/ - -#include -#include - -void bcopy (const void*, void*, size_t); - -PTR -memmove (PTR s1, const PTR s2, size_t n) -{ - bcopy (s2, s1, n); - return s1; -} diff --git a/libiberty/mempcpy.c b/libiberty/mempcpy.c deleted file mode 100644 index beda7dfc982..00000000000 --- a/libiberty/mempcpy.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Implement the mempcpy function. - Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. - Written by Kaveh R. Ghazi . - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* - -@deftypefn Supplemental void* mempcpy (void *@var{out}, const void *@var{in}, size_t @var{length}) - -Copies @var{length} bytes from memory region @var{in} to region -@var{out}. Returns a pointer to @var{out} + @var{length}. - -@end deftypefn - -*/ - -#include -#include - -extern PTR memcpy (PTR, const PTR, size_t); - -PTR -mempcpy (PTR dst, const PTR src, size_t len) -{ - return (char *) memcpy (dst, src, len) + len; -} diff --git a/libiberty/memset.c b/libiberty/memset.c deleted file mode 100644 index 1951ad6bd61..00000000000 --- a/libiberty/memset.c +++ /dev/null @@ -1,25 +0,0 @@ -/* memset - This implementation is in the public domain. */ - -/* - -@deftypefn Supplemental void* memset (void *@var{s}, int @var{c}, size_t @var{count}) - -Sets the first @var{count} bytes of @var{s} to the constant byte -@var{c}, returning a pointer to @var{s}. - -@end deftypefn - -*/ - -#include -#include - -PTR -memset (PTR dest, register int val, register size_t len) -{ - register unsigned char *ptr = (unsigned char*)dest; - while (len-- > 0) - *ptr++ = val; - return dest; -} diff --git a/libiberty/mkstemps.c b/libiberty/mkstemps.c deleted file mode 100644 index 6c2e472528b..00000000000 --- a/libiberty/mkstemps.c +++ /dev/null @@ -1,140 +0,0 @@ -/* Copyright (C) 1991, 1992, 1996, 1998, 2004 Free Software Foundation, Inc. - This file is derived from mkstemp.c from the GNU C Library. - - The GNU C 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. - - The GNU C 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 the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif -#include -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#ifdef HAVE_SYS_TIME_H -#include -#endif -#include "ansidecl.h" - -/* We need to provide a type for gcc_uint64_t. */ -#ifdef __GNUC__ -__extension__ typedef unsigned long long gcc_uint64_t; -#else -typedef unsigned long gcc_uint64_t; -#endif - -#ifndef TMP_MAX -#define TMP_MAX 16384 -#endif - -#ifndef O_BINARY -# define O_BINARY 0 -#endif - -/* - -@deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len}) - -Generate a unique temporary file name from @var{pattern}. -@var{pattern} has the form: - -@example - @var{path}/ccXXXXXX@var{suffix} -@end example - -@var{suffix_len} tells us how long @var{suffix} is (it can be zero -length). The last six characters of @var{pattern} before @var{suffix} -must be @samp{XXXXXX}; they are replaced with a string that makes the -filename unique. Returns a file descriptor open on the file for -reading and writing. - -@end deftypefn - -*/ - -int -mkstemps (char *pattern, int suffix_len) -{ - static const char letters[] - = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - static gcc_uint64_t value; -#ifdef HAVE_GETTIMEOFDAY - struct timeval tv; -#endif - char *XXXXXX; - size_t len; - int count; - - len = strlen (pattern); - - if ((int) len < 6 + suffix_len - || strncmp (&pattern[len - 6 - suffix_len], "XXXXXX", 6)) - { - return -1; - } - - XXXXXX = &pattern[len - 6 - suffix_len]; - -#ifdef HAVE_GETTIMEOFDAY - /* Get some more or less random data. */ - gettimeofday (&tv, NULL); - value += ((gcc_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid (); -#else - value += getpid (); -#endif - - for (count = 0; count < TMP_MAX; ++count) - { - gcc_uint64_t v = value; - int fd; - - /* Fill in the random bits. */ - XXXXXX[0] = letters[v % 62]; - v /= 62; - XXXXXX[1] = letters[v % 62]; - v /= 62; - XXXXXX[2] = letters[v % 62]; - v /= 62; - XXXXXX[3] = letters[v % 62]; - v /= 62; - XXXXXX[4] = letters[v % 62]; - v /= 62; - XXXXXX[5] = letters[v % 62]; - - fd = open (pattern, O_BINARY|O_RDWR|O_CREAT|O_EXCL, 0600); - if (fd >= 0) - /* The file does not exist. */ - return fd; - - /* This is a random value. It is only necessary that the next - TMP_MAX values generated by adding 7777 to VALUE are different - with (module 2^32). */ - value += 7777; - } - - /* We return the null string if we can't find a unique file name. */ - pattern[0] = '\0'; - return -1; -} diff --git a/libiberty/msdos.c b/libiberty/msdos.c deleted file mode 100644 index 923e64d4ede..00000000000 --- a/libiberty/msdos.c +++ /dev/null @@ -1,15 +0,0 @@ -char msg[] = "No vfork available - aborting\n"; -vfork() -{ - write(1, msg, sizeof(msg)); -} - -sigsetmask() -{ - /* no signals support in go32 (yet) */ -} - -waitpid() -{ - return -1; -} diff --git a/libiberty/objalloc.c b/libiberty/objalloc.c deleted file mode 100644 index 3ddac2ce4cb..00000000000 --- a/libiberty/objalloc.c +++ /dev/null @@ -1,291 +0,0 @@ -/* objalloc.c -- routines to allocate memory for objects - Copyright 1997 Free Software Foundation, Inc. - Written by Ian Lance Taylor, Cygnus Solutions. - -This program 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, 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, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#include "config.h" -#include "ansidecl.h" - -#include "objalloc.h" - -/* Get a definition for NULL. */ -#include - -#if VMS -#include -#include -#else - -/* Get a definition for size_t. */ -#include - -#ifdef HAVE_STDLIB_H -#include -#else -/* For systems with larger pointers than ints, this must be declared. */ -extern PTR malloc (size_t); -extern void free (PTR); -#endif - -#endif - -/* These routines allocate space for an object. Freeing allocated - space may or may not free all more recently allocated space. - - We handle large and small allocation requests differently. If we - don't have enough space in the current block, and the allocation - request is for more than 512 bytes, we simply pass it through to - malloc. */ - -/* The objalloc structure is defined in objalloc.h. */ - -/* This structure appears at the start of each chunk. */ - -struct objalloc_chunk -{ - /* Next chunk. */ - struct objalloc_chunk *next; - /* If this chunk contains large objects, this is the value of - current_ptr when this chunk was allocated. If this chunk - contains small objects, this is NULL. */ - char *current_ptr; -}; - -/* The aligned size of objalloc_chunk. */ - -#define CHUNK_HEADER_SIZE \ - ((sizeof (struct objalloc_chunk) + OBJALLOC_ALIGN - 1) \ - &~ (OBJALLOC_ALIGN - 1)) - -/* We ask for this much memory each time we create a chunk which is to - hold small objects. */ - -#define CHUNK_SIZE (4096 - 32) - -/* A request for this amount or more is just passed through to malloc. */ - -#define BIG_REQUEST (512) - -/* Create an objalloc structure. */ - -struct objalloc * -objalloc_create (void) -{ - struct objalloc *ret; - struct objalloc_chunk *chunk; - - ret = (struct objalloc *) malloc (sizeof *ret); - if (ret == NULL) - return NULL; - - ret->chunks = (PTR) malloc (CHUNK_SIZE); - if (ret->chunks == NULL) - { - free (ret); - return NULL; - } - - chunk = (struct objalloc_chunk *) ret->chunks; - chunk->next = NULL; - chunk->current_ptr = NULL; - - ret->current_ptr = (char *) chunk + CHUNK_HEADER_SIZE; - ret->current_space = CHUNK_SIZE - CHUNK_HEADER_SIZE; - - return ret; -} - -/* Allocate space from an objalloc structure. */ - -PTR -_objalloc_alloc (struct objalloc *o, unsigned long len) -{ - /* We avoid confusion from zero sized objects by always allocating - at least 1 byte. */ - if (len == 0) - len = 1; - - len = (len + OBJALLOC_ALIGN - 1) &~ (OBJALLOC_ALIGN - 1); - - if (len <= o->current_space) - { - o->current_ptr += len; - o->current_space -= len; - return (PTR) (o->current_ptr - len); - } - - if (len >= BIG_REQUEST) - { - char *ret; - struct objalloc_chunk *chunk; - - ret = (char *) malloc (CHUNK_HEADER_SIZE + len); - if (ret == NULL) - return NULL; - - chunk = (struct objalloc_chunk *) ret; - chunk->next = (struct objalloc_chunk *) o->chunks; - chunk->current_ptr = o->current_ptr; - - o->chunks = (PTR) chunk; - - return (PTR) (ret + CHUNK_HEADER_SIZE); - } - else - { - struct objalloc_chunk *chunk; - - chunk = (struct objalloc_chunk *) malloc (CHUNK_SIZE); - if (chunk == NULL) - return NULL; - chunk->next = (struct objalloc_chunk *) o->chunks; - chunk->current_ptr = NULL; - - o->current_ptr = (char *) chunk + CHUNK_HEADER_SIZE; - o->current_space = CHUNK_SIZE - CHUNK_HEADER_SIZE; - - o->chunks = (PTR) chunk; - - return objalloc_alloc (o, len); - } -} - -/* Free an entire objalloc structure. */ - -void -objalloc_free (struct objalloc *o) -{ - struct objalloc_chunk *l; - - l = (struct objalloc_chunk *) o->chunks; - while (l != NULL) - { - struct objalloc_chunk *next; - - next = l->next; - free (l); - l = next; - } - - free (o); -} - -/* Free a block from an objalloc structure. This also frees all more - recently allocated blocks. */ - -void -objalloc_free_block (struct objalloc *o, PTR block) -{ - struct objalloc_chunk *p, *small; - char *b = (char *) block; - - /* First set P to the chunk which contains the block we are freeing, - and set Q to the last small object chunk we see before P. */ - small = NULL; - for (p = (struct objalloc_chunk *) o->chunks; p != NULL; p = p->next) - { - if (p->current_ptr == NULL) - { - if (b > (char *) p && b < (char *) p + CHUNK_SIZE) - break; - small = p; - } - else - { - if (b == (char *) p + CHUNK_HEADER_SIZE) - break; - } - } - - /* If we can't find the chunk, the caller has made a mistake. */ - if (p == NULL) - abort (); - - if (p->current_ptr == NULL) - { - struct objalloc_chunk *q; - struct objalloc_chunk *first; - - /* The block is in a chunk containing small objects. We can - free every chunk through SMALL, because they have certainly - been allocated more recently. After SMALL, we will not see - any chunks containing small objects; we can free any big - chunk if the current_ptr is greater than or equal to B. We - can then reset the new current_ptr to B. */ - - first = NULL; - q = (struct objalloc_chunk *) o->chunks; - while (q != p) - { - struct objalloc_chunk *next; - - next = q->next; - if (small != NULL) - { - if (small == q) - small = NULL; - free (q); - } - else if (q->current_ptr > b) - free (q); - else if (first == NULL) - first = q; - - q = next; - } - - if (first == NULL) - first = p; - o->chunks = (PTR) first; - - /* Now start allocating from this small block again. */ - o->current_ptr = b; - o->current_space = ((char *) p + CHUNK_SIZE) - b; - } - else - { - struct objalloc_chunk *q; - char *current_ptr; - - /* This block is in a large chunk by itself. We can free - everything on the list up to and including this block. We - then start allocating from the next chunk containing small - objects, setting current_ptr from the value stored with the - large chunk we are freeing. */ - - current_ptr = p->current_ptr; - p = p->next; - - q = (struct objalloc_chunk *) o->chunks; - while (q != p) - { - struct objalloc_chunk *next; - - next = q->next; - free (q); - q = next; - } - - o->chunks = (PTR) p; - - while (p->current_ptr != NULL) - p = p->next; - - o->current_ptr = current_ptr; - o->current_space = ((char *) p + CHUNK_SIZE) - current_ptr; - } -} diff --git a/libiberty/obstack.c b/libiberty/obstack.c deleted file mode 100644 index a6dbaf095df..00000000000 --- a/libiberty/obstack.c +++ /dev/null @@ -1,510 +0,0 @@ -/* obstack.c - subroutines used implicitly by object stack macros - Copyright (C) 1988,89,90,91,92,93,94,96,97 Free Software Foundation, Inc. - - - NOTE: This source is derived from an old version taken from the GNU C - Library (glibc). - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, - USA. */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "obstack.h" - -/* NOTE BEFORE MODIFYING THIS FILE: This version number must be - incremented whenever callers compiled using an old obstack.h can no - longer properly call the functions in this obstack.c. */ -#define OBSTACK_INTERFACE_VERSION 1 - -/* Comment out all this code if we are using the GNU C Library, and are not - actually compiling the library itself, and the installed library - supports the same library interface we do. This code is part of the GNU - C Library, but also included in many other GNU distributions. Compiling - and linking in this code is a waste when using the GNU C library - (especially if it is a shared library). Rather than having every GNU - program understand `configure --with-gnu-libc' and omit the object - files, it is simpler to just do this in the source for each such file. */ - -#include /* Random thing to get __GNU_LIBRARY__. */ -#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1 -#include -#if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION -#define ELIDE_CODE -#endif -#endif - - -#ifndef ELIDE_CODE - - -#define POINTER void * - -/* Determine default alignment. */ -struct fooalign {char x; double d;}; -#define DEFAULT_ALIGNMENT \ - ((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0)) -/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT. - But in fact it might be less smart and round addresses to as much as - DEFAULT_ROUNDING. So we prepare for it to do that. */ -union fooround {long x; double d;}; -#define DEFAULT_ROUNDING (sizeof (union fooround)) - -/* When we copy a long block of data, this is the unit to do it with. - On some machines, copying successive ints does not work; - in such a case, redefine COPYING_UNIT to `long' (if that works) - or `char' as a last resort. */ -#ifndef COPYING_UNIT -#define COPYING_UNIT int -#endif - - -/* The functions allocating more room by calling `obstack_chunk_alloc' - jump to the handler pointed to by `obstack_alloc_failed_handler'. - This variable by default points to the internal function - `print_and_abort'. */ -static void print_and_abort (void); -void (*obstack_alloc_failed_handler) (void) = print_and_abort; - -/* Exit value used when `print_and_abort' is used. */ -#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H -#include -#endif -#ifndef EXIT_FAILURE -#define EXIT_FAILURE 1 -#endif -int obstack_exit_failure = EXIT_FAILURE; - -/* The non-GNU-C macros copy the obstack into this global variable - to avoid multiple evaluation. */ - -struct obstack *_obstack; - -/* Define a macro that either calls functions with the traditional malloc/free - calling interface, or calls functions with the mmalloc/mfree interface - (that adds an extra first argument), based on the state of use_extra_arg. - For free, do not use ?:, since some compilers, like the MIPS compilers, - do not allow (expr) ? void : void. */ - -#if defined (__STDC__) && __STDC__ -#define CALL_CHUNKFUN(h, size) \ - (((h) -> use_extra_arg) \ - ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ - : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size))) - -#define CALL_FREEFUN(h, old_chunk) \ - do { \ - if ((h) -> use_extra_arg) \ - (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ - else \ - (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \ - } while (0) -#else -#define CALL_CHUNKFUN(h, size) \ - (((h) -> use_extra_arg) \ - ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ - : (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size))) - -#define CALL_FREEFUN(h, old_chunk) \ - do { \ - if ((h) -> use_extra_arg) \ - (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ - else \ - (*(void (*) ()) (h)->freefun) ((old_chunk)); \ - } while (0) -#endif - - -/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). - Objects start on multiples of ALIGNMENT (0 means use default). - CHUNKFUN is the function to use to allocate chunks, - and FREEFUN the function to free them. - - Return nonzero if successful, zero if out of memory. - To recover from an out of memory error, - free up some memory, then call this again. */ - -int -_obstack_begin (struct obstack *h, int size, int alignment, - POINTER (*chunkfun) (long), void (*freefun) (void *)) -{ - register struct _obstack_chunk *chunk; /* points to new chunk */ - - if (alignment == 0) - alignment = (int) DEFAULT_ALIGNMENT; - if (size == 0) - /* Default size is what GNU malloc can fit in a 4096-byte block. */ - { - /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. - Use the values for range checking, because if range checking is off, - the extra bytes won't be missed terribly, but if range checking is on - and we used a larger request, a whole extra 4096 bytes would be - allocated. - - These number are irrelevant to the new GNU malloc. I suspect it is - less sensitive to the size of the request. */ - int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) - + 4 + DEFAULT_ROUNDING - 1) - & ~(DEFAULT_ROUNDING - 1)); - size = 4096 - extra; - } - - h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun; - h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; - h->chunk_size = size; - h->alignment_mask = alignment - 1; - h->use_extra_arg = 0; - - chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); - if (!chunk) - (*obstack_alloc_failed_handler) (); - h->next_free = h->object_base = chunk->contents; - h->chunk_limit = chunk->limit - = (char *) chunk + h->chunk_size; - chunk->prev = 0; - /* The initial chunk now contains no empty object. */ - h->maybe_empty_object = 0; - h->alloc_failed = 0; - return 1; -} - -int -_obstack_begin_1 (struct obstack *h, int size, int alignment, - POINTER (*chunkfun) (POINTER, long), - void (*freefun) (POINTER, POINTER), POINTER arg) -{ - register struct _obstack_chunk *chunk; /* points to new chunk */ - - if (alignment == 0) - alignment = (int) DEFAULT_ALIGNMENT; - if (size == 0) - /* Default size is what GNU malloc can fit in a 4096-byte block. */ - { - /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. - Use the values for range checking, because if range checking is off, - the extra bytes won't be missed terribly, but if range checking is on - and we used a larger request, a whole extra 4096 bytes would be - allocated. - - These number are irrelevant to the new GNU malloc. I suspect it is - less sensitive to the size of the request. */ - int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) - + 4 + DEFAULT_ROUNDING - 1) - & ~(DEFAULT_ROUNDING - 1)); - size = 4096 - extra; - } - - h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun; - h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; - h->chunk_size = size; - h->alignment_mask = alignment - 1; - h->extra_arg = arg; - h->use_extra_arg = 1; - - chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); - if (!chunk) - (*obstack_alloc_failed_handler) (); - h->next_free = h->object_base = chunk->contents; - h->chunk_limit = chunk->limit - = (char *) chunk + h->chunk_size; - chunk->prev = 0; - /* The initial chunk now contains no empty object. */ - h->maybe_empty_object = 0; - h->alloc_failed = 0; - return 1; -} - -/* Allocate a new current chunk for the obstack *H - on the assumption that LENGTH bytes need to be added - to the current object, or a new object of length LENGTH allocated. - Copies any partial object from the end of the old chunk - to the beginning of the new one. */ - -void -_obstack_newchunk (struct obstack *h, int length) -{ - register struct _obstack_chunk *old_chunk = h->chunk; - register struct _obstack_chunk *new_chunk; - register long new_size; - register long obj_size = h->next_free - h->object_base; - register long i; - long already; - - /* Compute size for new chunk. */ - new_size = (obj_size + length) + (obj_size >> 3) + 100; - if (new_size < h->chunk_size) - new_size = h->chunk_size; - - /* Allocate and initialize the new chunk. */ - new_chunk = CALL_CHUNKFUN (h, new_size); - if (!new_chunk) - (*obstack_alloc_failed_handler) (); - h->chunk = new_chunk; - new_chunk->prev = old_chunk; - new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; - - /* Move the existing object to the new chunk. - Word at a time is fast and is safe if the object - is sufficiently aligned. */ - if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT) - { - for (i = obj_size / sizeof (COPYING_UNIT) - 1; - i >= 0; i--) - ((COPYING_UNIT *)new_chunk->contents)[i] - = ((COPYING_UNIT *)h->object_base)[i]; - /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT, - but that can cross a page boundary on a machine - which does not do strict alignment for COPYING_UNITS. */ - already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT); - } - else - already = 0; - /* Copy remaining bytes one by one. */ - for (i = already; i < obj_size; i++) - new_chunk->contents[i] = h->object_base[i]; - - /* If the object just copied was the only data in OLD_CHUNK, - free that chunk and remove it from the chain. - But not if that chunk might contain an empty object. */ - if (h->object_base == old_chunk->contents && ! h->maybe_empty_object) - { - new_chunk->prev = old_chunk->prev; - CALL_FREEFUN (h, old_chunk); - } - - h->object_base = new_chunk->contents; - h->next_free = h->object_base + obj_size; - /* The new chunk certainly contains no empty object yet. */ - h->maybe_empty_object = 0; -} - -/* Return nonzero if object OBJ has been allocated from obstack H. - This is here for debugging. - If you use it in a program, you are probably losing. */ - -/* Suppress -Wmissing-prototypes warning. We don't want to declare this in - obstack.h because it is just for debugging. */ -int _obstack_allocated_p (struct obstack *h, POINTER obj); - -int -_obstack_allocated_p (struct obstack *h, POINTER obj) -{ - register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ - register struct _obstack_chunk *plp; /* point to previous chunk if any */ - - lp = (h)->chunk; - /* We use >= rather than > since the object cannot be exactly at - the beginning of the chunk but might be an empty object exactly - at the end of an adjacent chunk. */ - while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) - { - plp = lp->prev; - lp = plp; - } - return lp != 0; -} - -/* Free objects in obstack H, including OBJ and everything allocate - more recently than OBJ. If OBJ is zero, free everything in H. */ - -#undef obstack_free - -/* This function has two names with identical definitions. - This is the first one, called from non-ANSI code. */ - -void -_obstack_free (struct obstack *h, POINTER obj) -{ - register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ - register struct _obstack_chunk *plp; /* point to previous chunk if any */ - - lp = h->chunk; - /* We use >= because there cannot be an object at the beginning of a chunk. - But there can be an empty object at that address - at the end of another chunk. */ - while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) - { - plp = lp->prev; - CALL_FREEFUN (h, lp); - lp = plp; - /* If we switch chunks, we can't tell whether the new current - chunk contains an empty object, so assume that it may. */ - h->maybe_empty_object = 1; - } - if (lp) - { - h->object_base = h->next_free = (char *) (obj); - h->chunk_limit = lp->limit; - h->chunk = lp; - } - else if (obj != 0) - /* obj is not in any of the chunks! */ - abort (); -} - -/* This function is used from ANSI code. */ - -void -obstack_free (struct obstack *h, POINTER obj) -{ - register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ - register struct _obstack_chunk *plp; /* point to previous chunk if any */ - - lp = h->chunk; - /* We use >= because there cannot be an object at the beginning of a chunk. - But there can be an empty object at that address - at the end of another chunk. */ - while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) - { - plp = lp->prev; - CALL_FREEFUN (h, lp); - lp = plp; - /* If we switch chunks, we can't tell whether the new current - chunk contains an empty object, so assume that it may. */ - h->maybe_empty_object = 1; - } - if (lp) - { - h->object_base = h->next_free = (char *) (obj); - h->chunk_limit = lp->limit; - h->chunk = lp; - } - else if (obj != 0) - /* obj is not in any of the chunks! */ - abort (); -} - -int -_obstack_memory_used (struct obstack *h) -{ - register struct _obstack_chunk* lp; - register int nbytes = 0; - - for (lp = h->chunk; lp != 0; lp = lp->prev) - { - nbytes += lp->limit - (char *) lp; - } - return nbytes; -} - -/* Define the error handler. */ -#ifndef _ -# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC -# include -# ifndef _ -# define _(Str) gettext (Str) -# endif -# else -# define _(Str) (Str) -# endif -#endif - -static void -print_and_abort (void) -{ - fputs (_("memory exhausted\n"), stderr); - exit (obstack_exit_failure); -} - -#if 0 -/* These are now turned off because the applications do not use it - and it uses bcopy via obstack_grow, which causes trouble on sysV. */ - -/* Now define the functional versions of the obstack macros. - Define them to simply use the corresponding macros to do the job. */ - -/* The function names appear in parentheses in order to prevent - the macro-definitions of the names from being expanded there. */ - -POINTER (obstack_base) (struct obstack *obstack) -{ - return obstack_base (obstack); -} - -POINTER (obstack_next_free) (struct obstack *obstack) -{ - return obstack_next_free (obstack); -} - -int (obstack_object_size) (struct obstack *obstack) -{ - return obstack_object_size (obstack); -} - -int (obstack_room) (struct obstack *obstack) -{ - return obstack_room (obstack); -} - -int (obstack_make_room) (struct obstack *obstack, int length) -{ - return obstack_make_room (obstack, length); -} - -void (obstack_grow) (struct obstack *obstack, POINTER pointer, int length) -{ - obstack_grow (obstack, pointer, length); -} - -void (obstack_grow0) (struct obstack *obstack, POINTER pointer, int length) -{ - obstack_grow0 (obstack, pointer, length); -} - -void (obstack_1grow) (struct obstack *obstack, int character) -{ - obstack_1grow (obstack, character); -} - -void (obstack_blank) (struct obstack *obstack, int length) -{ - obstack_blank (obstack, length); -} - -void (obstack_1grow_fast) (struct obstack *obstack, int character) -{ - obstack_1grow_fast (obstack, character); -} - -void (obstack_blank_fast) (struct obstack *obstack, int length) -{ - obstack_blank_fast (obstack, length); -} - -POINTER (obstack_finish) (struct obstack *obstack) -{ - return obstack_finish (obstack); -} - -POINTER (obstack_alloc) (struct obstack *obstack, int length) -{ - return obstack_alloc (obstack, length); -} - -POINTER (obstack_copy) (struct obstack *obstack, POINTER pointer, int length) -{ - return obstack_copy (obstack, pointer, length); -} - -POINTER (obstack_copy0) (struct obstack *obstack, POINTER pointer, int length) -{ - return obstack_copy0 (obstack, pointer, length); -} - -#endif /* 0 */ - -#endif /* !ELIDE_CODE */ diff --git a/libiberty/obstacks.texi b/libiberty/obstacks.texi deleted file mode 100644 index 9bddf7caf30..00000000000 --- a/libiberty/obstacks.texi +++ /dev/null @@ -1,758 +0,0 @@ -@node Obstacks,Licenses,Functions,Top -@chapter Obstacks -@cindex obstacks - -An @dfn{obstack} is a pool of memory containing a stack of objects. You -can create any number of separate obstacks, and then allocate objects in -specified obstacks. Within each obstack, the last object allocated must -always be the first one freed, but distinct obstacks are independent of -each other. - -Aside from this one constraint of order of freeing, obstacks are totally -general: an obstack can contain any number of objects of any size. They -are implemented with macros, so allocation is usually very fast as long as -the objects are usually small. And the only space overhead per object is -the padding needed to start each object on a suitable boundary. - -@menu -* Creating Obstacks:: How to declare an obstack in your program. -* Preparing for Obstacks:: Preparations needed before you can - use obstacks. -* Allocation in an Obstack:: Allocating objects in an obstack. -* Freeing Obstack Objects:: Freeing objects in an obstack. -* Obstack Functions:: The obstack functions are both - functions and macros. -* Growing Objects:: Making an object bigger by stages. -* Extra Fast Growing:: Extra-high-efficiency (though more - complicated) growing objects. -* Status of an Obstack:: Inquiries about the status of an obstack. -* Obstacks Data Alignment:: Controlling alignment of objects in obstacks. -* Obstack Chunks:: How obstacks obtain and release chunks; - efficiency considerations. -* Summary of Obstacks:: -@end menu - -@node Creating Obstacks -@section Creating Obstacks - -The utilities for manipulating obstacks are declared in the header -file @file{obstack.h}. -@pindex obstack.h - -@comment obstack.h -@comment GNU -@deftp {Data Type} {struct obstack} -An obstack is represented by a data structure of type @code{struct -obstack}. This structure has a small fixed size; it records the status -of the obstack and how to find the space in which objects are allocated. -It does not contain any of the objects themselves. You should not try -to access the contents of the structure directly; use only the functions -described in this chapter. -@end deftp - -You can declare variables of type @code{struct obstack} and use them as -obstacks, or you can allocate obstacks dynamically like any other kind -of object. Dynamic allocation of obstacks allows your program to have a -variable number of different stacks. (You can even allocate an -obstack structure in another obstack, but this is rarely useful.) - -All the functions that work with obstacks require you to specify which -obstack to use. You do this with a pointer of type @code{struct obstack -*}. In the following, we often say ``an obstack'' when strictly -speaking the object at hand is such a pointer. - -The objects in the obstack are packed into large blocks called -@dfn{chunks}. The @code{struct obstack} structure points to a chain of -the chunks currently in use. - -The obstack library obtains a new chunk whenever you allocate an object -that won't fit in the previous chunk. Since the obstack library manages -chunks automatically, you don't need to pay much attention to them, but -you do need to supply a function which the obstack library should use to -get a chunk. Usually you supply a function which uses @code{malloc} -directly or indirectly. You must also supply a function to free a chunk. -These matters are described in the following section. - -@node Preparing for Obstacks -@section Preparing for Using Obstacks - -Each source file in which you plan to use the obstack functions -must include the header file @file{obstack.h}, like this: - -@smallexample -#include -@end smallexample - -@findex obstack_chunk_alloc -@findex obstack_chunk_free -Also, if the source file uses the macro @code{obstack_init}, it must -declare or define two functions or macros that will be called by the -obstack library. One, @code{obstack_chunk_alloc}, is used to allocate -the chunks of memory into which objects are packed. The other, -@code{obstack_chunk_free}, is used to return chunks when the objects in -them are freed. These macros should appear before any use of obstacks -in the source file. - -Usually these are defined to use @code{malloc} via the intermediary -@code{xmalloc} (@pxref{Unconstrained Allocation, , , libc, The GNU C Library Reference Manual}). This is done with -the following pair of macro definitions: - -@smallexample -#define obstack_chunk_alloc xmalloc -#define obstack_chunk_free free -@end smallexample - -@noindent -Though the memory you get using obstacks really comes from @code{malloc}, -using obstacks is faster because @code{malloc} is called less often, for -larger blocks of memory. @xref{Obstack Chunks}, for full details. - -At run time, before the program can use a @code{struct obstack} object -as an obstack, it must initialize the obstack by calling -@code{obstack_init}. - -@comment obstack.h -@comment GNU -@deftypefun int obstack_init (struct obstack *@var{obstack-ptr}) -Initialize obstack @var{obstack-ptr} for allocation of objects. This -function calls the obstack's @code{obstack_chunk_alloc} function. If -allocation of memory fails, the function pointed to by -@code{obstack_alloc_failed_handler} is called. The @code{obstack_init} -function always returns 1 (Compatibility notice: Former versions of -obstack returned 0 if allocation failed). -@end deftypefun - -Here are two examples of how to allocate the space for an obstack and -initialize it. First, an obstack that is a static variable: - -@smallexample -static struct obstack myobstack; -@dots{} -obstack_init (&myobstack); -@end smallexample - -@noindent -Second, an obstack that is itself dynamically allocated: - -@smallexample -struct obstack *myobstack_ptr - = (struct obstack *) xmalloc (sizeof (struct obstack)); - -obstack_init (myobstack_ptr); -@end smallexample - -@comment obstack.h -@comment GNU -@defvar obstack_alloc_failed_handler -The value of this variable is a pointer to a function that -@code{obstack} uses when @code{obstack_chunk_alloc} fails to allocate -memory. The default action is to print a message and abort. -You should supply a function that either calls @code{exit} -(@pxref{Program Termination, , , libc, The GNU C Library Reference Manual}) or @code{longjmp} (@pxref{Non-Local -Exits, , , libc, The GNU C Library Reference Manual}) and doesn't return. - -@smallexample -void my_obstack_alloc_failed (void) -@dots{} -obstack_alloc_failed_handler = &my_obstack_alloc_failed; -@end smallexample - -@end defvar - -@node Allocation in an Obstack -@section Allocation in an Obstack -@cindex allocation (obstacks) - -The most direct way to allocate an object in an obstack is with -@code{obstack_alloc}, which is invoked almost like @code{malloc}. - -@comment obstack.h -@comment GNU -@deftypefun {void *} obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size}) -This allocates an uninitialized block of @var{size} bytes in an obstack -and returns its address. Here @var{obstack-ptr} specifies which obstack -to allocate the block in; it is the address of the @code{struct obstack} -object which represents the obstack. Each obstack function or macro -requires you to specify an @var{obstack-ptr} as the first argument. - -This function calls the obstack's @code{obstack_chunk_alloc} function if -it needs to allocate a new chunk of memory; it calls -@code{obstack_alloc_failed_handler} if allocation of memory by -@code{obstack_chunk_alloc} failed. -@end deftypefun - -For example, here is a function that allocates a copy of a string @var{str} -in a specific obstack, which is in the variable @code{string_obstack}: - -@smallexample -struct obstack string_obstack; - -char * -copystring (char *string) -@{ - size_t len = strlen (string) + 1; - char *s = (char *) obstack_alloc (&string_obstack, len); - memcpy (s, string, len); - return s; -@} -@end smallexample - -To allocate a block with specified contents, use the function -@code{obstack_copy}, declared like this: - -@comment obstack.h -@comment GNU -@deftypefun {void *} obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) -This allocates a block and initializes it by copying @var{size} -bytes of data starting at @var{address}. It calls -@code{obstack_alloc_failed_handler} if allocation of memory by -@code{obstack_chunk_alloc} failed. -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun {void *} obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) -Like @code{obstack_copy}, but appends an extra byte containing a null -character. This extra byte is not counted in the argument @var{size}. -@end deftypefun - -The @code{obstack_copy0} function is convenient for copying a sequence -of characters into an obstack as a null-terminated string. Here is an -example of its use: - -@smallexample -char * -obstack_savestring (char *addr, int size) -@{ - return obstack_copy0 (&myobstack, addr, size); -@} -@end smallexample - -@noindent -Contrast this with the previous example of @code{savestring} using -@code{malloc} (@pxref{Basic Allocation, , , libc, The GNU C Library Reference Manual}). - -@node Freeing Obstack Objects -@section Freeing Objects in an Obstack -@cindex freeing (obstacks) - -To free an object allocated in an obstack, use the function -@code{obstack_free}. Since the obstack is a stack of objects, freeing -one object automatically frees all other objects allocated more recently -in the same obstack. - -@comment obstack.h -@comment GNU -@deftypefun void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object}) -If @var{object} is a null pointer, everything allocated in the obstack -is freed. Otherwise, @var{object} must be the address of an object -allocated in the obstack. Then @var{object} is freed, along with -everything allocated in @var{obstack} since @var{object}. -@end deftypefun - -Note that if @var{object} is a null pointer, the result is an -uninitialized obstack. To free all memory in an obstack but leave it -valid for further allocation, call @code{obstack_free} with the address -of the first object allocated on the obstack: - -@smallexample -obstack_free (obstack_ptr, first_object_allocated_ptr); -@end smallexample - -Recall that the objects in an obstack are grouped into chunks. When all -the objects in a chunk become free, the obstack library automatically -frees the chunk (@pxref{Preparing for Obstacks}). Then other -obstacks, or non-obstack allocation, can reuse the space of the chunk. - -@node Obstack Functions -@section Obstack Functions and Macros -@cindex macros - -The interfaces for using obstacks may be defined either as functions or -as macros, depending on the compiler. The obstack facility works with -all C compilers, including both @w{ISO C} and traditional C, but there are -precautions you must take if you plan to use compilers other than GNU C. - -If you are using an old-fashioned @w{non-ISO C} compiler, all the obstack -``functions'' are actually defined only as macros. You can call these -macros like functions, but you cannot use them in any other way (for -example, you cannot take their address). - -Calling the macros requires a special precaution: namely, the first -operand (the obstack pointer) may not contain any side effects, because -it may be computed more than once. For example, if you write this: - -@smallexample -obstack_alloc (get_obstack (), 4); -@end smallexample - -@noindent -you will find that @code{get_obstack} may be called several times. -If you use @code{*obstack_list_ptr++} as the obstack pointer argument, -you will get very strange results since the incrementation may occur -several times. - -In @w{ISO C}, each function has both a macro definition and a function -definition. The function definition is used if you take the address of the -function without calling it. An ordinary call uses the macro definition by -default, but you can request the function definition instead by writing the -function name in parentheses, as shown here: - -@smallexample -char *x; -void *(*funcp) (); -/* @r{Use the macro}. */ -x = (char *) obstack_alloc (obptr, size); -/* @r{Call the function}. */ -x = (char *) (obstack_alloc) (obptr, size); -/* @r{Take the address of the function}. */ -funcp = obstack_alloc; -@end smallexample - -@noindent -This is the same situation that exists in @w{ISO C} for the standard library -functions. @xref{Macro Definitions, , , libc, The GNU C Library Reference Manual}. - -@strong{Warning:} When you do use the macros, you must observe the -precaution of avoiding side effects in the first operand, even in @w{ISO C}. - -If you use the GNU C compiler, this precaution is not necessary, because -various language extensions in GNU C permit defining the macros so as to -compute each argument only once. - -@node Growing Objects -@section Growing Objects -@cindex growing objects (in obstacks) -@cindex changing the size of a block (obstacks) - -Because memory in obstack chunks is used sequentially, it is possible to -build up an object step by step, adding one or more bytes at a time to the -end of the object. With this technique, you do not need to know how much -data you will put in the object until you come to the end of it. We call -this the technique of @dfn{growing objects}. The special functions -for adding data to the growing object are described in this section. - -You don't need to do anything special when you start to grow an object. -Using one of the functions to add data to the object automatically -starts it. However, it is necessary to say explicitly when the object is -finished. This is done with the function @code{obstack_finish}. - -The actual address of the object thus built up is not known until the -object is finished. Until then, it always remains possible that you will -add so much data that the object must be copied into a new chunk. - -While the obstack is in use for a growing object, you cannot use it for -ordinary allocation of another object. If you try to do so, the space -already added to the growing object will become part of the other object. - -@comment obstack.h -@comment GNU -@deftypefun void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size}) -The most basic function for adding to a growing object is -@code{obstack_blank}, which adds space without initializing it. -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size}) -To add a block of initialized space, use @code{obstack_grow}, which is -the growing-object analogue of @code{obstack_copy}. It adds @var{size} -bytes of data to the growing object, copying the contents from -@var{data}. -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size}) -This is the growing-object analogue of @code{obstack_copy0}. It adds -@var{size} bytes copied from @var{data}, followed by an additional null -character. -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{c}) -To add one character at a time, use the function @code{obstack_1grow}. -It adds a single byte containing @var{c} to the growing object. -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun void obstack_ptr_grow (struct obstack *@var{obstack-ptr}, void *@var{data}) -Adding the value of a pointer one can use the function -@code{obstack_ptr_grow}. It adds @code{sizeof (void *)} bytes -containing the value of @var{data}. -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun void obstack_int_grow (struct obstack *@var{obstack-ptr}, int @var{data}) -A single value of type @code{int} can be added by using the -@code{obstack_int_grow} function. It adds @code{sizeof (int)} bytes to -the growing object and initializes them with the value of @var{data}. -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun {void *} obstack_finish (struct obstack *@var{obstack-ptr}) -When you are finished growing the object, use the function -@code{obstack_finish} to close it off and return its final address. - -Once you have finished the object, the obstack is available for ordinary -allocation or for growing another object. - -This function can return a null pointer under the same conditions as -@code{obstack_alloc} (@pxref{Allocation in an Obstack}). -@end deftypefun - -When you build an object by growing it, you will probably need to know -afterward how long it became. You need not keep track of this as you grow -the object, because you can find out the length from the obstack just -before finishing the object with the function @code{obstack_object_size}, -declared as follows: - -@comment obstack.h -@comment GNU -@deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr}) -This function returns the current size of the growing object, in bytes. -Remember to call this function @emph{before} finishing the object. -After it is finished, @code{obstack_object_size} will return zero. -@end deftypefun - -If you have started growing an object and wish to cancel it, you should -finish it and then free it, like this: - -@smallexample -obstack_free (obstack_ptr, obstack_finish (obstack_ptr)); -@end smallexample - -@noindent -This has no effect if no object was growing. - -@cindex shrinking objects -You can use @code{obstack_blank} with a negative size argument to make -the current object smaller. Just don't try to shrink it beyond zero -length---there's no telling what will happen if you do that. - -@node Extra Fast Growing -@section Extra Fast Growing Objects -@cindex efficiency and obstacks - -The usual functions for growing objects incur overhead for checking -whether there is room for the new growth in the current chunk. If you -are frequently constructing objects in small steps of growth, this -overhead can be significant. - -You can reduce the overhead by using special ``fast growth'' -functions that grow the object without checking. In order to have a -robust program, you must do the checking yourself. If you do this checking -in the simplest way each time you are about to add data to the object, you -have not saved anything, because that is what the ordinary growth -functions do. But if you can arrange to check less often, or check -more efficiently, then you make the program faster. - -The function @code{obstack_room} returns the amount of room available -in the current chunk. It is declared as follows: - -@comment obstack.h -@comment GNU -@deftypefun int obstack_room (struct obstack *@var{obstack-ptr}) -This returns the number of bytes that can be added safely to the current -growing object (or to an object about to be started) in obstack -@var{obstack} using the fast growth functions. -@end deftypefun - -While you know there is room, you can use these fast growth functions -for adding data to a growing object: - -@comment obstack.h -@comment GNU -@deftypefun void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{c}) -The function @code{obstack_1grow_fast} adds one byte containing the -character @var{c} to the growing object in obstack @var{obstack-ptr}. -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun void obstack_ptr_grow_fast (struct obstack *@var{obstack-ptr}, void *@var{data}) -The function @code{obstack_ptr_grow_fast} adds @code{sizeof (void *)} -bytes containing the value of @var{data} to the growing object in -obstack @var{obstack-ptr}. -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun void obstack_int_grow_fast (struct obstack *@var{obstack-ptr}, int @var{data}) -The function @code{obstack_int_grow_fast} adds @code{sizeof (int)} bytes -containing the value of @var{data} to the growing object in obstack -@var{obstack-ptr}. -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size}) -The function @code{obstack_blank_fast} adds @var{size} bytes to the -growing object in obstack @var{obstack-ptr} without initializing them. -@end deftypefun - -When you check for space using @code{obstack_room} and there is not -enough room for what you want to add, the fast growth functions -are not safe. In this case, simply use the corresponding ordinary -growth function instead. Very soon this will copy the object to a -new chunk; then there will be lots of room available again. - -So, each time you use an ordinary growth function, check afterward for -sufficient space using @code{obstack_room}. Once the object is copied -to a new chunk, there will be plenty of space again, so the program will -start using the fast growth functions again. - -Here is an example: - -@smallexample -@group -void -add_string (struct obstack *obstack, const char *ptr, int len) -@{ - while (len > 0) - @{ - int room = obstack_room (obstack); - if (room == 0) - @{ - /* @r{Not enough room. Add one character slowly,} - @r{which may copy to a new chunk and make room.} */ - obstack_1grow (obstack, *ptr++); - len--; - @} - else - @{ - if (room > len) - room = len; - /* @r{Add fast as much as we have room for.} */ - len -= room; - while (room-- > 0) - obstack_1grow_fast (obstack, *ptr++); - @} - @} -@} -@end group -@end smallexample - -@node Status of an Obstack -@section Status of an Obstack -@cindex obstack status -@cindex status of obstack - -Here are functions that provide information on the current status of -allocation in an obstack. You can use them to learn about an object while -still growing it. - -@comment obstack.h -@comment GNU -@deftypefun {void *} obstack_base (struct obstack *@var{obstack-ptr}) -This function returns the tentative address of the beginning of the -currently growing object in @var{obstack-ptr}. If you finish the object -immediately, it will have that address. If you make it larger first, it -may outgrow the current chunk---then its address will change! - -If no object is growing, this value says where the next object you -allocate will start (once again assuming it fits in the current -chunk). -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun {void *} obstack_next_free (struct obstack *@var{obstack-ptr}) -This function returns the address of the first free byte in the current -chunk of obstack @var{obstack-ptr}. This is the end of the currently -growing object. If no object is growing, @code{obstack_next_free} -returns the same value as @code{obstack_base}. -@end deftypefun - -@comment obstack.h -@comment GNU -@deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr}) -This function returns the size in bytes of the currently growing object. -This is equivalent to - -@smallexample -obstack_next_free (@var{obstack-ptr}) - obstack_base (@var{obstack-ptr}) -@end smallexample -@end deftypefun - -@node Obstacks Data Alignment -@section Alignment of Data in Obstacks -@cindex alignment (in obstacks) - -Each obstack has an @dfn{alignment boundary}; each object allocated in -the obstack automatically starts on an address that is a multiple of the -specified boundary. By default, this boundary is 4 bytes. - -To access an obstack's alignment boundary, use the macro -@code{obstack_alignment_mask}, whose function prototype looks like -this: - -@comment obstack.h -@comment GNU -@deftypefn Macro int obstack_alignment_mask (struct obstack *@var{obstack-ptr}) -The value is a bit mask; a bit that is 1 indicates that the corresponding -bit in the address of an object should be 0. The mask value should be one -less than a power of 2; the effect is that all object addresses are -multiples of that power of 2. The default value of the mask is 3, so that -addresses are multiples of 4. A mask value of 0 means an object can start -on any multiple of 1 (that is, no alignment is required). - -The expansion of the macro @code{obstack_alignment_mask} is an lvalue, -so you can alter the mask by assignment. For example, this statement: - -@smallexample -obstack_alignment_mask (obstack_ptr) = 0; -@end smallexample - -@noindent -has the effect of turning off alignment processing in the specified obstack. -@end deftypefn - -Note that a change in alignment mask does not take effect until -@emph{after} the next time an object is allocated or finished in the -obstack. If you are not growing an object, you can make the new -alignment mask take effect immediately by calling @code{obstack_finish}. -This will finish a zero-length object and then do proper alignment for -the next object. - -@node Obstack Chunks -@section Obstack Chunks -@cindex efficiency of chunks -@cindex chunks - -Obstacks work by allocating space for themselves in large chunks, and -then parceling out space in the chunks to satisfy your requests. Chunks -are normally 4096 bytes long unless you specify a different chunk size. -The chunk size includes 8 bytes of overhead that are not actually used -for storing objects. Regardless of the specified size, longer chunks -will be allocated when necessary for long objects. - -The obstack library allocates chunks by calling the function -@code{obstack_chunk_alloc}, which you must define. When a chunk is no -longer needed because you have freed all the objects in it, the obstack -library frees the chunk by calling @code{obstack_chunk_free}, which you -must also define. - -These two must be defined (as macros) or declared (as functions) in each -source file that uses @code{obstack_init} (@pxref{Creating Obstacks}). -Most often they are defined as macros like this: - -@smallexample -#define obstack_chunk_alloc malloc -#define obstack_chunk_free free -@end smallexample - -Note that these are simple macros (no arguments). Macro definitions with -arguments will not work! It is necessary that @code{obstack_chunk_alloc} -or @code{obstack_chunk_free}, alone, expand into a function name if it is -not itself a function name. - -If you allocate chunks with @code{malloc}, the chunk size should be a -power of 2. The default chunk size, 4096, was chosen because it is long -enough to satisfy many typical requests on the obstack yet short enough -not to waste too much memory in the portion of the last chunk not yet used. - -@comment obstack.h -@comment GNU -@deftypefn Macro int obstack_chunk_size (struct obstack *@var{obstack-ptr}) -This returns the chunk size of the given obstack. -@end deftypefn - -Since this macro expands to an lvalue, you can specify a new chunk size by -assigning it a new value. Doing so does not affect the chunks already -allocated, but will change the size of chunks allocated for that particular -obstack in the future. It is unlikely to be useful to make the chunk size -smaller, but making it larger might improve efficiency if you are -allocating many objects whose size is comparable to the chunk size. Here -is how to do so cleanly: - -@smallexample -if (obstack_chunk_size (obstack_ptr) < @var{new-chunk-size}) - obstack_chunk_size (obstack_ptr) = @var{new-chunk-size}; -@end smallexample - -@node Summary of Obstacks -@section Summary of Obstack Functions - -Here is a summary of all the functions associated with obstacks. Each -takes the address of an obstack (@code{struct obstack *}) as its first -argument. - -@table @code -@item void obstack_init (struct obstack *@var{obstack-ptr}) -Initialize use of an obstack. @xref{Creating Obstacks}. - -@item void *obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size}) -Allocate an object of @var{size} uninitialized bytes. -@xref{Allocation in an Obstack}. - -@item void *obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) -Allocate an object of @var{size} bytes, with contents copied from -@var{address}. @xref{Allocation in an Obstack}. - -@item void *obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) -Allocate an object of @var{size}+1 bytes, with @var{size} of them copied -from @var{address}, followed by a null character at the end. -@xref{Allocation in an Obstack}. - -@item void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object}) -Free @var{object} (and everything allocated in the specified obstack -more recently than @var{object}). @xref{Freeing Obstack Objects}. - -@item void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size}) -Add @var{size} uninitialized bytes to a growing object. -@xref{Growing Objects}. - -@item void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) -Add @var{size} bytes, copied from @var{address}, to a growing object. -@xref{Growing Objects}. - -@item void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) -Add @var{size} bytes, copied from @var{address}, to a growing object, -and then add another byte containing a null character. @xref{Growing -Objects}. - -@item void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{data-char}) -Add one byte containing @var{data-char} to a growing object. -@xref{Growing Objects}. - -@item void *obstack_finish (struct obstack *@var{obstack-ptr}) -Finalize the object that is growing and return its permanent address. -@xref{Growing Objects}. - -@item int obstack_object_size (struct obstack *@var{obstack-ptr}) -Get the current size of the currently growing object. @xref{Growing -Objects}. - -@item void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size}) -Add @var{size} uninitialized bytes to a growing object without checking -that there is enough room. @xref{Extra Fast Growing}. - -@item void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{data-char}) -Add one byte containing @var{data-char} to a growing object without -checking that there is enough room. @xref{Extra Fast Growing}. - -@item int obstack_room (struct obstack *@var{obstack-ptr}) -Get the amount of room now available for growing the current object. -@xref{Extra Fast Growing}. - -@item int obstack_alignment_mask (struct obstack *@var{obstack-ptr}) -The mask used for aligning the beginning of an object. This is an -lvalue. @xref{Obstacks Data Alignment}. - -@item int obstack_chunk_size (struct obstack *@var{obstack-ptr}) -The size for allocating chunks. This is an lvalue. @xref{Obstack Chunks}. - -@item void *obstack_base (struct obstack *@var{obstack-ptr}) -Tentative starting address of the currently growing object. -@xref{Status of an Obstack}. - -@item void *obstack_next_free (struct obstack *@var{obstack-ptr}) -Address just after the end of the currently growing object. -@xref{Status of an Obstack}. -@end table - diff --git a/libiberty/partition.c b/libiberty/partition.c deleted file mode 100644 index 5f0745c9142..00000000000 --- a/libiberty/partition.c +++ /dev/null @@ -1,183 +0,0 @@ -/* List implementation of a partition of consecutive integers. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. - Contributed by CodeSourcery, LLC. - - This file is part of GNU CC. - - GNU CC 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, or (at your option) - any later version. - - GNU CC 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 GNU CC; see the file COPYING. If not, write to - the Free Software Foundation, 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef HAVE_STDLIB_H -#include -#endif - -#ifdef HAVE_STRING_H -#include -#endif - -#include "libiberty.h" -#include "partition.h" - -static int elem_compare (const void *, const void *); - -/* Creates a partition of NUM_ELEMENTS elements. Initially each - element is in a class by itself. */ - -partition -partition_new (int num_elements) -{ - int e; - - partition part = (partition) - xmalloc (sizeof (struct partition_def) + - (num_elements - 1) * sizeof (struct partition_elem)); - part->num_elements = num_elements; - for (e = 0; e < num_elements; ++e) - { - part->elements[e].class_element = e; - part->elements[e].next = &(part->elements[e]); - part->elements[e].class_count = 1; - } - - return part; -} - -/* Freeds a partition. */ - -void -partition_delete (partition part) -{ - free (part); -} - -/* Unites the classes containing ELEM1 and ELEM2 into a single class - of partition PART. If ELEM1 and ELEM2 are already in the same - class, does nothing. Returns the canonical element of the - resulting union class. */ - -int -partition_union (partition part, int elem1, int elem2) -{ - struct partition_elem *elements = part->elements; - struct partition_elem *e1; - struct partition_elem *e2; - struct partition_elem *p; - struct partition_elem *old_next; - /* The canonical element of the resulting union class. */ - int class_element = elements[elem1].class_element; - - /* If they're already in the same class, do nothing. */ - if (class_element == elements[elem2].class_element) - return class_element; - - /* Make sure ELEM1 is in the larger class of the two. If not, swap - them. This way we always scan the shorter list. */ - if (elements[elem1].class_count < elements[elem2].class_count) - { - int temp = elem1; - elem1 = elem2; - elem2 = temp; - class_element = elements[elem1].class_element; - } - - e1 = &(elements[elem1]); - e2 = &(elements[elem2]); - - /* Keep a count of the number of elements in the list. */ - elements[class_element].class_count - += elements[e2->class_element].class_count; - - /* Update the class fields in elem2's class list. */ - e2->class_element = class_element; - for (p = e2->next; p != e2; p = p->next) - p->class_element = class_element; - - /* Splice ELEM2's class list into ELEM1's. These are circular - lists. */ - old_next = e1->next; - e1->next = e2->next; - e2->next = old_next; - - return class_element; -} - -/* Compare elements ELEM1 and ELEM2 from array of integers, given a - pointer to each. Used to qsort such an array. */ - -static int -elem_compare (const void *elem1, const void *elem2) -{ - int e1 = * (const int *) elem1; - int e2 = * (const int *) elem2; - if (e1 < e2) - return -1; - else if (e1 > e2) - return 1; - else - return 0; -} - -/* Prints PART to the file pointer FP. The elements of each - class are sorted. */ - -void -partition_print (partition part, FILE *fp) -{ - char *done; - int num_elements = part->num_elements; - struct partition_elem *elements = part->elements; - int *class_elements; - int e; - - /* Flag the elements we've already printed. */ - done = (char *) xmalloc (num_elements); - memset (done, 0, num_elements); - - /* A buffer used to sort elements in a class. */ - class_elements = (int *) xmalloc (num_elements * sizeof (int)); - - fputc ('[', fp); - for (e = 0; e < num_elements; ++e) - /* If we haven't printed this element, print its entire class. */ - if (! done[e]) - { - int c = e; - int count = elements[elements[e].class_element].class_count; - int i; - - /* Collect the elements in this class. */ - for (i = 0; i < count; ++i) { - class_elements[i] = c; - done[c] = 1; - c = elements[c].next - elements; - } - /* Sort them. */ - qsort ((void *) class_elements, count, sizeof (int), elem_compare); - /* Print them. */ - fputc ('(', fp); - for (i = 0; i < count; ++i) - fprintf (fp, i == 0 ? "%d" : " %d", class_elements[i]); - fputc (')', fp); - } - fputc (']', fp); - - free (class_elements); - free (done); -} - diff --git a/libiberty/pex-common.c b/libiberty/pex-common.c deleted file mode 100644 index 3daa638d402..00000000000 --- a/libiberty/pex-common.c +++ /dev/null @@ -1,589 +0,0 @@ -/* Common code for executing a program in a sub-process. - Copyright (C) 2005 Free Software Foundation, Inc. - Written by Ian Lance Taylor . - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If not, -write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#include "config.h" -#include "libiberty.h" -#include "pex-common.h" - -#include -#include -#ifdef NEED_DECLARATION_ERRNO -extern int errno; -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif - -extern int mkstemps (char *, int); - -/* This file contains subroutines for the program execution routines - (pex_init, pex_run, etc.). This file is compiled on all - systems. */ - -static void pex_add_remove (struct pex_obj *, const char *, int); -static int pex_get_status_and_time (struct pex_obj *, int, const char **, - int *); - -/* Initialize a pex_obj structure. */ - -struct pex_obj * -pex_init_common (int flags, const char *pname, const char *tempbase, - const struct pex_funcs *funcs) -{ - struct pex_obj *obj; - - obj = XNEW (struct pex_obj); - obj->flags = flags; - obj->pname = pname; - obj->tempbase = tempbase; - obj->next_input = STDIN_FILE_NO; - obj->next_input_name = NULL; - obj->next_input_name_allocated = 0; - obj->count = 0; - obj->children = NULL; - obj->status = NULL; - obj->time = NULL; - obj->number_waited = 0; - obj->input_file = NULL; - obj->read_output = NULL; - obj->remove_count = 0; - obj->remove = NULL; - obj->funcs = funcs; - obj->sysdep = NULL; - return obj; -} - -/* Add a file to be removed when we are done. */ - -static void -pex_add_remove (struct pex_obj *obj, const char *name, int allocated) -{ - char *add; - - ++obj->remove_count; - obj->remove = XRESIZEVEC (char *, obj->remove, obj->remove_count); - if (allocated) - add = (char *) name; - else - add = xstrdup (name); - obj->remove[obj->remove_count - 1] = add; -} - -/* Generate a temporary file name based on OBJ, FLAGS, and NAME. - Return NULL if we were unable to reserve a temporary filename. - - If non-NULL, the result is either allocated with malloc, or the - same pointer as NAME. */ -static char * -temp_file (struct pex_obj *obj, int flags, char *name) -{ - if (name == NULL) - { - if (obj->tempbase == NULL) - { - name = make_temp_file (NULL); - } - else - { - int len = strlen (obj->tempbase); - int out; - - if (len >= 6 - && strcmp (obj->tempbase + len - 6, "XXXXXX") == 0) - name = xstrdup (obj->tempbase); - else - name = concat (obj->tempbase, "XXXXXX", NULL); - - out = mkstemps (name, 0); - if (out < 0) - { - free (name); - return NULL; - } - - /* This isn't obj->funcs->close because we got the - descriptor from mkstemps, not from a function in - obj->funcs. Calling close here is just like what - make_temp_file does. */ - close (out); - } - } - else if ((flags & PEX_SUFFIX) != 0) - { - if (obj->tempbase == NULL) - name = make_temp_file (name); - else - name = concat (obj->tempbase, name, NULL); - } - - return name; -} - - -/* As for pex_run (), but permits the environment for the child process - to be specified. */ - -const char * -pex_run_in_environment (struct pex_obj *obj, int flags, const char *executable, - char * const * argv, char * const * env, - const char *orig_outname, const char *errname, - int *err) -{ - const char *errmsg; - int in, out, errdes; - char *outname; - int outname_allocated; - int p[2]; - long pid; - - in = -1; - out = -1; - errdes = -1; - outname = (char *) orig_outname; - outname_allocated = 0; - - /* If the user called pex_input_file, close the file now. */ - if (obj->input_file) - { - if (fclose (obj->input_file) == EOF) - { - errmsg = "closing pipeline input file"; - goto error_exit; - } - obj->input_file = NULL; - } - - /* Set IN. */ - - if (obj->next_input_name != NULL) - { - /* We have to make sure that the previous process has completed - before we try to read the file. */ - if (!pex_get_status_and_time (obj, 0, &errmsg, err)) - goto error_exit; - - in = obj->funcs->open_read (obj, obj->next_input_name, - (flags & PEX_BINARY_INPUT) != 0); - if (in < 0) - { - *err = errno; - errmsg = "open temporary file"; - goto error_exit; - } - if (obj->next_input_name_allocated) - { - free (obj->next_input_name); - obj->next_input_name_allocated = 0; - } - obj->next_input_name = NULL; - } - else - { - in = obj->next_input; - if (in < 0) - { - *err = 0; - errmsg = "pipeline already complete"; - goto error_exit; - } - } - - /* Set OUT and OBJ->NEXT_INPUT/OBJ->NEXT_INPUT_NAME. */ - - if ((flags & PEX_LAST) != 0) - { - if (outname == NULL) - out = STDOUT_FILE_NO; - else if ((flags & PEX_SUFFIX) != 0) - { - outname = concat (obj->tempbase, outname, NULL); - outname_allocated = 1; - } - obj->next_input = -1; - } - else if ((obj->flags & PEX_USE_PIPES) == 0) - { - outname = temp_file (obj, flags, outname); - if (! outname) - { - *err = 0; - errmsg = "could not create temporary file"; - goto error_exit; - } - - if (outname != orig_outname) - outname_allocated = 1; - - if ((obj->flags & PEX_SAVE_TEMPS) == 0) - { - pex_add_remove (obj, outname, outname_allocated); - outname_allocated = 0; - } - - /* Hand off ownership of outname to the next stage. */ - obj->next_input_name = outname; - obj->next_input_name_allocated = outname_allocated; - outname_allocated = 0; - } - else - { - if (obj->funcs->pipe (obj, p, (flags & PEX_BINARY_OUTPUT) != 0) < 0) - { - *err = errno; - errmsg = "pipe"; - goto error_exit; - } - - out = p[WRITE_PORT]; - obj->next_input = p[READ_PORT]; - } - - if (out < 0) - { - out = obj->funcs->open_write (obj, outname, - (flags & PEX_BINARY_OUTPUT) != 0); - if (out < 0) - { - *err = errno; - errmsg = "open temporary output file"; - goto error_exit; - } - } - - if (outname_allocated) - { - free (outname); - outname_allocated = 0; - } - - /* Set ERRDES. */ - - if (errname == NULL) - errdes = STDERR_FILE_NO; - else - { - /* We assume that stderr is in text mode--it certainly shouldn't - be controlled by PEX_BINARY_OUTPUT. If necessary, we can add - a PEX_BINARY_STDERR flag. */ - errdes = obj->funcs->open_write (obj, errname, 0); - if (errdes < 0) - { - *err = errno; - errmsg = "open error file"; - goto error_exit; - } - } - - /* Run the program. */ - - pid = obj->funcs->exec_child (obj, flags, executable, argv, env, - in, out, errdes, &errmsg, err); - if (pid < 0) - goto error_exit; - - ++obj->count; - obj->children = XRESIZEVEC (long, obj->children, obj->count); - obj->children[obj->count - 1] = pid; - - return NULL; - - error_exit: - if (in >= 0 && in != STDIN_FILE_NO) - obj->funcs->close (obj, in); - if (out >= 0 && out != STDOUT_FILE_NO) - obj->funcs->close (obj, out); - if (errdes >= 0 && errdes != STDERR_FILE_NO) - obj->funcs->close (obj, errdes); - if (outname_allocated) - free (outname); - return errmsg; -} - -/* Run a program. */ - -const char * -pex_run (struct pex_obj *obj, int flags, const char *executable, - char * const * argv, const char *orig_outname, const char *errname, - int *err) -{ - return pex_run_in_environment (obj, flags, executable, argv, NULL, - orig_outname, errname, err); -} - -/* Return a FILE pointer for a temporary file to fill with input for - the pipeline. */ -FILE * -pex_input_file (struct pex_obj *obj, int flags, const char *in_name) -{ - char *name = (char *) in_name; - FILE *f; - - /* This must be called before the first pipeline stage is run, and - there must not have been any other input selected. */ - if (obj->count != 0 - || (obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO) - || obj->next_input_name) - { - errno = EINVAL; - return NULL; - } - - name = temp_file (obj, flags, name); - if (! name) - return NULL; - - f = fopen (name, (flags & PEX_BINARY_OUTPUT) ? "wb" : "w"); - if (! f) - { - free (name); - return NULL; - } - - obj->input_file = f; - obj->next_input_name = name; - obj->next_input_name_allocated = (name != in_name); - - return f; -} - -/* Return a stream for a pipe connected to the standard input of the - first stage of the pipeline. */ -FILE * -pex_input_pipe (struct pex_obj *obj, int binary) -{ - int p[2]; - FILE *f; - - /* You must call pex_input_pipe before the first pex_run or pex_one. */ - if (obj->count > 0) - goto usage_error; - - /* You must be using pipes. Implementations that don't support - pipes clear this flag before calling pex_init_common. */ - if (! (obj->flags & PEX_USE_PIPES)) - goto usage_error; - - /* If we have somehow already selected other input, that's a - mistake. */ - if ((obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO) - || obj->next_input_name) - goto usage_error; - - if (obj->funcs->pipe (obj, p, binary != 0) < 0) - return NULL; - - f = obj->funcs->fdopenw (obj, p[WRITE_PORT], binary != 0); - if (! f) - { - int saved_errno = errno; - obj->funcs->close (obj, p[READ_PORT]); - obj->funcs->close (obj, p[WRITE_PORT]); - errno = saved_errno; - return NULL; - } - - obj->next_input = p[READ_PORT]; - - return f; - - usage_error: - errno = EINVAL; - return NULL; -} - -/* Return a FILE pointer for the output of the last program - executed. */ - -FILE * -pex_read_output (struct pex_obj *obj, int binary) -{ - if (obj->next_input_name != NULL) - { - const char *errmsg; - int err; - - /* We have to make sure that the process has completed before we - try to read the file. */ - if (!pex_get_status_and_time (obj, 0, &errmsg, &err)) - { - errno = err; - return NULL; - } - - obj->read_output = fopen (obj->next_input_name, binary ? "rb" : "r"); - - if (obj->next_input_name_allocated) - { - free (obj->next_input_name); - obj->next_input_name_allocated = 0; - } - obj->next_input_name = NULL; - } - else - { - int o; - - o = obj->next_input; - if (o < 0 || o == STDIN_FILE_NO) - return NULL; - obj->read_output = obj->funcs->fdopenr (obj, o, binary); - obj->next_input = -1; - } - - return obj->read_output; -} - -/* Get the exit status and, if requested, the resource time for all - the child processes. Return 0 on failure, 1 on success. */ - -static int -pex_get_status_and_time (struct pex_obj *obj, int done, const char **errmsg, - int *err) -{ - int ret; - int i; - - if (obj->number_waited == obj->count) - return 1; - - obj->status = XRESIZEVEC (int, obj->status, obj->count); - if ((obj->flags & PEX_RECORD_TIMES) != 0) - obj->time = XRESIZEVEC (struct pex_time, obj->time, obj->count); - - ret = 1; - for (i = obj->number_waited; i < obj->count; ++i) - { - if (obj->funcs->wait (obj, obj->children[i], &obj->status[i], - obj->time == NULL ? NULL : &obj->time[i], - done, errmsg, err) < 0) - ret = 0; - } - obj->number_waited = i; - - return ret; -} - -/* Get exit status of executed programs. */ - -int -pex_get_status (struct pex_obj *obj, int count, int *vector) -{ - if (obj->status == NULL) - { - const char *errmsg; - int err; - - if (!pex_get_status_and_time (obj, 0, &errmsg, &err)) - return 0; - } - - if (count > obj->count) - { - memset (vector + obj->count, 0, (count - obj->count) * sizeof (int)); - count = obj->count; - } - - memcpy (vector, obj->status, count * sizeof (int)); - - return 1; -} - -/* Get process times of executed programs. */ - -int -pex_get_times (struct pex_obj *obj, int count, struct pex_time *vector) -{ - if (obj->status == NULL) - { - const char *errmsg; - int err; - - if (!pex_get_status_and_time (obj, 0, &errmsg, &err)) - return 0; - } - - if (obj->time == NULL) - return 0; - - if (count > obj->count) - { - memset (vector + obj->count, 0, - (count - obj->count) * sizeof (struct pex_time)); - count = obj->count; - } - - memcpy (vector, obj->time, count * sizeof (struct pex_time)); - - return 1; -} - -/* Free a pex_obj structure. */ - -void -pex_free (struct pex_obj *obj) -{ - if (obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO) - obj->funcs->close (obj, obj->next_input); - - /* If the caller forgot to wait for the children, we do it here, to - avoid zombies. */ - if (obj->status == NULL) - { - const char *errmsg; - int err; - - obj->flags &= ~ PEX_RECORD_TIMES; - pex_get_status_and_time (obj, 1, &errmsg, &err); - } - - if (obj->next_input_name_allocated) - free (obj->next_input_name); - if (obj->children != NULL) - free (obj->children); - if (obj->status != NULL) - free (obj->status); - if (obj->time != NULL) - free (obj->time); - if (obj->read_output != NULL) - fclose (obj->read_output); - - if (obj->remove_count > 0) - { - int i; - - for (i = 0; i < obj->remove_count; ++i) - { - remove (obj->remove[i]); - free (obj->remove[i]); - } - free (obj->remove); - } - - if (obj->funcs->cleanup != NULL) - obj->funcs->cleanup (obj); - - free (obj); -} diff --git a/libiberty/pex-common.h b/libiberty/pex-common.h deleted file mode 100644 index 520f26a260d..00000000000 --- a/libiberty/pex-common.h +++ /dev/null @@ -1,140 +0,0 @@ -/* Utilities to execute a program in a subprocess (possibly linked by pipes - with other subprocesses), and wait for it. Shared logic. - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 - Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If not, -write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#ifndef PEX_COMMON_H -#define PEX_COMMON_H - -#include "config.h" -#include "libiberty.h" -#include - -#define install_error_msg "installation problem, cannot exec `%s'" - -/* stdin file number. */ -#define STDIN_FILE_NO 0 - -/* stdout file number. */ -#define STDOUT_FILE_NO 1 - -/* stderr file number. */ -#define STDERR_FILE_NO 2 - -/* value of `pipe': port index for reading. */ -#define READ_PORT 0 - -/* value of `pipe': port index for writing. */ -#define WRITE_PORT 1 - -/* The structure used by pex_init and friends. */ - -struct pex_obj -{ - /* Flags. */ - int flags; - /* Name of calling program, for error messages. */ - const char *pname; - /* Base name to use for temporary files. */ - const char *tempbase; - /* Pipe to use as stdin for next process. */ - int next_input; - /* File name to use as stdin for next process. */ - char *next_input_name; - /* Whether next_input_name was allocated using malloc. */ - int next_input_name_allocated; - /* Number of child processes. */ - int count; - /* PIDs of child processes; array allocated using malloc. */ - long *children; - /* Exit statuses of child processes; array allocated using malloc. */ - int *status; - /* Time used by child processes; array allocated using malloc. */ - struct pex_time *time; - /* Number of children we have already waited for. */ - int number_waited; - /* FILE created by pex_input_file. */ - FILE *input_file; - /* FILE created by pex_read_output. */ - FILE *read_output; - /* Number of temporary files to remove. */ - int remove_count; - /* List of temporary files to remove; array allocated using malloc - of strings allocated using malloc. */ - char **remove; - /* Pointers to system dependent functions. */ - const struct pex_funcs *funcs; - /* For use by system dependent code. */ - void *sysdep; -}; - -/* Functions passed to pex_run_common. */ - -struct pex_funcs -{ - /* Open file NAME for reading. If BINARY is non-zero, open in - binary mode. Return >= 0 on success, -1 on error. */ - int (*open_read) (struct pex_obj *, const char */* name */, int /* binary */); - /* Open file NAME for writing. If BINARY is non-zero, open in - binary mode. Return >= 0 on success, -1 on error. */ - int (*open_write) (struct pex_obj *, const char */* name */, - int /* binary */); - /* Execute a child process. FLAGS, EXECUTABLE, ARGV, ERR are from - pex_run. IN, OUT, ERRDES are each a descriptor, from open_read, - open_write, or pipe, or they are one of STDIN_FILE_NO, - STDOUT_FILE_NO or STDERR_FILE_NO; if not STD*_FILE_NO, they - should be closed. The function should handle the - PEX_STDERR_TO_STDOUT flag. Return >= 0 on success, or -1 on - error and set *ERRMSG and *ERR. */ - long (*exec_child) (struct pex_obj *, int /* flags */, - const char */* executable */, char * const * /* argv */, - char * const * /* env */, - int /* in */, int /* out */, int /* errdes */, - const char **/* errmsg */, int */* err */); - /* Close a descriptor. Return 0 on success, -1 on error. */ - int (*close) (struct pex_obj *, int); - /* Wait for a child to complete, returning exit status in *STATUS - and time in *TIME (if it is not null). CHILD is from fork. DONE - is 1 if this is called via pex_free. ERRMSG and ERR are as in - fork. Return 0 on success, -1 on error. */ - int (*wait) (struct pex_obj *, long /* child */, int * /* status */, - struct pex_time * /* time */, int /* done */, - const char ** /* errmsg */, int * /* err */); - /* Create a pipe (only called if PEX_USE_PIPES is set) storing two - descriptors in P[0] and P[1]. If BINARY is non-zero, open in - binary mode. Return 0 on success, -1 on error. */ - int (*pipe) (struct pex_obj *, int * /* p */, int /* binary */); - /* Get a FILE pointer to read from a file descriptor (only called if - PEX_USE_PIPES is set). If BINARY is non-zero, open in binary - mode. Return pointer on success, NULL on error. */ - FILE * (*fdopenr) (struct pex_obj *, int /* fd */, int /* binary */); - /* Get a FILE pointer to write to the file descriptor FD (only - called if PEX_USE_PIPES is set). If BINARY is non-zero, open in - binary mode. Arrange for FD not to be inherited by the child - processes. Return pointer on success, NULL on error. */ - FILE * (*fdopenw) (struct pex_obj *, int /* fd */, int /* binary */); - /* Free any system dependent data associated with OBJ. May be - NULL if there is nothing to do. */ - void (*cleanup) (struct pex_obj *); -}; - -extern struct pex_obj *pex_init_common (int, const char *, const char *, - const struct pex_funcs *); - -#endif diff --git a/libiberty/pex-djgpp.c b/libiberty/pex-djgpp.c deleted file mode 100644 index acaa4c43fdb..00000000000 --- a/libiberty/pex-djgpp.c +++ /dev/null @@ -1,293 +0,0 @@ -/* Utilities to execute a program in a subprocess (possibly linked by pipes - with other subprocesses), and wait for it. DJGPP specialization. - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005 - Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If not, -write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#include "pex-common.h" - -#include -#include -#ifdef NEED_DECLARATION_ERRNO -extern int errno; -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#include -#include -#include -#include -#include - -/* Use ECHILD if available, otherwise use EINVAL. */ -#ifdef ECHILD -#define PWAIT_ERROR ECHILD -#else -#define PWAIT_ERROR EINVAL -#endif - -static int pex_djgpp_open_read (struct pex_obj *, const char *, int); -static int pex_djgpp_open_write (struct pex_obj *, const char *, int); -static long pex_djgpp_exec_child (struct pex_obj *, int, const char *, - char * const *, char * const *, - int, int, int, - const char **, int *); -static int pex_djgpp_close (struct pex_obj *, int); -static int pex_djgpp_wait (struct pex_obj *, long, int *, struct pex_time *, - int, const char **, int *); - -/* The list of functions we pass to the common routines. */ - -const struct pex_funcs funcs = -{ - pex_djgpp_open_read, - pex_djgpp_open_write, - pex_djgpp_exec_child, - pex_djgpp_close, - pex_djgpp_wait, - NULL, /* pipe */ - NULL, /* fdopenr */ - NULL, /* fdopenw */ - NULL /* cleanup */ -}; - -/* Return a newly initialized pex_obj structure. */ - -struct pex_obj * -pex_init (int flags, const char *pname, const char *tempbase) -{ - /* DJGPP does not support pipes. */ - flags &= ~ PEX_USE_PIPES; - return pex_init_common (flags, pname, tempbase, &funcs); -} - -/* Open a file for reading. */ - -static int -pex_djgpp_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED, - const char *name, int binary) -{ - return open (name, O_RDONLY | (binary ? O_BINARY : O_TEXT)); -} - -/* Open a file for writing. */ - -static int -pex_djgpp_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED, - const char *name, int binary) -{ - /* Note that we can't use O_EXCL here because gcc may have already - created the temporary file via make_temp_file. */ - return open (name, - (O_WRONLY | O_CREAT | O_TRUNC - | (binary ? O_BINARY : O_TEXT)), - S_IRUSR | S_IWUSR); -} - -/* Close a file. */ - -static int -pex_djgpp_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd) -{ - return close (fd); -} - -/* Execute a child. */ - -static long -pex_djgpp_exec_child (struct pex_obj *obj, int flags, const char *executable, - char * const * argv, char * const * env, - int in, int out, int errdes, - const char **errmsg, int *err) -{ - int org_in, org_out, org_errdes; - int status; - int *statuses; - - org_in = -1; - org_out = -1; - org_errdes = -1; - - if (in != STDIN_FILE_NO) - { - org_in = dup (STDIN_FILE_NO); - if (org_in < 0) - { - *err = errno; - *errmsg = "dup"; - return -1; - } - if (dup2 (in, STDIN_FILE_NO) < 0) - { - *err = errno; - *errmsg = "dup2"; - return -1; - } - if (close (in) < 0) - { - *err = errno; - *errmsg = "close"; - return -1; - } - } - - if (out != STDOUT_FILE_NO) - { - org_out = dup (STDOUT_FILE_NO); - if (org_out < 0) - { - *err = errno; - *errmsg = "dup"; - return -1; - } - if (dup2 (out, STDOUT_FILE_NO) < 0) - { - *err = errno; - *errmsg = "dup2"; - return -1; - } - if (close (out) < 0) - { - *err = errno; - *errmsg = "close"; - return -1; - } - } - - if (errdes != STDERR_FILE_NO - || (flags & PEX_STDERR_TO_STDOUT) != 0) - { - org_errdes = dup (STDERR_FILE_NO); - if (org_errdes < 0) - { - *err = errno; - *errmsg = "dup"; - return -1; - } - if (dup2 ((flags & PEX_STDERR_TO_STDOUT) != 0 ? STDOUT_FILE_NO : errdes, - STDERR_FILE_NO) < 0) - { - *err = errno; - *errmsg = "dup2"; - return -1; - } - if (errdes != STDERR_FILE_NO) - { - if (close (errdes) < 0) - { - *err = errno; - *errmsg = "close"; - return -1; - } - } - } - - if (env) - status = (((flags & PEX_SEARCH) != 0 ? spawnvpe : spawnve) - (P_WAIT, executable, argv, env)); - else - status = (((flags & PEX_SEARCH) != 0 ? spawnvp : spawnv) - (P_WAIT, executable, argv)); - - if (status == -1) - { - *err = errno; - *errmsg = ((flags & PEX_SEARCH) != 0) ? "spawnvp" : "spawnv"; - } - - if (in != STDIN_FILE_NO) - { - if (dup2 (org_in, STDIN_FILE_NO) < 0) - { - *err = errno; - *errmsg = "dup2"; - return -1; - } - if (close (org_in) < 0) - { - *err = errno; - *errmsg = "close"; - return -1; - } - } - - if (out != STDOUT_FILE_NO) - { - if (dup2 (org_out, STDOUT_FILE_NO) < 0) - { - *err = errno; - *errmsg = "dup2"; - return -1; - } - if (close (org_out) < 0) - { - *err = errno; - *errmsg = "close"; - return -1; - } - } - - if (errdes != STDERR_FILE_NO - || (flags & PEX_STDERR_TO_STDOUT) != 0) - { - if (dup2 (org_errdes, STDERR_FILE_NO) < 0) - { - *err = errno; - *errmsg = "dup2"; - return -1; - } - if (close (org_errdes) < 0) - { - *err = errno; - *errmsg = "close"; - return -1; - } - } - - /* Save the exit status for later. When we are called, obj->count - is the number of children which have executed before this - one. */ - statuses = (int *) obj->sysdep; - statuses = XRESIZEVEC (int, statuses, obj->count + 1); - statuses[obj->count] = status; - obj->sysdep = (void *) statuses; - - return obj->count; -} - -/* Wait for a child process to complete. Actually the child process - has already completed, and we just need to return the exit - status. */ - -static int -pex_djgpp_wait (struct pex_obj *obj, long pid, int *status, - struct pex_time *time, int done ATTRIBUTE_UNUSED, - const char **errmsg ATTRIBUTE_UNUSED, - int *err ATTRIBUTE_UNUSED) -{ - int *statuses; - - if (time != NULL) - memset (time, 0, sizeof *time); - - statuses = (int *) obj->sysdep; - *status = statuses[pid]; - - return 0; -} diff --git a/libiberty/pex-msdos.c b/libiberty/pex-msdos.c deleted file mode 100644 index bcad93dbe26..00000000000 --- a/libiberty/pex-msdos.c +++ /dev/null @@ -1,317 +0,0 @@ -/* Utilities to execute a program in a subprocess (possibly linked by pipes - with other subprocesses), and wait for it. Generic MSDOS specialization. - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005 - Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If not, -write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#include "pex-common.h" - -#include -#include -#ifdef NEED_DECLARATION_ERRNO -extern int errno; -#endif -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_STDLIB_H -#include -#endif - -#include "safe-ctype.h" -#include - -/* The structure we keep in obj->sysdep. */ - -#define PEX_MSDOS_FILE_COUNT 3 - -#define PEX_MSDOS_FD_OFFSET 10 - -struct pex_msdos -{ - /* An array of file names. We refer to these using file descriptors - of 10 + array index. */ - const char *files[PEX_MSDOS_FILE_COUNT]; - /* Exit statuses of programs which have been run. */ - int *statuses; -}; - -static int pex_msdos_open (struct pex_obj *, const char *, int); -static int pex_msdos_open (struct pex_obj *, const char *, int); -static int pex_msdos_fdindex (struct pex_msdos *, int); -static long pex_msdos_exec_child (struct pex_obj *, int, const char *, - char * const *, char * const *, - int, int, int, const char **, int *); -static int pex_msdos_close (struct pex_obj *, int); -static int pex_msdos_wait (struct pex_obj *, long, int *, struct pex_time *, - int, const char **, int *); -static void pex_msdos_cleanup (struct pex_obj *); - -/* The list of functions we pass to the common routines. */ - -const struct pex_funcs funcs = -{ - pex_msdos_open, - pex_msdos_open, - pex_msdos_exec_child, - pex_msdos_close, - pex_msdos_wait, - NULL, /* pipe */ - NULL, /* fdopenr */ - NULL, /* fdopenw */ - pex_msdos_cleanup -}; - -/* Return a newly initialized pex_obj structure. */ - -struct pex_obj * -pex_init (int flags, const char *pname, const char *tempbase) -{ - struct pex_obj *ret; - int i; - - /* MSDOS does not support pipes. */ - flags &= ~ PEX_USE_PIPES; - - ret = pex_init_common (flags, pname, tempbase, funcs); - - ret->sysdep = XNEW (struct pex_msdos); - for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i) - ret->files[i] = NULL; - ret->statuses = NULL; - - return ret; -} - -/* Open a file. FIXME: We ignore the binary argument, since we have - no way to handle it. */ - -static int -pex_msdos_open (struct pex_obj *obj, const char *name, - int binary ATTRIBUTE_UNUSED) -{ - struct pex_msdos *ms; - int i; - - ms = (struct pex_msdos *) obj->sysdep; - - for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i) - { - if (ms->files[i] == NULL) - { - ms->files[i] = xstrdup (name); - return i + PEX_MSDOS_FD_OFFSET; - } - } - - abort (); -} - -/* Get the index into msdos->files associated with an open file - descriptor. */ - -static int -pex_msdos_fdindex (struct pex_msdos *ms, int fd) -{ - fd -= PEX_MSDOS_FD_OFFSET; - if (fd < 0 || fd >= PEX_MSDOS_FILE_COUNT || ms->files[fd] == NULL) - abort (); - return fd; -} - - -/* Close a file. */ - -static int -pex_msdos_close (struct pex_obj *obj, int fd) -{ - struct pex_msdos *ms; - int fdinex; - - ms = (struct pex_msdos *) obj->sysdep; - fdindex = pe_msdos_fdindex (ms, fd); - free (ms->files[fdindex]); - ms->files[fdindex] = NULL; -} - -/* Execute a child. */ - -static long -pex_msdos_exec_child (struct pex_obj *obj, int flags, const char *executable, - char * const * argv, char * const * env, int in, int out, - int errdes ATTRIBUTE_UNUSED, const char **errmsg, - int *err) -{ - struct pex_msdos *ms; - char *temp_base; - int temp_base_allocated; - char *rf; - int inindex; - char *infile; - int outindex; - char *outfile; - char *scmd; - FILE *argfile; - int i; - int status; - - ms = (struct pex_msdos *) obj->sysdep; - - /* FIXME: I don't know how to redirect stderr, so we ignore ERRDES - and PEX_STDERR_TO_STDOUT. */ - - temp_base = obj->temp_base; - if (temp_base != NULL) - temp_base_allocated = 0; - else - { - temp_base = choose_temp_base (); - temp_base_allocated = 1; - } - - rf = concat (temp_base, ".gp", NULL); - - if (temp_base_allocated) - free (temp_base); - - if (in == STDIN_FILE_NO) - { - inindex = -1; - infile = ""; - } - else - { - inindex = pex_msdos_fdindex (ms, in); - infile = ms->files[inindex]; - } - - if (out == STDOUT_FILE_NO) - { - outindex = -1; - outfile = ""; - } - else - { - outindex = pex_msdos_fdindex (ms, out); - outfile = ms->files[outindex]; - } - - scmd = XNEWVEC (char, strlen (program) - + ((flags & PEXECUTE_SEARCH) != 0 ? 4 : 0) - + strlen (rf) - + strlen (infile) - + strlen (outfile) - + 10); - sprintf (scmd, "%s%s @%s%s%s%s%s", - program, - (flags & PEXECUTE_SEARCH) != 0 ? ".exe" : "", - rf, - inindex != -1 ? " <" : "", - infile, - outindex != -1 ? " >" : "", - outfile); - - argfile = fopen (rf, "w"); - if (argfile == NULL) - { - *err = errno; - free (scmd); - free (rf); - *errmsg = "cannot open temporary command file"; - return -1; - } - - for (i = 1; argv[i] != NULL; ++i) - { - char *p; - - for (p = argv[i]; *p != '\0'; ++p) - { - if (*p == '"' || *p == '\'' || *p == '\\' || ISSPACE (*p)) - putc ('\\', argfile); - putc (*p, argfile); - } - putc ('\n', argfile); - } - - fclose (argfile); - - status = system (scmd); - - if (status == -1) - { - *err = errno; - remove (rf); - free (scmd); - free (rf); - *errmsg = "system"; - return -1; - } - - remove (rf); - free (scmd); - free (rf); - - /* Save the exit status for later. When we are called, obj->count - is the number of children which have executed before this - one. */ - ms->statuses = XRESIZEVEC(int, ms->statuses, obj->count + 1); - ms->statuses[obj->count] = status; - - return obj->count; -} - -/* Wait for a child process to complete. Actually the child process - has already completed, and we just need to return the exit - status. */ - -static int -pex_msdos_wait (struct pex_obj *obj, long pid, int *status, - struct pex_time *time, int done ATTRIBUTE_UNUSED, - const char **errmsg ATTRIBUTE_UNUSED, - int *err ATTRIBUTE_UNUSED) -{ - struct pex_msdos *ms; - - ms = (struct pex_msdos *) obj->sysdep; - - if (time != NULL) - memset (time, 0, sizeof *time); - - *status = ms->statuses[pid]; - - return 0; -} - -/* Clean up the pex_msdos structure. */ - -static void -pex_msdos_cleanup (struct pex_obj *obj) -{ - struct pex_msdos *ms; - int i; - - ms = (struct pex_msdos *) obj->sysdep; - for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i) - if (msdos->files[i] != NULL) - free (msdos->files[i]); - if (msdos->statuses != NULL) - free (msdos->statuses); - free (msdos); - obj->sysdep = NULL; -} diff --git a/libiberty/pex-one.c b/libiberty/pex-one.c deleted file mode 100644 index 696b8bcc62a..00000000000 --- a/libiberty/pex-one.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Execute a program and wait for a result. - Copyright (C) 2005 Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If not, -write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#include "config.h" -#include "libiberty.h" - -const char * -pex_one (int flags, const char *executable, char * const *argv, - const char *pname, const char *outname, const char *errname, - int *status, int *err) -{ - struct pex_obj *obj; - const char *errmsg; - - obj = pex_init (0, pname, NULL); - errmsg = pex_run (obj, flags, executable, argv, outname, errname, err); - if (errmsg == NULL) - { - if (!pex_get_status (obj, 1, status)) - { - *err = 0; - errmsg = "pex_get_status failed"; - } - } - pex_free (obj); - return errmsg; -} diff --git a/libiberty/pex-unix.c b/libiberty/pex-unix.c deleted file mode 100644 index e006e599297..00000000000 --- a/libiberty/pex-unix.c +++ /dev/null @@ -1,532 +0,0 @@ -/* Utilities to execute a program in a subprocess (possibly linked by pipes - with other subprocesses), and wait for it. Generic Unix version - (also used for UWIN and VMS). - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 - Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If not, -write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#include "config.h" -#include "libiberty.h" -#include "pex-common.h" - -#include -#include -#include -#ifdef NEED_DECLARATION_ERRNO -extern int errno; -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif - -#include - -#ifdef HAVE_FCNTL_H -#include -#endif -#ifdef HAVE_SYS_WAIT_H -#include -#endif -#ifdef HAVE_GETRUSAGE -#include -#include -#endif -#ifdef HAVE_SYS_STAT_H -#include -#endif - - -#ifdef vfork /* Autoconf may define this to fork for us. */ -# define VFORK_STRING "fork" -#else -# define VFORK_STRING "vfork" -#endif -#ifdef HAVE_VFORK_H -#include -#endif -#ifdef VMS -#define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \ - lib$get_current_invo_context(decc$$get_vfork_jmpbuf()) : -1) -#endif /* VMS */ - - -/* File mode to use for private and world-readable files. */ - -#if defined (S_IRUSR) && defined (S_IWUSR) && defined (S_IRGRP) && defined (S_IWGRP) && defined (S_IROTH) && defined (S_IWOTH) -#define PUBLIC_MODE \ - (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) -#else -#define PUBLIC_MODE 0666 -#endif - -/* Get the exit status of a particular process, and optionally get the - time that it took. This is simple if we have wait4, slightly - harder if we have waitpid, and is a pain if we only have wait. */ - -static pid_t pex_wait (struct pex_obj *, pid_t, int *, struct pex_time *); - -#ifdef HAVE_WAIT4 - -static pid_t -pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status, - struct pex_time *time) -{ - pid_t ret; - struct rusage r; - -#ifdef HAVE_WAITPID - if (time == NULL) - return waitpid (pid, status, 0); -#endif - - ret = wait4 (pid, status, 0, &r); - - if (time != NULL) - { - time->user_seconds = r.ru_utime.tv_sec; - time->user_microseconds= r.ru_utime.tv_usec; - time->system_seconds = r.ru_stime.tv_sec; - time->system_microseconds= r.ru_stime.tv_usec; - } - - return ret; -} - -#else /* ! defined (HAVE_WAIT4) */ - -#ifdef HAVE_WAITPID - -#ifndef HAVE_GETRUSAGE - -static pid_t -pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status, - struct pex_time *time) -{ - if (time != NULL) - memset (time, 0, sizeof (struct pex_time)); - return waitpid (pid, status, 0); -} - -#else /* defined (HAVE_GETRUSAGE) */ - -static pid_t -pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status, - struct pex_time *time) -{ - struct rusage r1, r2; - pid_t ret; - - if (time == NULL) - return waitpid (pid, status, 0); - - getrusage (RUSAGE_CHILDREN, &r1); - - ret = waitpid (pid, status, 0); - if (ret < 0) - return ret; - - getrusage (RUSAGE_CHILDREN, &r2); - - time->user_seconds = r2.ru_utime.tv_sec - r1.ru_utime.tv_sec; - time->user_microseconds = r2.ru_utime.tv_usec - r1.ru_utime.tv_usec; - if (r2.ru_utime.tv_usec < r1.ru_utime.tv_usec) - { - --time->user_seconds; - time->user_microseconds += 1000000; - } - - time->system_seconds = r2.ru_stime.tv_sec - r1.ru_stime.tv_sec; - time->system_microseconds = r2.ru_stime.tv_usec - r1.ru_stime.tv_usec; - if (r2.ru_stime.tv_usec < r1.ru_stime.tv_usec) - { - --time->system_seconds; - time->system_microseconds += 1000000; - } - - return ret; -} - -#endif /* defined (HAVE_GETRUSAGE) */ - -#else /* ! defined (HAVE_WAITPID) */ - -struct status_list -{ - struct status_list *next; - pid_t pid; - int status; - struct pex_time time; -}; - -static pid_t -pex_wait (struct pex_obj *obj, pid_t pid, int *status, struct pex_time *time) -{ - struct status_list **pp; - - for (pp = (struct status_list **) &obj->sysdep; - *pp != NULL; - pp = &(*pp)->next) - { - if ((*pp)->pid == pid) - { - struct status_list *p; - - p = *pp; - *status = p->status; - if (time != NULL) - *time = p->time; - *pp = p->next; - free (p); - return pid; - } - } - - while (1) - { - pid_t cpid; - struct status_list *psl; - struct pex_time pt; -#ifdef HAVE_GETRUSAGE - struct rusage r1, r2; -#endif - - if (time != NULL) - { -#ifdef HAVE_GETRUSAGE - getrusage (RUSAGE_CHILDREN, &r1); -#else - memset (&pt, 0, sizeof (struct pex_time)); -#endif - } - - cpid = wait (status); - -#ifdef HAVE_GETRUSAGE - if (time != NULL && cpid >= 0) - { - getrusage (RUSAGE_CHILDREN, &r2); - - pt.user_seconds = r2.ru_utime.tv_sec - r1.ru_utime.tv_sec; - pt.user_microseconds = r2.ru_utime.tv_usec - r1.ru_utime.tv_usec; - if (pt.user_microseconds < 0) - { - --pt.user_seconds; - pt.user_microseconds += 1000000; - } - - pt.system_seconds = r2.ru_stime.tv_sec - r1.ru_stime.tv_sec; - pt.system_microseconds = r2.ru_stime.tv_usec - r1.ru_stime.tv_usec; - if (pt.system_microseconds < 0) - { - --pt.system_seconds; - pt.system_microseconds += 1000000; - } - } -#endif - - if (cpid < 0 || cpid == pid) - { - if (time != NULL) - *time = pt; - return cpid; - } - - psl = XNEW (struct status_list); - psl->pid = cpid; - psl->status = *status; - if (time != NULL) - psl->time = pt; - psl->next = (struct status_list *) obj->sysdep; - obj->sysdep = (void *) psl; - } -} - -#endif /* ! defined (HAVE_WAITPID) */ -#endif /* ! defined (HAVE_WAIT4) */ - -static void pex_child_error (struct pex_obj *, const char *, const char *, int) - ATTRIBUTE_NORETURN; -static int pex_unix_open_read (struct pex_obj *, const char *, int); -static int pex_unix_open_write (struct pex_obj *, const char *, int); -static long pex_unix_exec_child (struct pex_obj *, int, const char *, - char * const *, char * const *, - int, int, int, const char **, int *); -static int pex_unix_close (struct pex_obj *, int); -static int pex_unix_wait (struct pex_obj *, long, int *, struct pex_time *, - int, const char **, int *); -static int pex_unix_pipe (struct pex_obj *, int *, int); -static FILE *pex_unix_fdopenr (struct pex_obj *, int, int); -static FILE *pex_unix_fdopenw (struct pex_obj *, int, int); -static void pex_unix_cleanup (struct pex_obj *); - -/* The list of functions we pass to the common routines. */ - -const struct pex_funcs funcs = -{ - pex_unix_open_read, - pex_unix_open_write, - pex_unix_exec_child, - pex_unix_close, - pex_unix_wait, - pex_unix_pipe, - pex_unix_fdopenr, - pex_unix_fdopenw, - pex_unix_cleanup -}; - -/* Return a newly initialized pex_obj structure. */ - -struct pex_obj * -pex_init (int flags, const char *pname, const char *tempbase) -{ - return pex_init_common (flags, pname, tempbase, &funcs); -} - -/* Open a file for reading. */ - -static int -pex_unix_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name, - int binary ATTRIBUTE_UNUSED) -{ - return open (name, O_RDONLY); -} - -/* Open a file for writing. */ - -static int -pex_unix_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name, - int binary ATTRIBUTE_UNUSED) -{ - /* Note that we can't use O_EXCL here because gcc may have already - created the temporary file via make_temp_file. */ - return open (name, O_WRONLY | O_CREAT | O_TRUNC, PUBLIC_MODE); -} - -/* Close a file. */ - -static int -pex_unix_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd) -{ - return close (fd); -} - -/* Report an error from a child process. We don't use stdio routines, - because we might be here due to a vfork call. */ - -static void -pex_child_error (struct pex_obj *obj, const char *executable, - const char *errmsg, int err) -{ -#define writeerr(s) write (STDERR_FILE_NO, s, strlen (s)) - writeerr (obj->pname); - writeerr (": error trying to exec '"); - writeerr (executable); - writeerr ("': "); - writeerr (errmsg); - writeerr (": "); - writeerr (xstrerror (err)); - writeerr ("\n"); - _exit (-1); -} - -/* Execute a child. */ - -extern char **environ; - -static long -pex_unix_exec_child (struct pex_obj *obj, int flags, const char *executable, - char * const * argv, char * const * env, - int in, int out, int errdes, - const char **errmsg, int *err) -{ - pid_t pid; - - /* We declare these to be volatile to avoid warnings from gcc about - them being clobbered by vfork. */ - volatile int sleep_interval; - volatile int retries; - - sleep_interval = 1; - pid = -1; - for (retries = 0; retries < 4; ++retries) - { - pid = vfork (); - if (pid >= 0) - break; - sleep (sleep_interval); - sleep_interval *= 2; - } - - switch (pid) - { - case -1: - *err = errno; - *errmsg = VFORK_STRING; - return -1; - - case 0: - /* Child process. */ - if (in != STDIN_FILE_NO) - { - if (dup2 (in, STDIN_FILE_NO) < 0) - pex_child_error (obj, executable, "dup2", errno); - if (close (in) < 0) - pex_child_error (obj, executable, "close", errno); - } - if (out != STDOUT_FILE_NO) - { - if (dup2 (out, STDOUT_FILE_NO) < 0) - pex_child_error (obj, executable, "dup2", errno); - if (close (out) < 0) - pex_child_error (obj, executable, "close", errno); - } - if (errdes != STDERR_FILE_NO) - { - if (dup2 (errdes, STDERR_FILE_NO) < 0) - pex_child_error (obj, executable, "dup2", errno); - if (close (errdes) < 0) - pex_child_error (obj, executable, "close", errno); - } - if ((flags & PEX_STDERR_TO_STDOUT) != 0) - { - if (dup2 (STDOUT_FILE_NO, STDERR_FILE_NO) < 0) - pex_child_error (obj, executable, "dup2", errno); - } - - if (env) - environ = (char**) env; - - if ((flags & PEX_SEARCH) != 0) - { - execvp (executable, argv); - pex_child_error (obj, executable, "execvp", errno); - } - else - { - execv (executable, argv); - pex_child_error (obj, executable, "execv", errno); - } - - /* NOTREACHED */ - return -1; - - default: - /* Parent process. */ - if (in != STDIN_FILE_NO) - { - if (close (in) < 0) - { - *err = errno; - *errmsg = "close"; - return -1; - } - } - if (out != STDOUT_FILE_NO) - { - if (close (out) < 0) - { - *err = errno; - *errmsg = "close"; - return -1; - } - } - if (errdes != STDERR_FILE_NO) - { - if (close (errdes) < 0) - { - *err = errno; - *errmsg = "close"; - return -1; - } - } - - return (long) pid; - } -} - -/* Wait for a child process to complete. */ - -static int -pex_unix_wait (struct pex_obj *obj, long pid, int *status, - struct pex_time *time, int done, const char **errmsg, - int *err) -{ - /* If we are cleaning up when the caller didn't retrieve process - status for some reason, encourage the process to go away. */ - if (done) - kill (pid, SIGTERM); - - if (pex_wait (obj, pid, status, time) < 0) - { - *err = errno; - *errmsg = "wait"; - return -1; - } - - return 0; -} - -/* Create a pipe. */ - -static int -pex_unix_pipe (struct pex_obj *obj ATTRIBUTE_UNUSED, int *p, - int binary ATTRIBUTE_UNUSED) -{ - return pipe (p); -} - -/* Get a FILE pointer to read from a file descriptor. */ - -static FILE * -pex_unix_fdopenr (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd, - int binary ATTRIBUTE_UNUSED) -{ - return fdopen (fd, "r"); -} - -static FILE * -pex_unix_fdopenw (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd, - int binary ATTRIBUTE_UNUSED) -{ - if (fcntl (fd, F_SETFD, FD_CLOEXEC) < 0) - return NULL; - return fdopen (fd, "w"); -} - -static void -pex_unix_cleanup (struct pex_obj *obj ATTRIBUTE_UNUSED) -{ -#if !defined (HAVE_WAIT4) && !defined (HAVE_WAITPID) - while (obj->sysdep != NULL) - { - struct status_list *this; - struct status_list *next; - - this = (struct status_list *) obj->sysdep; - next = this->next; - free (this); - obj->sysdep = (void *) next; - } -#endif -} diff --git a/libiberty/pex-win32.c b/libiberty/pex-win32.c deleted file mode 100644 index 45725457b6a..00000000000 --- a/libiberty/pex-win32.c +++ /dev/null @@ -1,886 +0,0 @@ -/* Utilities to execute a program in a subprocess (possibly linked by pipes - with other subprocesses), and wait for it. Generic Win32 specialization. - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 - Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If not, -write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#include "pex-common.h" - -#include - -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif -#ifdef HAVE_SYS_WAIT_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -/* mingw32 headers may not define the following. */ - -#ifndef _P_WAIT -# define _P_WAIT 0 -# define _P_NOWAIT 1 -# define _P_OVERLAY 2 -# define _P_NOWAITO 3 -# define _P_DETACH 4 - -# define WAIT_CHILD 0 -# define WAIT_GRANDCHILD 1 -#endif - -#define MINGW_NAME "Minimalist GNU for Windows" -#define MINGW_NAME_LEN (sizeof(MINGW_NAME) - 1) - -extern char *stpcpy (char *dst, const char *src); - -/* Ensure that the executable pathname uses Win32 backslashes. This - is not necessary on NT, but on W9x, forward slashes causes - failure of spawn* and exec* functions (and probably any function - that calls CreateProcess) *iff* the executable pathname (argv[0]) - is a quoted string. And quoting is necessary in case a pathname - contains embedded white space. You can't win. */ -static void -backslashify (char *s) -{ - while ((s = strchr (s, '/')) != NULL) - *s = '\\'; - return; -} - -static int pex_win32_open_read (struct pex_obj *, const char *, int); -static int pex_win32_open_write (struct pex_obj *, const char *, int); -static long pex_win32_exec_child (struct pex_obj *, int, const char *, - char * const *, char * const *, - int, int, int, - const char **, int *); -static int pex_win32_close (struct pex_obj *, int); -static int pex_win32_wait (struct pex_obj *, long, int *, - struct pex_time *, int, const char **, int *); -static int pex_win32_pipe (struct pex_obj *, int *, int); -static FILE *pex_win32_fdopenr (struct pex_obj *, int, int); -static FILE *pex_win32_fdopenw (struct pex_obj *, int, int); - -/* The list of functions we pass to the common routines. */ - -const struct pex_funcs funcs = -{ - pex_win32_open_read, - pex_win32_open_write, - pex_win32_exec_child, - pex_win32_close, - pex_win32_wait, - pex_win32_pipe, - pex_win32_fdopenr, - pex_win32_fdopenw, - NULL /* cleanup */ -}; - -/* Return a newly initialized pex_obj structure. */ - -struct pex_obj * -pex_init (int flags, const char *pname, const char *tempbase) -{ - return pex_init_common (flags, pname, tempbase, &funcs); -} - -/* Open a file for reading. */ - -static int -pex_win32_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name, - int binary) -{ - return _open (name, _O_RDONLY | (binary ? _O_BINARY : _O_TEXT)); -} - -/* Open a file for writing. */ - -static int -pex_win32_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name, - int binary) -{ - /* Note that we can't use O_EXCL here because gcc may have already - created the temporary file via make_temp_file. */ - return _open (name, - (_O_WRONLY | _O_CREAT | _O_TRUNC - | (binary ? _O_BINARY : _O_TEXT)), - _S_IREAD | _S_IWRITE); -} - -/* Close a file. */ - -static int -pex_win32_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd) -{ - return _close (fd); -} - -#ifdef USE_MINGW_MSYS -static const char *mingw_keys[] = {"SOFTWARE", "Microsoft", "Windows", "CurrentVersion", "Uninstall", NULL}; - -/* Tack the executable on the end of a (possibly slash terminated) buffer - and convert everything to \. */ -static const char * -tack_on_executable (char *buf, const char *executable) -{ - char *p = strchr (buf, '\0'); - if (p > buf && (p[-1] == '\\' || p[-1] == '/')) - p[-1] = '\0'; - backslashify (strcat (buf, executable)); - return buf; -} - -/* Walk down a registry hierarchy until the end. Return the key. */ -static HKEY -openkey (HKEY hStart, const char *keys[]) -{ - HKEY hKey, hTmp; - for (hKey = hStart; *keys; keys++) - { - LONG res; - hTmp = hKey; - res = RegOpenKey (hTmp, *keys, &hKey); - - if (hTmp != HKEY_LOCAL_MACHINE) - RegCloseKey (hTmp); - - if (res != ERROR_SUCCESS) - return NULL; - } - return hKey; -} - -/* Return the "mingw root" as derived from the mingw uninstall information. */ -static const char * -mingw_rootify (const char *executable) -{ - HKEY hKey, hTmp; - DWORD maxlen; - char *namebuf, *foundbuf; - DWORD i; - LONG res; - - /* Open the uninstall "directory". */ - hKey = openkey (HKEY_LOCAL_MACHINE, mingw_keys); - - /* Not found. */ - if (!hKey) - return executable; - - /* Need to enumerate all of the keys here looking for one the most recent - one for MinGW. */ - if (RegQueryInfoKey (hKey, NULL, NULL, NULL, NULL, &maxlen, NULL, NULL, - NULL, NULL, NULL, NULL) != ERROR_SUCCESS) - { - RegCloseKey (hKey); - return executable; - } - namebuf = XNEWVEC (char, ++maxlen); - foundbuf = XNEWVEC (char, maxlen); - foundbuf[0] = '\0'; - if (!namebuf || !foundbuf) - { - RegCloseKey (hKey); - if (namebuf) - free (namebuf); - if (foundbuf) - free (foundbuf); - return executable; - } - - /* Look through all of the keys for one that begins with Minimal GNU... - Try to get the latest version by doing a string compare although that - string never really works with version number sorting. */ - for (i = 0; RegEnumKey (hKey, i, namebuf, maxlen) == ERROR_SUCCESS; i++) - { - int match = strcasecmp (namebuf, MINGW_NAME); - if (match < 0) - continue; - if (match > 0 && strncasecmp (namebuf, MINGW_NAME, MINGW_NAME_LEN) > 0) - continue; - if (strcasecmp (namebuf, foundbuf) > 0) - strcpy (foundbuf, namebuf); - } - free (namebuf); - - /* If foundbuf is empty, we didn't find anything. Punt. */ - if (!foundbuf[0]) - { - free (foundbuf); - RegCloseKey (hKey); - return executable; - } - - /* Open the key that we wanted */ - res = RegOpenKey (hKey, foundbuf, &hTmp); - RegCloseKey (hKey); - free (foundbuf); - - /* Don't know why this would fail, but you gotta check */ - if (res != ERROR_SUCCESS) - return executable; - - maxlen = 0; - /* Get the length of the value pointed to by InstallLocation */ - if (RegQueryValueEx (hTmp, "InstallLocation", 0, NULL, NULL, - &maxlen) != ERROR_SUCCESS || maxlen == 0) - { - RegCloseKey (hTmp); - return executable; - } - - /* Allocate space for the install location */ - foundbuf = XNEWVEC (char, maxlen + strlen (executable)); - if (!foundbuf) - { - free (foundbuf); - RegCloseKey (hTmp); - } - - /* Read the install location into the buffer */ - res = RegQueryValueEx (hTmp, "InstallLocation", 0, NULL, (LPBYTE) foundbuf, - &maxlen); - RegCloseKey (hTmp); - if (res != ERROR_SUCCESS) - { - free (foundbuf); - return executable; - } - - /* Concatenate the install location and the executable, turn all slashes - to backslashes, and return that. */ - return tack_on_executable (foundbuf, executable); -} - -/* Read the install location of msys from it's installation file and - rootify the executable based on that. */ -static const char * -msys_rootify (const char *executable) -{ - size_t bufsize = 64; - size_t execlen = strlen (executable) + 1; - char *buf; - DWORD res = 0; - for (;;) - { - buf = XNEWVEC (char, bufsize + execlen); - if (!buf) - break; - res = GetPrivateProfileString ("InstallSettings", "InstallPath", NULL, - buf, bufsize, "msys.ini"); - if (!res) - break; - if (strlen (buf) < bufsize) - break; - res = 0; - free (buf); - bufsize *= 2; - if (bufsize > 65536) - { - buf = NULL; - break; - } - } - - if (res) - return tack_on_executable (buf, executable); - - /* failed */ - if (buf) - free (buf); - return executable; -} -#endif - -/* Return a Windows command-line from ARGV. It is the caller's - responsibility to free the string returned. */ - -static char * -argv_to_cmdline (char *const *argv) -{ - char *cmdline; - char *p; - size_t cmdline_len; - int i, j, k; - - cmdline_len = 0; - for (i = 0; argv[i]; i++) - { - /* We quote every last argument. This simplifies the problem; - we need only escape embedded double-quotes and immediately - preceeding backslash characters. A sequence of backslach characters - that is not follwed by a double quote character will not be - escaped. */ - for (j = 0; argv[i][j]; j++) - { - if (argv[i][j] == '"') - { - /* Escape preceeding backslashes. */ - for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--) - cmdline_len++; - /* Escape the qote character. */ - cmdline_len++; - } - } - /* Trailing backslashes also need to be escaped because they will be - followed by the terminating quote. */ - for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--) - cmdline_len++; - cmdline_len += j; - cmdline_len += 3; /* for leading and trailing quotes and space */ - } - cmdline = xmalloc (cmdline_len); - p = cmdline; - for (i = 0; argv[i]; i++) - { - *p++ = '"'; - for (j = 0; argv[i][j]; j++) - { - if (argv[i][j] == '"') - { - for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--) - *p++ = '\\'; - *p++ = '\\'; - } - *p++ = argv[i][j]; - } - for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--) - *p++ = '\\'; - *p++ = '"'; - *p++ = ' '; - } - p[-1] = '\0'; - return cmdline; -} - -static const char *const -std_suffixes[] = { - ".com", - ".exe", - ".bat", - ".cmd", - 0 -}; -static const char *const -no_suffixes[] = { - "", - 0 -}; - -/* Returns the full path to PROGRAM. If SEARCH is true, look for - PROGRAM in each directory in PATH. */ - -static char * -find_executable (const char *program, BOOL search) -{ - char *full_executable; - char *e; - size_t fe_len; - const char *path = 0; - const char *const *ext; - const char *p, *q; - size_t proglen = strlen (program); - int has_extension = !!strchr (program, '.'); - int has_slash = (strchr (program, '/') || strchr (program, '\\')); - HANDLE h; - - if (has_slash) - search = FALSE; - - if (search) - path = getenv ("PATH"); - if (!path) - path = ""; - - fe_len = 0; - for (p = path; *p; p = q) - { - q = p; - while (*q != ';' && *q != '\0') - q++; - if ((size_t)(q - p) > fe_len) - fe_len = q - p; - if (*q == ';') - q++; - } - fe_len = fe_len + 1 + proglen + (has_extension ? 1 : 5); - full_executable = xmalloc (fe_len); - - p = path; - do - { - q = p; - while (*q != ';' && *q != '\0') - q++; - - e = full_executable; - memcpy (e, p, q - p); - e += (q - p); - if (q - p) - *e++ = '\\'; - strcpy (e, program); - - if (*q == ';') - q++; - - for (e = full_executable; *e; e++) - if (*e == '/') - *e = '\\'; - - /* At this point, e points to the terminating NUL character for - full_executable. */ - for (ext = has_extension ? no_suffixes : std_suffixes; *ext; ext++) - { - /* Remove any current extension. */ - *e = '\0'; - /* Add the new one. */ - strcat (full_executable, *ext); - - /* Attempt to open this file. */ - h = CreateFile (full_executable, GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, - 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); - if (h != INVALID_HANDLE_VALUE) - goto found; - } - p = q; - } - while (*p); - free (full_executable); - return 0; - - found: - CloseHandle (h); - return full_executable; -} - -/* Low-level process creation function and helper. */ - -static int -env_compare (const void *a_ptr, const void *b_ptr) -{ - const char *a; - const char *b; - unsigned char c1; - unsigned char c2; - - a = *(const char **) a_ptr; - b = *(const char **) b_ptr; - - /* a and b will be of the form: VAR=VALUE - We compare only the variable name part here using a case-insensitive - comparison algorithm. It might appear that in fact strcasecmp () can - take the place of this whole function, and indeed it could, save for - the fact that it would fail in cases such as comparing A1=foo and - A=bar (because 1 is less than = in the ASCII character set). - (Environment variables containing no numbers would work in such a - scenario.) */ - - do - { - c1 = (unsigned char) tolower (*a++); - c2 = (unsigned char) tolower (*b++); - - if (c1 == '=') - c1 = '\0'; - - if (c2 == '=') - c2 = '\0'; - } - while (c1 == c2 && c1 != '\0'); - - return c1 - c2; -} - -static long -win32_spawn (const char *executable, - BOOL search, - char *const *argv, - char *const *env, /* array of strings of the form: VAR=VALUE */ - DWORD dwCreationFlags, - LPSTARTUPINFO si, - LPPROCESS_INFORMATION pi) -{ - char *full_executable; - char *cmdline; - char **env_copy; - char *env_block = NULL; - - full_executable = NULL; - cmdline = NULL; - - if (env) - { - int env_size; - - /* Count the number of environment bindings supplied. */ - for (env_size = 0; env[env_size]; env_size++) - continue; - - /* Assemble an environment block, if required. This consists of - VAR=VALUE strings juxtaposed (with one null character between each - pair) and an additional null at the end. */ - if (env_size > 0) - { - int var; - int total_size = 1; /* 1 is for the final null. */ - char *bufptr; - - /* Windows needs the members of the block to be sorted by variable - name. */ - env_copy = alloca (sizeof (char *) * env_size); - memcpy (env_copy, env, sizeof (char *) * env_size); - qsort (env_copy, env_size, sizeof (char *), env_compare); - - for (var = 0; var < env_size; var++) - total_size += strlen (env[var]) + 1; - - env_block = malloc (total_size); - bufptr = env_block; - for (var = 0; var < env_size; var++) - bufptr = stpcpy (bufptr, env_copy[var]) + 1; - - *bufptr = '\0'; - } - } - - full_executable = find_executable (executable, search); - if (!full_executable) - goto error; - cmdline = argv_to_cmdline (argv); - if (!cmdline) - goto error; - - /* Create the child process. */ - if (!CreateProcess (full_executable, cmdline, - /*lpProcessAttributes=*/NULL, - /*lpThreadAttributes=*/NULL, - /*bInheritHandles=*/TRUE, - dwCreationFlags, - (LPVOID) env_block, - /*lpCurrentDirectory=*/NULL, - si, - pi)) - { - if (env_block) - free (env_block); - - free (full_executable); - - return -1; - } - - /* Clean up. */ - CloseHandle (pi->hThread); - free (full_executable); - if (env_block) - free (env_block); - - return (long) pi->hProcess; - - error: - if (env_block) - free (env_block); - if (cmdline) - free (cmdline); - if (full_executable) - free (full_executable); - - return -1; -} - -static long -spawn_script (const char *executable, char *const *argv, - char* const *env, - DWORD dwCreationFlags, - LPSTARTUPINFO si, - LPPROCESS_INFORMATION pi) -{ - int pid = -1; - int save_errno = errno; - int fd = _open (executable, _O_RDONLY); - - if (fd >= 0) - { - char buf[MAX_PATH + 5]; - int len = _read (fd, buf, sizeof (buf) - 1); - _close (fd); - if (len > 3) - { - char *eol; - buf[len] = '\0'; - eol = strchr (buf, '\n'); - if (eol && strncmp (buf, "#!", 2) == 0) - { - char *executable1; - const char ** avhere = (const char **) --argv; - do - *eol = '\0'; - while (*--eol == '\r' || *eol == ' ' || *eol == '\t'); - for (executable1 = buf + 2; *executable1 == ' ' || *executable1 == '\t'; executable1++) - continue; - - backslashify (executable1); - *avhere = executable1; -#ifndef USE_MINGW_MSYS - executable = strrchr (executable1, '\\') + 1; - if (!executable) - executable = executable1; - pid = win32_spawn (executable, TRUE, argv, env, - dwCreationFlags, si, pi); -#else - if (strchr (executable1, '\\') == NULL) - pid = win32_spawn (executable1, TRUE, argv, env, - dwCreationFlags, si, pi); - else if (executable1[0] != '\\') - pid = win32_spawn (executable1, FALSE, argv, env, - dwCreationFlags, si, pi); - else - { - const char *newex = mingw_rootify (executable1); - *avhere = newex; - pid = win32_spawn (newex, FALSE, argv, env, - dwCreationFlags, si, pi); - if (executable1 != newex) - free ((char *) newex); - if (pid < 0) - { - newex = msys_rootify (executable1); - if (newex != executable1) - { - *avhere = newex; - pid = win32_spawn (newex, FALSE, argv, env, - dwCreationFlags, si, pi); - free ((char *) newex); - } - } - } -#endif - } - } - } - if (pid < 0) - errno = save_errno; - return pid; -} - -/* Execute a child. */ - -static long -pex_win32_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED, int flags, - const char *executable, char * const * argv, - char* const* env, - int in, int out, int errdes, const char **errmsg, - int *err) -{ - long pid; - HANDLE stdin_handle; - HANDLE stdout_handle; - HANDLE stderr_handle; - DWORD dwCreationFlags; - OSVERSIONINFO version_info; - STARTUPINFO si; - PROCESS_INFORMATION pi; - - stdin_handle = INVALID_HANDLE_VALUE; - stdout_handle = INVALID_HANDLE_VALUE; - stderr_handle = INVALID_HANDLE_VALUE; - - stdin_handle = (HANDLE) _get_osfhandle (in); - stdout_handle = (HANDLE) _get_osfhandle (out); - if (!(flags & PEX_STDERR_TO_STDOUT)) - stderr_handle = (HANDLE) _get_osfhandle (errdes); - else - stderr_handle = stdout_handle; - - /* Determine the version of Windows we are running on. */ - version_info.dwOSVersionInfoSize = sizeof (version_info); - GetVersionEx (&version_info); - if (version_info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) - /* On Windows 95/98/ME the CREATE_NO_WINDOW flag is not - supported, so we cannot avoid creating a console window. */ - dwCreationFlags = 0; - else - { - HANDLE conout_handle; - - /* Determine whether or not we have an associated console. */ - conout_handle = CreateFile("CONOUT$", - GENERIC_WRITE, - FILE_SHARE_WRITE, - /*lpSecurityAttributes=*/NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - /*hTemplateFile=*/NULL); - if (conout_handle == INVALID_HANDLE_VALUE) - /* There is no console associated with this process. Since - the child is a console process, the OS would normally - create a new console Window for the child. Since we'll be - redirecting the child's standard streams, we do not need - the console window. */ - dwCreationFlags = CREATE_NO_WINDOW; - else - { - /* There is a console associated with the process, so the OS - will not create a new console. And, if we use - CREATE_NO_WINDOW in this situation, the child will have - no associated console. Therefore, if the child's - standard streams are connected to the console, the output - will be discarded. */ - CloseHandle(conout_handle); - dwCreationFlags = 0; - } - } - - /* Since the child will be a console process, it will, by default, - connect standard input/output to its console. However, we want - the child to use the handles specifically designated above. In - addition, if there is no console (such as when we are running in - a Cygwin X window), then we must redirect the child's - input/output, as there is no console for the child to use. */ - memset (&si, 0, sizeof (si)); - si.cb = sizeof (si); - si.dwFlags = STARTF_USESTDHANDLES; - si.hStdInput = stdin_handle; - si.hStdOutput = stdout_handle; - si.hStdError = stderr_handle; - - /* Create the child process. */ - pid = win32_spawn (executable, (flags & PEX_SEARCH) != 0, - argv, env, dwCreationFlags, &si, &pi); - if (pid == -1) - pid = spawn_script (executable, argv, env, dwCreationFlags, - &si, &pi); - if (pid == -1) - { - *err = ENOENT; - *errmsg = "CreateProcess"; - } - - /* Close the standard output and standard error handles in the - parent. */ - if (out != STDOUT_FILENO) - obj->funcs->close (obj, out); - if (errdes != STDERR_FILENO) - obj->funcs->close (obj, errdes); - - return pid; -} - -/* Wait for a child process to complete. MS CRTDLL doesn't return - enough information in status to decide if the child exited due to a - signal or not, rather it simply returns an integer with the exit - code of the child; eg., if the child exited with an abort() call - and didn't have a handler for SIGABRT, it simply returns with - status == 3. We fix the status code to conform to the usual WIF* - macros. Note that WIFSIGNALED will never be true under CRTDLL. */ - -static int -pex_win32_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, long pid, - int *status, struct pex_time *time, int done ATTRIBUTE_UNUSED, - const char **errmsg, int *err) -{ - DWORD termstat; - HANDLE h; - - if (time != NULL) - memset (time, 0, sizeof *time); - - h = (HANDLE) pid; - - /* FIXME: If done is non-zero, we should probably try to kill the - process. */ - if (WaitForSingleObject (h, INFINITE) != WAIT_OBJECT_0) - { - CloseHandle (h); - *err = ECHILD; - *errmsg = "WaitForSingleObject"; - return -1; - } - - GetExitCodeProcess (h, &termstat); - CloseHandle (h); - - /* A value of 3 indicates that the child caught a signal, but not - which one. Since only SIGABRT, SIGFPE and SIGINT do anything, we - report SIGABRT. */ - if (termstat == 3) - *status = SIGABRT; - else - *status = (termstat & 0xff) << 8; - - return 0; -} - -/* Create a pipe. */ - -static int -pex_win32_pipe (struct pex_obj *obj ATTRIBUTE_UNUSED, int *p, - int binary) -{ - return _pipe (p, 256, binary ? _O_BINARY : _O_TEXT); -} - -/* Get a FILE pointer to read from a file descriptor. */ - -static FILE * -pex_win32_fdopenr (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd, - int binary) -{ - return fdopen (fd, binary ? "rb" : "r"); -} - -static FILE * -pex_win32_fdopenw (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd, - int binary) -{ - HANDLE h = (HANDLE) _get_osfhandle (fd); - if (h == INVALID_HANDLE_VALUE) - return NULL; - if (! SetHandleInformation (h, HANDLE_FLAG_INHERIT, 0)) - return NULL; - return fdopen (fd, binary ? "wb" : "w"); -} - -#ifdef MAIN -#include - -int -main (int argc ATTRIBUTE_UNUSED, char **argv) -{ - char const *errmsg; - int err; - argv++; - printf ("%ld\n", pex_win32_exec_child (NULL, PEX_SEARCH, argv[0], argv, NULL, 0, 0, 1, 2, &errmsg, &err)); - exit (0); -} -#endif diff --git a/libiberty/pexecute.c b/libiberty/pexecute.c deleted file mode 100644 index 97f157447b7..00000000000 --- a/libiberty/pexecute.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Utilities to execute a program in a subprocess (possibly linked by pipes - with other subprocesses), and wait for it. - Copyright (C) 2004 Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If not, -write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* pexecute is an old routine. This implementation uses the newer - pex_init/pex_run/pex_get_status/pex_free routines. Don't use - pexecute in new code. Use the newer routines instead. */ - -#include "config.h" -#include "libiberty.h" - -#ifdef HAVE_STDLIB_H -#include -#endif - -/* We only permit a single pexecute chain to execute at a time. This - was always true anyhow, though it wasn't documented. */ - -static struct pex_obj *pex; -static int idx; - -int -pexecute (const char *program, char * const *argv, const char *pname, - const char *temp_base, char **errmsg_fmt, char **errmsg_arg, - int flags) -{ - const char *errmsg; - int err; - - if ((flags & PEXECUTE_FIRST) != 0) - { - if (pex != NULL) - { - *errmsg_fmt = (char *) "pexecute already in progress"; - *errmsg_arg = NULL; - return -1; - } - pex = pex_init (PEX_USE_PIPES, pname, temp_base); - idx = 0; - } - else - { - if (pex == NULL) - { - *errmsg_fmt = (char *) "pexecute not in progress"; - *errmsg_arg = NULL; - return -1; - } - } - - errmsg = pex_run (pex, - (((flags & PEXECUTE_LAST) != 0 ? PEX_LAST : 0) - | ((flags & PEXECUTE_SEARCH) != 0 ? PEX_SEARCH : 0)), - program, argv, NULL, NULL, &err); - if (errmsg != NULL) - { - *errmsg_fmt = (char *) errmsg; - *errmsg_arg = NULL; - return -1; - } - - /* Instead of a PID, we just return a one-based index into the - status values. We avoid zero just because the old pexecute would - never return it. */ - return ++idx; -} - -int -pwait (int pid, int *status, int flags ATTRIBUTE_UNUSED) -{ - /* The PID returned by pexecute is one-based. */ - --pid; - - if (pex == NULL || pid < 0 || pid >= idx) - return -1; - - if (pid == 0 && idx == 1) - { - if (!pex_get_status (pex, 1, status)) - return -1; - } - else - { - int *vector; - - vector = XNEWVEC (int, idx); - if (!pex_get_status (pex, idx, vector)) - { - free (vector); - return -1; - } - *status = vector[pid]; - free (vector); - } - - /* Assume that we are done after the caller has retrieved the last - exit status. The original implementation did not require that - the exit statuses be retrieved in order, but this implementation - does. */ - if (pid + 1 == idx) - { - pex_free (pex); - pex = NULL; - idx = 0; - } - - return pid + 1; -} diff --git a/libiberty/pexecute.txh b/libiberty/pexecute.txh deleted file mode 100644 index d85ee59b008..00000000000 --- a/libiberty/pexecute.txh +++ /dev/null @@ -1,274 +0,0 @@ -@c -*- mode: texinfo -*- -@deftypefn Extension {struct pex_obj *} pex_init (int @var{flags}, const char *@var{pname}, const char *@var{tempbase}) - -Prepare to execute one or more programs, with standard output of each -program fed to standard input of the next. This is a system -independent interface to execute a pipeline. - -@var{flags} is a bitwise combination of the following: - -@table @code - -@vindex PEX_RECORD_TIMES -@item PEX_RECORD_TIMES -Record subprocess times if possible. - -@vindex PEX_USE_PIPES -@item PEX_USE_PIPES -Use pipes for communication between processes, if possible. - -@vindex PEX_SAVE_TEMPS -@item PEX_SAVE_TEMPS -Don't delete temporary files used for communication between -processes. - -@end table - -@var{pname} is the name of program to be executed, used in error -messages. @var{tempbase} is a base name to use for any required -temporary files; it may be @code{NULL} to use a randomly chosen name. - -@end deftypefn - -@deftypefn Extension {const char *} pex_run (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{outname}, const char *@var{errname}, int *@var{err}) - -Execute one program in a pipeline. On success this returns -@code{NULL}. On failure it returns an error message, a statically -allocated string. - -@var{obj} is returned by a previous call to @code{pex_init}. - -@var{flags} is a bitwise combination of the following: - -@table @code - -@vindex PEX_LAST -@item PEX_LAST -This must be set on the last program in the pipeline. In particular, -it should be set when executing a single program. The standard output -of the program will be sent to @var{outname}, or, if @var{outname} is -@code{NULL}, to the standard output of the calling program. Do @emph{not} -set this bit if you want to call @code{pex_read_output} -(described below). After a call to @code{pex_run} with this bit set, -@var{pex_run} may no longer be called with the same @var{obj}. - -@vindex PEX_SEARCH -@item PEX_SEARCH -Search for the program using the user's executable search path. - -@vindex PEX_SUFFIX -@item PEX_SUFFIX -@var{outname} is a suffix. See the description of @var{outname}, -below. - -@vindex PEX_STDERR_TO_STDOUT -@item PEX_STDERR_TO_STDOUT -Send the program's standard error to standard output, if possible. - -@vindex PEX_BINARY_INPUT -@vindex PEX_BINARY_OUTPUT -@item PEX_BINARY_INPUT -@itemx PEX_BINARY_OUTPUT -The standard input (output) of the program should be read (written) in -binary mode rather than text mode. These flags are ignored on systems -which do not distinguish binary mode and text mode, such as Unix. For -proper behavior these flags should match appropriately---a call to -@code{pex_run} using @code{PEX_BINARY_OUTPUT} should be followed by a -call using @code{PEX_BINARY_INPUT}. -@end table - -@var{executable} is the program to execute. @var{argv} is the set of -arguments to pass to the program; normally @code{@var{argv}[0]} will -be a copy of @var{executable}. - -@var{outname} is used to set the name of the file to use for standard -output. There are two cases in which no output file will be used: - -@enumerate -@item -if @code{PEX_LAST} is not set in @var{flags}, and @code{PEX_USE_PIPES} -was set in the call to @code{pex_init}, and the system supports pipes - -@item -if @code{PEX_LAST} is set in @var{flags}, and @var{outname} is -@code{NULL} -@end enumerate - -@noindent -Otherwise the code will use a file to hold standard -output. If @code{PEX_LAST} is not set, this file is considered to be -a temporary file, and it will be removed when no longer needed, unless -@code{PEX_SAVE_TEMPS} was set in the call to @code{pex_init}. - -There are two cases to consider when setting the name of the file to -hold standard output. - -@enumerate -@item -@code{PEX_SUFFIX} is set in @var{flags}. In this case -@var{outname} may not be @code{NULL}. If the @var{tempbase} parameter -to @code{pex_init} was not @code{NULL}, then the output file name is -the concatenation of @var{tempbase} and @var{outname}. If -@var{tempbase} was @code{NULL}, then the output file name is a random -file name ending in @var{outname}. - -@item -@code{PEX_SUFFIX} was not set in @var{flags}. In this -case, if @var{outname} is not @code{NULL}, it is used as the output -file name. If @var{outname} is @code{NULL}, and @var{tempbase} was -not NULL, the output file name is randomly chosen using -@var{tempbase}. Otherwise the output file name is chosen completely -at random. -@end enumerate - -@var{errname} is the file name to use for standard error output. If -it is @code{NULL}, standard error is the same as the caller's. -Otherwise, standard error is written to the named file. - -On an error return, the code sets @code{*@var{err}} to an @code{errno} -value, or to 0 if there is no relevant @code{errno}. - -@end deftypefn - -@deftypefn Extension {const char *} pex_run_in_environment (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, char * const *@var{env}, int @var{env_size}, const char *@var{outname}, const char *@var{errname}, int *@var{err}) - -Execute one program in a pipeline, permitting the environment for the -program to be specified. Behaviour and parameters not listed below are -as for @code{pex_run}. - -@var{env} is the environment for the child process, specified as an array of -character pointers. Each element of the array should point to a string of the -form @code{VAR=VALUE}, with the exception of the last element that must be -@code{NULL}. - -@end deftypefn - -@deftypefn Extension {FILE *} pex_input_file (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{in_name}) - -Return a stream for a temporary file to pass to the first program in -the pipeline as input. - -The name of the input file is chosen according to the same rules -@code{pex_run} uses to choose output file names, based on -@var{in_name}, @var{obj} and the @code{PEX_SUFFIX} bit in @var{flags}. - -Don't call @code{fclose} on the returned stream; the first call to -@code{pex_run} closes it automatically. - -If @var{flags} includes @code{PEX_BINARY_OUTPUT}, open the stream in -binary mode; otherwise, open it in the default mode. Including -@code{PEX_BINARY_OUTPUT} in @var{flags} has no effect on Unix. -@end deftypefn - -@deftypefn Extension {FILE *} pex_input_pipe (struct pex_obj *@var{obj}, int @var{binary}) - -Return a stream @var{fp} for a pipe connected to the standard input of -the first program in the pipeline; @var{fp} is opened for writing. -You must have passed @code{PEX_USE_PIPES} to the @code{pex_init} call -that returned @var{obj}. - -You must close @var{fp} using @code{fclose} yourself when you have -finished writing data to the pipeline. - -The file descriptor underlying @var{fp} is marked not to be inherited -by child processes. - -On systems that do not support pipes, this function returns -@code{NULL}, and sets @code{errno} to @code{EINVAL}. If you would -like to write code that is portable to all systems the @code{pex} -functions support, consider using @code{pex_input_file} instead. - -There are two opportunities for deadlock using -@code{pex_input_pipe}: - -@itemize @bullet -@item -Most systems' pipes can buffer only a fixed amount of data; a process -that writes to a full pipe blocks. Thus, if you write to @file{fp} -before starting the first process, you run the risk of blocking when -there is no child process yet to read the data and allow you to -continue. @code{pex_input_pipe} makes no promises about the -size of the pipe's buffer, so if you need to write any data at all -before starting the first process in the pipeline, consider using -@code{pex_input_file} instead. - -@item -Using @code{pex_input_pipe} and @code{pex_read_output} together -may also cause deadlock. If the output pipe fills up, so that each -program in the pipeline is waiting for the next to read more data, and -you fill the input pipe by writing more data to @var{fp}, then there -is no way to make progress: the only process that could read data from -the output pipe is you, but you are blocked on the input pipe. - -@end itemize - -@end deftypefn - -@deftypefn Extension {FILE *} pex_read_output (struct pex_obj *@var{obj}, int @var{binary}) - -Returns a @code{FILE} pointer which may be used to read the standard -output of the last program in the pipeline. When this is used, -@code{PEX_LAST} should not be used in a call to @code{pex_run}. After -this is called, @code{pex_run} may no longer be called with the same -@var{obj}. @var{binary} should be non-zero if the file should be -opened in binary mode. Don't call @code{fclose} on the returned file; -it will be closed by @code{pex_free}. - -@end deftypefn - -@deftypefn Extension int pex_get_status (struct pex_obj *@var{obj}, int @var{count}, int *@var{vector}) - -Returns the exit status of all programs run using @var{obj}. -@var{count} is the number of results expected. The results will be -placed into @var{vector}. The results are in the order of the calls -to @code{pex_run}. Returns 0 on error, 1 on success. - -@end deftypefn - -@deftypefn Extension int pex_get_times (struct pex_obj *@var{obj}, int @var{count}, struct pex_time *@var{vector}) - -Returns the process execution times of all programs run using -@var{obj}. @var{count} is the number of results expected. The -results will be placed into @var{vector}. The results are in the -order of the calls to @code{pex_run}. Returns 0 on error, 1 on -success. - -@code{struct pex_time} has the following fields of the type -@code{unsigned long}: @code{user_seconds}, -@code{user_microseconds}, @code{system_seconds}, -@code{system_microseconds}. On systems which do not support reporting -process times, all the fields will be set to @code{0}. - -@end deftypefn - -@deftypefn Extension void pex_free (struct pex_obj @var{obj}) - -Clean up and free all data associated with @var{obj}. - -@end deftypefn - -@deftypefn Extension {const char *} pex_one (int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{pname}, const char *@var{outname}, const char *@var{errname}, int *@var{status}, int *@var{err}) - -An interface to permit the easy execution of a -single program. The return value and most of the parameters are as -for a call to @code{pex_run}. @var{flags} is restricted to a -combination of @code{PEX_SEARCH}, @code{PEX_STDERR_TO_STDOUT}, and -@code{PEX_BINARY_OUTPUT}. @var{outname} is interpreted as if -@code{PEX_LAST} were set. On a successful return, @code{*@var{status}} will -be set to the exit status of the program. - -@end deftypefn - -@deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int flags) - -This is the old interface to execute one or more programs. It is -still supported for compatibility purposes, but is no longer -documented. - -@end deftypefn - -@deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags}) - -Another part of the old execution interface. - -@end deftypefn diff --git a/libiberty/physmem.c b/libiberty/physmem.c deleted file mode 100644 index 09fbf3f8c83..00000000000 --- a/libiberty/physmem.c +++ /dev/null @@ -1,305 +0,0 @@ -/* Calculate the size of physical memory. - Copyright 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - -/* Written by Paul Eggert. */ - -#if HAVE_CONFIG_H -# include -#endif - -#if HAVE_UNISTD_H -# include -#endif - -#if HAVE_SYS_PSTAT_H -# include -#endif - -#if HAVE_SYS_SYSMP_H -# include -#endif - -#if HAVE_SYS_SYSINFO_H && HAVE_MACHINE_HAL_SYSINFO_H -# include -# include -#endif - -#if HAVE_SYS_TABLE_H -# include -#endif - -#include - -#if HAVE_SYS_PARAM_H -# include -#endif - -#if HAVE_SYS_SYSCTL_H -# include -#endif - -#if HAVE_SYS_SYSTEMCFG_H -# include -#endif - -#ifdef _WIN32 -# define WIN32_LEAN_AND_MEAN -# include -/* MEMORYSTATUSEX is missing from older windows headers, so define - a local replacement. */ -typedef struct -{ - DWORD dwLength; - DWORD dwMemoryLoad; - DWORDLONG ullTotalPhys; - DWORDLONG ullAvailPhys; - DWORDLONG ullTotalPageFile; - DWORDLONG ullAvailPageFile; - DWORDLONG ullTotalVirtual; - DWORDLONG ullAvailVirtual; - DWORDLONG ullAvailExtendedVirtual; -} lMEMORYSTATUSEX; -typedef WINBOOL (WINAPI *PFN_MS_EX) (lMEMORYSTATUSEX*); -#endif - -#include "libiberty.h" - -/* Return the total amount of physical memory. */ -double -physmem_total (void) -{ -#if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE - { /* This works on linux-gnu, solaris2 and cygwin. */ - double pages = sysconf (_SC_PHYS_PAGES); - double pagesize = sysconf (_SC_PAGESIZE); - if (0 <= pages && 0 <= pagesize) - return pages * pagesize; - } -#endif - -#if HAVE_PSTAT_GETSTATIC - { /* This works on hpux11. */ - struct pst_static pss; - if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)) - { - double pages = pss.physical_memory; - double pagesize = pss.page_size; - if (0 <= pages && 0 <= pagesize) - return pages * pagesize; - } - } -#endif - -#if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE - { /* This works on irix6. */ - struct rminfo realmem; - if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0) - { - double pagesize = sysconf (_SC_PAGESIZE); - double pages = realmem.physmem; - if (0 <= pages && 0 <= pagesize) - return pages * pagesize; - } - } -#endif - -#if HAVE_GETSYSINFO && defined GSI_PHYSMEM - { /* This works on Tru64 UNIX V4/5. */ - int physmem; - - if (getsysinfo (GSI_PHYSMEM, (caddr_t) &physmem, sizeof (physmem), - NULL, NULL, NULL) == 1) - { - double kbytes = physmem; - - if (0 <= kbytes) - return kbytes * 1024.0; - } - } -#endif - -#if HAVE_SYSCTL && defined HW_PHYSMEM - { /* This works on *bsd and darwin. */ - unsigned int physmem; - size_t len = sizeof physmem; - static int mib[2] = { CTL_HW, HW_PHYSMEM }; - - if (sysctl (mib, ARRAY_SIZE (mib), &physmem, &len, NULL, 0) == 0 - && len == sizeof (physmem)) - return (double) physmem; - } -#endif - -#if HAVE__SYSTEM_CONFIGURATION - /* This works on AIX 4.3.3+. */ - return _system_configuration.physmem; -#endif - -#if defined _WIN32 - { /* this works on windows */ - PFN_MS_EX pfnex; - HMODULE h = GetModuleHandle ("kernel32.dll"); - - if (!h) - return 0.0; - - /* Use GlobalMemoryStatusEx if available. */ - if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx"))) - { - lMEMORYSTATUSEX lms_ex; - lms_ex.dwLength = sizeof lms_ex; - if (!pfnex (&lms_ex)) - return 0.0; - return (double) lms_ex.ullTotalPhys; - } - - /* Fall back to GlobalMemoryStatus which is always available. - but returns wrong results for physical memory > 4GB. */ - else - { - MEMORYSTATUS ms; - GlobalMemoryStatus (&ms); - return (double) ms.dwTotalPhys; - } - } -#endif - - /* Return 0 if we can't determine the value. */ - return 0; -} - -/* Return the amount of physical memory available. */ -double -physmem_available (void) -{ -#if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE - { /* This works on linux-gnu, solaris2 and cygwin. */ - double pages = sysconf (_SC_AVPHYS_PAGES); - double pagesize = sysconf (_SC_PAGESIZE); - if (0 <= pages && 0 <= pagesize) - return pages * pagesize; - } -#endif - -#if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC - { /* This works on hpux11. */ - struct pst_static pss; - struct pst_dynamic psd; - if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0) - && 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0)) - { - double pages = psd.psd_free; - double pagesize = pss.page_size; - if (0 <= pages && 0 <= pagesize) - return pages * pagesize; - } - } -#endif - -#if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE - { /* This works on irix6. */ - struct rminfo realmem; - if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0) - { - double pagesize = sysconf (_SC_PAGESIZE); - double pages = realmem.availrmem; - if (0 <= pages && 0 <= pagesize) - return pages * pagesize; - } - } -#endif - -#if HAVE_TABLE && defined TBL_VMSTATS - { /* This works on Tru64 UNIX V4/5. */ - struct tbl_vmstats vmstats; - - if (table (TBL_VMSTATS, 0, &vmstats, 1, sizeof (vmstats)) == 1) - { - double pages = vmstats.free_count; - double pagesize = vmstats.pagesize; - - if (0 <= pages && 0 <= pagesize) - return pages * pagesize; - } - } -#endif - -#if HAVE_SYSCTL && defined HW_USERMEM - { /* This works on *bsd and darwin. */ - unsigned int usermem; - size_t len = sizeof usermem; - static int mib[2] = { CTL_HW, HW_USERMEM }; - - if (sysctl (mib, ARRAY_SIZE (mib), &usermem, &len, NULL, 0) == 0 - && len == sizeof (usermem)) - return (double) usermem; - } -#endif - -#if defined _WIN32 - { /* this works on windows */ - PFN_MS_EX pfnex; - HMODULE h = GetModuleHandle ("kernel32.dll"); - - if (!h) - return 0.0; - - /* Use GlobalMemoryStatusEx if available. */ - if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx"))) - { - lMEMORYSTATUSEX lms_ex; - lms_ex.dwLength = sizeof lms_ex; - if (!pfnex (&lms_ex)) - return 0.0; - return (double) lms_ex.ullAvailPhys; - } - - /* Fall back to GlobalMemoryStatus which is always available. - but returns wrong results for physical memory > 4GB */ - else - { - MEMORYSTATUS ms; - GlobalMemoryStatus (&ms); - return (double) ms.dwAvailPhys; - } - } -#endif - - /* Guess 25% of physical memory. */ - return physmem_total () / 4; -} - - -#if DEBUG - -# include -# include - -int -main (void) -{ - printf ("%12.f %12.f\n", physmem_total (), physmem_available ()); - exit (0); -} - -#endif /* DEBUG */ - -/* -Local Variables: -compile-command: "gcc -DDEBUG -DHAVE_CONFIG_H -I.. -g -O -Wall -W physmem.c" -End: -*/ diff --git a/libiberty/putenv.c b/libiberty/putenv.c deleted file mode 100644 index 248f50e9203..00000000000 --- a/libiberty/putenv.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1991, 1994, 1995, 1996, 2002 Free Software Foundation, Inc. - This file based on putenv.c in the GNU C Library. - - The GNU C 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. - - The GNU C 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 the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - -/* - -@deftypefn Supplemental int putenv (const char *@var{string}) - -Uses @code{setenv} or @code{unsetenv} to put @var{string} into -the environment or remove it. If @var{string} is of the form -@samp{name=value} the string is added; if no @samp{=} is present the -name is unset/removed. - -@end deftypefn - -*/ - -#if defined (_AIX) && !defined (__GNUC__) - #pragma alloca -#endif - -#if HAVE_CONFIG_H -# include -#endif - -#include "ansidecl.h" - -#define putenv libiberty_putenv - -#if HAVE_STDLIB_H -# include -#endif -#if HAVE_STRING_H -# include -#endif - -#ifdef HAVE_ALLOCA_H -# include -#else -# ifndef alloca -# ifdef __GNUC__ -# define alloca __builtin_alloca -# else -extern char *alloca (); -# endif /* __GNUC__ */ -# endif /* alloca */ -#endif /* HAVE_ALLOCA_H */ - -#undef putenv - -/* Below this point, it's verbatim code from the glibc-2.0 implementation */ - - -/* Put STRING, which is of the form "NAME=VALUE", in the environment. */ -int -putenv (const char *string) -{ - const char *const name_end = strchr (string, '='); - - if (name_end) - { - char *name = (char *) alloca (name_end - string + 1); - memcpy (name, string, name_end - string); - name[name_end - string] = '\0'; - return setenv (name, name_end + 1, 1); - } - - unsetenv (string); - return 0; -} diff --git a/libiberty/random.c b/libiberty/random.c deleted file mode 100644 index c306698a538..00000000000 --- a/libiberty/random.c +++ /dev/null @@ -1,403 +0,0 @@ -/* - * Copyright (c) 1983 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. [rescinded 22 July 1999] - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * This is derived from the Berkeley source: - * @(#)random.c 5.5 (Berkeley) 7/6/88 - * It was reworked for the GNU C Library by Roland McGrath. - */ - -/* - -@deftypefn Supplement {long int} random (void) -@deftypefnx Supplement void srandom (unsigned int @var{seed}) -@deftypefnx Supplement void* initstate (unsigned int @var{seed}, void *@var{arg_state}, unsigned long @var{n}) -@deftypefnx Supplement void* setstate (void *@var{arg_state}) - -Random number functions. @code{random} returns a random number in the -range 0 to @code{LONG_MAX}. @code{srandom} initializes the random -number generator to some starting point determined by @var{seed} -(else, the values returned by @code{random} are always the same for each -run of the program). @code{initstate} and @code{setstate} allow fine-grained -control over the state of the random number generator. - -@end deftypefn - -*/ - -#include - -#if 0 - -#include -#include -#include -#include - -#else - -#define ULONG_MAX ((unsigned long)(~0L)) /* 0xFFFFFFFF for 32-bits */ -#define LONG_MAX ((long)(ULONG_MAX >> 1)) /* 0x7FFFFFFF for 32-bits*/ - -#ifdef __STDC__ -# define PTR void * -# ifndef NULL -# define NULL (void *) 0 -# endif -#else -# define PTR char * -# ifndef NULL -# define NULL (void *) 0 -# endif -#endif - -#endif - -long int random (void); - -/* An improved random number generation package. In addition to the standard - rand()/srand() like interface, this package also has a special state info - interface. The initstate() routine is called with a seed, an array of - bytes, and a count of how many bytes are being passed in; this array is - then initialized to contain information for random number generation with - that much state information. Good sizes for the amount of state - information are 32, 64, 128, and 256 bytes. The state can be switched by - calling the setstate() function with the same array as was initiallized - with initstate(). By default, the package runs with 128 bytes of state - information and generates far better random numbers than a linear - congruential generator. If the amount of state information is less than - 32 bytes, a simple linear congruential R.N.G. is used. Internally, the - state information is treated as an array of longs; the zeroeth element of - the array is the type of R.N.G. being used (small integer); the remainder - of the array is the state information for the R.N.G. Thus, 32 bytes of - state information will give 7 longs worth of state information, which will - allow a degree seven polynomial. (Note: The zeroeth word of state - information also has some other information stored in it; see setstate - for details). The random number generation technique is a linear feedback - shift register approach, employing trinomials (since there are fewer terms - to sum up that way). In this approach, the least significant bit of all - the numbers in the state table will act as a linear feedback shift register, - and will have period 2^deg - 1 (where deg is the degree of the polynomial - being used, assuming that the polynomial is irreducible and primitive). - The higher order bits will have longer periods, since their values are - also influenced by pseudo-random carries out of the lower bits. The - total period of the generator is approximately deg*(2**deg - 1); thus - doubling the amount of state information has a vast influence on the - period of the generator. Note: The deg*(2**deg - 1) is an approximation - only good for large deg, when the period of the shift register is the - dominant factor. With deg equal to seven, the period is actually much - longer than the 7*(2**7 - 1) predicted by this formula. */ - - - -/* For each of the currently supported random number generators, we have a - break value on the amount of state information (you need at least thi - bytes of state info to support this random number generator), a degree for - the polynomial (actually a trinomial) that the R.N.G. is based on, and - separation between the two lower order coefficients of the trinomial. */ - -/* Linear congruential. */ -#define TYPE_0 0 -#define BREAK_0 8 -#define DEG_0 0 -#define SEP_0 0 - -/* x**7 + x**3 + 1. */ -#define TYPE_1 1 -#define BREAK_1 32 -#define DEG_1 7 -#define SEP_1 3 - -/* x**15 + x + 1. */ -#define TYPE_2 2 -#define BREAK_2 64 -#define DEG_2 15 -#define SEP_2 1 - -/* x**31 + x**3 + 1. */ -#define TYPE_3 3 -#define BREAK_3 128 -#define DEG_3 31 -#define SEP_3 3 - -/* x**63 + x + 1. */ -#define TYPE_4 4 -#define BREAK_4 256 -#define DEG_4 63 -#define SEP_4 1 - - -/* Array versions of the above information to make code run faster. - Relies on fact that TYPE_i == i. */ - -#define MAX_TYPES 5 /* Max number of types above. */ - -static int degrees[MAX_TYPES] = { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 }; -static int seps[MAX_TYPES] = { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 }; - - - -/* Initially, everything is set up as if from: - initstate(1, randtbl, 128); - Note that this initialization takes advantage of the fact that srandom - advances the front and rear pointers 10*rand_deg times, and hence the - rear pointer which starts at 0 will also end up at zero; thus the zeroeth - element of the state information, which contains info about the current - position of the rear pointer is just - (MAX_TYPES * (rptr - state)) + TYPE_3 == TYPE_3. */ - -static long int randtbl[DEG_3 + 1] = - { TYPE_3, - 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, - 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb, - 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd, - 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, - 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7, - 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc, - 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, - 0xf5ad9d0e, 0x8999220b, 0x27fb47b9 - }; - -/* FPTR and RPTR are two pointers into the state info, a front and a rear - pointer. These two pointers are always rand_sep places aparts, as they - cycle through the state information. (Yes, this does mean we could get - away with just one pointer, but the code for random is more efficient - this way). The pointers are left positioned as they would be from the call: - initstate(1, randtbl, 128); - (The position of the rear pointer, rptr, is really 0 (as explained above - in the initialization of randtbl) because the state table pointer is set - to point to randtbl[1] (as explained below).) */ - -static long int *fptr = &randtbl[SEP_3 + 1]; -static long int *rptr = &randtbl[1]; - - - -/* The following things are the pointer to the state information table, - the type of the current generator, the degree of the current polynomial - being used, and the separation between the two pointers. - Note that for efficiency of random, we remember the first location of - the state information, not the zeroeth. Hence it is valid to access - state[-1], which is used to store the type of the R.N.G. - Also, we remember the last location, since this is more efficient than - indexing every time to find the address of the last element to see if - the front and rear pointers have wrapped. */ - -static long int *state = &randtbl[1]; - -static int rand_type = TYPE_3; -static int rand_deg = DEG_3; -static int rand_sep = SEP_3; - -static long int *end_ptr = &randtbl[sizeof(randtbl) / sizeof(randtbl[0])]; - -/* Initialize the random number generator based on the given seed. If the - type is the trivial no-state-information type, just remember the seed. - Otherwise, initializes state[] based on the given "seed" via a linear - congruential generator. Then, the pointers are set to known locations - that are exactly rand_sep places apart. Lastly, it cycles the state - information a given number of times to get rid of any initial dependencies - introduced by the L.C.R.N.G. Note that the initialization of randtbl[] - for default usage relies on values produced by this routine. */ -void -srandom (unsigned int x) -{ - state[0] = x; - if (rand_type != TYPE_0) - { - register long int i; - for (i = 1; i < rand_deg; ++i) - state[i] = (1103515145 * state[i - 1]) + 12345; - fptr = &state[rand_sep]; - rptr = &state[0]; - for (i = 0; i < 10 * rand_deg; ++i) - random(); - } -} - -/* Initialize the state information in the given array of N bytes for - future random number generation. Based on the number of bytes we - are given, and the break values for the different R.N.G.'s, we choose - the best (largest) one we can and set things up for it. srandom is - then called to initialize the state information. Note that on return - from srandom, we set state[-1] to be the type multiplexed with the current - value of the rear pointer; this is so successive calls to initstate won't - lose this information and will be able to restart with setstate. - Note: The first thing we do is save the current state, if any, just like - setstate so that it doesn't matter when initstate is called. - Returns a pointer to the old state. */ -PTR -initstate (unsigned int seed, PTR arg_state, unsigned long n) -{ - PTR ostate = (PTR) &state[-1]; - - if (rand_type == TYPE_0) - state[-1] = rand_type; - else - state[-1] = (MAX_TYPES * (rptr - state)) + rand_type; - if (n < BREAK_1) - { - if (n < BREAK_0) - { - errno = EINVAL; - return NULL; - } - rand_type = TYPE_0; - rand_deg = DEG_0; - rand_sep = SEP_0; - } - else if (n < BREAK_2) - { - rand_type = TYPE_1; - rand_deg = DEG_1; - rand_sep = SEP_1; - } - else if (n < BREAK_3) - { - rand_type = TYPE_2; - rand_deg = DEG_2; - rand_sep = SEP_2; - } - else if (n < BREAK_4) - { - rand_type = TYPE_3; - rand_deg = DEG_3; - rand_sep = SEP_3; - } - else - { - rand_type = TYPE_4; - rand_deg = DEG_4; - rand_sep = SEP_4; - } - - state = &((long int *) arg_state)[1]; /* First location. */ - /* Must set END_PTR before srandom. */ - end_ptr = &state[rand_deg]; - srandom(seed); - if (rand_type == TYPE_0) - state[-1] = rand_type; - else - state[-1] = (MAX_TYPES * (rptr - state)) + rand_type; - - return ostate; -} - -/* Restore the state from the given state array. - Note: It is important that we also remember the locations of the pointers - in the current state information, and restore the locations of the pointers - from the old state information. This is done by multiplexing the pointer - location into the zeroeth word of the state information. Note that due - to the order in which things are done, it is OK to call setstate with the - same state as the current state - Returns a pointer to the old state information. */ - -PTR -setstate (PTR arg_state) -{ - register long int *new_state = (long int *) arg_state; - register int type = new_state[0] % MAX_TYPES; - register int rear = new_state[0] / MAX_TYPES; - PTR ostate = (PTR) &state[-1]; - - if (rand_type == TYPE_0) - state[-1] = rand_type; - else - state[-1] = (MAX_TYPES * (rptr - state)) + rand_type; - - switch (type) - { - case TYPE_0: - case TYPE_1: - case TYPE_2: - case TYPE_3: - case TYPE_4: - rand_type = type; - rand_deg = degrees[type]; - rand_sep = seps[type]; - break; - default: - /* State info munged. */ - errno = EINVAL; - return NULL; - } - - state = &new_state[1]; - if (rand_type != TYPE_0) - { - rptr = &state[rear]; - fptr = &state[(rear + rand_sep) % rand_deg]; - } - /* Set end_ptr too. */ - end_ptr = &state[rand_deg]; - - return ostate; -} - -/* If we are using the trivial TYPE_0 R.N.G., just do the old linear - congruential bit. Otherwise, we do our fancy trinomial stuff, which is the - same in all ther other cases due to all the global variables that have been - set up. The basic operation is to add the number at the rear pointer into - the one at the front pointer. Then both pointers are advanced to the next - location cyclically in the table. The value returned is the sum generated, - reduced to 31 bits by throwing away the "least random" low bit. - Note: The code takes advantage of the fact that both the front and - rear pointers can't wrap on the same call by not testing the rear - pointer if the front one has wrapped. Returns a 31-bit random number. */ - -long int -random (void) -{ - if (rand_type == TYPE_0) - { - state[0] = ((state[0] * 1103515245) + 12345) & LONG_MAX; - return state[0]; - } - else - { - long int i; - *fptr += *rptr; - /* Chucking least random bit. */ - i = (*fptr >> 1) & LONG_MAX; - ++fptr; - if (fptr >= end_ptr) - { - fptr = state; - ++rptr; - } - else - { - ++rptr; - if (rptr >= end_ptr) - rptr = state; - } - return i; - } -} diff --git a/libiberty/regex.c b/libiberty/regex.c deleted file mode 100644 index fa1df197ce9..00000000000 --- a/libiberty/regex.c +++ /dev/null @@ -1,8202 +0,0 @@ -/* Extended regular expression matching and search library, - version 0.12. - (Implements POSIX draft P1003.2/D11.2, except for some of the - internationalization features.) - - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301 USA. */ - -/* This file has been modified for usage in libiberty. It includes "xregex.h" - instead of . The "xregex.h" header file renames all external - routines with an "x" prefix so they do not collide with the native regex - routines or with other components regex routines. */ -/* AIX requires this to be the first thing in the file. */ -#if defined _AIX && !defined __GNUC__ && !defined REGEX_MALLOC - #pragma alloca -#endif - -#undef _GNU_SOURCE -#define _GNU_SOURCE - -#ifndef INSIDE_RECURSION -# ifdef HAVE_CONFIG_H -# include -# endif -#endif - -#include - -#ifndef INSIDE_RECURSION - -# if defined STDC_HEADERS && !defined emacs -# include -# else -/* We need this for `regex.h', and perhaps for the Emacs include files. */ -# include -# endif - -# define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC) - -/* For platform which support the ISO C amendement 1 functionality we - support user defined character classes. */ -# if defined _LIBC || WIDE_CHAR_SUPPORT -/* Solaris 2.5 has a bug: must be included before . */ -# include -# include -# endif - -# ifdef _LIBC -/* We have to keep the namespace clean. */ -# define regfree(preg) __regfree (preg) -# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) -# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) -# define regerror(errcode, preg, errbuf, errbuf_size) \ - __regerror(errcode, preg, errbuf, errbuf_size) -# define re_set_registers(bu, re, nu, st, en) \ - __re_set_registers (bu, re, nu, st, en) -# define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ - __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) -# define re_match(bufp, string, size, pos, regs) \ - __re_match (bufp, string, size, pos, regs) -# define re_search(bufp, string, size, startpos, range, regs) \ - __re_search (bufp, string, size, startpos, range, regs) -# define re_compile_pattern(pattern, length, bufp) \ - __re_compile_pattern (pattern, length, bufp) -# define re_set_syntax(syntax) __re_set_syntax (syntax) -# define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ - __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) -# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) - -# define btowc __btowc - -/* We are also using some library internals. */ -# include -# include -# include -# include -# endif - -/* This is for other GNU distributions with internationalized messages. */ -# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC -# include -# ifdef _LIBC -# undef gettext -# define gettext(msgid) __dcgettext ("libc", msgid, LC_MESSAGES) -# endif -# else -# define gettext(msgid) (msgid) -# endif - -# ifndef gettext_noop -/* This define is so xgettext can find the internationalizable - strings. */ -# define gettext_noop(String) String -# endif - -/* The `emacs' switch turns on certain matching commands - that make sense only in Emacs. */ -# ifdef emacs - -# include "lisp.h" -# include "buffer.h" -# include "syntax.h" - -# else /* not emacs */ - -/* If we are not linking with Emacs proper, - we can't use the relocating allocator - even if config.h says that we can. */ -# undef REL_ALLOC - -# if defined STDC_HEADERS || defined _LIBC -# include -# else -char *malloc (); -char *realloc (); -# endif - -/* When used in Emacs's lib-src, we need to get bzero and bcopy somehow. - If nothing else has been done, use the method below. */ -# ifdef INHIBIT_STRING_HEADER -# if !(defined HAVE_BZERO && defined HAVE_BCOPY) -# if !defined bzero && !defined bcopy -# undef INHIBIT_STRING_HEADER -# endif -# endif -# endif - -/* This is the normal way of making sure we have a bcopy and a bzero. - This is used in most programs--a few other programs avoid this - by defining INHIBIT_STRING_HEADER. */ -# ifndef INHIBIT_STRING_HEADER -# if defined HAVE_STRING_H || defined STDC_HEADERS || defined _LIBC -# include -# ifndef bzero -# ifndef _LIBC -# define bzero(s, n) (memset (s, '\0', n), (s)) -# else -# define bzero(s, n) __bzero (s, n) -# endif -# endif -# else -# include -# ifndef memcmp -# define memcmp(s1, s2, n) bcmp (s1, s2, n) -# endif -# ifndef memcpy -# define memcpy(d, s, n) (bcopy (s, d, n), (d)) -# endif -# endif -# endif - -/* Define the syntax stuff for \<, \>, etc. */ - -/* This must be nonzero for the wordchar and notwordchar pattern - commands in re_match_2. */ -# ifndef Sword -# define Sword 1 -# endif - -# ifdef SWITCH_ENUM_BUG -# define SWITCH_ENUM_CAST(x) ((int)(x)) -# else -# define SWITCH_ENUM_CAST(x) (x) -# endif - -# endif /* not emacs */ - -# if defined _LIBC || HAVE_LIMITS_H -# include -# endif - -# ifndef MB_LEN_MAX -# define MB_LEN_MAX 1 -# endif - -/* Get the interface, including the syntax bits. */ -# include "xregex.h" /* change for libiberty */ - -/* isalpha etc. are used for the character classes. */ -# include - -/* Jim Meyering writes: - - "... Some ctype macros are valid only for character codes that - isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when - using /bin/cc or gcc but without giving an ansi option). So, all - ctype uses should be through macros like ISPRINT... If - STDC_HEADERS is defined, then autoconf has verified that the ctype - macros don't need to be guarded with references to isascii. ... - Defining isascii to 1 should let any compiler worth its salt - eliminate the && through constant folding." - Solaris defines some of these symbols so we must undefine them first. */ - -# undef ISASCII -# if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII) -# define ISASCII(c) 1 -# else -# define ISASCII(c) isascii(c) -# endif - -# ifdef isblank -# define ISBLANK(c) (ISASCII (c) && isblank (c)) -# else -# define ISBLANK(c) ((c) == ' ' || (c) == '\t') -# endif -# ifdef isgraph -# define ISGRAPH(c) (ISASCII (c) && isgraph (c)) -# else -# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) -# endif - -# undef ISPRINT -# define ISPRINT(c) (ISASCII (c) && isprint (c)) -# define ISDIGIT(c) (ISASCII (c) && isdigit (c)) -# define ISALNUM(c) (ISASCII (c) && isalnum (c)) -# define ISALPHA(c) (ISASCII (c) && isalpha (c)) -# define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) -# define ISLOWER(c) (ISASCII (c) && islower (c)) -# define ISPUNCT(c) (ISASCII (c) && ispunct (c)) -# define ISSPACE(c) (ISASCII (c) && isspace (c)) -# define ISUPPER(c) (ISASCII (c) && isupper (c)) -# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) - -# ifdef _tolower -# define TOLOWER(c) _tolower(c) -# else -# define TOLOWER(c) tolower(c) -# endif - -# ifndef NULL -# define NULL (void *)0 -# endif - -/* We remove any previous definition of `SIGN_EXTEND_CHAR', - since ours (we hope) works properly with all combinations of - machines, compilers, `char' and `unsigned char' argument types. - (Per Bothner suggested the basic approach.) */ -# undef SIGN_EXTEND_CHAR -# if __STDC__ -# define SIGN_EXTEND_CHAR(c) ((signed char) (c)) -# else /* not __STDC__ */ -/* As in Harbison and Steele. */ -# define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128) -# endif - -# ifndef emacs -/* How many characters in the character set. */ -# define CHAR_SET_SIZE 256 - -# ifdef SYNTAX_TABLE - -extern char *re_syntax_table; - -# else /* not SYNTAX_TABLE */ - -static char re_syntax_table[CHAR_SET_SIZE]; - -static void init_syntax_once (void); - -static void -init_syntax_once (void) -{ - register int c; - static int done = 0; - - if (done) - return; - bzero (re_syntax_table, sizeof re_syntax_table); - - for (c = 0; c < CHAR_SET_SIZE; ++c) - if (ISALNUM (c)) - re_syntax_table[c] = Sword; - - re_syntax_table['_'] = Sword; - - done = 1; -} - -# endif /* not SYNTAX_TABLE */ - -# define SYNTAX(c) re_syntax_table[(unsigned char) (c)] - -# endif /* emacs */ - -/* Integer type for pointers. */ -# if !defined _LIBC && !defined HAVE_UINTPTR_T -typedef unsigned long int uintptr_t; -# endif - -/* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we - use `alloca' instead of `malloc'. This is because using malloc in - re_search* or re_match* could cause memory leaks when C-g is used in - Emacs; also, malloc is slower and causes storage fragmentation. On - the other hand, malloc is more portable, and easier to debug. - - Because we sometimes use alloca, some routines have to be macros, - not functions -- `alloca'-allocated space disappears at the end of the - function it is called in. */ - -# ifdef REGEX_MALLOC - -# define REGEX_ALLOCATE malloc -# define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize) -# define REGEX_FREE free - -# else /* not REGEX_MALLOC */ - -/* Emacs already defines alloca, sometimes. */ -# ifndef alloca - -/* Make alloca work the best possible way. */ -# ifdef __GNUC__ -# define alloca __builtin_alloca -# else /* not __GNUC__ */ -# if HAVE_ALLOCA_H -# include -# endif /* HAVE_ALLOCA_H */ -# endif /* not __GNUC__ */ - -# endif /* not alloca */ - -# define REGEX_ALLOCATE alloca - -/* Assumes a `char *destination' variable. */ -# define REGEX_REALLOCATE(source, osize, nsize) \ - (destination = (char *) alloca (nsize), \ - memcpy (destination, source, osize)) - -/* No need to do anything to free, after alloca. */ -# define REGEX_FREE(arg) ((void)0) /* Do nothing! But inhibit gcc warning. */ - -# endif /* not REGEX_MALLOC */ - -/* Define how to allocate the failure stack. */ - -# if defined REL_ALLOC && defined REGEX_MALLOC - -# define REGEX_ALLOCATE_STACK(size) \ - r_alloc (&failure_stack_ptr, (size)) -# define REGEX_REALLOCATE_STACK(source, osize, nsize) \ - r_re_alloc (&failure_stack_ptr, (nsize)) -# define REGEX_FREE_STACK(ptr) \ - r_alloc_free (&failure_stack_ptr) - -# else /* not using relocating allocator */ - -# ifdef REGEX_MALLOC - -# define REGEX_ALLOCATE_STACK malloc -# define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize) -# define REGEX_FREE_STACK free - -# else /* not REGEX_MALLOC */ - -# define REGEX_ALLOCATE_STACK alloca - -# define REGEX_REALLOCATE_STACK(source, osize, nsize) \ - REGEX_REALLOCATE (source, osize, nsize) -/* No need to explicitly free anything. */ -# define REGEX_FREE_STACK(arg) - -# endif /* not REGEX_MALLOC */ -# endif /* not using relocating allocator */ - - -/* True if `size1' is non-NULL and PTR is pointing anywhere inside - `string1' or just past its end. This works if PTR is NULL, which is - a good thing. */ -# define FIRST_STRING_P(ptr) \ - (size1 && string1 <= (ptr) && (ptr) <= string1 + size1) - -/* (Re)Allocate N items of type T using malloc, or fail. */ -# define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t))) -# define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t))) -# define RETALLOC_IF(addr, n, t) \ - if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t) -# define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t))) - -# define BYTEWIDTH 8 /* In bits. */ - -# define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) - -# undef MAX -# undef MIN -# define MAX(a, b) ((a) > (b) ? (a) : (b)) -# define MIN(a, b) ((a) < (b) ? (a) : (b)) - -typedef char boolean; -# define false 0 -# define true 1 - -static reg_errcode_t byte_regex_compile (const char *pattern, size_t size, - reg_syntax_t syntax, - struct re_pattern_buffer *bufp); - -static int byte_re_match_2_internal (struct re_pattern_buffer *bufp, - const char *string1, int size1, - const char *string2, int size2, - int pos, - struct re_registers *regs, - int stop); -static int byte_re_search_2 (struct re_pattern_buffer *bufp, - const char *string1, int size1, - const char *string2, int size2, - int startpos, int range, - struct re_registers *regs, int stop); -static int byte_re_compile_fastmap (struct re_pattern_buffer *bufp); - -#ifdef MBS_SUPPORT -static reg_errcode_t wcs_regex_compile (const char *pattern, size_t size, - reg_syntax_t syntax, - struct re_pattern_buffer *bufp); - - -static int wcs_re_match_2_internal (struct re_pattern_buffer *bufp, - const char *cstring1, int csize1, - const char *cstring2, int csize2, - int pos, - struct re_registers *regs, - int stop, - wchar_t *string1, int size1, - wchar_t *string2, int size2, - int *mbs_offset1, int *mbs_offset2); -static int wcs_re_search_2 (struct re_pattern_buffer *bufp, - const char *string1, int size1, - const char *string2, int size2, - int startpos, int range, - struct re_registers *regs, int stop); -static int wcs_re_compile_fastmap (struct re_pattern_buffer *bufp); -#endif - -/* These are the command codes that appear in compiled regular - expressions. Some opcodes are followed by argument bytes. A - command code can specify any interpretation whatsoever for its - arguments. Zero bytes may appear in the compiled regular expression. */ - -typedef enum -{ - no_op = 0, - - /* Succeed right away--no more backtracking. */ - succeed, - - /* Followed by one byte giving n, then by n literal bytes. */ - exactn, - -# ifdef MBS_SUPPORT - /* Same as exactn, but contains binary data. */ - exactn_bin, -# endif - - /* Matches any (more or less) character. */ - anychar, - - /* Matches any one char belonging to specified set. First - following byte is number of bitmap bytes. Then come bytes - for a bitmap saying which chars are in. Bits in each byte - are ordered low-bit-first. A character is in the set if its - bit is 1. A character too large to have a bit in the map is - automatically not in the set. */ - /* ifdef MBS_SUPPORT, following element is length of character - classes, length of collating symbols, length of equivalence - classes, length of character ranges, and length of characters. - Next, character class element, collating symbols elements, - equivalence class elements, range elements, and character - elements follow. - See regex_compile function. */ - charset, - - /* Same parameters as charset, but match any character that is - not one of those specified. */ - charset_not, - - /* Start remembering the text that is matched, for storing in a - register. Followed by one byte with the register number, in - the range 0 to one less than the pattern buffer's re_nsub - field. Then followed by one byte with the number of groups - inner to this one. (This last has to be part of the - start_memory only because we need it in the on_failure_jump - of re_match_2.) */ - start_memory, - - /* Stop remembering the text that is matched and store it in a - memory register. Followed by one byte with the register - number, in the range 0 to one less than `re_nsub' in the - pattern buffer, and one byte with the number of inner groups, - just like `start_memory'. (We need the number of inner - groups here because we don't have any easy way of finding the - corresponding start_memory when we're at a stop_memory.) */ - stop_memory, - - /* Match a duplicate of something remembered. Followed by one - byte containing the register number. */ - duplicate, - - /* Fail unless at beginning of line. */ - begline, - - /* Fail unless at end of line. */ - endline, - - /* Succeeds if at beginning of buffer (if emacs) or at beginning - of string to be matched (if not). */ - begbuf, - - /* Analogously, for end of buffer/string. */ - endbuf, - - /* Followed by two byte relative address to which to jump. */ - jump, - - /* Same as jump, but marks the end of an alternative. */ - jump_past_alt, - - /* Followed by two-byte relative address of place to resume at - in case of failure. */ - /* ifdef MBS_SUPPORT, the size of address is 1. */ - on_failure_jump, - - /* Like on_failure_jump, but pushes a placeholder instead of the - current string position when executed. */ - on_failure_keep_string_jump, - - /* Throw away latest failure point and then jump to following - two-byte relative address. */ - /* ifdef MBS_SUPPORT, the size of address is 1. */ - pop_failure_jump, - - /* Change to pop_failure_jump if know won't have to backtrack to - match; otherwise change to jump. This is used to jump - back to the beginning of a repeat. If what follows this jump - clearly won't match what the repeat does, such that we can be - sure that there is no use backtracking out of repetitions - already matched, then we change it to a pop_failure_jump. - Followed by two-byte address. */ - /* ifdef MBS_SUPPORT, the size of address is 1. */ - maybe_pop_jump, - - /* Jump to following two-byte address, and push a dummy failure - point. This failure point will be thrown away if an attempt - is made to use it for a failure. A `+' construct makes this - before the first repeat. Also used as an intermediary kind - of jump when compiling an alternative. */ - /* ifdef MBS_SUPPORT, the size of address is 1. */ - dummy_failure_jump, - - /* Push a dummy failure point and continue. Used at the end of - alternatives. */ - push_dummy_failure, - - /* Followed by two-byte relative address and two-byte number n. - After matching N times, jump to the address upon failure. */ - /* ifdef MBS_SUPPORT, the size of address is 1. */ - succeed_n, - - /* Followed by two-byte relative address, and two-byte number n. - Jump to the address N times, then fail. */ - /* ifdef MBS_SUPPORT, the size of address is 1. */ - jump_n, - - /* Set the following two-byte relative address to the - subsequent two-byte number. The address *includes* the two - bytes of number. */ - /* ifdef MBS_SUPPORT, the size of address is 1. */ - set_number_at, - - wordchar, /* Matches any word-constituent character. */ - notwordchar, /* Matches any char that is not a word-constituent. */ - - wordbeg, /* Succeeds if at word beginning. */ - wordend, /* Succeeds if at word end. */ - - wordbound, /* Succeeds if at a word boundary. */ - notwordbound /* Succeeds if not at a word boundary. */ - -# ifdef emacs - ,before_dot, /* Succeeds if before point. */ - at_dot, /* Succeeds if at point. */ - after_dot, /* Succeeds if after point. */ - - /* Matches any character whose syntax is specified. Followed by - a byte which contains a syntax code, e.g., Sword. */ - syntaxspec, - - /* Matches any character whose syntax is not that specified. */ - notsyntaxspec -# endif /* emacs */ -} re_opcode_t; -#endif /* not INSIDE_RECURSION */ - - -#ifdef BYTE -# define CHAR_T char -# define UCHAR_T unsigned char -# define COMPILED_BUFFER_VAR bufp->buffer -# define OFFSET_ADDRESS_SIZE 2 -# define PREFIX(name) byte_##name -# define ARG_PREFIX(name) name -# define PUT_CHAR(c) putchar (c) -#else -# ifdef WCHAR -# define CHAR_T wchar_t -# define UCHAR_T wchar_t -# define COMPILED_BUFFER_VAR wc_buffer -# define OFFSET_ADDRESS_SIZE 1 /* the size which STORE_NUMBER macro use */ -# define CHAR_CLASS_SIZE ((__alignof__(wctype_t)+sizeof(wctype_t))/sizeof(CHAR_T)+1) -# define PREFIX(name) wcs_##name -# define ARG_PREFIX(name) c##name -/* Should we use wide stream?? */ -# define PUT_CHAR(c) printf ("%C", c); -# define TRUE 1 -# define FALSE 0 -# else -# ifdef MBS_SUPPORT -# define WCHAR -# define INSIDE_RECURSION -# include "regex.c" -# undef INSIDE_RECURSION -# endif -# define BYTE -# define INSIDE_RECURSION -# include "regex.c" -# undef INSIDE_RECURSION -# endif -#endif - -#ifdef INSIDE_RECURSION -/* Common operations on the compiled pattern. */ - -/* Store NUMBER in two contiguous bytes starting at DESTINATION. */ -/* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */ - -# ifdef WCHAR -# define STORE_NUMBER(destination, number) \ - do { \ - *(destination) = (UCHAR_T)(number); \ - } while (0) -# else /* BYTE */ -# define STORE_NUMBER(destination, number) \ - do { \ - (destination)[0] = (number) & 0377; \ - (destination)[1] = (number) >> 8; \ - } while (0) -# endif /* WCHAR */ - -/* Same as STORE_NUMBER, except increment DESTINATION to - the byte after where the number is stored. Therefore, DESTINATION - must be an lvalue. */ -/* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */ - -# define STORE_NUMBER_AND_INCR(destination, number) \ - do { \ - STORE_NUMBER (destination, number); \ - (destination) += OFFSET_ADDRESS_SIZE; \ - } while (0) - -/* Put into DESTINATION a number stored in two contiguous bytes starting - at SOURCE. */ -/* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */ - -# ifdef WCHAR -# define EXTRACT_NUMBER(destination, source) \ - do { \ - (destination) = *(source); \ - } while (0) -# else /* BYTE */ -# define EXTRACT_NUMBER(destination, source) \ - do { \ - (destination) = *(source) & 0377; \ - (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \ - } while (0) -# endif - -# ifdef DEBUG -static void PREFIX(extract_number) (int *dest, UCHAR_T *source); -static void -PREFIX(extract_number) (int *dest, UCHAR_T *source) -{ -# ifdef WCHAR - *dest = *source; -# else /* BYTE */ - int temp = SIGN_EXTEND_CHAR (*(source + 1)); - *dest = *source & 0377; - *dest += temp << 8; -# endif -} - -# ifndef EXTRACT_MACROS /* To debug the macros. */ -# undef EXTRACT_NUMBER -# define EXTRACT_NUMBER(dest, src) PREFIX(extract_number) (&dest, src) -# endif /* not EXTRACT_MACROS */ - -# endif /* DEBUG */ - -/* Same as EXTRACT_NUMBER, except increment SOURCE to after the number. - SOURCE must be an lvalue. */ - -# define EXTRACT_NUMBER_AND_INCR(destination, source) \ - do { \ - EXTRACT_NUMBER (destination, source); \ - (source) += OFFSET_ADDRESS_SIZE; \ - } while (0) - -# ifdef DEBUG -static void PREFIX(extract_number_and_incr) (int *destination, - UCHAR_T **source); -static void -PREFIX(extract_number_and_incr) (int *destination, UCHAR_T **source) -{ - PREFIX(extract_number) (destination, *source); - *source += OFFSET_ADDRESS_SIZE; -} - -# ifndef EXTRACT_MACROS -# undef EXTRACT_NUMBER_AND_INCR -# define EXTRACT_NUMBER_AND_INCR(dest, src) \ - PREFIX(extract_number_and_incr) (&dest, &src) -# endif /* not EXTRACT_MACROS */ - -# endif /* DEBUG */ - - - -/* If DEBUG is defined, Regex prints many voluminous messages about what - it is doing (if the variable `debug' is nonzero). If linked with the - main program in `iregex.c', you can enter patterns and strings - interactively. And if linked with the main program in `main.c' and - the other test files, you can run the already-written tests. */ - -# ifdef DEBUG - -# ifndef DEFINED_ONCE - -/* We use standard I/O for debugging. */ -# include - -/* It is useful to test things that ``must'' be true when debugging. */ -# include - -static int debug; - -# define DEBUG_STATEMENT(e) e -# define DEBUG_PRINT1(x) if (debug) printf (x) -# define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2) -# define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3) -# define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4) -# endif /* not DEFINED_ONCE */ - -# define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \ - if (debug) PREFIX(print_partial_compiled_pattern) (s, e) -# define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) \ - if (debug) PREFIX(print_double_string) (w, s1, sz1, s2, sz2) - - -/* Print the fastmap in human-readable form. */ - -# ifndef DEFINED_ONCE -void -print_fastmap (char *fastmap) -{ - unsigned was_a_range = 0; - unsigned i = 0; - - while (i < (1 << BYTEWIDTH)) - { - if (fastmap[i++]) - { - was_a_range = 0; - putchar (i - 1); - while (i < (1 << BYTEWIDTH) && fastmap[i]) - { - was_a_range = 1; - i++; - } - if (was_a_range) - { - printf ("-"); - putchar (i - 1); - } - } - } - putchar ('\n'); -} -# endif /* not DEFINED_ONCE */ - - -/* Print a compiled pattern string in human-readable form, starting at - the START pointer into it and ending just before the pointer END. */ - -void -PREFIX(print_partial_compiled_pattern) (UCHAR_T *start, UCHAR_T *end) -{ - int mcnt, mcnt2; - UCHAR_T *p1; - UCHAR_T *p = start; - UCHAR_T *pend = end; - - if (start == NULL) - { - printf ("(null)\n"); - return; - } - - /* Loop over pattern commands. */ - while (p < pend) - { -# ifdef _LIBC - printf ("%td:\t", p - start); -# else - printf ("%ld:\t", (long int) (p - start)); -# endif - - switch ((re_opcode_t) *p++) - { - case no_op: - printf ("/no_op"); - break; - - case exactn: - mcnt = *p++; - printf ("/exactn/%d", mcnt); - do - { - putchar ('/'); - PUT_CHAR (*p++); - } - while (--mcnt); - break; - -# ifdef MBS_SUPPORT - case exactn_bin: - mcnt = *p++; - printf ("/exactn_bin/%d", mcnt); - do - { - printf("/%lx", (long int) *p++); - } - while (--mcnt); - break; -# endif /* MBS_SUPPORT */ - - case start_memory: - mcnt = *p++; - printf ("/start_memory/%d/%ld", mcnt, (long int) *p++); - break; - - case stop_memory: - mcnt = *p++; - printf ("/stop_memory/%d/%ld", mcnt, (long int) *p++); - break; - - case duplicate: - printf ("/duplicate/%ld", (long int) *p++); - break; - - case anychar: - printf ("/anychar"); - break; - - case charset: - case charset_not: - { -# ifdef WCHAR - int i, length; - wchar_t *workp = p; - printf ("/charset [%s", - (re_opcode_t) *(workp - 1) == charset_not ? "^" : ""); - p += 5; - length = *workp++; /* the length of char_classes */ - for (i=0 ; ibuffer; - - PREFIX(print_partial_compiled_pattern) (buffer, buffer - + bufp->used / sizeof(UCHAR_T)); - printf ("%ld bytes used/%ld bytes allocated.\n", - bufp->used, bufp->allocated); - - if (bufp->fastmap_accurate && bufp->fastmap) - { - printf ("fastmap: "); - print_fastmap (bufp->fastmap); - } - -# ifdef _LIBC - printf ("re_nsub: %Zd\t", bufp->re_nsub); -# else - printf ("re_nsub: %ld\t", (long int) bufp->re_nsub); -# endif - printf ("regs_alloc: %d\t", bufp->regs_allocated); - printf ("can_be_null: %d\t", bufp->can_be_null); - printf ("newline_anchor: %d\n", bufp->newline_anchor); - printf ("no_sub: %d\t", bufp->no_sub); - printf ("not_bol: %d\t", bufp->not_bol); - printf ("not_eol: %d\t", bufp->not_eol); - printf ("syntax: %lx\n", bufp->syntax); - /* Perhaps we should print the translate table? */ -} - - -void -PREFIX(print_double_string) (const CHAR_T *where, const CHAR_T *string1, - int size1, const CHAR_T *string2, int size2) -{ - int this_char; - - if (where == NULL) - printf ("(null)"); - else - { - int cnt; - - if (FIRST_STRING_P (where)) - { - for (this_char = where - string1; this_char < size1; this_char++) - PUT_CHAR (string1[this_char]); - - where = string2; - } - - cnt = 0; - for (this_char = where - string2; this_char < size2; this_char++) - { - PUT_CHAR (string2[this_char]); - if (++cnt > 100) - { - fputs ("...", stdout); - break; - } - } - } -} - -# ifndef DEFINED_ONCE -void -printchar (int c) -{ - putc (c, stderr); -} -# endif - -# else /* not DEBUG */ - -# ifndef DEFINED_ONCE -# undef assert -# define assert(e) - -# define DEBUG_STATEMENT(e) -# define DEBUG_PRINT1(x) -# define DEBUG_PRINT2(x1, x2) -# define DEBUG_PRINT3(x1, x2, x3) -# define DEBUG_PRINT4(x1, x2, x3, x4) -# endif /* not DEFINED_ONCE */ -# define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) -# define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) - -# endif /* not DEBUG */ - - - -# ifdef WCHAR -/* This convert a multibyte string to a wide character string. - And write their correspondances to offset_buffer(see below) - and write whether each wchar_t is binary data to is_binary. - This assume invalid multibyte sequences as binary data. - We assume offset_buffer and is_binary is already allocated - enough space. */ - -static size_t convert_mbs_to_wcs (CHAR_T *dest, const unsigned char* src, - size_t len, int *offset_buffer, - char *is_binary); -static size_t -convert_mbs_to_wcs (CHAR_T *dest, const unsigned char*src, size_t len, - int *offset_buffer, char *is_binary) - /* It hold correspondances between src(char string) and - dest(wchar_t string) for optimization. - e.g. src = "xxxyzz" - dest = {'X', 'Y', 'Z'} - (each "xxx", "y" and "zz" represent one multibyte character - corresponding to 'X', 'Y' and 'Z'.) - offset_buffer = {0, 0+3("xxx"), 0+3+1("y"), 0+3+1+2("zz")} - = {0, 3, 4, 6} - */ -{ - wchar_t *pdest = dest; - const unsigned char *psrc = src; - size_t wc_count = 0; - - mbstate_t mbs; - int i, consumed; - size_t mb_remain = len; - size_t mb_count = 0; - - /* Initialize the conversion state. */ - memset (&mbs, 0, sizeof (mbstate_t)); - - offset_buffer[0] = 0; - for( ; mb_remain > 0 ; ++wc_count, ++pdest, mb_remain -= consumed, - psrc += consumed) - { -#ifdef _LIBC - consumed = __mbrtowc (pdest, psrc, mb_remain, &mbs); -#else - consumed = mbrtowc (pdest, psrc, mb_remain, &mbs); -#endif - - if (consumed <= 0) - /* failed to convert. maybe src contains binary data. - So we consume 1 byte manualy. */ - { - *pdest = *psrc; - consumed = 1; - is_binary[wc_count] = TRUE; - } - else - is_binary[wc_count] = FALSE; - /* In sjis encoding, we use yen sign as escape character in - place of reverse solidus. So we convert 0x5c(yen sign in - sjis) to not 0xa5(yen sign in UCS2) but 0x5c(reverse - solidus in UCS2). */ - if (consumed == 1 && (int) *psrc == 0x5c && (int) *pdest == 0xa5) - *pdest = (wchar_t) *psrc; - - offset_buffer[wc_count + 1] = mb_count += consumed; - } - - /* Fill remain of the buffer with sentinel. */ - for (i = wc_count + 1 ; i <= len ; i++) - offset_buffer[i] = mb_count + 1; - - return wc_count; -} - -# endif /* WCHAR */ - -#else /* not INSIDE_RECURSION */ - -/* Set by `re_set_syntax' to the current regexp syntax to recognize. Can - also be assigned to arbitrarily: each pattern buffer stores its own - syntax, so it can be changed between regex compilations. */ -/* This has no initializer because initialized variables in Emacs - become read-only after dumping. */ -reg_syntax_t re_syntax_options; - - -/* Specify the precise syntax of regexps for compilation. This provides - for compatibility for various utilities which historically have - different, incompatible syntaxes. - - The argument SYNTAX is a bit mask comprised of the various bits - defined in regex.h. We return the old syntax. */ - -reg_syntax_t -re_set_syntax (reg_syntax_t syntax) -{ - reg_syntax_t ret = re_syntax_options; - - re_syntax_options = syntax; -# ifdef DEBUG - if (syntax & RE_DEBUG) - debug = 1; - else if (debug) /* was on but now is not */ - debug = 0; -# endif /* DEBUG */ - return ret; -} -# ifdef _LIBC -weak_alias (__re_set_syntax, re_set_syntax) -# endif - -/* This table gives an error message for each of the error codes listed - in regex.h. Obviously the order here has to be same as there. - POSIX doesn't require that we do anything for REG_NOERROR, - but why not be nice? */ - -static const char *re_error_msgid[] = - { - gettext_noop ("Success"), /* REG_NOERROR */ - gettext_noop ("No match"), /* REG_NOMATCH */ - gettext_noop ("Invalid regular expression"), /* REG_BADPAT */ - gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */ - gettext_noop ("Invalid character class name"), /* REG_ECTYPE */ - gettext_noop ("Trailing backslash"), /* REG_EESCAPE */ - gettext_noop ("Invalid back reference"), /* REG_ESUBREG */ - gettext_noop ("Unmatched [ or [^"), /* REG_EBRACK */ - gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */ - gettext_noop ("Unmatched \\{"), /* REG_EBRACE */ - gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */ - gettext_noop ("Invalid range end"), /* REG_ERANGE */ - gettext_noop ("Memory exhausted"), /* REG_ESPACE */ - gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */ - gettext_noop ("Premature end of regular expression"), /* REG_EEND */ - gettext_noop ("Regular expression too big"), /* REG_ESIZE */ - gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ - }; - -#endif /* INSIDE_RECURSION */ - -#ifndef DEFINED_ONCE -/* Avoiding alloca during matching, to placate r_alloc. */ - -/* Define MATCH_MAY_ALLOCATE unless we need to make sure that the - searching and matching functions should not call alloca. On some - systems, alloca is implemented in terms of malloc, and if we're - using the relocating allocator routines, then malloc could cause a - relocation, which might (if the strings being searched are in the - ralloc heap) shift the data out from underneath the regexp - routines. - - Here's another reason to avoid allocation: Emacs - processes input from X in a signal handler; processing X input may - call malloc; if input arrives while a matching routine is calling - malloc, then we're scrod. But Emacs can't just block input while - calling matching routines; then we don't notice interrupts when - they come in. So, Emacs blocks input around all regexp calls - except the matching calls, which it leaves unprotected, in the - faith that they will not malloc. */ - -/* Normally, this is fine. */ -# define MATCH_MAY_ALLOCATE - -/* When using GNU C, we are not REALLY using the C alloca, no matter - what config.h may say. So don't take precautions for it. */ -# ifdef __GNUC__ -# undef C_ALLOCA -# endif - -/* The match routines may not allocate if (1) they would do it with malloc - and (2) it's not safe for them to use malloc. - Note that if REL_ALLOC is defined, matching would not use malloc for the - failure stack, but we would still use it for the register vectors; - so REL_ALLOC should not affect this. */ -# if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs -# undef MATCH_MAY_ALLOCATE -# endif -#endif /* not DEFINED_ONCE */ - -#ifdef INSIDE_RECURSION -/* Failure stack declarations and macros; both re_compile_fastmap and - re_match_2 use a failure stack. These have to be macros because of - REGEX_ALLOCATE_STACK. */ - - -/* Number of failure points for which to initially allocate space - when matching. If this number is exceeded, we allocate more - space, so it is not a hard limit. */ -# ifndef INIT_FAILURE_ALLOC -# define INIT_FAILURE_ALLOC 5 -# endif - -/* Roughly the maximum number of failure points on the stack. Would be - exactly that if always used MAX_FAILURE_ITEMS items each time we failed. - This is a variable only so users of regex can assign to it; we never - change it ourselves. */ - -# ifdef INT_IS_16BIT - -# ifndef DEFINED_ONCE -# if defined MATCH_MAY_ALLOCATE -/* 4400 was enough to cause a crash on Alpha OSF/1, - whose default stack limit is 2mb. */ -long int re_max_failures = 4000; -# else -long int re_max_failures = 2000; -# endif -# endif - -union PREFIX(fail_stack_elt) -{ - UCHAR_T *pointer; - long int integer; -}; - -typedef union PREFIX(fail_stack_elt) PREFIX(fail_stack_elt_t); - -typedef struct -{ - PREFIX(fail_stack_elt_t) *stack; - unsigned long int size; - unsigned long int avail; /* Offset of next open position. */ -} PREFIX(fail_stack_type); - -# else /* not INT_IS_16BIT */ - -# ifndef DEFINED_ONCE -# if defined MATCH_MAY_ALLOCATE -/* 4400 was enough to cause a crash on Alpha OSF/1, - whose default stack limit is 2mb. */ -int re_max_failures = 4000; -# else -int re_max_failures = 2000; -# endif -# endif - -union PREFIX(fail_stack_elt) -{ - UCHAR_T *pointer; - int integer; -}; - -typedef union PREFIX(fail_stack_elt) PREFIX(fail_stack_elt_t); - -typedef struct -{ - PREFIX(fail_stack_elt_t) *stack; - unsigned size; - unsigned avail; /* Offset of next open position. */ -} PREFIX(fail_stack_type); - -# endif /* INT_IS_16BIT */ - -# ifndef DEFINED_ONCE -# define FAIL_STACK_EMPTY() (fail_stack.avail == 0) -# define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0) -# define FAIL_STACK_FULL() (fail_stack.avail == fail_stack.size) -# endif - - -/* Define macros to initialize and free the failure stack. - Do `return -2' if the alloc fails. */ - -# ifdef MATCH_MAY_ALLOCATE -# define INIT_FAIL_STACK() \ - do { \ - fail_stack.stack = (PREFIX(fail_stack_elt_t) *) \ - REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (PREFIX(fail_stack_elt_t))); \ - \ - if (fail_stack.stack == NULL) \ - return -2; \ - \ - fail_stack.size = INIT_FAILURE_ALLOC; \ - fail_stack.avail = 0; \ - } while (0) - -# define RESET_FAIL_STACK() REGEX_FREE_STACK (fail_stack.stack) -# else -# define INIT_FAIL_STACK() \ - do { \ - fail_stack.avail = 0; \ - } while (0) - -# define RESET_FAIL_STACK() -# endif - - -/* Double the size of FAIL_STACK, up to approximately `re_max_failures' items. - - Return 1 if succeeds, and 0 if either ran out of memory - allocating space for it or it was already too large. - - REGEX_REALLOCATE_STACK requires `destination' be declared. */ - -# define DOUBLE_FAIL_STACK(fail_stack) \ - ((fail_stack).size > (unsigned) (re_max_failures * MAX_FAILURE_ITEMS) \ - ? 0 \ - : ((fail_stack).stack = (PREFIX(fail_stack_elt_t) *) \ - REGEX_REALLOCATE_STACK ((fail_stack).stack, \ - (fail_stack).size * sizeof (PREFIX(fail_stack_elt_t)), \ - ((fail_stack).size << 1) * sizeof (PREFIX(fail_stack_elt_t))),\ - \ - (fail_stack).stack == NULL \ - ? 0 \ - : ((fail_stack).size <<= 1, \ - 1))) - - -/* Push pointer POINTER on FAIL_STACK. - Return 1 if was able to do so and 0 if ran out of memory allocating - space to do so. */ -# define PUSH_PATTERN_OP(POINTER, FAIL_STACK) \ - ((FAIL_STACK_FULL () \ - && !DOUBLE_FAIL_STACK (FAIL_STACK)) \ - ? 0 \ - : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER, \ - 1)) - -/* Push a pointer value onto the failure stack. - Assumes the variable `fail_stack'. Probably should only - be called from within `PUSH_FAILURE_POINT'. */ -# define PUSH_FAILURE_POINTER(item) \ - fail_stack.stack[fail_stack.avail++].pointer = (UCHAR_T *) (item) - -/* This pushes an integer-valued item onto the failure stack. - Assumes the variable `fail_stack'. Probably should only - be called from within `PUSH_FAILURE_POINT'. */ -# define PUSH_FAILURE_INT(item) \ - fail_stack.stack[fail_stack.avail++].integer = (item) - -/* Push a fail_stack_elt_t value onto the failure stack. - Assumes the variable `fail_stack'. Probably should only - be called from within `PUSH_FAILURE_POINT'. */ -# define PUSH_FAILURE_ELT(item) \ - fail_stack.stack[fail_stack.avail++] = (item) - -/* These three POP... operations complement the three PUSH... operations. - All assume that `fail_stack' is nonempty. */ -# define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer -# define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer -# define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail] - -/* Used to omit pushing failure point id's when we're not debugging. */ -# ifdef DEBUG -# define DEBUG_PUSH PUSH_FAILURE_INT -# define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT () -# else -# define DEBUG_PUSH(item) -# define DEBUG_POP(item_addr) -# endif - - -/* Push the information about the state we will need - if we ever fail back to it. - - Requires variables fail_stack, regstart, regend, reg_info, and - num_regs_pushed be declared. DOUBLE_FAIL_STACK requires `destination' - be declared. - - Does `return FAILURE_CODE' if runs out of memory. */ - -# define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code) \ - do { \ - char *destination; \ - /* Must be int, so when we don't save any registers, the arithmetic \ - of 0 + -1 isn't done as unsigned. */ \ - /* Can't be int, since there is not a shred of a guarantee that int \ - is wide enough to hold a value of something to which pointer can \ - be assigned */ \ - active_reg_t this_reg; \ - \ - DEBUG_STATEMENT (failure_id++); \ - DEBUG_STATEMENT (nfailure_points_pushed++); \ - DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id); \ - DEBUG_PRINT2 (" Before push, next avail: %d\n", (fail_stack).avail);\ - DEBUG_PRINT2 (" size: %d\n", (fail_stack).size);\ - \ - DEBUG_PRINT2 (" slots needed: %ld\n", NUM_FAILURE_ITEMS); \ - DEBUG_PRINT2 (" available: %d\n", REMAINING_AVAIL_SLOTS); \ - \ - /* Ensure we have enough space allocated for what we will push. */ \ - while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS) \ - { \ - if (!DOUBLE_FAIL_STACK (fail_stack)) \ - return failure_code; \ - \ - DEBUG_PRINT2 ("\n Doubled stack; size now: %d\n", \ - (fail_stack).size); \ - DEBUG_PRINT2 (" slots available: %d\n", REMAINING_AVAIL_SLOTS);\ - } \ - \ - /* Push the info, starting with the registers. */ \ - DEBUG_PRINT1 ("\n"); \ - \ - if (1) \ - for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \ - this_reg++) \ - { \ - DEBUG_PRINT2 (" Pushing reg: %lu\n", this_reg); \ - DEBUG_STATEMENT (num_regs_pushed++); \ - \ - DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \ - PUSH_FAILURE_POINTER (regstart[this_reg]); \ - \ - DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \ - PUSH_FAILURE_POINTER (regend[this_reg]); \ - \ - DEBUG_PRINT2 (" info: %p\n ", \ - reg_info[this_reg].word.pointer); \ - DEBUG_PRINT2 (" match_null=%d", \ - REG_MATCH_NULL_STRING_P (reg_info[this_reg])); \ - DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg])); \ - DEBUG_PRINT2 (" matched_something=%d", \ - MATCHED_SOMETHING (reg_info[this_reg])); \ - DEBUG_PRINT2 (" ever_matched=%d", \ - EVER_MATCHED_SOMETHING (reg_info[this_reg])); \ - DEBUG_PRINT1 ("\n"); \ - PUSH_FAILURE_ELT (reg_info[this_reg].word); \ - } \ - \ - DEBUG_PRINT2 (" Pushing low active reg: %ld\n", lowest_active_reg);\ - PUSH_FAILURE_INT (lowest_active_reg); \ - \ - DEBUG_PRINT2 (" Pushing high active reg: %ld\n", highest_active_reg);\ - PUSH_FAILURE_INT (highest_active_reg); \ - \ - DEBUG_PRINT2 (" Pushing pattern %p:\n", pattern_place); \ - DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend); \ - PUSH_FAILURE_POINTER (pattern_place); \ - \ - DEBUG_PRINT2 (" Pushing string %p: `", string_place); \ - DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, \ - size2); \ - DEBUG_PRINT1 ("'\n"); \ - PUSH_FAILURE_POINTER (string_place); \ - \ - DEBUG_PRINT2 (" Pushing failure id: %u\n", failure_id); \ - DEBUG_PUSH (failure_id); \ - } while (0) - -# ifndef DEFINED_ONCE -/* This is the number of items that are pushed and popped on the stack - for each register. */ -# define NUM_REG_ITEMS 3 - -/* Individual items aside from the registers. */ -# ifdef DEBUG -# define NUM_NONREG_ITEMS 5 /* Includes failure point id. */ -# else -# define NUM_NONREG_ITEMS 4 -# endif - -/* We push at most this many items on the stack. */ -/* We used to use (num_regs - 1), which is the number of registers - this regexp will save; but that was changed to 5 - to avoid stack overflow for a regexp with lots of parens. */ -# define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS) - -/* We actually push this many items. */ -# define NUM_FAILURE_ITEMS \ - (((0 \ - ? 0 : highest_active_reg - lowest_active_reg + 1) \ - * NUM_REG_ITEMS) \ - + NUM_NONREG_ITEMS) - -/* How many items can still be added to the stack without overflowing it. */ -# define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail) -# endif /* not DEFINED_ONCE */ - - -/* Pops what PUSH_FAIL_STACK pushes. - - We restore into the parameters, all of which should be lvalues: - STR -- the saved data position. - PAT -- the saved pattern position. - LOW_REG, HIGH_REG -- the highest and lowest active registers. - REGSTART, REGEND -- arrays of string positions. - REG_INFO -- array of information about each subexpression. - - Also assumes the variables `fail_stack' and (if debugging), `bufp', - `pend', `string1', `size1', `string2', and `size2'. */ -# define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\ -{ \ - DEBUG_STATEMENT (unsigned failure_id;) \ - active_reg_t this_reg; \ - const UCHAR_T *string_temp; \ - \ - assert (!FAIL_STACK_EMPTY ()); \ - \ - /* Remove failure points and point to how many regs pushed. */ \ - DEBUG_PRINT1 ("POP_FAILURE_POINT:\n"); \ - DEBUG_PRINT2 (" Before pop, next avail: %d\n", fail_stack.avail); \ - DEBUG_PRINT2 (" size: %d\n", fail_stack.size); \ - \ - assert (fail_stack.avail >= NUM_NONREG_ITEMS); \ - \ - DEBUG_POP (&failure_id); \ - DEBUG_PRINT2 (" Popping failure id: %u\n", failure_id); \ - \ - /* If the saved string location is NULL, it came from an \ - on_failure_keep_string_jump opcode, and we want to throw away the \ - saved NULL, thus retaining our current position in the string. */ \ - string_temp = POP_FAILURE_POINTER (); \ - if (string_temp != NULL) \ - str = (const CHAR_T *) string_temp; \ - \ - DEBUG_PRINT2 (" Popping string %p: `", str); \ - DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2); \ - DEBUG_PRINT1 ("'\n"); \ - \ - pat = (UCHAR_T *) POP_FAILURE_POINTER (); \ - DEBUG_PRINT2 (" Popping pattern %p:\n", pat); \ - DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend); \ - \ - /* Restore register info. */ \ - high_reg = (active_reg_t) POP_FAILURE_INT (); \ - DEBUG_PRINT2 (" Popping high active reg: %ld\n", high_reg); \ - \ - low_reg = (active_reg_t) POP_FAILURE_INT (); \ - DEBUG_PRINT2 (" Popping low active reg: %ld\n", low_reg); \ - \ - if (1) \ - for (this_reg = high_reg; this_reg >= low_reg; this_reg--) \ - { \ - DEBUG_PRINT2 (" Popping reg: %ld\n", this_reg); \ - \ - reg_info[this_reg].word = POP_FAILURE_ELT (); \ - DEBUG_PRINT2 (" info: %p\n", \ - reg_info[this_reg].word.pointer); \ - \ - regend[this_reg] = (const CHAR_T *) POP_FAILURE_POINTER (); \ - DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \ - \ - regstart[this_reg] = (const CHAR_T *) POP_FAILURE_POINTER (); \ - DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \ - } \ - else \ - { \ - for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \ - { \ - reg_info[this_reg].word.integer = 0; \ - regend[this_reg] = 0; \ - regstart[this_reg] = 0; \ - } \ - highest_active_reg = high_reg; \ - } \ - \ - set_regs_matched_done = 0; \ - DEBUG_STATEMENT (nfailure_points_popped++); \ -} /* POP_FAILURE_POINT */ - -/* Structure for per-register (a.k.a. per-group) information. - Other register information, such as the - starting and ending positions (which are addresses), and the list of - inner groups (which is a bits list) are maintained in separate - variables. - - We are making a (strictly speaking) nonportable assumption here: that - the compiler will pack our bit fields into something that fits into - the type of `word', i.e., is something that fits into one item on the - failure stack. */ - - -/* Declarations and macros for re_match_2. */ - -typedef union -{ - PREFIX(fail_stack_elt_t) word; - struct - { - /* This field is one if this group can match the empty string, - zero if not. If not yet determined, `MATCH_NULL_UNSET_VALUE'. */ -# define MATCH_NULL_UNSET_VALUE 3 - unsigned match_null_string_p : 2; - unsigned is_active : 1; - unsigned matched_something : 1; - unsigned ever_matched_something : 1; - } bits; -} PREFIX(register_info_type); - -# ifndef DEFINED_ONCE -# define REG_MATCH_NULL_STRING_P(R) ((R).bits.match_null_string_p) -# define IS_ACTIVE(R) ((R).bits.is_active) -# define MATCHED_SOMETHING(R) ((R).bits.matched_something) -# define EVER_MATCHED_SOMETHING(R) ((R).bits.ever_matched_something) - - -/* Call this when have matched a real character; it sets `matched' flags - for the subexpressions which we are currently inside. Also records - that those subexprs have matched. */ -# define SET_REGS_MATCHED() \ - do \ - { \ - if (!set_regs_matched_done) \ - { \ - active_reg_t r; \ - set_regs_matched_done = 1; \ - for (r = lowest_active_reg; r <= highest_active_reg; r++) \ - { \ - MATCHED_SOMETHING (reg_info[r]) \ - = EVER_MATCHED_SOMETHING (reg_info[r]) \ - = 1; \ - } \ - } \ - } \ - while (0) -# endif /* not DEFINED_ONCE */ - -/* Registers are set to a sentinel when they haven't yet matched. */ -static CHAR_T PREFIX(reg_unset_dummy); -# define REG_UNSET_VALUE (&PREFIX(reg_unset_dummy)) -# define REG_UNSET(e) ((e) == REG_UNSET_VALUE) - -/* Subroutine declarations and macros for regex_compile. */ -static void PREFIX(store_op1) (re_opcode_t op, UCHAR_T *loc, int arg); -static void PREFIX(store_op2) (re_opcode_t op, UCHAR_T *loc, - int arg1, int arg2); -static void PREFIX(insert_op1) (re_opcode_t op, UCHAR_T *loc, - int arg, UCHAR_T *end); -static void PREFIX(insert_op2) (re_opcode_t op, UCHAR_T *loc, - int arg1, int arg2, UCHAR_T *end); -static boolean PREFIX(at_begline_loc_p) (const CHAR_T *pattern, - const CHAR_T *p, - reg_syntax_t syntax); -static boolean PREFIX(at_endline_loc_p) (const CHAR_T *p, - const CHAR_T *pend, - reg_syntax_t syntax); -# ifdef WCHAR -static reg_errcode_t wcs_compile_range (CHAR_T range_start, - const CHAR_T **p_ptr, - const CHAR_T *pend, - char *translate, - reg_syntax_t syntax, - UCHAR_T *b, - CHAR_T *char_set); -static void insert_space (int num, CHAR_T *loc, CHAR_T *end); -# else /* BYTE */ -static reg_errcode_t byte_compile_range (unsigned int range_start, - const char **p_ptr, - const char *pend, - char *translate, - reg_syntax_t syntax, - unsigned char *b); -# endif /* WCHAR */ - -/* Fetch the next character in the uncompiled pattern---translating it - if necessary. Also cast from a signed character in the constant - string passed to us by the user to an unsigned char that we can use - as an array index (in, e.g., `translate'). */ -/* ifdef MBS_SUPPORT, we translate only if character <= 0xff, - because it is impossible to allocate 4GB array for some encodings - which have 4 byte character_set like UCS4. */ -# ifndef PATFETCH -# ifdef WCHAR -# define PATFETCH(c) \ - do {if (p == pend) return REG_EEND; \ - c = (UCHAR_T) *p++; \ - if (translate && (c <= 0xff)) c = (UCHAR_T) translate[c]; \ - } while (0) -# else /* BYTE */ -# define PATFETCH(c) \ - do {if (p == pend) return REG_EEND; \ - c = (unsigned char) *p++; \ - if (translate) c = (unsigned char) translate[c]; \ - } while (0) -# endif /* WCHAR */ -# endif - -/* Fetch the next character in the uncompiled pattern, with no - translation. */ -# define PATFETCH_RAW(c) \ - do {if (p == pend) return REG_EEND; \ - c = (UCHAR_T) *p++; \ - } while (0) - -/* Go backwards one character in the pattern. */ -# define PATUNFETCH p-- - - -/* If `translate' is non-null, return translate[D], else just D. We - cast the subscript to translate because some data is declared as - `char *', to avoid warnings when a string constant is passed. But - when we use a character as a subscript we must make it unsigned. */ -/* ifdef MBS_SUPPORT, we translate only if character <= 0xff, - because it is impossible to allocate 4GB array for some encodings - which have 4 byte character_set like UCS4. */ - -# ifndef TRANSLATE -# ifdef WCHAR -# define TRANSLATE(d) \ - ((translate && ((UCHAR_T) (d)) <= 0xff) \ - ? (char) translate[(unsigned char) (d)] : (d)) -# else /* BYTE */ -# define TRANSLATE(d) \ - (translate ? (char) translate[(unsigned char) (d)] : (char) (d)) -# endif /* WCHAR */ -# endif - - -/* Macros for outputting the compiled pattern into `buffer'. */ - -/* If the buffer isn't allocated when it comes in, use this. */ -# define INIT_BUF_SIZE (32 * sizeof(UCHAR_T)) - -/* Make sure we have at least N more bytes of space in buffer. */ -# ifdef WCHAR -# define GET_BUFFER_SPACE(n) \ - while (((unsigned long)b - (unsigned long)COMPILED_BUFFER_VAR \ - + (n)*sizeof(CHAR_T)) > bufp->allocated) \ - EXTEND_BUFFER () -# else /* BYTE */ -# define GET_BUFFER_SPACE(n) \ - while ((unsigned long) (b - bufp->buffer + (n)) > bufp->allocated) \ - EXTEND_BUFFER () -# endif /* WCHAR */ - -/* Make sure we have one more byte of buffer space and then add C to it. */ -# define BUF_PUSH(c) \ - do { \ - GET_BUFFER_SPACE (1); \ - *b++ = (UCHAR_T) (c); \ - } while (0) - - -/* Ensure we have two more bytes of buffer space and then append C1 and C2. */ -# define BUF_PUSH_2(c1, c2) \ - do { \ - GET_BUFFER_SPACE (2); \ - *b++ = (UCHAR_T) (c1); \ - *b++ = (UCHAR_T) (c2); \ - } while (0) - - -/* As with BUF_PUSH_2, except for three bytes. */ -# define BUF_PUSH_3(c1, c2, c3) \ - do { \ - GET_BUFFER_SPACE (3); \ - *b++ = (UCHAR_T) (c1); \ - *b++ = (UCHAR_T) (c2); \ - *b++ = (UCHAR_T) (c3); \ - } while (0) - -/* Store a jump with opcode OP at LOC to location TO. We store a - relative address offset by the three bytes the jump itself occupies. */ -# define STORE_JUMP(op, loc, to) \ - PREFIX(store_op1) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE))) - -/* Likewise, for a two-argument jump. */ -# define STORE_JUMP2(op, loc, to, arg) \ - PREFIX(store_op2) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)), arg) - -/* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */ -# define INSERT_JUMP(op, loc, to) \ - PREFIX(insert_op1) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)), b) - -/* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */ -# define INSERT_JUMP2(op, loc, to, arg) \ - PREFIX(insert_op2) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)),\ - arg, b) - -/* This is not an arbitrary limit: the arguments which represent offsets - into the pattern are two bytes long. So if 2^16 bytes turns out to - be too small, many things would have to change. */ -/* Any other compiler which, like MSC, has allocation limit below 2^16 - bytes will have to use approach similar to what was done below for - MSC and drop MAX_BUF_SIZE a bit. Otherwise you may end up - reallocating to 0 bytes. Such thing is not going to work too well. - You have been warned!! */ -# ifndef DEFINED_ONCE -# if defined _MSC_VER && !defined WIN32 -/* Microsoft C 16-bit versions limit malloc to approx 65512 bytes. - The REALLOC define eliminates a flurry of conversion warnings, - but is not required. */ -# define MAX_BUF_SIZE 65500L -# define REALLOC(p,s) realloc ((p), (size_t) (s)) -# else -# define MAX_BUF_SIZE (1L << 16) -# define REALLOC(p,s) realloc ((p), (s)) -# endif - -/* Extend the buffer by twice its current size via realloc and - reset the pointers that pointed into the old block to point to the - correct places in the new one. If extending the buffer results in it - being larger than MAX_BUF_SIZE, then flag memory exhausted. */ -# if __BOUNDED_POINTERS__ -# define SET_HIGH_BOUND(P) (__ptrhigh (P) = __ptrlow (P) + bufp->allocated) -# define MOVE_BUFFER_POINTER(P) \ - (__ptrlow (P) += incr, SET_HIGH_BOUND (P), __ptrvalue (P) += incr) -# define ELSE_EXTEND_BUFFER_HIGH_BOUND \ - else \ - { \ - SET_HIGH_BOUND (b); \ - SET_HIGH_BOUND (begalt); \ - if (fixup_alt_jump) \ - SET_HIGH_BOUND (fixup_alt_jump); \ - if (laststart) \ - SET_HIGH_BOUND (laststart); \ - if (pending_exact) \ - SET_HIGH_BOUND (pending_exact); \ - } -# else -# define MOVE_BUFFER_POINTER(P) (P) += incr -# define ELSE_EXTEND_BUFFER_HIGH_BOUND -# endif -# endif /* not DEFINED_ONCE */ - -# ifdef WCHAR -# define EXTEND_BUFFER() \ - do { \ - UCHAR_T *old_buffer = COMPILED_BUFFER_VAR; \ - int wchar_count; \ - if (bufp->allocated + sizeof(UCHAR_T) > MAX_BUF_SIZE) \ - return REG_ESIZE; \ - bufp->allocated <<= 1; \ - if (bufp->allocated > MAX_BUF_SIZE) \ - bufp->allocated = MAX_BUF_SIZE; \ - /* How many characters the new buffer can have? */ \ - wchar_count = bufp->allocated / sizeof(UCHAR_T); \ - if (wchar_count == 0) wchar_count = 1; \ - /* Truncate the buffer to CHAR_T align. */ \ - bufp->allocated = wchar_count * sizeof(UCHAR_T); \ - RETALLOC (COMPILED_BUFFER_VAR, wchar_count, UCHAR_T); \ - bufp->buffer = (char*)COMPILED_BUFFER_VAR; \ - if (COMPILED_BUFFER_VAR == NULL) \ - return REG_ESPACE; \ - /* If the buffer moved, move all the pointers into it. */ \ - if (old_buffer != COMPILED_BUFFER_VAR) \ - { \ - int incr = COMPILED_BUFFER_VAR - old_buffer; \ - MOVE_BUFFER_POINTER (b); \ - MOVE_BUFFER_POINTER (begalt); \ - if (fixup_alt_jump) \ - MOVE_BUFFER_POINTER (fixup_alt_jump); \ - if (laststart) \ - MOVE_BUFFER_POINTER (laststart); \ - if (pending_exact) \ - MOVE_BUFFER_POINTER (pending_exact); \ - } \ - ELSE_EXTEND_BUFFER_HIGH_BOUND \ - } while (0) -# else /* BYTE */ -# define EXTEND_BUFFER() \ - do { \ - UCHAR_T *old_buffer = COMPILED_BUFFER_VAR; \ - if (bufp->allocated == MAX_BUF_SIZE) \ - return REG_ESIZE; \ - bufp->allocated <<= 1; \ - if (bufp->allocated > MAX_BUF_SIZE) \ - bufp->allocated = MAX_BUF_SIZE; \ - bufp->buffer = (UCHAR_T *) REALLOC (COMPILED_BUFFER_VAR, \ - bufp->allocated); \ - if (COMPILED_BUFFER_VAR == NULL) \ - return REG_ESPACE; \ - /* If the buffer moved, move all the pointers into it. */ \ - if (old_buffer != COMPILED_BUFFER_VAR) \ - { \ - int incr = COMPILED_BUFFER_VAR - old_buffer; \ - MOVE_BUFFER_POINTER (b); \ - MOVE_BUFFER_POINTER (begalt); \ - if (fixup_alt_jump) \ - MOVE_BUFFER_POINTER (fixup_alt_jump); \ - if (laststart) \ - MOVE_BUFFER_POINTER (laststart); \ - if (pending_exact) \ - MOVE_BUFFER_POINTER (pending_exact); \ - } \ - ELSE_EXTEND_BUFFER_HIGH_BOUND \ - } while (0) -# endif /* WCHAR */ - -# ifndef DEFINED_ONCE -/* Since we have one byte reserved for the register number argument to - {start,stop}_memory, the maximum number of groups we can report - things about is what fits in that byte. */ -# define MAX_REGNUM 255 - -/* But patterns can have more than `MAX_REGNUM' registers. We just - ignore the excess. */ -typedef unsigned regnum_t; - - -/* Macros for the compile stack. */ - -/* Since offsets can go either forwards or backwards, this type needs to - be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1. */ -/* int may be not enough when sizeof(int) == 2. */ -typedef long pattern_offset_t; - -typedef struct -{ - pattern_offset_t begalt_offset; - pattern_offset_t fixup_alt_jump; - pattern_offset_t inner_group_offset; - pattern_offset_t laststart_offset; - regnum_t regnum; -} compile_stack_elt_t; - - -typedef struct -{ - compile_stack_elt_t *stack; - unsigned size; - unsigned avail; /* Offset of next open position. */ -} compile_stack_type; - - -# define INIT_COMPILE_STACK_SIZE 32 - -# define COMPILE_STACK_EMPTY (compile_stack.avail == 0) -# define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size) - -/* The next available element. */ -# define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail]) - -# endif /* not DEFINED_ONCE */ - -/* Set the bit for character C in a list. */ -# ifndef DEFINED_ONCE -# define SET_LIST_BIT(c) \ - (b[((unsigned char) (c)) / BYTEWIDTH] \ - |= 1 << (((unsigned char) c) % BYTEWIDTH)) -# endif /* DEFINED_ONCE */ - -/* Get the next unsigned number in the uncompiled pattern. */ -# define GET_UNSIGNED_NUMBER(num) \ - { \ - while (p != pend) \ - { \ - PATFETCH (c); \ - if (c < '0' || c > '9') \ - break; \ - if (num <= RE_DUP_MAX) \ - { \ - if (num < 0) \ - num = 0; \ - num = num * 10 + c - '0'; \ - } \ - } \ - } - -# ifndef DEFINED_ONCE -# if defined _LIBC || WIDE_CHAR_SUPPORT -/* The GNU C library provides support for user-defined character classes - and the functions from ISO C amendement 1. */ -# ifdef CHARCLASS_NAME_MAX -# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX -# else -/* This shouldn't happen but some implementation might still have this - problem. Use a reasonable default value. */ -# define CHAR_CLASS_MAX_LENGTH 256 -# endif - -# ifdef _LIBC -# define IS_CHAR_CLASS(string) __wctype (string) -# else -# define IS_CHAR_CLASS(string) wctype (string) -# endif -# else -# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ - -# define IS_CHAR_CLASS(string) \ - (STREQ (string, "alpha") || STREQ (string, "upper") \ - || STREQ (string, "lower") || STREQ (string, "digit") \ - || STREQ (string, "alnum") || STREQ (string, "xdigit") \ - || STREQ (string, "space") || STREQ (string, "print") \ - || STREQ (string, "punct") || STREQ (string, "graph") \ - || STREQ (string, "cntrl") || STREQ (string, "blank")) -# endif -# endif /* DEFINED_ONCE */ - -# ifndef MATCH_MAY_ALLOCATE - -/* If we cannot allocate large objects within re_match_2_internal, - we make the fail stack and register vectors global. - The fail stack, we grow to the maximum size when a regexp - is compiled. - The register vectors, we adjust in size each time we - compile a regexp, according to the number of registers it needs. */ - -static PREFIX(fail_stack_type) fail_stack; - -/* Size with which the following vectors are currently allocated. - That is so we can make them bigger as needed, - but never make them smaller. */ -# ifdef DEFINED_ONCE -static int regs_allocated_size; - -static const char ** regstart, ** regend; -static const char ** old_regstart, ** old_regend; -static const char **best_regstart, **best_regend; -static const char **reg_dummy; -# endif /* DEFINED_ONCE */ - -static PREFIX(register_info_type) *PREFIX(reg_info); -static PREFIX(register_info_type) *PREFIX(reg_info_dummy); - -/* Make the register vectors big enough for NUM_REGS registers, - but don't make them smaller. */ - -static void -PREFIX(regex_grow_registers) (int num_regs) -{ - if (num_regs > regs_allocated_size) - { - RETALLOC_IF (regstart, num_regs, const char *); - RETALLOC_IF (regend, num_regs, const char *); - RETALLOC_IF (old_regstart, num_regs, const char *); - RETALLOC_IF (old_regend, num_regs, const char *); - RETALLOC_IF (best_regstart, num_regs, const char *); - RETALLOC_IF (best_regend, num_regs, const char *); - RETALLOC_IF (PREFIX(reg_info), num_regs, PREFIX(register_info_type)); - RETALLOC_IF (reg_dummy, num_regs, const char *); - RETALLOC_IF (PREFIX(reg_info_dummy), num_regs, PREFIX(register_info_type)); - - regs_allocated_size = num_regs; - } -} - -# endif /* not MATCH_MAY_ALLOCATE */ - -# ifndef DEFINED_ONCE -static boolean group_in_compile_stack (compile_stack_type compile_stack, - regnum_t regnum); -# endif /* not DEFINED_ONCE */ - -/* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX. - Returns one of error codes defined in `regex.h', or zero for success. - - Assumes the `allocated' (and perhaps `buffer') and `translate' - fields are set in BUFP on entry. - - If it succeeds, results are put in BUFP (if it returns an error, the - contents of BUFP are undefined): - `buffer' is the compiled pattern; - `syntax' is set to SYNTAX; - `used' is set to the length of the compiled pattern; - `fastmap_accurate' is zero; - `re_nsub' is the number of subexpressions in PATTERN; - `not_bol' and `not_eol' are zero; - - The `fastmap' and `newline_anchor' fields are neither - examined nor set. */ - -/* Return, freeing storage we allocated. */ -# ifdef WCHAR -# define FREE_STACK_RETURN(value) \ - return (free(pattern), free(mbs_offset), free(is_binary), free (compile_stack.stack), value) -# else -# define FREE_STACK_RETURN(value) \ - return (free (compile_stack.stack), value) -# endif /* WCHAR */ - -static reg_errcode_t -PREFIX(regex_compile) (const char *ARG_PREFIX(pattern), - size_t ARG_PREFIX(size), reg_syntax_t syntax, - struct re_pattern_buffer *bufp) -{ - /* We fetch characters from PATTERN here. Even though PATTERN is - `char *' (i.e., signed), we declare these variables as unsigned, so - they can be reliably used as array indices. */ - register UCHAR_T c, c1; - -#ifdef WCHAR - /* A temporary space to keep wchar_t pattern and compiled pattern. */ - CHAR_T *pattern, *COMPILED_BUFFER_VAR; - size_t size; - /* offset buffer for optimization. See convert_mbs_to_wc. */ - int *mbs_offset = NULL; - /* It hold whether each wchar_t is binary data or not. */ - char *is_binary = NULL; - /* A flag whether exactn is handling binary data or not. */ - char is_exactn_bin = FALSE; -#endif /* WCHAR */ - - /* A random temporary spot in PATTERN. */ - const CHAR_T *p1; - - /* Points to the end of the buffer, where we should append. */ - register UCHAR_T *b; - - /* Keeps track of unclosed groups. */ - compile_stack_type compile_stack; - - /* Points to the current (ending) position in the pattern. */ -#ifdef WCHAR - const CHAR_T *p; - const CHAR_T *pend; -#else /* BYTE */ - const CHAR_T *p = pattern; - const CHAR_T *pend = pattern + size; -#endif /* WCHAR */ - - /* How to translate the characters in the pattern. */ - RE_TRANSLATE_TYPE translate = bufp->translate; - - /* Address of the count-byte of the most recently inserted `exactn' - command. This makes it possible to tell if a new exact-match - character can be added to that command or if the character requires - a new `exactn' command. */ - UCHAR_T *pending_exact = 0; - - /* Address of start of the most recently finished expression. - This tells, e.g., postfix * where to find the start of its - operand. Reset at the beginning of groups and alternatives. */ - UCHAR_T *laststart = 0; - - /* Address of beginning of regexp, or inside of last group. */ - UCHAR_T *begalt; - - /* Address of the place where a forward jump should go to the end of - the containing expression. Each alternative of an `or' -- except the - last -- ends with a forward jump of this sort. */ - UCHAR_T *fixup_alt_jump = 0; - - /* Counts open-groups as they are encountered. Remembered for the - matching close-group on the compile stack, so the same register - number is put in the stop_memory as the start_memory. */ - regnum_t regnum = 0; - -#ifdef WCHAR - /* Initialize the wchar_t PATTERN and offset_buffer. */ - p = pend = pattern = TALLOC(csize + 1, CHAR_T); - mbs_offset = TALLOC(csize + 1, int); - is_binary = TALLOC(csize + 1, char); - if (pattern == NULL || mbs_offset == NULL || is_binary == NULL) - { - free(pattern); - free(mbs_offset); - free(is_binary); - return REG_ESPACE; - } - pattern[csize] = L'\0'; /* sentinel */ - size = convert_mbs_to_wcs(pattern, cpattern, csize, mbs_offset, is_binary); - pend = p + size; - if (size < 0) - { - free(pattern); - free(mbs_offset); - free(is_binary); - return REG_BADPAT; - } -#endif - -#ifdef DEBUG - DEBUG_PRINT1 ("\nCompiling pattern: "); - if (debug) - { - unsigned debug_count; - - for (debug_count = 0; debug_count < size; debug_count++) - PUT_CHAR (pattern[debug_count]); - putchar ('\n'); - } -#endif /* DEBUG */ - - /* Initialize the compile stack. */ - compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t); - if (compile_stack.stack == NULL) - { -#ifdef WCHAR - free(pattern); - free(mbs_offset); - free(is_binary); -#endif - return REG_ESPACE; - } - - compile_stack.size = INIT_COMPILE_STACK_SIZE; - compile_stack.avail = 0; - - /* Initialize the pattern buffer. */ - bufp->syntax = syntax; - bufp->fastmap_accurate = 0; - bufp->not_bol = bufp->not_eol = 0; - - /* Set `used' to zero, so that if we return an error, the pattern - printer (for debugging) will think there's no pattern. We reset it - at the end. */ - bufp->used = 0; - - /* Always count groups, whether or not bufp->no_sub is set. */ - bufp->re_nsub = 0; - -#if !defined emacs && !defined SYNTAX_TABLE - /* Initialize the syntax table. */ - init_syntax_once (); -#endif - - if (bufp->allocated == 0) - { - if (bufp->buffer) - { /* If zero allocated, but buffer is non-null, try to realloc - enough space. This loses if buffer's address is bogus, but - that is the user's responsibility. */ -#ifdef WCHAR - /* Free bufp->buffer and allocate an array for wchar_t pattern - buffer. */ - free(bufp->buffer); - COMPILED_BUFFER_VAR = TALLOC (INIT_BUF_SIZE/sizeof(UCHAR_T), - UCHAR_T); -#else - RETALLOC (COMPILED_BUFFER_VAR, INIT_BUF_SIZE, UCHAR_T); -#endif /* WCHAR */ - } - else - { /* Caller did not allocate a buffer. Do it for them. */ - COMPILED_BUFFER_VAR = TALLOC (INIT_BUF_SIZE / sizeof(UCHAR_T), - UCHAR_T); - } - - if (!COMPILED_BUFFER_VAR) FREE_STACK_RETURN (REG_ESPACE); -#ifdef WCHAR - bufp->buffer = (char*)COMPILED_BUFFER_VAR; -#endif /* WCHAR */ - bufp->allocated = INIT_BUF_SIZE; - } -#ifdef WCHAR - else - COMPILED_BUFFER_VAR = (UCHAR_T*) bufp->buffer; -#endif - - begalt = b = COMPILED_BUFFER_VAR; - - /* Loop through the uncompiled pattern until we're at the end. */ - while (p != pend) - { - PATFETCH (c); - - switch (c) - { - case '^': - { - if ( /* If at start of pattern, it's an operator. */ - p == pattern + 1 - /* If context independent, it's an operator. */ - || syntax & RE_CONTEXT_INDEP_ANCHORS - /* Otherwise, depends on what's come before. */ - || PREFIX(at_begline_loc_p) (pattern, p, syntax)) - BUF_PUSH (begline); - else - goto normal_char; - } - break; - - - case '$': - { - if ( /* If at end of pattern, it's an operator. */ - p == pend - /* If context independent, it's an operator. */ - || syntax & RE_CONTEXT_INDEP_ANCHORS - /* Otherwise, depends on what's next. */ - || PREFIX(at_endline_loc_p) (p, pend, syntax)) - BUF_PUSH (endline); - else - goto normal_char; - } - break; - - - case '+': - case '?': - if ((syntax & RE_BK_PLUS_QM) - || (syntax & RE_LIMITED_OPS)) - goto normal_char; - handle_plus: - case '*': - /* If there is no previous pattern... */ - if (!laststart) - { - if (syntax & RE_CONTEXT_INVALID_OPS) - FREE_STACK_RETURN (REG_BADRPT); - else if (!(syntax & RE_CONTEXT_INDEP_OPS)) - goto normal_char; - } - - { - /* Are we optimizing this jump? */ - boolean keep_string_p = false; - - /* 1 means zero (many) matches is allowed. */ - char zero_times_ok = 0, many_times_ok = 0; - - /* If there is a sequence of repetition chars, collapse it - down to just one (the right one). We can't combine - interval operators with these because of, e.g., `a{2}*', - which should only match an even number of `a's. */ - - for (;;) - { - zero_times_ok |= c != '+'; - many_times_ok |= c != '?'; - - if (p == pend) - break; - - PATFETCH (c); - - if (c == '*' - || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?'))) - ; - - else if (syntax & RE_BK_PLUS_QM && c == '\\') - { - if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); - - PATFETCH (c1); - if (!(c1 == '+' || c1 == '?')) - { - PATUNFETCH; - PATUNFETCH; - break; - } - - c = c1; - } - else - { - PATUNFETCH; - break; - } - - /* If we get here, we found another repeat character. */ - } - - /* Star, etc. applied to an empty pattern is equivalent - to an empty pattern. */ - if (!laststart) - break; - - /* Now we know whether or not zero matches is allowed - and also whether or not two or more matches is allowed. */ - if (many_times_ok) - { /* More than one repetition is allowed, so put in at the - end a backward relative jump from `b' to before the next - jump we're going to put in below (which jumps from - laststart to after this jump). - - But if we are at the `*' in the exact sequence `.*\n', - insert an unconditional jump backwards to the ., - instead of the beginning of the loop. This way we only - push a failure point once, instead of every time - through the loop. */ - assert (p - 1 > pattern); - - /* Allocate the space for the jump. */ - GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); - - /* We know we are not at the first character of the pattern, - because laststart was nonzero. And we've already - incremented `p', by the way, to be the character after - the `*'. Do we have to do something analogous here - for null bytes, because of RE_DOT_NOT_NULL? */ - if (TRANSLATE (*(p - 2)) == TRANSLATE ('.') - && zero_times_ok - && p < pend && TRANSLATE (*p) == TRANSLATE ('\n') - && !(syntax & RE_DOT_NEWLINE)) - { /* We have .*\n. */ - STORE_JUMP (jump, b, laststart); - keep_string_p = true; - } - else - /* Anything else. */ - STORE_JUMP (maybe_pop_jump, b, laststart - - (1 + OFFSET_ADDRESS_SIZE)); - - /* We've added more stuff to the buffer. */ - b += 1 + OFFSET_ADDRESS_SIZE; - } - - /* On failure, jump from laststart to b + 3, which will be the - end of the buffer after this jump is inserted. */ - /* ifdef WCHAR, 'b + 1 + OFFSET_ADDRESS_SIZE' instead of - 'b + 3'. */ - GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); - INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump - : on_failure_jump, - laststart, b + 1 + OFFSET_ADDRESS_SIZE); - pending_exact = 0; - b += 1 + OFFSET_ADDRESS_SIZE; - - if (!zero_times_ok) - { - /* At least one repetition is required, so insert a - `dummy_failure_jump' before the initial - `on_failure_jump' instruction of the loop. This - effects a skip over that instruction the first time - we hit that loop. */ - GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); - INSERT_JUMP (dummy_failure_jump, laststart, laststart + - 2 + 2 * OFFSET_ADDRESS_SIZE); - b += 1 + OFFSET_ADDRESS_SIZE; - } - } - break; - - - case '.': - laststart = b; - BUF_PUSH (anychar); - break; - - - case '[': - { - boolean had_char_class = false; -#ifdef WCHAR - CHAR_T range_start = 0xffffffff; -#else - unsigned int range_start = 0xffffffff; -#endif - if (p == pend) FREE_STACK_RETURN (REG_EBRACK); - -#ifdef WCHAR - /* We assume a charset(_not) structure as a wchar_t array. - charset[0] = (re_opcode_t) charset(_not) - charset[1] = l (= length of char_classes) - charset[2] = m (= length of collating_symbols) - charset[3] = n (= length of equivalence_classes) - charset[4] = o (= length of char_ranges) - charset[5] = p (= length of chars) - - charset[6] = char_class (wctype_t) - charset[6+CHAR_CLASS_SIZE] = char_class (wctype_t) - ... - charset[l+5] = char_class (wctype_t) - - charset[l+6] = collating_symbol (wchar_t) - ... - charset[l+m+5] = collating_symbol (wchar_t) - ifdef _LIBC we use the index if - _NL_COLLATE_SYMB_EXTRAMB instead of - wchar_t string. - - charset[l+m+6] = equivalence_classes (wchar_t) - ... - charset[l+m+n+5] = equivalence_classes (wchar_t) - ifdef _LIBC we use the index in - _NL_COLLATE_WEIGHT instead of - wchar_t string. - - charset[l+m+n+6] = range_start - charset[l+m+n+7] = range_end - ... - charset[l+m+n+2o+4] = range_start - charset[l+m+n+2o+5] = range_end - ifdef _LIBC we use the value looked up - in _NL_COLLATE_COLLSEQ instead of - wchar_t character. - - charset[l+m+n+2o+6] = char - ... - charset[l+m+n+2o+p+5] = char - - */ - - /* We need at least 6 spaces: the opcode, the length of - char_classes, the length of collating_symbols, the length of - equivalence_classes, the length of char_ranges, the length of - chars. */ - GET_BUFFER_SPACE (6); - - /* Save b as laststart. And We use laststart as the pointer - to the first element of the charset here. - In other words, laststart[i] indicates charset[i]. */ - laststart = b; - - /* We test `*p == '^' twice, instead of using an if - statement, so we only need one BUF_PUSH. */ - BUF_PUSH (*p == '^' ? charset_not : charset); - if (*p == '^') - p++; - - /* Push the length of char_classes, the length of - collating_symbols, the length of equivalence_classes, the - length of char_ranges and the length of chars. */ - BUF_PUSH_3 (0, 0, 0); - BUF_PUSH_2 (0, 0); - - /* Remember the first position in the bracket expression. */ - p1 = p; - - /* charset_not matches newline according to a syntax bit. */ - if ((re_opcode_t) b[-6] == charset_not - && (syntax & RE_HAT_LISTS_NOT_NEWLINE)) - { - BUF_PUSH('\n'); - laststart[5]++; /* Update the length of characters */ - } - - /* Read in characters and ranges, setting map bits. */ - for (;;) - { - if (p == pend) FREE_STACK_RETURN (REG_EBRACK); - - PATFETCH (c); - - /* \ might escape characters inside [...] and [^...]. */ - if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\') - { - if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); - - PATFETCH (c1); - BUF_PUSH(c1); - laststart[5]++; /* Update the length of chars */ - range_start = c1; - continue; - } - - /* Could be the end of the bracket expression. If it's - not (i.e., when the bracket expression is `[]' so - far), the ']' character bit gets set way below. */ - if (c == ']' && p != p1 + 1) - break; - - /* Look ahead to see if it's a range when the last thing - was a character class. */ - if (had_char_class && c == '-' && *p != ']') - FREE_STACK_RETURN (REG_ERANGE); - - /* Look ahead to see if it's a range when the last thing - was a character: if this is a hyphen not at the - beginning or the end of a list, then it's the range - operator. */ - if (c == '-' - && !(p - 2 >= pattern && p[-2] == '[') - && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^') - && *p != ']') - { - reg_errcode_t ret; - /* Allocate the space for range_start and range_end. */ - GET_BUFFER_SPACE (2); - /* Update the pointer to indicate end of buffer. */ - b += 2; - ret = wcs_compile_range (range_start, &p, pend, translate, - syntax, b, laststart); - if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); - range_start = 0xffffffff; - } - else if (p[0] == '-' && p[1] != ']') - { /* This handles ranges made up of characters only. */ - reg_errcode_t ret; - - /* Move past the `-'. */ - PATFETCH (c1); - /* Allocate the space for range_start and range_end. */ - GET_BUFFER_SPACE (2); - /* Update the pointer to indicate end of buffer. */ - b += 2; - ret = wcs_compile_range (c, &p, pend, translate, syntax, b, - laststart); - if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); - range_start = 0xffffffff; - } - - /* See if we're at the beginning of a possible character - class. */ - else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':') - { /* Leave room for the null. */ - char str[CHAR_CLASS_MAX_LENGTH + 1]; - - PATFETCH (c); - c1 = 0; - - /* If pattern is `[[:'. */ - if (p == pend) FREE_STACK_RETURN (REG_EBRACK); - - for (;;) - { - PATFETCH (c); - if ((c == ':' && *p == ']') || p == pend) - break; - if (c1 < CHAR_CLASS_MAX_LENGTH) - str[c1++] = c; - else - /* This is in any case an invalid class name. */ - str[0] = '\0'; - } - str[c1] = '\0'; - - /* If isn't a word bracketed by `[:' and `:]': - undo the ending character, the letters, and leave - the leading `:' and `[' (but store them as character). */ - if (c == ':' && *p == ']') - { - wctype_t wt; - uintptr_t alignedp; - - /* Query the character class as wctype_t. */ - wt = IS_CHAR_CLASS (str); - if (wt == 0) - FREE_STACK_RETURN (REG_ECTYPE); - - /* Throw away the ] at the end of the character - class. */ - PATFETCH (c); - - if (p == pend) FREE_STACK_RETURN (REG_EBRACK); - - /* Allocate the space for character class. */ - GET_BUFFER_SPACE(CHAR_CLASS_SIZE); - /* Update the pointer to indicate end of buffer. */ - b += CHAR_CLASS_SIZE; - /* Move data which follow character classes - not to violate the data. */ - insert_space(CHAR_CLASS_SIZE, - laststart + 6 + laststart[1], - b - 1); - alignedp = ((uintptr_t)(laststart + 6 + laststart[1]) - + __alignof__(wctype_t) - 1) - & ~(uintptr_t)(__alignof__(wctype_t) - 1); - /* Store the character class. */ - *((wctype_t*)alignedp) = wt; - /* Update length of char_classes */ - laststart[1] += CHAR_CLASS_SIZE; - - had_char_class = true; - } - else - { - c1++; - while (c1--) - PATUNFETCH; - BUF_PUSH ('['); - BUF_PUSH (':'); - laststart[5] += 2; /* Update the length of characters */ - range_start = ':'; - had_char_class = false; - } - } - else if (syntax & RE_CHAR_CLASSES && c == '[' && (*p == '=' - || *p == '.')) - { - CHAR_T str[128]; /* Should be large enough. */ - CHAR_T delim = *p; /* '=' or '.' */ -# ifdef _LIBC - uint32_t nrules = - _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); -# endif - PATFETCH (c); - c1 = 0; - - /* If pattern is `[[=' or '[[.'. */ - if (p == pend) FREE_STACK_RETURN (REG_EBRACK); - - for (;;) - { - PATFETCH (c); - if ((c == delim && *p == ']') || p == pend) - break; - if (c1 < sizeof (str) - 1) - str[c1++] = c; - else - /* This is in any case an invalid class name. */ - str[0] = '\0'; - } - str[c1] = '\0'; - - if (c == delim && *p == ']' && str[0] != '\0') - { - unsigned int i, offset; - /* If we have no collation data we use the default - collation in which each character is in a class - by itself. It also means that ASCII is the - character set and therefore we cannot have character - with more than one byte in the multibyte - representation. */ - - /* If not defined _LIBC, we push the name and - `\0' for the sake of matching performance. */ - int datasize = c1 + 1; - -# ifdef _LIBC - int32_t idx = 0; - if (nrules == 0) -# endif - { - if (c1 != 1) - FREE_STACK_RETURN (REG_ECOLLATE); - } -# ifdef _LIBC - else - { - const int32_t *table; - const int32_t *weights; - const int32_t *extra; - const int32_t *indirect; - wint_t *cp; - - /* This #include defines a local function! */ -# include - - if(delim == '=') - { - /* We push the index for equivalence class. */ - cp = (wint_t*)str; - - table = (const int32_t *) - _NL_CURRENT (LC_COLLATE, - _NL_COLLATE_TABLEWC); - weights = (const int32_t *) - _NL_CURRENT (LC_COLLATE, - _NL_COLLATE_WEIGHTWC); - extra = (const int32_t *) - _NL_CURRENT (LC_COLLATE, - _NL_COLLATE_EXTRAWC); - indirect = (const int32_t *) - _NL_CURRENT (LC_COLLATE, - _NL_COLLATE_INDIRECTWC); - - idx = findidx ((const wint_t**)&cp); - if (idx == 0 || cp < (wint_t*) str + c1) - /* This is no valid character. */ - FREE_STACK_RETURN (REG_ECOLLATE); - - str[0] = (wchar_t)idx; - } - else /* delim == '.' */ - { - /* We push collation sequence value - for collating symbol. */ - int32_t table_size; - const int32_t *symb_table; - const unsigned char *extra; - int32_t idx; - int32_t elem; - int32_t second; - int32_t hash; - char char_str[c1]; - - /* We have to convert the name to a single-byte - string. This is possible since the names - consist of ASCII characters and the internal - representation is UCS4. */ - for (i = 0; i < c1; ++i) - char_str[i] = str[i]; - - table_size = - _NL_CURRENT_WORD (LC_COLLATE, - _NL_COLLATE_SYMB_HASH_SIZEMB); - symb_table = (const int32_t *) - _NL_CURRENT (LC_COLLATE, - _NL_COLLATE_SYMB_TABLEMB); - extra = (const unsigned char *) - _NL_CURRENT (LC_COLLATE, - _NL_COLLATE_SYMB_EXTRAMB); - - /* Locate the character in the hashing table. */ - hash = elem_hash (char_str, c1); - - idx = 0; - elem = hash % table_size; - second = hash % (table_size - 2); - while (symb_table[2 * elem] != 0) - { - /* First compare the hashing value. */ - if (symb_table[2 * elem] == hash - && c1 == extra[symb_table[2 * elem + 1]] - && memcmp (char_str, - &extra[symb_table[2 * elem + 1] - + 1], c1) == 0) - { - /* Yep, this is the entry. */ - idx = symb_table[2 * elem + 1]; - idx += 1 + extra[idx]; - break; - } - - /* Next entry. */ - elem += second; - } - - if (symb_table[2 * elem] != 0) - { - /* Compute the index of the byte sequence - in the table. */ - idx += 1 + extra[idx]; - /* Adjust for the alignment. */ - idx = (idx + 3) & ~3; - - str[0] = (wchar_t) idx + 4; - } - else if (symb_table[2 * elem] == 0 && c1 == 1) - { - /* No valid character. Match it as a - single byte character. */ - had_char_class = false; - BUF_PUSH(str[0]); - /* Update the length of characters */ - laststart[5]++; - range_start = str[0]; - - /* Throw away the ] at the end of the - collating symbol. */ - PATFETCH (c); - /* exit from the switch block. */ - continue; - } - else - FREE_STACK_RETURN (REG_ECOLLATE); - } - datasize = 1; - } -# endif - /* Throw away the ] at the end of the equivalence - class (or collating symbol). */ - PATFETCH (c); - - /* Allocate the space for the equivalence class - (or collating symbol) (and '\0' if needed). */ - GET_BUFFER_SPACE(datasize); - /* Update the pointer to indicate end of buffer. */ - b += datasize; - - if (delim == '=') - { /* equivalence class */ - /* Calculate the offset of char_ranges, - which is next to equivalence_classes. */ - offset = laststart[1] + laststart[2] - + laststart[3] +6; - /* Insert space. */ - insert_space(datasize, laststart + offset, b - 1); - - /* Write the equivalence_class and \0. */ - for (i = 0 ; i < datasize ; i++) - laststart[offset + i] = str[i]; - - /* Update the length of equivalence_classes. */ - laststart[3] += datasize; - had_char_class = true; - } - else /* delim == '.' */ - { /* collating symbol */ - /* Calculate the offset of the equivalence_classes, - which is next to collating_symbols. */ - offset = laststart[1] + laststart[2] + 6; - /* Insert space and write the collationg_symbol - and \0. */ - insert_space(datasize, laststart + offset, b-1); - for (i = 0 ; i < datasize ; i++) - laststart[offset + i] = str[i]; - - /* In re_match_2_internal if range_start < -1, we - assume -range_start is the offset of the - collating symbol which is specified as - the character of the range start. So we assign - -(laststart[1] + laststart[2] + 6) to - range_start. */ - range_start = -(laststart[1] + laststart[2] + 6); - /* Update the length of collating_symbol. */ - laststart[2] += datasize; - had_char_class = false; - } - } - else - { - c1++; - while (c1--) - PATUNFETCH; - BUF_PUSH ('['); - BUF_PUSH (delim); - laststart[5] += 2; /* Update the length of characters */ - range_start = delim; - had_char_class = false; - } - } - else - { - had_char_class = false; - BUF_PUSH(c); - laststart[5]++; /* Update the length of characters */ - range_start = c; - } - } - -#else /* BYTE */ - /* Ensure that we have enough space to push a charset: the - opcode, the length count, and the bitset; 34 bytes in all. */ - GET_BUFFER_SPACE (34); - - laststart = b; - - /* We test `*p == '^' twice, instead of using an if - statement, so we only need one BUF_PUSH. */ - BUF_PUSH (*p == '^' ? charset_not : charset); - if (*p == '^') - p++; - - /* Remember the first position in the bracket expression. */ - p1 = p; - - /* Push the number of bytes in the bitmap. */ - BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH); - - /* Clear the whole map. */ - bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH); - - /* charset_not matches newline according to a syntax bit. */ - if ((re_opcode_t) b[-2] == charset_not - && (syntax & RE_HAT_LISTS_NOT_NEWLINE)) - SET_LIST_BIT ('\n'); - - /* Read in characters and ranges, setting map bits. */ - for (;;) - { - if (p == pend) FREE_STACK_RETURN (REG_EBRACK); - - PATFETCH (c); - - /* \ might escape characters inside [...] and [^...]. */ - if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\') - { - if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); - - PATFETCH (c1); - SET_LIST_BIT (c1); - range_start = c1; - continue; - } - - /* Could be the end of the bracket expression. If it's - not (i.e., when the bracket expression is `[]' so - far), the ']' character bit gets set way below. */ - if (c == ']' && p != p1 + 1) - break; - - /* Look ahead to see if it's a range when the last thing - was a character class. */ - if (had_char_class && c == '-' && *p != ']') - FREE_STACK_RETURN (REG_ERANGE); - - /* Look ahead to see if it's a range when the last thing - was a character: if this is a hyphen not at the - beginning or the end of a list, then it's the range - operator. */ - if (c == '-' - && !(p - 2 >= pattern && p[-2] == '[') - && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^') - && *p != ']') - { - reg_errcode_t ret - = byte_compile_range (range_start, &p, pend, translate, - syntax, b); - if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); - range_start = 0xffffffff; - } - - else if (p[0] == '-' && p[1] != ']') - { /* This handles ranges made up of characters only. */ - reg_errcode_t ret; - - /* Move past the `-'. */ - PATFETCH (c1); - - ret = byte_compile_range (c, &p, pend, translate, syntax, b); - if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); - range_start = 0xffffffff; - } - - /* See if we're at the beginning of a possible character - class. */ - - else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':') - { /* Leave room for the null. */ - char str[CHAR_CLASS_MAX_LENGTH + 1]; - - PATFETCH (c); - c1 = 0; - - /* If pattern is `[[:'. */ - if (p == pend) FREE_STACK_RETURN (REG_EBRACK); - - for (;;) - { - PATFETCH (c); - if ((c == ':' && *p == ']') || p == pend) - break; - if (c1 < CHAR_CLASS_MAX_LENGTH) - str[c1++] = c; - else - /* This is in any case an invalid class name. */ - str[0] = '\0'; - } - str[c1] = '\0'; - - /* If isn't a word bracketed by `[:' and `:]': - undo the ending character, the letters, and leave - the leading `:' and `[' (but set bits for them). */ - if (c == ':' && *p == ']') - { -# if defined _LIBC || WIDE_CHAR_SUPPORT - boolean is_lower = STREQ (str, "lower"); - boolean is_upper = STREQ (str, "upper"); - wctype_t wt; - int ch; - - wt = IS_CHAR_CLASS (str); - if (wt == 0) - FREE_STACK_RETURN (REG_ECTYPE); - - /* Throw away the ] at the end of the character - class. */ - PATFETCH (c); - - if (p == pend) FREE_STACK_RETURN (REG_EBRACK); - - for (ch = 0; ch < 1 << BYTEWIDTH; ++ch) - { -# ifdef _LIBC - if (__iswctype (__btowc (ch), wt)) - SET_LIST_BIT (ch); -# else - if (iswctype (btowc (ch), wt)) - SET_LIST_BIT (ch); -# endif - - if (translate && (is_upper || is_lower) - && (ISUPPER (ch) || ISLOWER (ch))) - SET_LIST_BIT (ch); - } - - had_char_class = true; -# else - int ch; - boolean is_alnum = STREQ (str, "alnum"); - boolean is_alpha = STREQ (str, "alpha"); - boolean is_blank = STREQ (str, "blank"); - boolean is_cntrl = STREQ (str, "cntrl"); - boolean is_digit = STREQ (str, "digit"); - boolean is_graph = STREQ (str, "graph"); - boolean is_lower = STREQ (str, "lower"); - boolean is_print = STREQ (str, "print"); - boolean is_punct = STREQ (str, "punct"); - boolean is_space = STREQ (str, "space"); - boolean is_upper = STREQ (str, "upper"); - boolean is_xdigit = STREQ (str, "xdigit"); - - if (!IS_CHAR_CLASS (str)) - FREE_STACK_RETURN (REG_ECTYPE); - - /* Throw away the ] at the end of the character - class. */ - PATFETCH (c); - - if (p == pend) FREE_STACK_RETURN (REG_EBRACK); - - for (ch = 0; ch < 1 << BYTEWIDTH; ch++) - { - /* This was split into 3 if's to - avoid an arbitrary limit in some compiler. */ - if ( (is_alnum && ISALNUM (ch)) - || (is_alpha && ISALPHA (ch)) - || (is_blank && ISBLANK (ch)) - || (is_cntrl && ISCNTRL (ch))) - SET_LIST_BIT (ch); - if ( (is_digit && ISDIGIT (ch)) - || (is_graph && ISGRAPH (ch)) - || (is_lower && ISLOWER (ch)) - || (is_print && ISPRINT (ch))) - SET_LIST_BIT (ch); - if ( (is_punct && ISPUNCT (ch)) - || (is_space && ISSPACE (ch)) - || (is_upper && ISUPPER (ch)) - || (is_xdigit && ISXDIGIT (ch))) - SET_LIST_BIT (ch); - if ( translate && (is_upper || is_lower) - && (ISUPPER (ch) || ISLOWER (ch))) - SET_LIST_BIT (ch); - } - had_char_class = true; -# endif /* libc || wctype.h */ - } - else - { - c1++; - while (c1--) - PATUNFETCH; - SET_LIST_BIT ('['); - SET_LIST_BIT (':'); - range_start = ':'; - had_char_class = false; - } - } - else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '=') - { - unsigned char str[MB_LEN_MAX + 1]; -# ifdef _LIBC - uint32_t nrules = - _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); -# endif - - PATFETCH (c); - c1 = 0; - - /* If pattern is `[[='. */ - if (p == pend) FREE_STACK_RETURN (REG_EBRACK); - - for (;;) - { - PATFETCH (c); - if ((c == '=' && *p == ']') || p == pend) - break; - if (c1 < MB_LEN_MAX) - str[c1++] = c; - else - /* This is in any case an invalid class name. */ - str[0] = '\0'; - } - str[c1] = '\0'; - - if (c == '=' && *p == ']' && str[0] != '\0') - { - /* If we have no collation data we use the default - collation in which each character is in a class - by itself. It also means that ASCII is the - character set and therefore we cannot have character - with more than one byte in the multibyte - representation. */ -# ifdef _LIBC - if (nrules == 0) -# endif - { - if (c1 != 1) - FREE_STACK_RETURN (REG_ECOLLATE); - - /* Throw away the ] at the end of the equivalence - class. */ - PATFETCH (c); - - /* Set the bit for the character. */ - SET_LIST_BIT (str[0]); - } -# ifdef _LIBC - else - { - /* Try to match the byte sequence in `str' against - those known to the collate implementation. - First find out whether the bytes in `str' are - actually from exactly one character. */ - const int32_t *table; - const unsigned char *weights; - const unsigned char *extra; - const int32_t *indirect; - int32_t idx; - const unsigned char *cp = str; - int ch; - - /* This #include defines a local function! */ -# include - - table = (const int32_t *) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); - weights = (const unsigned char *) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); - extra = (const unsigned char *) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); - indirect = (const int32_t *) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); - - idx = findidx (&cp); - if (idx == 0 || cp < str + c1) - /* This is no valid character. */ - FREE_STACK_RETURN (REG_ECOLLATE); - - /* Throw away the ] at the end of the equivalence - class. */ - PATFETCH (c); - - /* Now we have to go throught the whole table - and find all characters which have the same - first level weight. - - XXX Note that this is not entirely correct. - we would have to match multibyte sequences - but this is not possible with the current - implementation. */ - for (ch = 1; ch < 256; ++ch) - /* XXX This test would have to be changed if we - would allow matching multibyte sequences. */ - if (table[ch] > 0) - { - int32_t idx2 = table[ch]; - size_t len = weights[idx2]; - - /* Test whether the lenghts match. */ - if (weights[idx] == len) - { - /* They do. New compare the bytes of - the weight. */ - size_t cnt = 0; - - while (cnt < len - && (weights[idx + 1 + cnt] - == weights[idx2 + 1 + cnt])) - ++cnt; - - if (cnt == len) - /* They match. Mark the character as - acceptable. */ - SET_LIST_BIT (ch); - } - } - } -# endif - had_char_class = true; - } - else - { - c1++; - while (c1--) - PATUNFETCH; - SET_LIST_BIT ('['); - SET_LIST_BIT ('='); - range_start = '='; - had_char_class = false; - } - } - else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '.') - { - unsigned char str[128]; /* Should be large enough. */ -# ifdef _LIBC - uint32_t nrules = - _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); -# endif - - PATFETCH (c); - c1 = 0; - - /* If pattern is `[[.'. */ - if (p == pend) FREE_STACK_RETURN (REG_EBRACK); - - for (;;) - { - PATFETCH (c); - if ((c == '.' && *p == ']') || p == pend) - break; - if (c1 < sizeof (str)) - str[c1++] = c; - else - /* This is in any case an invalid class name. */ - str[0] = '\0'; - } - str[c1] = '\0'; - - if (c == '.' && *p == ']' && str[0] != '\0') - { - /* If we have no collation data we use the default - collation in which each character is the name - for its own class which contains only the one - character. It also means that ASCII is the - character set and therefore we cannot have character - with more than one byte in the multibyte - representation. */ -# ifdef _LIBC - if (nrules == 0) -# endif - { - if (c1 != 1) - FREE_STACK_RETURN (REG_ECOLLATE); - - /* Throw away the ] at the end of the equivalence - class. */ - PATFETCH (c); - - /* Set the bit for the character. */ - SET_LIST_BIT (str[0]); - range_start = ((const unsigned char *) str)[0]; - } -# ifdef _LIBC - else - { - /* Try to match the byte sequence in `str' against - those known to the collate implementation. - First find out whether the bytes in `str' are - actually from exactly one character. */ - int32_t table_size; - const int32_t *symb_table; - const unsigned char *extra; - int32_t idx; - int32_t elem; - int32_t second; - int32_t hash; - - table_size = - _NL_CURRENT_WORD (LC_COLLATE, - _NL_COLLATE_SYMB_HASH_SIZEMB); - symb_table = (const int32_t *) - _NL_CURRENT (LC_COLLATE, - _NL_COLLATE_SYMB_TABLEMB); - extra = (const unsigned char *) - _NL_CURRENT (LC_COLLATE, - _NL_COLLATE_SYMB_EXTRAMB); - - /* Locate the character in the hashing table. */ - hash = elem_hash (str, c1); - - idx = 0; - elem = hash % table_size; - second = hash % (table_size - 2); - while (symb_table[2 * elem] != 0) - { - /* First compare the hashing value. */ - if (symb_table[2 * elem] == hash - && c1 == extra[symb_table[2 * elem + 1]] - && memcmp (str, - &extra[symb_table[2 * elem + 1] - + 1], - c1) == 0) - { - /* Yep, this is the entry. */ - idx = symb_table[2 * elem + 1]; - idx += 1 + extra[idx]; - break; - } - - /* Next entry. */ - elem += second; - } - - if (symb_table[2 * elem] == 0) - /* This is no valid character. */ - FREE_STACK_RETURN (REG_ECOLLATE); - - /* Throw away the ] at the end of the equivalence - class. */ - PATFETCH (c); - - /* Now add the multibyte character(s) we found - to the accept list. - - XXX Note that this is not entirely correct. - we would have to match multibyte sequences - but this is not possible with the current - implementation. Also, we have to match - collating symbols, which expand to more than - one file, as a whole and not allow the - individual bytes. */ - c1 = extra[idx++]; - if (c1 == 1) - range_start = extra[idx]; - while (c1-- > 0) - { - SET_LIST_BIT (extra[idx]); - ++idx; - } - } -# endif - had_char_class = false; - } - else - { - c1++; - while (c1--) - PATUNFETCH; - SET_LIST_BIT ('['); - SET_LIST_BIT ('.'); - range_start = '.'; - had_char_class = false; - } - } - else - { - had_char_class = false; - SET_LIST_BIT (c); - range_start = c; - } - } - - /* Discard any (non)matching list bytes that are all 0 at the - end of the map. Decrease the map-length byte too. */ - while ((int) b[-1] > 0 && b[b[-1] - 1] == 0) - b[-1]--; - b += b[-1]; -#endif /* WCHAR */ - } - break; - - - case '(': - if (syntax & RE_NO_BK_PARENS) - goto handle_open; - else - goto normal_char; - - - case ')': - if (syntax & RE_NO_BK_PARENS) - goto handle_close; - else - goto normal_char; - - - case '\n': - if (syntax & RE_NEWLINE_ALT) - goto handle_alt; - else - goto normal_char; - - - case '|': - if (syntax & RE_NO_BK_VBAR) - goto handle_alt; - else - goto normal_char; - - - case '{': - if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES) - goto handle_interval; - else - goto normal_char; - - - case '\\': - if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); - - /* Do not translate the character after the \, so that we can - distinguish, e.g., \B from \b, even if we normally would - translate, e.g., B to b. */ - PATFETCH_RAW (c); - - switch (c) - { - case '(': - if (syntax & RE_NO_BK_PARENS) - goto normal_backslash; - - handle_open: - bufp->re_nsub++; - regnum++; - - if (COMPILE_STACK_FULL) - { - RETALLOC (compile_stack.stack, compile_stack.size << 1, - compile_stack_elt_t); - if (compile_stack.stack == NULL) return REG_ESPACE; - - compile_stack.size <<= 1; - } - - /* These are the values to restore when we hit end of this - group. They are all relative offsets, so that if the - whole pattern moves because of realloc, they will still - be valid. */ - COMPILE_STACK_TOP.begalt_offset = begalt - COMPILED_BUFFER_VAR; - COMPILE_STACK_TOP.fixup_alt_jump - = fixup_alt_jump ? fixup_alt_jump - COMPILED_BUFFER_VAR + 1 : 0; - COMPILE_STACK_TOP.laststart_offset = b - COMPILED_BUFFER_VAR; - COMPILE_STACK_TOP.regnum = regnum; - - /* We will eventually replace the 0 with the number of - groups inner to this one. But do not push a - start_memory for groups beyond the last one we can - represent in the compiled pattern. */ - if (regnum <= MAX_REGNUM) - { - COMPILE_STACK_TOP.inner_group_offset = b - - COMPILED_BUFFER_VAR + 2; - BUF_PUSH_3 (start_memory, regnum, 0); - } - - compile_stack.avail++; - - fixup_alt_jump = 0; - laststart = 0; - begalt = b; - /* If we've reached MAX_REGNUM groups, then this open - won't actually generate any code, so we'll have to - clear pending_exact explicitly. */ - pending_exact = 0; - break; - - - case ')': - if (syntax & RE_NO_BK_PARENS) goto normal_backslash; - - if (COMPILE_STACK_EMPTY) - { - if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) - goto normal_backslash; - else - FREE_STACK_RETURN (REG_ERPAREN); - } - - handle_close: - if (fixup_alt_jump) - { /* Push a dummy failure point at the end of the - alternative for a possible future - `pop_failure_jump' to pop. See comments at - `push_dummy_failure' in `re_match_2'. */ - BUF_PUSH (push_dummy_failure); - - /* We allocated space for this jump when we assigned - to `fixup_alt_jump', in the `handle_alt' case below. */ - STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1); - } - - /* See similar code for backslashed left paren above. */ - if (COMPILE_STACK_EMPTY) - { - if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) - goto normal_char; - else - FREE_STACK_RETURN (REG_ERPAREN); - } - - /* Since we just checked for an empty stack above, this - ``can't happen''. */ - assert (compile_stack.avail != 0); - { - /* We don't just want to restore into `regnum', because - later groups should continue to be numbered higher, - as in `(ab)c(de)' -- the second group is #2. */ - regnum_t this_group_regnum; - - compile_stack.avail--; - begalt = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.begalt_offset; - fixup_alt_jump - = COMPILE_STACK_TOP.fixup_alt_jump - ? COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.fixup_alt_jump - 1 - : 0; - laststart = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.laststart_offset; - this_group_regnum = COMPILE_STACK_TOP.regnum; - /* If we've reached MAX_REGNUM groups, then this open - won't actually generate any code, so we'll have to - clear pending_exact explicitly. */ - pending_exact = 0; - - /* We're at the end of the group, so now we know how many - groups were inside this one. */ - if (this_group_regnum <= MAX_REGNUM) - { - UCHAR_T *inner_group_loc - = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.inner_group_offset; - - *inner_group_loc = regnum - this_group_regnum; - BUF_PUSH_3 (stop_memory, this_group_regnum, - regnum - this_group_regnum); - } - } - break; - - - case '|': /* `\|'. */ - if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR) - goto normal_backslash; - handle_alt: - if (syntax & RE_LIMITED_OPS) - goto normal_char; - - /* Insert before the previous alternative a jump which - jumps to this alternative if the former fails. */ - GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); - INSERT_JUMP (on_failure_jump, begalt, - b + 2 + 2 * OFFSET_ADDRESS_SIZE); - pending_exact = 0; - b += 1 + OFFSET_ADDRESS_SIZE; - - /* The alternative before this one has a jump after it - which gets executed if it gets matched. Adjust that - jump so it will jump to this alternative's analogous - jump (put in below, which in turn will jump to the next - (if any) alternative's such jump, etc.). The last such - jump jumps to the correct final destination. A picture: - _____ _____ - | | | | - | v | v - a | b | c - - If we are at `b', then fixup_alt_jump right now points to a - three-byte space after `a'. We'll put in the jump, set - fixup_alt_jump to right after `b', and leave behind three - bytes which we'll fill in when we get to after `c'. */ - - if (fixup_alt_jump) - STORE_JUMP (jump_past_alt, fixup_alt_jump, b); - - /* Mark and leave space for a jump after this alternative, - to be filled in later either by next alternative or - when know we're at the end of a series of alternatives. */ - fixup_alt_jump = b; - GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); - b += 1 + OFFSET_ADDRESS_SIZE; - - laststart = 0; - begalt = b; - break; - - - case '{': - /* If \{ is a literal. */ - if (!(syntax & RE_INTERVALS) - /* If we're at `\{' and it's not the open-interval - operator. */ - || (syntax & RE_NO_BK_BRACES)) - goto normal_backslash; - - handle_interval: - { - /* If got here, then the syntax allows intervals. */ - - /* At least (most) this many matches must be made. */ - int lower_bound = -1, upper_bound = -1; - - /* Place in the uncompiled pattern (i.e., just after - the '{') to go back to if the interval is invalid. */ - const CHAR_T *beg_interval = p; - - if (p == pend) - goto invalid_interval; - - GET_UNSIGNED_NUMBER (lower_bound); - - if (c == ',') - { - GET_UNSIGNED_NUMBER (upper_bound); - if (upper_bound < 0) - upper_bound = RE_DUP_MAX; - } - else - /* Interval such as `{1}' => match exactly once. */ - upper_bound = lower_bound; - - if (! (0 <= lower_bound && lower_bound <= upper_bound)) - goto invalid_interval; - - if (!(syntax & RE_NO_BK_BRACES)) - { - if (c != '\\' || p == pend) - goto invalid_interval; - PATFETCH (c); - } - - if (c != '}') - goto invalid_interval; - - /* If it's invalid to have no preceding re. */ - if (!laststart) - { - if (syntax & RE_CONTEXT_INVALID_OPS - && !(syntax & RE_INVALID_INTERVAL_ORD)) - FREE_STACK_RETURN (REG_BADRPT); - else if (syntax & RE_CONTEXT_INDEP_OPS) - laststart = b; - else - goto unfetch_interval; - } - - /* We just parsed a valid interval. */ - - if (RE_DUP_MAX < upper_bound) - FREE_STACK_RETURN (REG_BADBR); - - /* If the upper bound is zero, don't want to succeed at - all; jump from `laststart' to `b + 3', which will be - the end of the buffer after we insert the jump. */ - /* ifdef WCHAR, 'b + 1 + OFFSET_ADDRESS_SIZE' - instead of 'b + 3'. */ - if (upper_bound == 0) - { - GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); - INSERT_JUMP (jump, laststart, b + 1 - + OFFSET_ADDRESS_SIZE); - b += 1 + OFFSET_ADDRESS_SIZE; - } - - /* Otherwise, we have a nontrivial interval. When - we're all done, the pattern will look like: - set_number_at - set_number_at - succeed_n - - jump_n - (The upper bound and `jump_n' are omitted if - `upper_bound' is 1, though.) */ - else - { /* If the upper bound is > 1, we need to insert - more at the end of the loop. */ - unsigned nbytes = 2 + 4 * OFFSET_ADDRESS_SIZE + - (upper_bound > 1) * (2 + 4 * OFFSET_ADDRESS_SIZE); - - GET_BUFFER_SPACE (nbytes); - - /* Initialize lower bound of the `succeed_n', even - though it will be set during matching by its - attendant `set_number_at' (inserted next), - because `re_compile_fastmap' needs to know. - Jump to the `jump_n' we might insert below. */ - INSERT_JUMP2 (succeed_n, laststart, - b + 1 + 2 * OFFSET_ADDRESS_SIZE - + (upper_bound > 1) * (1 + 2 * OFFSET_ADDRESS_SIZE) - , lower_bound); - b += 1 + 2 * OFFSET_ADDRESS_SIZE; - - /* Code to initialize the lower bound. Insert - before the `succeed_n'. The `5' is the last two - bytes of this `set_number_at', plus 3 bytes of - the following `succeed_n'. */ - /* ifdef WCHAR, The '1+2*OFFSET_ADDRESS_SIZE' - is the 'set_number_at', plus '1+OFFSET_ADDRESS_SIZE' - of the following `succeed_n'. */ - PREFIX(insert_op2) (set_number_at, laststart, 1 - + 2 * OFFSET_ADDRESS_SIZE, lower_bound, b); - b += 1 + 2 * OFFSET_ADDRESS_SIZE; - - if (upper_bound > 1) - { /* More than one repetition is allowed, so - append a backward jump to the `succeed_n' - that starts this interval. - - When we've reached this during matching, - we'll have matched the interval once, so - jump back only `upper_bound - 1' times. */ - STORE_JUMP2 (jump_n, b, laststart - + 2 * OFFSET_ADDRESS_SIZE + 1, - upper_bound - 1); - b += 1 + 2 * OFFSET_ADDRESS_SIZE; - - /* The location we want to set is the second - parameter of the `jump_n'; that is `b-2' as - an absolute address. `laststart' will be - the `set_number_at' we're about to insert; - `laststart+3' the number to set, the source - for the relative address. But we are - inserting into the middle of the pattern -- - so everything is getting moved up by 5. - Conclusion: (b - 2) - (laststart + 3) + 5, - i.e., b - laststart. - - We insert this at the beginning of the loop - so that if we fail during matching, we'll - reinitialize the bounds. */ - PREFIX(insert_op2) (set_number_at, laststart, - b - laststart, - upper_bound - 1, b); - b += 1 + 2 * OFFSET_ADDRESS_SIZE; - } - } - pending_exact = 0; - break; - - invalid_interval: - if (!(syntax & RE_INVALID_INTERVAL_ORD)) - FREE_STACK_RETURN (p == pend ? REG_EBRACE : REG_BADBR); - unfetch_interval: - /* Match the characters as literals. */ - p = beg_interval; - c = '{'; - if (syntax & RE_NO_BK_BRACES) - goto normal_char; - else - goto normal_backslash; - } - -#ifdef emacs - /* There is no way to specify the before_dot and after_dot - operators. rms says this is ok. --karl */ - case '=': - BUF_PUSH (at_dot); - break; - - case 's': - laststart = b; - PATFETCH (c); - BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]); - break; - - case 'S': - laststart = b; - PATFETCH (c); - BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]); - break; -#endif /* emacs */ - - - case 'w': - if (syntax & RE_NO_GNU_OPS) - goto normal_char; - laststart = b; - BUF_PUSH (wordchar); - break; - - - case 'W': - if (syntax & RE_NO_GNU_OPS) - goto normal_char; - laststart = b; - BUF_PUSH (notwordchar); - break; - - - case '<': - if (syntax & RE_NO_GNU_OPS) - goto normal_char; - BUF_PUSH (wordbeg); - break; - - case '>': - if (syntax & RE_NO_GNU_OPS) - goto normal_char; - BUF_PUSH (wordend); - break; - - case 'b': - if (syntax & RE_NO_GNU_OPS) - goto normal_char; - BUF_PUSH (wordbound); - break; - - case 'B': - if (syntax & RE_NO_GNU_OPS) - goto normal_char; - BUF_PUSH (notwordbound); - break; - - case '`': - if (syntax & RE_NO_GNU_OPS) - goto normal_char; - BUF_PUSH (begbuf); - break; - - case '\'': - if (syntax & RE_NO_GNU_OPS) - goto normal_char; - BUF_PUSH (endbuf); - break; - - case '1': case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': - if (syntax & RE_NO_BK_REFS) - goto normal_char; - - c1 = c - '0'; - - if (c1 > regnum) - FREE_STACK_RETURN (REG_ESUBREG); - - /* Can't back reference to a subexpression if inside of it. */ - if (group_in_compile_stack (compile_stack, (regnum_t) c1)) - goto normal_char; - - laststart = b; - BUF_PUSH_2 (duplicate, c1); - break; - - - case '+': - case '?': - if (syntax & RE_BK_PLUS_QM) - goto handle_plus; - else - goto normal_backslash; - - default: - normal_backslash: - /* You might think it would be useful for \ to mean - not to translate; but if we don't translate it - it will never match anything. */ - c = TRANSLATE (c); - goto normal_char; - } - break; - - - default: - /* Expects the character in `c'. */ - normal_char: - /* If no exactn currently being built. */ - if (!pending_exact -#ifdef WCHAR - /* If last exactn handle binary(or character) and - new exactn handle character(or binary). */ - || is_exactn_bin != is_binary[p - 1 - pattern] -#endif /* WCHAR */ - - /* If last exactn not at current position. */ - || pending_exact + *pending_exact + 1 != b - - /* We have only one byte following the exactn for the count. */ - || *pending_exact == (1 << BYTEWIDTH) - 1 - - /* If followed by a repetition operator. */ - || *p == '*' || *p == '^' - || ((syntax & RE_BK_PLUS_QM) - ? *p == '\\' && (p[1] == '+' || p[1] == '?') - : (*p == '+' || *p == '?')) - || ((syntax & RE_INTERVALS) - && ((syntax & RE_NO_BK_BRACES) - ? *p == '{' - : (p[0] == '\\' && p[1] == '{')))) - { - /* Start building a new exactn. */ - - laststart = b; - -#ifdef WCHAR - /* Is this exactn binary data or character? */ - is_exactn_bin = is_binary[p - 1 - pattern]; - if (is_exactn_bin) - BUF_PUSH_2 (exactn_bin, 0); - else - BUF_PUSH_2 (exactn, 0); -#else - BUF_PUSH_2 (exactn, 0); -#endif /* WCHAR */ - pending_exact = b - 1; - } - - BUF_PUSH (c); - (*pending_exact)++; - break; - } /* switch (c) */ - } /* while p != pend */ - - - /* Through the pattern now. */ - - if (fixup_alt_jump) - STORE_JUMP (jump_past_alt, fixup_alt_jump, b); - - if (!COMPILE_STACK_EMPTY) - FREE_STACK_RETURN (REG_EPAREN); - - /* If we don't want backtracking, force success - the first time we reach the end of the compiled pattern. */ - if (syntax & RE_NO_POSIX_BACKTRACKING) - BUF_PUSH (succeed); - -#ifdef WCHAR - free (pattern); - free (mbs_offset); - free (is_binary); -#endif - free (compile_stack.stack); - - /* We have succeeded; set the length of the buffer. */ -#ifdef WCHAR - bufp->used = (uintptr_t) b - (uintptr_t) COMPILED_BUFFER_VAR; -#else - bufp->used = b - bufp->buffer; -#endif - -#ifdef DEBUG - if (debug) - { - DEBUG_PRINT1 ("\nCompiled pattern: \n"); - PREFIX(print_compiled_pattern) (bufp); - } -#endif /* DEBUG */ - -#ifndef MATCH_MAY_ALLOCATE - /* Initialize the failure stack to the largest possible stack. This - isn't necessary unless we're trying to avoid calling alloca in - the search and match routines. */ - { - int num_regs = bufp->re_nsub + 1; - - /* Since DOUBLE_FAIL_STACK refuses to double only if the current size - is strictly greater than re_max_failures, the largest possible stack - is 2 * re_max_failures failure points. */ - if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS)) - { - fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS); - -# ifdef emacs - if (! fail_stack.stack) - fail_stack.stack - = (PREFIX(fail_stack_elt_t) *) xmalloc (fail_stack.size - * sizeof (PREFIX(fail_stack_elt_t))); - else - fail_stack.stack - = (PREFIX(fail_stack_elt_t) *) xrealloc (fail_stack.stack, - (fail_stack.size - * sizeof (PREFIX(fail_stack_elt_t)))); -# else /* not emacs */ - if (! fail_stack.stack) - fail_stack.stack - = (PREFIX(fail_stack_elt_t) *) malloc (fail_stack.size - * sizeof (PREFIX(fail_stack_elt_t))); - else - fail_stack.stack - = (PREFIX(fail_stack_elt_t) *) realloc (fail_stack.stack, - (fail_stack.size - * sizeof (PREFIX(fail_stack_elt_t)))); -# endif /* not emacs */ - } - - PREFIX(regex_grow_registers) (num_regs); - } -#endif /* not MATCH_MAY_ALLOCATE */ - - return REG_NOERROR; -} /* regex_compile */ - -/* Subroutines for `regex_compile'. */ - -/* Store OP at LOC followed by two-byte integer parameter ARG. */ -/* ifdef WCHAR, integer parameter is 1 wchar_t. */ - -static void -PREFIX(store_op1) (re_opcode_t op, UCHAR_T *loc, int arg) -{ - *loc = (UCHAR_T) op; - STORE_NUMBER (loc + 1, arg); -} - - -/* Like `store_op1', but for two two-byte parameters ARG1 and ARG2. */ -/* ifdef WCHAR, integer parameter is 1 wchar_t. */ - -static void -PREFIX(store_op2) (re_opcode_t op, UCHAR_T *loc, int arg1, int arg2) -{ - *loc = (UCHAR_T) op; - STORE_NUMBER (loc + 1, arg1); - STORE_NUMBER (loc + 1 + OFFSET_ADDRESS_SIZE, arg2); -} - - -/* Copy the bytes from LOC to END to open up three bytes of space at LOC - for OP followed by two-byte integer parameter ARG. */ -/* ifdef WCHAR, integer parameter is 1 wchar_t. */ - -static void -PREFIX(insert_op1) (re_opcode_t op, UCHAR_T *loc, int arg, UCHAR_T *end) -{ - register UCHAR_T *pfrom = end; - register UCHAR_T *pto = end + 1 + OFFSET_ADDRESS_SIZE; - - while (pfrom != loc) - *--pto = *--pfrom; - - PREFIX(store_op1) (op, loc, arg); -} - - -/* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2. */ -/* ifdef WCHAR, integer parameter is 1 wchar_t. */ - -static void -PREFIX(insert_op2) (re_opcode_t op, UCHAR_T *loc, int arg1, - int arg2, UCHAR_T *end) -{ - register UCHAR_T *pfrom = end; - register UCHAR_T *pto = end + 1 + 2 * OFFSET_ADDRESS_SIZE; - - while (pfrom != loc) - *--pto = *--pfrom; - - PREFIX(store_op2) (op, loc, arg1, arg2); -} - - -/* P points to just after a ^ in PATTERN. Return true if that ^ comes - after an alternative or a begin-subexpression. We assume there is at - least one character before the ^. */ - -static boolean -PREFIX(at_begline_loc_p) (const CHAR_T *pattern, const CHAR_T *p, - reg_syntax_t syntax) -{ - const CHAR_T *prev = p - 2; - boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\'; - - return - /* After a subexpression? */ - (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash)) - /* After an alternative? */ - || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash)); -} - - -/* The dual of at_begline_loc_p. This one is for $. We assume there is - at least one character after the $, i.e., `P < PEND'. */ - -static boolean -PREFIX(at_endline_loc_p) (const CHAR_T *p, const CHAR_T *pend, - reg_syntax_t syntax) -{ - const CHAR_T *next = p; - boolean next_backslash = *next == '\\'; - const CHAR_T *next_next = p + 1 < pend ? p + 1 : 0; - - return - /* Before a subexpression? */ - (syntax & RE_NO_BK_PARENS ? *next == ')' - : next_backslash && next_next && *next_next == ')') - /* Before an alternative? */ - || (syntax & RE_NO_BK_VBAR ? *next == '|' - : next_backslash && next_next && *next_next == '|'); -} - -#else /* not INSIDE_RECURSION */ - -/* Returns true if REGNUM is in one of COMPILE_STACK's elements and - false if it's not. */ - -static boolean -group_in_compile_stack (compile_stack_type compile_stack, regnum_t regnum) -{ - int this_element; - - for (this_element = compile_stack.avail - 1; - this_element >= 0; - this_element--) - if (compile_stack.stack[this_element].regnum == regnum) - return true; - - return false; -} -#endif /* not INSIDE_RECURSION */ - -#ifdef INSIDE_RECURSION - -#ifdef WCHAR -/* This insert space, which size is "num", into the pattern at "loc". - "end" must point the end of the allocated buffer. */ -static void -insert_space (int num, CHAR_T *loc, CHAR_T *end) -{ - register CHAR_T *pto = end; - register CHAR_T *pfrom = end - num; - - while (pfrom >= loc) - *pto-- = *pfrom--; -} -#endif /* WCHAR */ - -#ifdef WCHAR -static reg_errcode_t -wcs_compile_range (CHAR_T range_start_char, const CHAR_T **p_ptr, - const CHAR_T *pend, RE_TRANSLATE_TYPE translate, - reg_syntax_t syntax, CHAR_T *b, CHAR_T *char_set) -{ - const CHAR_T *p = *p_ptr; - CHAR_T range_start, range_end; - reg_errcode_t ret; -# ifdef _LIBC - uint32_t nrules; - uint32_t start_val, end_val; -# endif - if (p == pend) - return REG_ERANGE; - -# ifdef _LIBC - nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); - if (nrules != 0) - { - const char *collseq = (const char *) _NL_CURRENT(LC_COLLATE, - _NL_COLLATE_COLLSEQWC); - const unsigned char *extra = (const unsigned char *) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); - - if (range_start_char < -1) - { - /* range_start is a collating symbol. */ - int32_t *wextra; - /* Retreive the index and get collation sequence value. */ - wextra = (int32_t*)(extra + char_set[-range_start_char]); - start_val = wextra[1 + *wextra]; - } - else - start_val = collseq_table_lookup(collseq, TRANSLATE(range_start_char)); - - end_val = collseq_table_lookup (collseq, TRANSLATE (p[0])); - - /* Report an error if the range is empty and the syntax prohibits - this. */ - ret = ((syntax & RE_NO_EMPTY_RANGES) - && (start_val > end_val))? REG_ERANGE : REG_NOERROR; - - /* Insert space to the end of the char_ranges. */ - insert_space(2, b - char_set[5] - 2, b - 1); - *(b - char_set[5] - 2) = (wchar_t)start_val; - *(b - char_set[5] - 1) = (wchar_t)end_val; - char_set[4]++; /* ranges_index */ - } - else -# endif - { - range_start = (range_start_char >= 0)? TRANSLATE (range_start_char): - range_start_char; - range_end = TRANSLATE (p[0]); - /* Report an error if the range is empty and the syntax prohibits - this. */ - ret = ((syntax & RE_NO_EMPTY_RANGES) - && (range_start > range_end))? REG_ERANGE : REG_NOERROR; - - /* Insert space to the end of the char_ranges. */ - insert_space(2, b - char_set[5] - 2, b - 1); - *(b - char_set[5] - 2) = range_start; - *(b - char_set[5] - 1) = range_end; - char_set[4]++; /* ranges_index */ - } - /* Have to increment the pointer into the pattern string, so the - caller isn't still at the ending character. */ - (*p_ptr)++; - - return ret; -} -#else /* BYTE */ -/* Read the ending character of a range (in a bracket expression) from the - uncompiled pattern *P_PTR (which ends at PEND). We assume the - starting character is in `P[-2]'. (`P[-1]' is the character `-'.) - Then we set the translation of all bits between the starting and - ending characters (inclusive) in the compiled pattern B. - - Return an error code. - - We use these short variable names so we can use the same macros as - `regex_compile' itself. */ - -static reg_errcode_t -byte_compile_range (unsigned int range_start_char, const char **p_ptr, - const char *pend, RE_TRANSLATE_TYPE translate, - reg_syntax_t syntax, unsigned char *b) -{ - unsigned this_char; - const char *p = *p_ptr; - reg_errcode_t ret; -# if _LIBC - const unsigned char *collseq; - unsigned int start_colseq; - unsigned int end_colseq; -# else - unsigned end_char; -# endif - - if (p == pend) - return REG_ERANGE; - - /* Have to increment the pointer into the pattern string, so the - caller isn't still at the ending character. */ - (*p_ptr)++; - - /* Report an error if the range is empty and the syntax prohibits this. */ - ret = syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR; - -# if _LIBC - collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE, - _NL_COLLATE_COLLSEQMB); - - start_colseq = collseq[(unsigned char) TRANSLATE (range_start_char)]; - end_colseq = collseq[(unsigned char) TRANSLATE (p[0])]; - for (this_char = 0; this_char <= (unsigned char) -1; ++this_char) - { - unsigned int this_colseq = collseq[(unsigned char) TRANSLATE (this_char)]; - - if (start_colseq <= this_colseq && this_colseq <= end_colseq) - { - SET_LIST_BIT (TRANSLATE (this_char)); - ret = REG_NOERROR; - } - } -# else - /* Here we see why `this_char' has to be larger than an `unsigned - char' -- we would otherwise go into an infinite loop, since all - characters <= 0xff. */ - range_start_char = TRANSLATE (range_start_char); - /* TRANSLATE(p[0]) is casted to char (not unsigned char) in TRANSLATE, - and some compilers cast it to int implicitly, so following for_loop - may fall to (almost) infinite loop. - e.g. If translate[p[0]] = 0xff, end_char may equals to 0xffffffff. - To avoid this, we cast p[0] to unsigned int and truncate it. */ - end_char = ((unsigned)TRANSLATE(p[0]) & ((1 << BYTEWIDTH) - 1)); - - for (this_char = range_start_char; this_char <= end_char; ++this_char) - { - SET_LIST_BIT (TRANSLATE (this_char)); - ret = REG_NOERROR; - } -# endif - - return ret; -} -#endif /* WCHAR */ - -/* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in - BUFP. A fastmap records which of the (1 << BYTEWIDTH) possible - characters can start a string that matches the pattern. This fastmap - is used by re_search to skip quickly over impossible starting points. - - The caller must supply the address of a (1 << BYTEWIDTH)-byte data - area as BUFP->fastmap. - - We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in - the pattern buffer. - - Returns 0 if we succeed, -2 if an internal error. */ - -#ifdef WCHAR -/* local function for re_compile_fastmap. - truncate wchar_t character to char. */ -static unsigned char truncate_wchar (CHAR_T c); - -static unsigned char -truncate_wchar (CHAR_T c) -{ - unsigned char buf[MB_CUR_MAX]; - mbstate_t state; - int retval; - memset (&state, '\0', sizeof (state)); -# ifdef _LIBC - retval = __wcrtomb (buf, c, &state); -# else - retval = wcrtomb (buf, c, &state); -# endif - return retval > 0 ? buf[0] : (unsigned char) c; -} -#endif /* WCHAR */ - -static int -PREFIX(re_compile_fastmap) (struct re_pattern_buffer *bufp) -{ - int j, k; -#ifdef MATCH_MAY_ALLOCATE - PREFIX(fail_stack_type) fail_stack; -#endif -#ifndef REGEX_MALLOC - char *destination; -#endif - - register char *fastmap = bufp->fastmap; - -#ifdef WCHAR - /* We need to cast pattern to (wchar_t*), because we casted this compiled - pattern to (char*) in regex_compile. */ - UCHAR_T *pattern = (UCHAR_T*)bufp->buffer; - register UCHAR_T *pend = (UCHAR_T*) (bufp->buffer + bufp->used); -#else /* BYTE */ - UCHAR_T *pattern = bufp->buffer; - register UCHAR_T *pend = pattern + bufp->used; -#endif /* WCHAR */ - UCHAR_T *p = pattern; - -#ifdef REL_ALLOC - /* This holds the pointer to the failure stack, when - it is allocated relocatably. */ - fail_stack_elt_t *failure_stack_ptr; -#endif - - /* Assume that each path through the pattern can be null until - proven otherwise. We set this false at the bottom of switch - statement, to which we get only if a particular path doesn't - match the empty string. */ - boolean path_can_be_null = true; - - /* We aren't doing a `succeed_n' to begin with. */ - boolean succeed_n_p = false; - - assert (fastmap != NULL && p != NULL); - - INIT_FAIL_STACK (); - bzero (fastmap, 1 << BYTEWIDTH); /* Assume nothing's valid. */ - bufp->fastmap_accurate = 1; /* It will be when we're done. */ - bufp->can_be_null = 0; - - while (1) - { - if (p == pend || *p == (UCHAR_T) succeed) - { - /* We have reached the (effective) end of pattern. */ - if (!FAIL_STACK_EMPTY ()) - { - bufp->can_be_null |= path_can_be_null; - - /* Reset for next path. */ - path_can_be_null = true; - - p = fail_stack.stack[--fail_stack.avail].pointer; - - continue; - } - else - break; - } - - /* We should never be about to go beyond the end of the pattern. */ - assert (p < pend); - - switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++)) - { - - /* I guess the idea here is to simply not bother with a fastmap - if a backreference is used, since it's too hard to figure out - the fastmap for the corresponding group. Setting - `can_be_null' stops `re_search_2' from using the fastmap, so - that is all we do. */ - case duplicate: - bufp->can_be_null = 1; - goto done; - - - /* Following are the cases which match a character. These end - with `break'. */ - -#ifdef WCHAR - case exactn: - fastmap[truncate_wchar(p[1])] = 1; - break; -#else /* BYTE */ - case exactn: - fastmap[p[1]] = 1; - break; -#endif /* WCHAR */ -#ifdef MBS_SUPPORT - case exactn_bin: - fastmap[p[1]] = 1; - break; -#endif - -#ifdef WCHAR - /* It is hard to distinguish fastmap from (multi byte) characters - which depends on current locale. */ - case charset: - case charset_not: - case wordchar: - case notwordchar: - bufp->can_be_null = 1; - goto done; -#else /* BYTE */ - case charset: - for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) - if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) - fastmap[j] = 1; - break; - - - case charset_not: - /* Chars beyond end of map must be allowed. */ - for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++) - fastmap[j] = 1; - - for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) - if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))) - fastmap[j] = 1; - break; - - - case wordchar: - for (j = 0; j < (1 << BYTEWIDTH); j++) - if (SYNTAX (j) == Sword) - fastmap[j] = 1; - break; - - - case notwordchar: - for (j = 0; j < (1 << BYTEWIDTH); j++) - if (SYNTAX (j) != Sword) - fastmap[j] = 1; - break; -#endif /* WCHAR */ - - case anychar: - { - int fastmap_newline = fastmap['\n']; - - /* `.' matches anything ... */ - for (j = 0; j < (1 << BYTEWIDTH); j++) - fastmap[j] = 1; - - /* ... except perhaps newline. */ - if (!(bufp->syntax & RE_DOT_NEWLINE)) - fastmap['\n'] = fastmap_newline; - - /* Return if we have already set `can_be_null'; if we have, - then the fastmap is irrelevant. Something's wrong here. */ - else if (bufp->can_be_null) - goto done; - - /* Otherwise, have to check alternative paths. */ - break; - } - -#ifdef emacs - case syntaxspec: - k = *p++; - for (j = 0; j < (1 << BYTEWIDTH); j++) - if (SYNTAX (j) == (enum syntaxcode) k) - fastmap[j] = 1; - break; - - - case notsyntaxspec: - k = *p++; - for (j = 0; j < (1 << BYTEWIDTH); j++) - if (SYNTAX (j) != (enum syntaxcode) k) - fastmap[j] = 1; - break; - - - /* All cases after this match the empty string. These end with - `continue'. */ - - - case before_dot: - case at_dot: - case after_dot: - continue; -#endif /* emacs */ - - - case no_op: - case begline: - case endline: - case begbuf: - case endbuf: - case wordbound: - case notwordbound: - case wordbeg: - case wordend: - case push_dummy_failure: - continue; - - - case jump_n: - case pop_failure_jump: - case maybe_pop_jump: - case jump: - case jump_past_alt: - case dummy_failure_jump: - EXTRACT_NUMBER_AND_INCR (j, p); - p += j; - if (j > 0) - continue; - - /* Jump backward implies we just went through the body of a - loop and matched nothing. Opcode jumped to should be - `on_failure_jump' or `succeed_n'. Just treat it like an - ordinary jump. For a * loop, it has pushed its failure - point already; if so, discard that as redundant. */ - if ((re_opcode_t) *p != on_failure_jump - && (re_opcode_t) *p != succeed_n) - continue; - - p++; - EXTRACT_NUMBER_AND_INCR (j, p); - p += j; - - /* If what's on the stack is where we are now, pop it. */ - if (!FAIL_STACK_EMPTY () - && fail_stack.stack[fail_stack.avail - 1].pointer == p) - fail_stack.avail--; - - continue; - - - case on_failure_jump: - case on_failure_keep_string_jump: - handle_on_failure_jump: - EXTRACT_NUMBER_AND_INCR (j, p); - - /* For some patterns, e.g., `(a?)?', `p+j' here points to the - end of the pattern. We don't want to push such a point, - since when we restore it above, entering the switch will - increment `p' past the end of the pattern. We don't need - to push such a point since we obviously won't find any more - fastmap entries beyond `pend'. Such a pattern can match - the null string, though. */ - if (p + j < pend) - { - if (!PUSH_PATTERN_OP (p + j, fail_stack)) - { - RESET_FAIL_STACK (); - return -2; - } - } - else - bufp->can_be_null = 1; - - if (succeed_n_p) - { - EXTRACT_NUMBER_AND_INCR (k, p); /* Skip the n. */ - succeed_n_p = false; - } - - continue; - - - case succeed_n: - /* Get to the number of times to succeed. */ - p += OFFSET_ADDRESS_SIZE; - - /* Increment p past the n for when k != 0. */ - EXTRACT_NUMBER_AND_INCR (k, p); - if (k == 0) - { - p -= 2 * OFFSET_ADDRESS_SIZE; - succeed_n_p = true; /* Spaghetti code alert. */ - goto handle_on_failure_jump; - } - continue; - - - case set_number_at: - p += 2 * OFFSET_ADDRESS_SIZE; - continue; - - - case start_memory: - case stop_memory: - p += 2; - continue; - - - default: - abort (); /* We have listed all the cases. */ - } /* switch *p++ */ - - /* Getting here means we have found the possible starting - characters for one path of the pattern -- and that the empty - string does not match. We need not follow this path further. - Instead, look at the next alternative (remembered on the - stack), or quit if no more. The test at the top of the loop - does these things. */ - path_can_be_null = false; - p = pend; - } /* while p */ - - /* Set `can_be_null' for the last path (also the first path, if the - pattern is empty). */ - bufp->can_be_null |= path_can_be_null; - - done: - RESET_FAIL_STACK (); - return 0; -} - -#else /* not INSIDE_RECURSION */ - -int -re_compile_fastmap (struct re_pattern_buffer *bufp) -{ -# ifdef MBS_SUPPORT - if (MB_CUR_MAX != 1) - return wcs_re_compile_fastmap(bufp); - else -# endif - return byte_re_compile_fastmap(bufp); -} /* re_compile_fastmap */ -#ifdef _LIBC -weak_alias (__re_compile_fastmap, re_compile_fastmap) -#endif - - -/* Set REGS to hold NUM_REGS registers, storing them in STARTS and - ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use - this memory for recording register information. STARTS and ENDS - must be allocated using the malloc library routine, and must each - be at least NUM_REGS * sizeof (regoff_t) bytes long. - - If NUM_REGS == 0, then subsequent matches should allocate their own - register data. - - Unless this function is called, the first search or match using - PATTERN_BUFFER will allocate its own register data, without - freeing the old data. */ - -void -re_set_registers (struct re_pattern_buffer *bufp, - struct re_registers *regs, unsigned num_regs, - regoff_t *starts, regoff_t *ends) -{ - if (num_regs) - { - bufp->regs_allocated = REGS_REALLOCATE; - regs->num_regs = num_regs; - regs->start = starts; - regs->end = ends; - } - else - { - bufp->regs_allocated = REGS_UNALLOCATED; - regs->num_regs = 0; - regs->start = regs->end = (regoff_t *) 0; - } -} -#ifdef _LIBC -weak_alias (__re_set_registers, re_set_registers) -#endif - -/* Searching routines. */ - -/* Like re_search_2, below, but only one string is specified, and - doesn't let you say where to stop matching. */ - -int -re_search (struct re_pattern_buffer *bufp, const char *string, int size, - int startpos, int range, struct re_registers *regs) -{ - return re_search_2 (bufp, NULL, 0, string, size, startpos, range, - regs, size); -} -#ifdef _LIBC -weak_alias (__re_search, re_search) -#endif - - -/* Using the compiled pattern in BUFP->buffer, first tries to match the - virtual concatenation of STRING1 and STRING2, starting first at index - STARTPOS, then at STARTPOS + 1, and so on. - - STRING1 and STRING2 have length SIZE1 and SIZE2, respectively. - - RANGE is how far to scan while trying to match. RANGE = 0 means try - only at STARTPOS; in general, the last start tried is STARTPOS + - RANGE. - - In REGS, return the indices of the virtual concatenation of STRING1 - and STRING2 that matched the entire BUFP->buffer and its contained - subexpressions. - - Do not consider matching one past the index STOP in the virtual - concatenation of STRING1 and STRING2. - - We return either the position in the strings at which the match was - found, -1 if no match, or -2 if error (such as failure - stack overflow). */ - -int -re_search_2 (struct re_pattern_buffer *bufp, const char *string1, int size1, - const char *string2, int size2, int startpos, int range, - struct re_registers *regs, int stop) -{ -# ifdef MBS_SUPPORT - if (MB_CUR_MAX != 1) - return wcs_re_search_2 (bufp, string1, size1, string2, size2, startpos, - range, regs, stop); - else -# endif - return byte_re_search_2 (bufp, string1, size1, string2, size2, startpos, - range, regs, stop); -} /* re_search_2 */ -#ifdef _LIBC -weak_alias (__re_search_2, re_search_2) -#endif - -#endif /* not INSIDE_RECURSION */ - -#ifdef INSIDE_RECURSION - -#ifdef MATCH_MAY_ALLOCATE -# define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL -#else -# define FREE_VAR(var) if (var) free (var); var = NULL -#endif - -#ifdef WCHAR -# define MAX_ALLOCA_SIZE 2000 - -# define FREE_WCS_BUFFERS() \ - do { \ - if (size1 > MAX_ALLOCA_SIZE) \ - { \ - free (wcs_string1); \ - free (mbs_offset1); \ - } \ - else \ - { \ - FREE_VAR (wcs_string1); \ - FREE_VAR (mbs_offset1); \ - } \ - if (size2 > MAX_ALLOCA_SIZE) \ - { \ - free (wcs_string2); \ - free (mbs_offset2); \ - } \ - else \ - { \ - FREE_VAR (wcs_string2); \ - FREE_VAR (mbs_offset2); \ - } \ - } while (0) - -#endif - - -static int -PREFIX(re_search_2) (struct re_pattern_buffer *bufp, const char *string1, - int size1, const char *string2, int size2, - int startpos, int range, - struct re_registers *regs, int stop) -{ - int val; - register char *fastmap = bufp->fastmap; - register RE_TRANSLATE_TYPE translate = bufp->translate; - int total_size = size1 + size2; - int endpos = startpos + range; -#ifdef WCHAR - /* We need wchar_t* buffers correspond to cstring1, cstring2. */ - wchar_t *wcs_string1 = NULL, *wcs_string2 = NULL; - /* We need the size of wchar_t buffers correspond to csize1, csize2. */ - int wcs_size1 = 0, wcs_size2 = 0; - /* offset buffer for optimizatoin. See convert_mbs_to_wc. */ - int *mbs_offset1 = NULL, *mbs_offset2 = NULL; - /* They hold whether each wchar_t is binary data or not. */ - char *is_binary = NULL; -#endif /* WCHAR */ - - /* Check for out-of-range STARTPOS. */ - if (startpos < 0 || startpos > total_size) - return -1; - - /* Fix up RANGE if it might eventually take us outside - the virtual concatenation of STRING1 and STRING2. - Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE. */ - if (endpos < 0) - range = 0 - startpos; - else if (endpos > total_size) - range = total_size - startpos; - - /* If the search isn't to be a backwards one, don't waste time in a - search for a pattern that must be anchored. */ - if (bufp->used > 0 && range > 0 - && ((re_opcode_t) bufp->buffer[0] == begbuf - /* `begline' is like `begbuf' if it cannot match at newlines. */ - || ((re_opcode_t) bufp->buffer[0] == begline - && !bufp->newline_anchor))) - { - if (startpos > 0) - return -1; - else - range = 1; - } - -#ifdef emacs - /* In a forward search for something that starts with \=. - don't keep searching past point. */ - if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0) - { - range = PT - startpos; - if (range <= 0) - return -1; - } -#endif /* emacs */ - - /* Update the fastmap now if not correct already. */ - if (fastmap && !bufp->fastmap_accurate) - if (re_compile_fastmap (bufp) == -2) - return -2; - -#ifdef WCHAR - /* Allocate wchar_t array for wcs_string1 and wcs_string2 and - fill them with converted string. */ - if (size1 != 0) - { - if (size1 > MAX_ALLOCA_SIZE) - { - wcs_string1 = TALLOC (size1 + 1, CHAR_T); - mbs_offset1 = TALLOC (size1 + 1, int); - is_binary = TALLOC (size1 + 1, char); - } - else - { - wcs_string1 = REGEX_TALLOC (size1 + 1, CHAR_T); - mbs_offset1 = REGEX_TALLOC (size1 + 1, int); - is_binary = REGEX_TALLOC (size1 + 1, char); - } - if (!wcs_string1 || !mbs_offset1 || !is_binary) - { - if (size1 > MAX_ALLOCA_SIZE) - { - free (wcs_string1); - free (mbs_offset1); - free (is_binary); - } - else - { - FREE_VAR (wcs_string1); - FREE_VAR (mbs_offset1); - FREE_VAR (is_binary); - } - return -2; - } - wcs_size1 = convert_mbs_to_wcs(wcs_string1, string1, size1, - mbs_offset1, is_binary); - wcs_string1[wcs_size1] = L'\0'; /* for a sentinel */ - if (size1 > MAX_ALLOCA_SIZE) - free (is_binary); - else - FREE_VAR (is_binary); - } - if (size2 != 0) - { - if (size2 > MAX_ALLOCA_SIZE) - { - wcs_string2 = TALLOC (size2 + 1, CHAR_T); - mbs_offset2 = TALLOC (size2 + 1, int); - is_binary = TALLOC (size2 + 1, char); - } - else - { - wcs_string2 = REGEX_TALLOC (size2 + 1, CHAR_T); - mbs_offset2 = REGEX_TALLOC (size2 + 1, int); - is_binary = REGEX_TALLOC (size2 + 1, char); - } - if (!wcs_string2 || !mbs_offset2 || !is_binary) - { - FREE_WCS_BUFFERS (); - if (size2 > MAX_ALLOCA_SIZE) - free (is_binary); - else - FREE_VAR (is_binary); - return -2; - } - wcs_size2 = convert_mbs_to_wcs(wcs_string2, string2, size2, - mbs_offset2, is_binary); - wcs_string2[wcs_size2] = L'\0'; /* for a sentinel */ - if (size2 > MAX_ALLOCA_SIZE) - free (is_binary); - else - FREE_VAR (is_binary); - } -#endif /* WCHAR */ - - - /* Loop through the string, looking for a place to start matching. */ - for (;;) - { - /* If a fastmap is supplied, skip quickly over characters that - cannot be the start of a match. If the pattern can match the - null string, however, we don't need to skip characters; we want - the first null string. */ - if (fastmap && startpos < total_size && !bufp->can_be_null) - { - if (range > 0) /* Searching forwards. */ - { - register const char *d; - register int lim = 0; - int irange = range; - - if (startpos < size1 && startpos + range >= size1) - lim = range - (size1 - startpos); - - d = (startpos >= size1 ? string2 - size1 : string1) + startpos; - - /* Written out as an if-else to avoid testing `translate' - inside the loop. */ - if (translate) - while (range > lim - && !fastmap[(unsigned char) - translate[(unsigned char) *d++]]) - range--; - else - while (range > lim && !fastmap[(unsigned char) *d++]) - range--; - - startpos += irange - range; - } - else /* Searching backwards. */ - { - register CHAR_T c = (size1 == 0 || startpos >= size1 - ? string2[startpos - size1] - : string1[startpos]); - - if (!fastmap[(unsigned char) TRANSLATE (c)]) - goto advance; - } - } - - /* If can't match the null string, and that's all we have left, fail. */ - if (range >= 0 && startpos == total_size && fastmap - && !bufp->can_be_null) - { -#ifdef WCHAR - FREE_WCS_BUFFERS (); -#endif - return -1; - } - -#ifdef WCHAR - val = wcs_re_match_2_internal (bufp, string1, size1, string2, - size2, startpos, regs, stop, - wcs_string1, wcs_size1, - wcs_string2, wcs_size2, - mbs_offset1, mbs_offset2); -#else /* BYTE */ - val = byte_re_match_2_internal (bufp, string1, size1, string2, - size2, startpos, regs, stop); -#endif /* BYTE */ - -#ifndef REGEX_MALLOC -# ifdef C_ALLOCA - alloca (0); -# endif -#endif - - if (val >= 0) - { -#ifdef WCHAR - FREE_WCS_BUFFERS (); -#endif - return startpos; - } - - if (val == -2) - { -#ifdef WCHAR - FREE_WCS_BUFFERS (); -#endif - return -2; - } - - advance: - if (!range) - break; - else if (range > 0) - { - range--; - startpos++; - } - else - { - range++; - startpos--; - } - } -#ifdef WCHAR - FREE_WCS_BUFFERS (); -#endif - return -1; -} - -#ifdef WCHAR -/* This converts PTR, a pointer into one of the search wchar_t strings - `string1' and `string2' into an multibyte string offset from the - beginning of that string. We use mbs_offset to optimize. - See convert_mbs_to_wcs. */ -# define POINTER_TO_OFFSET(ptr) \ - (FIRST_STRING_P (ptr) \ - ? ((regoff_t)(mbs_offset1 != NULL? mbs_offset1[(ptr)-string1] : 0)) \ - : ((regoff_t)((mbs_offset2 != NULL? mbs_offset2[(ptr)-string2] : 0) \ - + csize1))) -#else /* BYTE */ -/* This converts PTR, a pointer into one of the search strings `string1' - and `string2' into an offset from the beginning of that string. */ -# define POINTER_TO_OFFSET(ptr) \ - (FIRST_STRING_P (ptr) \ - ? ((regoff_t) ((ptr) - string1)) \ - : ((regoff_t) ((ptr) - string2 + size1))) -#endif /* WCHAR */ - -/* Macros for dealing with the split strings in re_match_2. */ - -#define MATCHING_IN_FIRST_STRING (dend == end_match_1) - -/* Call before fetching a character with *d. This switches over to - string2 if necessary. */ -#define PREFETCH() \ - while (d == dend) \ - { \ - /* End of string2 => fail. */ \ - if (dend == end_match_2) \ - goto fail; \ - /* End of string1 => advance to string2. */ \ - d = string2; \ - dend = end_match_2; \ - } - -/* Test if at very beginning or at very end of the virtual concatenation - of `string1' and `string2'. If only one string, it's `string2'. */ -#define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2) -#define AT_STRINGS_END(d) ((d) == end2) - - -/* Test if D points to a character which is word-constituent. We have - two special cases to check for: if past the end of string1, look at - the first character in string2; and if before the beginning of - string2, look at the last character in string1. */ -#ifdef WCHAR -/* Use internationalized API instead of SYNTAX. */ -# define WORDCHAR_P(d) \ - (iswalnum ((wint_t)((d) == end1 ? *string2 \ - : (d) == string2 - 1 ? *(end1 - 1) : *(d))) != 0 \ - || ((d) == end1 ? *string2 \ - : (d) == string2 - 1 ? *(end1 - 1) : *(d)) == L'_') -#else /* BYTE */ -# define WORDCHAR_P(d) \ - (SYNTAX ((d) == end1 ? *string2 \ - : (d) == string2 - 1 ? *(end1 - 1) : *(d)) \ - == Sword) -#endif /* WCHAR */ - -/* Disabled due to a compiler bug -- see comment at case wordbound */ -#if 0 -/* Test if the character before D and the one at D differ with respect - to being word-constituent. */ -#define AT_WORD_BOUNDARY(d) \ - (AT_STRINGS_BEG (d) || AT_STRINGS_END (d) \ - || WORDCHAR_P (d - 1) != WORDCHAR_P (d)) -#endif - -/* Free everything we malloc. */ -#ifdef MATCH_MAY_ALLOCATE -# ifdef WCHAR -# define FREE_VARIABLES() \ - do { \ - REGEX_FREE_STACK (fail_stack.stack); \ - FREE_VAR (regstart); \ - FREE_VAR (regend); \ - FREE_VAR (old_regstart); \ - FREE_VAR (old_regend); \ - FREE_VAR (best_regstart); \ - FREE_VAR (best_regend); \ - FREE_VAR (reg_info); \ - FREE_VAR (reg_dummy); \ - FREE_VAR (reg_info_dummy); \ - if (!cant_free_wcs_buf) \ - { \ - FREE_VAR (string1); \ - FREE_VAR (string2); \ - FREE_VAR (mbs_offset1); \ - FREE_VAR (mbs_offset2); \ - } \ - } while (0) -# else /* BYTE */ -# define FREE_VARIABLES() \ - do { \ - REGEX_FREE_STACK (fail_stack.stack); \ - FREE_VAR (regstart); \ - FREE_VAR (regend); \ - FREE_VAR (old_regstart); \ - FREE_VAR (old_regend); \ - FREE_VAR (best_regstart); \ - FREE_VAR (best_regend); \ - FREE_VAR (reg_info); \ - FREE_VAR (reg_dummy); \ - FREE_VAR (reg_info_dummy); \ - } while (0) -# endif /* WCHAR */ -#else -# ifdef WCHAR -# define FREE_VARIABLES() \ - do { \ - if (!cant_free_wcs_buf) \ - { \ - FREE_VAR (string1); \ - FREE_VAR (string2); \ - FREE_VAR (mbs_offset1); \ - FREE_VAR (mbs_offset2); \ - } \ - } while (0) -# else /* BYTE */ -# define FREE_VARIABLES() ((void)0) /* Do nothing! But inhibit gcc warning. */ -# endif /* WCHAR */ -#endif /* not MATCH_MAY_ALLOCATE */ - -/* These values must meet several constraints. They must not be valid - register values; since we have a limit of 255 registers (because - we use only one byte in the pattern for the register number), we can - use numbers larger than 255. They must differ by 1, because of - NUM_FAILURE_ITEMS above. And the value for the lowest register must - be larger than the value for the highest register, so we do not try - to actually save any registers when none are active. */ -#define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH) -#define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1) - -#else /* not INSIDE_RECURSION */ -/* Matching routines. */ - -#ifndef emacs /* Emacs never uses this. */ -/* re_match is like re_match_2 except it takes only a single string. */ - -int -re_match (struct re_pattern_buffer *bufp, const char *string, - int size, int pos, struct re_registers *regs) -{ - int result; -# ifdef MBS_SUPPORT - if (MB_CUR_MAX != 1) - result = wcs_re_match_2_internal (bufp, NULL, 0, string, size, - pos, regs, size, - NULL, 0, NULL, 0, NULL, NULL); - else -# endif - result = byte_re_match_2_internal (bufp, NULL, 0, string, size, - pos, regs, size); -# ifndef REGEX_MALLOC -# ifdef C_ALLOCA - alloca (0); -# endif -# endif - return result; -} -# ifdef _LIBC -weak_alias (__re_match, re_match) -# endif -#endif /* not emacs */ - -#endif /* not INSIDE_RECURSION */ - -#ifdef INSIDE_RECURSION -static boolean PREFIX(group_match_null_string_p) (UCHAR_T **p, - UCHAR_T *end, - PREFIX(register_info_type) *reg_info); -static boolean PREFIX(alt_match_null_string_p) (UCHAR_T *p, - UCHAR_T *end, - PREFIX(register_info_type) *reg_info); -static boolean PREFIX(common_op_match_null_string_p) (UCHAR_T **p, - UCHAR_T *end, - PREFIX(register_info_type) *reg_info); -static int PREFIX(bcmp_translate) (const CHAR_T *s1, const CHAR_T *s2, - int len, char *translate); -#else /* not INSIDE_RECURSION */ - -/* re_match_2 matches the compiled pattern in BUFP against the - the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1 - and SIZE2, respectively). We start matching at POS, and stop - matching at STOP. - - If REGS is non-null and the `no_sub' field of BUFP is nonzero, we - store offsets for the substring each group matched in REGS. See the - documentation for exactly how many groups we fill. - - We return -1 if no match, -2 if an internal error (such as the - failure stack overflowing). Otherwise, we return the length of the - matched substring. */ - -int -re_match_2 (struct re_pattern_buffer *bufp, const char *string1, int size1, - const char *string2, int size2, int pos, - struct re_registers *regs, int stop) -{ - int result; -# ifdef MBS_SUPPORT - if (MB_CUR_MAX != 1) - result = wcs_re_match_2_internal (bufp, string1, size1, string2, size2, - pos, regs, stop, - NULL, 0, NULL, 0, NULL, NULL); - else -# endif - result = byte_re_match_2_internal (bufp, string1, size1, string2, size2, - pos, regs, stop); - -#ifndef REGEX_MALLOC -# ifdef C_ALLOCA - alloca (0); -# endif -#endif - return result; -} -#ifdef _LIBC -weak_alias (__re_match_2, re_match_2) -#endif - -#endif /* not INSIDE_RECURSION */ - -#ifdef INSIDE_RECURSION - -#ifdef WCHAR -static int count_mbs_length (int *, int); - -/* This check the substring (from 0, to length) of the multibyte string, - to which offset_buffer correspond. And count how many wchar_t_characters - the substring occupy. We use offset_buffer to optimization. - See convert_mbs_to_wcs. */ - -static int -count_mbs_length(int *offset_buffer, int length) -{ - int upper, lower; - - /* Check whether the size is valid. */ - if (length < 0) - return -1; - - if (offset_buffer == NULL) - return 0; - - /* If there are no multibyte character, offset_buffer[i] == i. - Optmize for this case. */ - if (offset_buffer[length] == length) - return length; - - /* Set up upper with length. (because for all i, offset_buffer[i] >= i) */ - upper = length; - lower = 0; - - while (true) - { - int middle = (lower + upper) / 2; - if (middle == lower || middle == upper) - break; - if (offset_buffer[middle] > length) - upper = middle; - else if (offset_buffer[middle] < length) - lower = middle; - else - return middle; - } - - return -1; -} -#endif /* WCHAR */ - -/* This is a separate function so that we can force an alloca cleanup - afterwards. */ -#ifdef WCHAR -static int -wcs_re_match_2_internal (struct re_pattern_buffer *bufp, - const char *cstring1, int csize1, - const char *cstring2, int csize2, - int pos, - struct re_registers *regs, - int stop, - /* string1 == string2 == NULL means string1/2, size1/2 and - mbs_offset1/2 need seting up in this function. */ - /* We need wchar_t* buffers correspond to cstring1, cstring2. */ - wchar_t *string1, int size1, - wchar_t *string2, int size2, - /* offset buffer for optimizatoin. See convert_mbs_to_wc. */ - int *mbs_offset1, int *mbs_offset2) -#else /* BYTE */ -static int -byte_re_match_2_internal (struct re_pattern_buffer *bufp, - const char *string1, int size1, - const char *string2, int size2, - int pos, - struct re_registers *regs, int stop) -#endif /* BYTE */ -{ - /* General temporaries. */ - int mcnt; - UCHAR_T *p1; -#ifdef WCHAR - /* They hold whether each wchar_t is binary data or not. */ - char *is_binary = NULL; - /* If true, we can't free string1/2, mbs_offset1/2. */ - int cant_free_wcs_buf = 1; -#endif /* WCHAR */ - - /* Just past the end of the corresponding string. */ - const CHAR_T *end1, *end2; - - /* Pointers into string1 and string2, just past the last characters in - each to consider matching. */ - const CHAR_T *end_match_1, *end_match_2; - - /* Where we are in the data, and the end of the current string. */ - const CHAR_T *d, *dend; - - /* Where we are in the pattern, and the end of the pattern. */ -#ifdef WCHAR - UCHAR_T *pattern, *p; - register UCHAR_T *pend; -#else /* BYTE */ - UCHAR_T *p = bufp->buffer; - register UCHAR_T *pend = p + bufp->used; -#endif /* WCHAR */ - - /* Mark the opcode just after a start_memory, so we can test for an - empty subpattern when we get to the stop_memory. */ - UCHAR_T *just_past_start_mem = 0; - - /* We use this to map every character in the string. */ - RE_TRANSLATE_TYPE translate = bufp->translate; - - /* Failure point stack. Each place that can handle a failure further - down the line pushes a failure point on this stack. It consists of - restart, regend, and reg_info for all registers corresponding to - the subexpressions we're currently inside, plus the number of such - registers, and, finally, two char *'s. The first char * is where - to resume scanning the pattern; the second one is where to resume - scanning the strings. If the latter is zero, the failure point is - a ``dummy''; if a failure happens and the failure point is a dummy, - it gets discarded and the next next one is tried. */ -#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */ - PREFIX(fail_stack_type) fail_stack; -#endif -#ifdef DEBUG - static unsigned failure_id; - unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0; -#endif - -#ifdef REL_ALLOC - /* This holds the pointer to the failure stack, when - it is allocated relocatably. */ - fail_stack_elt_t *failure_stack_ptr; -#endif - - /* We fill all the registers internally, independent of what we - return, for use in backreferences. The number here includes - an element for register zero. */ - size_t num_regs = bufp->re_nsub + 1; - - /* The currently active registers. */ - active_reg_t lowest_active_reg = NO_LOWEST_ACTIVE_REG; - active_reg_t highest_active_reg = NO_HIGHEST_ACTIVE_REG; - - /* Information on the contents of registers. These are pointers into - the input strings; they record just what was matched (on this - attempt) by a subexpression part of the pattern, that is, the - regnum-th regstart pointer points to where in the pattern we began - matching and the regnum-th regend points to right after where we - stopped matching the regnum-th subexpression. (The zeroth register - keeps track of what the whole pattern matches.) */ -#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ - const CHAR_T **regstart, **regend; -#endif - - /* If a group that's operated upon by a repetition operator fails to - match anything, then the register for its start will need to be - restored because it will have been set to wherever in the string we - are when we last see its open-group operator. Similarly for a - register's end. */ -#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ - const CHAR_T **old_regstart, **old_regend; -#endif - - /* The is_active field of reg_info helps us keep track of which (possibly - nested) subexpressions we are currently in. The matched_something - field of reg_info[reg_num] helps us tell whether or not we have - matched any of the pattern so far this time through the reg_num-th - subexpression. These two fields get reset each time through any - loop their register is in. */ -#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */ - PREFIX(register_info_type) *reg_info; -#endif - - /* The following record the register info as found in the above - variables when we find a match better than any we've seen before. - This happens as we backtrack through the failure points, which in - turn happens only if we have not yet matched the entire string. */ - unsigned best_regs_set = false; -#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ - const CHAR_T **best_regstart, **best_regend; -#endif - - /* Logically, this is `best_regend[0]'. But we don't want to have to - allocate space for that if we're not allocating space for anything - else (see below). Also, we never need info about register 0 for - any of the other register vectors, and it seems rather a kludge to - treat `best_regend' differently than the rest. So we keep track of - the end of the best match so far in a separate variable. We - initialize this to NULL so that when we backtrack the first time - and need to test it, it's not garbage. */ - const CHAR_T *match_end = NULL; - - /* This helps SET_REGS_MATCHED avoid doing redundant work. */ - int set_regs_matched_done = 0; - - /* Used when we pop values we don't care about. */ -#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ - const CHAR_T **reg_dummy; - PREFIX(register_info_type) *reg_info_dummy; -#endif - -#ifdef DEBUG - /* Counts the total number of registers pushed. */ - unsigned num_regs_pushed = 0; -#endif - - DEBUG_PRINT1 ("\n\nEntering re_match_2.\n"); - - INIT_FAIL_STACK (); - -#ifdef MATCH_MAY_ALLOCATE - /* Do not bother to initialize all the register variables if there are - no groups in the pattern, as it takes a fair amount of time. If - there are groups, we include space for register 0 (the whole - pattern), even though we never use it, since it simplifies the - array indexing. We should fix this. */ - if (bufp->re_nsub) - { - regstart = REGEX_TALLOC (num_regs, const CHAR_T *); - regend = REGEX_TALLOC (num_regs, const CHAR_T *); - old_regstart = REGEX_TALLOC (num_regs, const CHAR_T *); - old_regend = REGEX_TALLOC (num_regs, const CHAR_T *); - best_regstart = REGEX_TALLOC (num_regs, const CHAR_T *); - best_regend = REGEX_TALLOC (num_regs, const CHAR_T *); - reg_info = REGEX_TALLOC (num_regs, PREFIX(register_info_type)); - reg_dummy = REGEX_TALLOC (num_regs, const CHAR_T *); - reg_info_dummy = REGEX_TALLOC (num_regs, PREFIX(register_info_type)); - - if (!(regstart && regend && old_regstart && old_regend && reg_info - && best_regstart && best_regend && reg_dummy && reg_info_dummy)) - { - FREE_VARIABLES (); - return -2; - } - } - else - { - /* We must initialize all our variables to NULL, so that - `FREE_VARIABLES' doesn't try to free them. */ - regstart = regend = old_regstart = old_regend = best_regstart - = best_regend = reg_dummy = NULL; - reg_info = reg_info_dummy = (PREFIX(register_info_type) *) NULL; - } -#endif /* MATCH_MAY_ALLOCATE */ - - /* The starting position is bogus. */ -#ifdef WCHAR - if (pos < 0 || pos > csize1 + csize2) -#else /* BYTE */ - if (pos < 0 || pos > size1 + size2) -#endif - { - FREE_VARIABLES (); - return -1; - } - -#ifdef WCHAR - /* Allocate wchar_t array for string1 and string2 and - fill them with converted string. */ - if (string1 == NULL && string2 == NULL) - { - /* We need seting up buffers here. */ - - /* We must free wcs buffers in this function. */ - cant_free_wcs_buf = 0; - - if (csize1 != 0) - { - string1 = REGEX_TALLOC (csize1 + 1, CHAR_T); - mbs_offset1 = REGEX_TALLOC (csize1 + 1, int); - is_binary = REGEX_TALLOC (csize1 + 1, char); - if (!string1 || !mbs_offset1 || !is_binary) - { - FREE_VAR (string1); - FREE_VAR (mbs_offset1); - FREE_VAR (is_binary); - return -2; - } - } - if (csize2 != 0) - { - string2 = REGEX_TALLOC (csize2 + 1, CHAR_T); - mbs_offset2 = REGEX_TALLOC (csize2 + 1, int); - is_binary = REGEX_TALLOC (csize2 + 1, char); - if (!string2 || !mbs_offset2 || !is_binary) - { - FREE_VAR (string1); - FREE_VAR (mbs_offset1); - FREE_VAR (string2); - FREE_VAR (mbs_offset2); - FREE_VAR (is_binary); - return -2; - } - size2 = convert_mbs_to_wcs(string2, cstring2, csize2, - mbs_offset2, is_binary); - string2[size2] = L'\0'; /* for a sentinel */ - FREE_VAR (is_binary); - } - } - - /* We need to cast pattern to (wchar_t*), because we casted this compiled - pattern to (char*) in regex_compile. */ - p = pattern = (CHAR_T*)bufp->buffer; - pend = (CHAR_T*)(bufp->buffer + bufp->used); - -#endif /* WCHAR */ - - /* Initialize subexpression text positions to -1 to mark ones that no - start_memory/stop_memory has been seen for. Also initialize the - register information struct. */ - for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) - { - regstart[mcnt] = regend[mcnt] - = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE; - - REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE; - IS_ACTIVE (reg_info[mcnt]) = 0; - MATCHED_SOMETHING (reg_info[mcnt]) = 0; - EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0; - } - - /* We move `string1' into `string2' if the latter's empty -- but not if - `string1' is null. */ - if (size2 == 0 && string1 != NULL) - { - string2 = string1; - size2 = size1; - string1 = 0; - size1 = 0; -#ifdef WCHAR - mbs_offset2 = mbs_offset1; - csize2 = csize1; - mbs_offset1 = NULL; - csize1 = 0; -#endif - } - end1 = string1 + size1; - end2 = string2 + size2; - - /* Compute where to stop matching, within the two strings. */ -#ifdef WCHAR - if (stop <= csize1) - { - mcnt = count_mbs_length(mbs_offset1, stop); - end_match_1 = string1 + mcnt; - end_match_2 = string2; - } - else - { - if (stop > csize1 + csize2) - stop = csize1 + csize2; - end_match_1 = end1; - mcnt = count_mbs_length(mbs_offset2, stop-csize1); - end_match_2 = string2 + mcnt; - } - if (mcnt < 0) - { /* count_mbs_length return error. */ - FREE_VARIABLES (); - return -1; - } -#else - if (stop <= size1) - { - end_match_1 = string1 + stop; - end_match_2 = string2; - } - else - { - end_match_1 = end1; - end_match_2 = string2 + stop - size1; - } -#endif /* WCHAR */ - - /* `p' scans through the pattern as `d' scans through the data. - `dend' is the end of the input string that `d' points within. `d' - is advanced into the following input string whenever necessary, but - this happens before fetching; therefore, at the beginning of the - loop, `d' can be pointing at the end of a string, but it cannot - equal `string2'. */ -#ifdef WCHAR - if (size1 > 0 && pos <= csize1) - { - mcnt = count_mbs_length(mbs_offset1, pos); - d = string1 + mcnt; - dend = end_match_1; - } - else - { - mcnt = count_mbs_length(mbs_offset2, pos-csize1); - d = string2 + mcnt; - dend = end_match_2; - } - - if (mcnt < 0) - { /* count_mbs_length return error. */ - FREE_VARIABLES (); - return -1; - } -#else - if (size1 > 0 && pos <= size1) - { - d = string1 + pos; - dend = end_match_1; - } - else - { - d = string2 + pos - size1; - dend = end_match_2; - } -#endif /* WCHAR */ - - DEBUG_PRINT1 ("The compiled pattern is:\n"); - DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend); - DEBUG_PRINT1 ("The string to match is: `"); - DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2); - DEBUG_PRINT1 ("'\n"); - - /* This loops over pattern commands. It exits by returning from the - function if the match is complete, or it drops through if the match - fails at this starting point in the input data. */ - for (;;) - { -#ifdef _LIBC - DEBUG_PRINT2 ("\n%p: ", p); -#else - DEBUG_PRINT2 ("\n0x%x: ", p); -#endif - - if (p == pend) - { /* End of pattern means we might have succeeded. */ - DEBUG_PRINT1 ("end of pattern ... "); - - /* If we haven't matched the entire string, and we want the - longest match, try backtracking. */ - if (d != end_match_2) - { - /* 1 if this match ends in the same string (string1 or string2) - as the best previous match. */ - boolean same_str_p = (FIRST_STRING_P (match_end) - == MATCHING_IN_FIRST_STRING); - /* 1 if this match is the best seen so far. */ - boolean best_match_p; - - /* AIX compiler got confused when this was combined - with the previous declaration. */ - if (same_str_p) - best_match_p = d > match_end; - else - best_match_p = !MATCHING_IN_FIRST_STRING; - - DEBUG_PRINT1 ("backtracking.\n"); - - if (!FAIL_STACK_EMPTY ()) - { /* More failure points to try. */ - - /* If exceeds best match so far, save it. */ - if (!best_regs_set || best_match_p) - { - best_regs_set = true; - match_end = d; - - DEBUG_PRINT1 ("\nSAVING match as best so far.\n"); - - for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) - { - best_regstart[mcnt] = regstart[mcnt]; - best_regend[mcnt] = regend[mcnt]; - } - } - goto fail; - } - - /* If no failure points, don't restore garbage. And if - last match is real best match, don't restore second - best one. */ - else if (best_regs_set && !best_match_p) - { - restore_best_regs: - /* Restore best match. It may happen that `dend == - end_match_1' while the restored d is in string2. - For example, the pattern `x.*y.*z' against the - strings `x-' and `y-z-', if the two strings are - not consecutive in memory. */ - DEBUG_PRINT1 ("Restoring best registers.\n"); - - d = match_end; - dend = ((d >= string1 && d <= end1) - ? end_match_1 : end_match_2); - - for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) - { - regstart[mcnt] = best_regstart[mcnt]; - regend[mcnt] = best_regend[mcnt]; - } - } - } /* d != end_match_2 */ - - succeed_label: - DEBUG_PRINT1 ("Accepting match.\n"); - /* If caller wants register contents data back, do it. */ - if (regs && !bufp->no_sub) - { - /* Have the register data arrays been allocated? */ - if (bufp->regs_allocated == REGS_UNALLOCATED) - { /* No. So allocate them with malloc. We need one - extra element beyond `num_regs' for the `-1' marker - GNU code uses. */ - regs->num_regs = MAX (RE_NREGS, num_regs + 1); - regs->start = TALLOC (regs->num_regs, regoff_t); - regs->end = TALLOC (regs->num_regs, regoff_t); - if (regs->start == NULL || regs->end == NULL) - { - FREE_VARIABLES (); - return -2; - } - bufp->regs_allocated = REGS_REALLOCATE; - } - else if (bufp->regs_allocated == REGS_REALLOCATE) - { /* Yes. If we need more elements than were already - allocated, reallocate them. If we need fewer, just - leave it alone. */ - if (regs->num_regs < num_regs + 1) - { - regs->num_regs = num_regs + 1; - RETALLOC (regs->start, regs->num_regs, regoff_t); - RETALLOC (regs->end, regs->num_regs, regoff_t); - if (regs->start == NULL || regs->end == NULL) - { - FREE_VARIABLES (); - return -2; - } - } - } - else - { - /* These braces fend off a "empty body in an else-statement" - warning under GCC when assert expands to nothing. */ - assert (bufp->regs_allocated == REGS_FIXED); - } - - /* Convert the pointer data in `regstart' and `regend' to - indices. Register zero has to be set differently, - since we haven't kept track of any info for it. */ - if (regs->num_regs > 0) - { - regs->start[0] = pos; -#ifdef WCHAR - if (MATCHING_IN_FIRST_STRING) - regs->end[0] = mbs_offset1 != NULL ? - mbs_offset1[d-string1] : 0; - else - regs->end[0] = csize1 + (mbs_offset2 != NULL ? - mbs_offset2[d-string2] : 0); -#else - regs->end[0] = (MATCHING_IN_FIRST_STRING - ? ((regoff_t) (d - string1)) - : ((regoff_t) (d - string2 + size1))); -#endif /* WCHAR */ - } - - /* Go through the first `min (num_regs, regs->num_regs)' - registers, since that is all we initialized. */ - for (mcnt = 1; (unsigned) mcnt < MIN (num_regs, regs->num_regs); - mcnt++) - { - if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt])) - regs->start[mcnt] = regs->end[mcnt] = -1; - else - { - regs->start[mcnt] - = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]); - regs->end[mcnt] - = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]); - } - } - - /* If the regs structure we return has more elements than - were in the pattern, set the extra elements to -1. If - we (re)allocated the registers, this is the case, - because we always allocate enough to have at least one - -1 at the end. */ - for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++) - regs->start[mcnt] = regs->end[mcnt] = -1; - } /* regs && !bufp->no_sub */ - - DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n", - nfailure_points_pushed, nfailure_points_popped, - nfailure_points_pushed - nfailure_points_popped); - DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed); - -#ifdef WCHAR - if (MATCHING_IN_FIRST_STRING) - mcnt = mbs_offset1 != NULL ? mbs_offset1[d-string1] : 0; - else - mcnt = (mbs_offset2 != NULL ? mbs_offset2[d-string2] : 0) + - csize1; - mcnt -= pos; -#else - mcnt = d - pos - (MATCHING_IN_FIRST_STRING - ? string1 - : string2 - size1); -#endif /* WCHAR */ - - DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt); - - FREE_VARIABLES (); - return mcnt; - } - - /* Otherwise match next pattern command. */ - switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++)) - { - /* Ignore these. Used to ignore the n of succeed_n's which - currently have n == 0. */ - case no_op: - DEBUG_PRINT1 ("EXECUTING no_op.\n"); - break; - - case succeed: - DEBUG_PRINT1 ("EXECUTING succeed.\n"); - goto succeed_label; - - /* Match the next n pattern characters exactly. The following - byte in the pattern defines n, and the n bytes after that - are the characters to match. */ - case exactn: -#ifdef MBS_SUPPORT - case exactn_bin: -#endif - mcnt = *p++; - DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt); - - /* This is written out as an if-else so we don't waste time - testing `translate' inside the loop. */ - if (translate) - { - do - { - PREFETCH (); -#ifdef WCHAR - if (*d <= 0xff) - { - if ((UCHAR_T) translate[(unsigned char) *d++] - != (UCHAR_T) *p++) - goto fail; - } - else - { - if (*d++ != (CHAR_T) *p++) - goto fail; - } -#else - if ((UCHAR_T) translate[(unsigned char) *d++] - != (UCHAR_T) *p++) - goto fail; -#endif /* WCHAR */ - } - while (--mcnt); - } - else - { - do - { - PREFETCH (); - if (*d++ != (CHAR_T) *p++) goto fail; - } - while (--mcnt); - } - SET_REGS_MATCHED (); - break; - - - /* Match any character except possibly a newline or a null. */ - case anychar: - DEBUG_PRINT1 ("EXECUTING anychar.\n"); - - PREFETCH (); - - if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n') - || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000')) - goto fail; - - SET_REGS_MATCHED (); - DEBUG_PRINT2 (" Matched `%ld'.\n", (long int) *d); - d++; - break; - - - case charset: - case charset_not: - { - register UCHAR_T c; -#ifdef WCHAR - unsigned int i, char_class_length, coll_symbol_length, - equiv_class_length, ranges_length, chars_length, length; - CHAR_T *workp, *workp2, *charset_top; -#define WORK_BUFFER_SIZE 128 - CHAR_T str_buf[WORK_BUFFER_SIZE]; -# ifdef _LIBC - uint32_t nrules; -# endif /* _LIBC */ -#endif /* WCHAR */ - boolean negate = (re_opcode_t) *(p - 1) == charset_not; - - DEBUG_PRINT2 ("EXECUTING charset%s.\n", negate ? "_not" : ""); - PREFETCH (); - c = TRANSLATE (*d); /* The character to match. */ -#ifdef WCHAR -# ifdef _LIBC - nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); -# endif /* _LIBC */ - charset_top = p - 1; - char_class_length = *p++; - coll_symbol_length = *p++; - equiv_class_length = *p++; - ranges_length = *p++; - chars_length = *p++; - /* p points charset[6], so the address of the next instruction - (charset[l+m+n+2o+k+p']) equals p[l+m+n+2*o+p'], - where l=length of char_classes, m=length of collating_symbol, - n=equivalence_class, o=length of char_range, - p'=length of character. */ - workp = p; - /* Update p to indicate the next instruction. */ - p += char_class_length + coll_symbol_length+ equiv_class_length + - 2*ranges_length + chars_length; - - /* match with char_class? */ - for (i = 0; i < char_class_length ; i += CHAR_CLASS_SIZE) - { - wctype_t wctype; - uintptr_t alignedp = ((uintptr_t)workp - + __alignof__(wctype_t) - 1) - & ~(uintptr_t)(__alignof__(wctype_t) - 1); - wctype = *((wctype_t*)alignedp); - workp += CHAR_CLASS_SIZE; -# ifdef _LIBC - if (__iswctype((wint_t)c, wctype)) - goto char_set_matched; -# else - if (iswctype((wint_t)c, wctype)) - goto char_set_matched; -# endif - } - - /* match with collating_symbol? */ -# ifdef _LIBC - if (nrules != 0) - { - const unsigned char *extra = (const unsigned char *) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); - - for (workp2 = workp + coll_symbol_length ; workp < workp2 ; - workp++) - { - int32_t *wextra; - wextra = (int32_t*)(extra + *workp++); - for (i = 0; i < *wextra; ++i) - if (TRANSLATE(d[i]) != wextra[1 + i]) - break; - - if (i == *wextra) - { - /* Update d, however d will be incremented at - char_set_matched:, we decrement d here. */ - d += i - 1; - goto char_set_matched; - } - } - } - else /* (nrules == 0) */ -# endif - /* If we can't look up collation data, we use wcscoll - instead. */ - { - for (workp2 = workp + coll_symbol_length ; workp < workp2 ;) - { - const CHAR_T *backup_d = d, *backup_dend = dend; -# ifdef _LIBC - length = __wcslen (workp); -# else - length = wcslen (workp); -# endif - - /* If wcscoll(the collating symbol, whole string) > 0, - any substring of the string never match with the - collating symbol. */ -# ifdef _LIBC - if (__wcscoll (workp, d) > 0) -# else - if (wcscoll (workp, d) > 0) -# endif - { - workp += length + 1; - continue; - } - - /* First, we compare the collating symbol with - the first character of the string. - If it don't match, we add the next character to - the compare buffer in turn. */ - for (i = 0 ; i < WORK_BUFFER_SIZE-1 ; i++, d++) - { - int match; - if (d == dend) - { - if (dend == end_match_2) - break; - d = string2; - dend = end_match_2; - } - - /* add next character to the compare buffer. */ - str_buf[i] = TRANSLATE(*d); - str_buf[i+1] = '\0'; - -# ifdef _LIBC - match = __wcscoll (workp, str_buf); -# else - match = wcscoll (workp, str_buf); -# endif - if (match == 0) - goto char_set_matched; - - if (match < 0) - /* (str_buf > workp) indicate (str_buf + X > workp), - because for all X (str_buf + X > str_buf). - So we don't need continue this loop. */ - break; - - /* Otherwise(str_buf < workp), - (str_buf+next_character) may equals (workp). - So we continue this loop. */ - } - /* not matched */ - d = backup_d; - dend = backup_dend; - workp += length + 1; - } - } - /* match with equivalence_class? */ -# ifdef _LIBC - if (nrules != 0) - { - const CHAR_T *backup_d = d, *backup_dend = dend; - /* Try to match the equivalence class against - those known to the collate implementation. */ - const int32_t *table; - const int32_t *weights; - const int32_t *extra; - const int32_t *indirect; - int32_t idx, idx2; - wint_t *cp; - size_t len; - - /* This #include defines a local function! */ -# include - - table = (const int32_t *) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC); - weights = (const wint_t *) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC); - extra = (const wint_t *) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC); - indirect = (const int32_t *) - _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC); - - /* Write 1 collating element to str_buf, and - get its index. */ - idx2 = 0; - - for (i = 0 ; idx2 == 0 && i < WORK_BUFFER_SIZE - 1; i++) - { - cp = (wint_t*)str_buf; - if (d == dend) - { - if (dend == end_match_2) - break; - d = string2; - dend = end_match_2; - } - str_buf[i] = TRANSLATE(*(d+i)); - str_buf[i+1] = '\0'; /* sentinel */ - idx2 = findidx ((const wint_t**)&cp); - } - - /* Update d, however d will be incremented at - char_set_matched:, we decrement d here. */ - d = backup_d + ((wchar_t*)cp - (wchar_t*)str_buf - 1); - if (d >= dend) - { - if (dend == end_match_2) - d = dend; - else - { - d = string2; - dend = end_match_2; - } - } - - len = weights[idx2]; - - for (workp2 = workp + equiv_class_length ; workp < workp2 ; - workp++) - { - idx = (int32_t)*workp; - /* We already checked idx != 0 in regex_compile. */ - - if (idx2 != 0 && len == weights[idx]) - { - int cnt = 0; - while (cnt < len && (weights[idx + 1 + cnt] - == weights[idx2 + 1 + cnt])) - ++cnt; - - if (cnt == len) - goto char_set_matched; - } - } - /* not matched */ - d = backup_d; - dend = backup_dend; - } - else /* (nrules == 0) */ -# endif - /* If we can't look up collation data, we use wcscoll - instead. */ - { - for (workp2 = workp + equiv_class_length ; workp < workp2 ;) - { - const CHAR_T *backup_d = d, *backup_dend = dend; -# ifdef _LIBC - length = __wcslen (workp); -# else - length = wcslen (workp); -# endif - - /* If wcscoll(the collating symbol, whole string) > 0, - any substring of the string never match with the - collating symbol. */ -# ifdef _LIBC - if (__wcscoll (workp, d) > 0) -# else - if (wcscoll (workp, d) > 0) -# endif - { - workp += length + 1; - break; - } - - /* First, we compare the equivalence class with - the first character of the string. - If it don't match, we add the next character to - the compare buffer in turn. */ - for (i = 0 ; i < WORK_BUFFER_SIZE - 1 ; i++, d++) - { - int match; - if (d == dend) - { - if (dend == end_match_2) - break; - d = string2; - dend = end_match_2; - } - - /* add next character to the compare buffer. */ - str_buf[i] = TRANSLATE(*d); - str_buf[i+1] = '\0'; - -# ifdef _LIBC - match = __wcscoll (workp, str_buf); -# else - match = wcscoll (workp, str_buf); -# endif - - if (match == 0) - goto char_set_matched; - - if (match < 0) - /* (str_buf > workp) indicate (str_buf + X > workp), - because for all X (str_buf + X > str_buf). - So we don't need continue this loop. */ - break; - - /* Otherwise(str_buf < workp), - (str_buf+next_character) may equals (workp). - So we continue this loop. */ - } - /* not matched */ - d = backup_d; - dend = backup_dend; - workp += length + 1; - } - } - - /* match with char_range? */ -# ifdef _LIBC - if (nrules != 0) - { - uint32_t collseqval; - const char *collseq = (const char *) - _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC); - - collseqval = collseq_table_lookup (collseq, c); - - for (; workp < p - chars_length ;) - { - uint32_t start_val, end_val; - - /* We already compute the collation sequence value - of the characters (or collating symbols). */ - start_val = (uint32_t) *workp++; /* range_start */ - end_val = (uint32_t) *workp++; /* range_end */ - - if (start_val <= collseqval && collseqval <= end_val) - goto char_set_matched; - } - } - else -# endif - { - /* We set range_start_char at str_buf[0], range_end_char - at str_buf[4], and compared char at str_buf[2]. */ - str_buf[1] = 0; - str_buf[2] = c; - str_buf[3] = 0; - str_buf[5] = 0; - for (; workp < p - chars_length ;) - { - wchar_t *range_start_char, *range_end_char; - - /* match if (range_start_char <= c <= range_end_char). */ - - /* If range_start(or end) < 0, we assume -range_start(end) - is the offset of the collating symbol which is specified - as the character of the range start(end). */ - - /* range_start */ - if (*workp < 0) - range_start_char = charset_top - (*workp++); - else - { - str_buf[0] = *workp++; - range_start_char = str_buf; - } - - /* range_end */ - if (*workp < 0) - range_end_char = charset_top - (*workp++); - else - { - str_buf[4] = *workp++; - range_end_char = str_buf + 4; - } - -# ifdef _LIBC - if (__wcscoll (range_start_char, str_buf+2) <= 0 - && __wcscoll (str_buf+2, range_end_char) <= 0) -# else - if (wcscoll (range_start_char, str_buf+2) <= 0 - && wcscoll (str_buf+2, range_end_char) <= 0) -# endif - goto char_set_matched; - } - } - - /* match with char? */ - for (; workp < p ; workp++) - if (c == *workp) - goto char_set_matched; - - negate = !negate; - - char_set_matched: - if (negate) goto fail; -#else - /* Cast to `unsigned' instead of `unsigned char' in case the - bit list is a full 32 bytes long. */ - if (c < (unsigned) (*p * BYTEWIDTH) - && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) - negate = !negate; - - p += 1 + *p; - - if (!negate) goto fail; -#undef WORK_BUFFER_SIZE -#endif /* WCHAR */ - SET_REGS_MATCHED (); - d++; - break; - } - - - /* The beginning of a group is represented by start_memory. - The arguments are the register number in the next byte, and the - number of groups inner to this one in the next. The text - matched within the group is recorded (in the internal - registers data structure) under the register number. */ - case start_memory: - DEBUG_PRINT3 ("EXECUTING start_memory %ld (%ld):\n", - (long int) *p, (long int) p[1]); - - /* Find out if this group can match the empty string. */ - p1 = p; /* To send to group_match_null_string_p. */ - - if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE) - REG_MATCH_NULL_STRING_P (reg_info[*p]) - = PREFIX(group_match_null_string_p) (&p1, pend, reg_info); - - /* Save the position in the string where we were the last time - we were at this open-group operator in case the group is - operated upon by a repetition operator, e.g., with `(a*)*b' - against `ab'; then we want to ignore where we are now in - the string in case this attempt to match fails. */ - old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) - ? REG_UNSET (regstart[*p]) ? d : regstart[*p] - : regstart[*p]; - DEBUG_PRINT2 (" old_regstart: %d\n", - POINTER_TO_OFFSET (old_regstart[*p])); - - regstart[*p] = d; - DEBUG_PRINT2 (" regstart: %d\n", POINTER_TO_OFFSET (regstart[*p])); - - IS_ACTIVE (reg_info[*p]) = 1; - MATCHED_SOMETHING (reg_info[*p]) = 0; - - /* Clear this whenever we change the register activity status. */ - set_regs_matched_done = 0; - - /* This is the new highest active register. */ - highest_active_reg = *p; - - /* If nothing was active before, this is the new lowest active - register. */ - if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) - lowest_active_reg = *p; - - /* Move past the register number and inner group count. */ - p += 2; - just_past_start_mem = p; - - break; - - - /* The stop_memory opcode represents the end of a group. Its - arguments are the same as start_memory's: the register - number, and the number of inner groups. */ - case stop_memory: - DEBUG_PRINT3 ("EXECUTING stop_memory %ld (%ld):\n", - (long int) *p, (long int) p[1]); - - /* We need to save the string position the last time we were at - this close-group operator in case the group is operated - upon by a repetition operator, e.g., with `((a*)*(b*)*)*' - against `aba'; then we want to ignore where we are now in - the string in case this attempt to match fails. */ - old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) - ? REG_UNSET (regend[*p]) ? d : regend[*p] - : regend[*p]; - DEBUG_PRINT2 (" old_regend: %d\n", - POINTER_TO_OFFSET (old_regend[*p])); - - regend[*p] = d; - DEBUG_PRINT2 (" regend: %d\n", POINTER_TO_OFFSET (regend[*p])); - - /* This register isn't active anymore. */ - IS_ACTIVE (reg_info[*p]) = 0; - - /* Clear this whenever we change the register activity status. */ - set_regs_matched_done = 0; - - /* If this was the only register active, nothing is active - anymore. */ - if (lowest_active_reg == highest_active_reg) - { - lowest_active_reg = NO_LOWEST_ACTIVE_REG; - highest_active_reg = NO_HIGHEST_ACTIVE_REG; - } - else - { /* We must scan for the new highest active register, since - it isn't necessarily one less than now: consider - (a(b)c(d(e)f)g). When group 3 ends, after the f), the - new highest active register is 1. */ - UCHAR_T r = *p - 1; - while (r > 0 && !IS_ACTIVE (reg_info[r])) - r--; - - /* If we end up at register zero, that means that we saved - the registers as the result of an `on_failure_jump', not - a `start_memory', and we jumped to past the innermost - `stop_memory'. For example, in ((.)*) we save - registers 1 and 2 as a result of the *, but when we pop - back to the second ), we are at the stop_memory 1. - Thus, nothing is active. */ - if (r == 0) - { - lowest_active_reg = NO_LOWEST_ACTIVE_REG; - highest_active_reg = NO_HIGHEST_ACTIVE_REG; - } - else - highest_active_reg = r; - } - - /* If just failed to match something this time around with a - group that's operated on by a repetition operator, try to - force exit from the ``loop'', and restore the register - information for this group that we had before trying this - last match. */ - if ((!MATCHED_SOMETHING (reg_info[*p]) - || just_past_start_mem == p - 1) - && (p + 2) < pend) - { - boolean is_a_jump_n = false; - - p1 = p + 2; - mcnt = 0; - switch ((re_opcode_t) *p1++) - { - case jump_n: - is_a_jump_n = true; - case pop_failure_jump: - case maybe_pop_jump: - case jump: - case dummy_failure_jump: - EXTRACT_NUMBER_AND_INCR (mcnt, p1); - if (is_a_jump_n) - p1 += OFFSET_ADDRESS_SIZE; - break; - - default: - /* do nothing */ ; - } - p1 += mcnt; - - /* If the next operation is a jump backwards in the pattern - to an on_failure_jump right before the start_memory - corresponding to this stop_memory, exit from the loop - by forcing a failure after pushing on the stack the - on_failure_jump's jump in the pattern, and d. */ - if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump - && (re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == start_memory - && p1[2+OFFSET_ADDRESS_SIZE] == *p) - { - /* If this group ever matched anything, then restore - what its registers were before trying this last - failed match, e.g., with `(a*)*b' against `ab' for - regstart[1], and, e.g., with `((a*)*(b*)*)*' - against `aba' for regend[3]. - - Also restore the registers for inner groups for, - e.g., `((a*)(b*))*' against `aba' (register 3 would - otherwise get trashed). */ - - if (EVER_MATCHED_SOMETHING (reg_info[*p])) - { - unsigned r; - - EVER_MATCHED_SOMETHING (reg_info[*p]) = 0; - - /* Restore this and inner groups' (if any) registers. */ - for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1); - r++) - { - regstart[r] = old_regstart[r]; - - /* xx why this test? */ - if (old_regend[r] >= regstart[r]) - regend[r] = old_regend[r]; - } - } - p1++; - EXTRACT_NUMBER_AND_INCR (mcnt, p1); - PUSH_FAILURE_POINT (p1 + mcnt, d, -2); - - goto fail; - } - } - - /* Move past the register number and the inner group count. */ - p += 2; - break; - - - /* \ has been turned into a `duplicate' command which is - followed by the numeric value of as the register number. */ - case duplicate: - { - register const CHAR_T *d2, *dend2; - int regno = *p++; /* Get which register to match against. */ - DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno); - - /* Can't back reference a group which we've never matched. */ - if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno])) - goto fail; - - /* Where in input to try to start matching. */ - d2 = regstart[regno]; - - /* Where to stop matching; if both the place to start and - the place to stop matching are in the same string, then - set to the place to stop, otherwise, for now have to use - the end of the first string. */ - - dend2 = ((FIRST_STRING_P (regstart[regno]) - == FIRST_STRING_P (regend[regno])) - ? regend[regno] : end_match_1); - for (;;) - { - /* If necessary, advance to next segment in register - contents. */ - while (d2 == dend2) - { - if (dend2 == end_match_2) break; - if (dend2 == regend[regno]) break; - - /* End of string1 => advance to string2. */ - d2 = string2; - dend2 = regend[regno]; - } - /* At end of register contents => success */ - if (d2 == dend2) break; - - /* If necessary, advance to next segment in data. */ - PREFETCH (); - - /* How many characters left in this segment to match. */ - mcnt = dend - d; - - /* Want how many consecutive characters we can match in - one shot, so, if necessary, adjust the count. */ - if (mcnt > dend2 - d2) - mcnt = dend2 - d2; - - /* Compare that many; failure if mismatch, else move - past them. */ - if (translate - ? PREFIX(bcmp_translate) (d, d2, mcnt, translate) - : memcmp (d, d2, mcnt*sizeof(UCHAR_T))) - goto fail; - d += mcnt, d2 += mcnt; - - /* Do this because we've match some characters. */ - SET_REGS_MATCHED (); - } - } - break; - - - /* begline matches the empty string at the beginning of the string - (unless `not_bol' is set in `bufp'), and, if - `newline_anchor' is set, after newlines. */ - case begline: - DEBUG_PRINT1 ("EXECUTING begline.\n"); - - if (AT_STRINGS_BEG (d)) - { - if (!bufp->not_bol) break; - } - else if (d[-1] == '\n' && bufp->newline_anchor) - { - break; - } - /* In all other cases, we fail. */ - goto fail; - - - /* endline is the dual of begline. */ - case endline: - DEBUG_PRINT1 ("EXECUTING endline.\n"); - - if (AT_STRINGS_END (d)) - { - if (!bufp->not_eol) break; - } - - /* We have to ``prefetch'' the next character. */ - else if ((d == end1 ? *string2 : *d) == '\n' - && bufp->newline_anchor) - { - break; - } - goto fail; - - - /* Match at the very beginning of the data. */ - case begbuf: - DEBUG_PRINT1 ("EXECUTING begbuf.\n"); - if (AT_STRINGS_BEG (d)) - break; - goto fail; - - - /* Match at the very end of the data. */ - case endbuf: - DEBUG_PRINT1 ("EXECUTING endbuf.\n"); - if (AT_STRINGS_END (d)) - break; - goto fail; - - - /* on_failure_keep_string_jump is used to optimize `.*\n'. It - pushes NULL as the value for the string on the stack. Then - `pop_failure_point' will keep the current value for the - string, instead of restoring it. To see why, consider - matching `foo\nbar' against `.*\n'. The .* matches the foo; - then the . fails against the \n. But the next thing we want - to do is match the \n against the \n; if we restored the - string value, we would be back at the foo. - - Because this is used only in specific cases, we don't need to - check all the things that `on_failure_jump' does, to make - sure the right things get saved on the stack. Hence we don't - share its code. The only reason to push anything on the - stack at all is that otherwise we would have to change - `anychar's code to do something besides goto fail in this - case; that seems worse than this. */ - case on_failure_keep_string_jump: - DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump"); - - EXTRACT_NUMBER_AND_INCR (mcnt, p); -#ifdef _LIBC - DEBUG_PRINT3 (" %d (to %p):\n", mcnt, p + mcnt); -#else - DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt); -#endif - - PUSH_FAILURE_POINT (p + mcnt, NULL, -2); - break; - - - /* Uses of on_failure_jump: - - Each alternative starts with an on_failure_jump that points - to the beginning of the next alternative. Each alternative - except the last ends with a jump that in effect jumps past - the rest of the alternatives. (They really jump to the - ending jump of the following alternative, because tensioning - these jumps is a hassle.) - - Repeats start with an on_failure_jump that points past both - the repetition text and either the following jump or - pop_failure_jump back to this on_failure_jump. */ - case on_failure_jump: - on_failure: - DEBUG_PRINT1 ("EXECUTING on_failure_jump"); - - EXTRACT_NUMBER_AND_INCR (mcnt, p); -#ifdef _LIBC - DEBUG_PRINT3 (" %d (to %p)", mcnt, p + mcnt); -#else - DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt); -#endif - - /* If this on_failure_jump comes right before a group (i.e., - the original * applied to a group), save the information - for that group and all inner ones, so that if we fail back - to this point, the group's information will be correct. - For example, in \(a*\)*\1, we need the preceding group, - and in \(zz\(a*\)b*\)\2, we need the inner group. */ - - /* We can't use `p' to check ahead because we push - a failure point to `p + mcnt' after we do this. */ - p1 = p; - - /* We need to skip no_op's before we look for the - start_memory in case this on_failure_jump is happening as - the result of a completed succeed_n, as in \(a\)\{1,3\}b\1 - against aba. */ - while (p1 < pend && (re_opcode_t) *p1 == no_op) - p1++; - - if (p1 < pend && (re_opcode_t) *p1 == start_memory) - { - /* We have a new highest active register now. This will - get reset at the start_memory we are about to get to, - but we will have saved all the registers relevant to - this repetition op, as described above. */ - highest_active_reg = *(p1 + 1) + *(p1 + 2); - if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) - lowest_active_reg = *(p1 + 1); - } - - DEBUG_PRINT1 (":\n"); - PUSH_FAILURE_POINT (p + mcnt, d, -2); - break; - - - /* A smart repeat ends with `maybe_pop_jump'. - We change it to either `pop_failure_jump' or `jump'. */ - case maybe_pop_jump: - EXTRACT_NUMBER_AND_INCR (mcnt, p); - DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt); - { - register UCHAR_T *p2 = p; - - /* Compare the beginning of the repeat with what in the - pattern follows its end. If we can establish that there - is nothing that they would both match, i.e., that we - would have to backtrack because of (as in, e.g., `a*a') - then we can change to pop_failure_jump, because we'll - never have to backtrack. - - This is not true in the case of alternatives: in - `(a|ab)*' we do need to backtrack to the `ab' alternative - (e.g., if the string was `ab'). But instead of trying to - detect that here, the alternative has put on a dummy - failure point which is what we will end up popping. */ - - /* Skip over open/close-group commands. - If what follows this loop is a ...+ construct, - look at what begins its body, since we will have to - match at least one of that. */ - while (1) - { - if (p2 + 2 < pend - && ((re_opcode_t) *p2 == stop_memory - || (re_opcode_t) *p2 == start_memory)) - p2 += 3; - else if (p2 + 2 + 2 * OFFSET_ADDRESS_SIZE < pend - && (re_opcode_t) *p2 == dummy_failure_jump) - p2 += 2 + 2 * OFFSET_ADDRESS_SIZE; - else - break; - } - - p1 = p + mcnt; - /* p1[0] ... p1[2] are the `on_failure_jump' corresponding - to the `maybe_finalize_jump' of this case. Examine what - follows. */ - - /* If we're at the end of the pattern, we can change. */ - if (p2 == pend) - { - /* Consider what happens when matching ":\(.*\)" - against ":/". I don't really understand this code - yet. */ - p[-(1+OFFSET_ADDRESS_SIZE)] = (UCHAR_T) - pop_failure_jump; - DEBUG_PRINT1 - (" End of pattern: change to `pop_failure_jump'.\n"); - } - - else if ((re_opcode_t) *p2 == exactn -#ifdef MBS_SUPPORT - || (re_opcode_t) *p2 == exactn_bin -#endif - || (bufp->newline_anchor && (re_opcode_t) *p2 == endline)) - { - register UCHAR_T c - = *p2 == (UCHAR_T) endline ? '\n' : p2[2]; - - if (((re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == exactn -#ifdef MBS_SUPPORT - || (re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == exactn_bin -#endif - ) && p1[3+OFFSET_ADDRESS_SIZE] != c) - { - p[-(1+OFFSET_ADDRESS_SIZE)] = (UCHAR_T) - pop_failure_jump; -#ifdef WCHAR - DEBUG_PRINT3 (" %C != %C => pop_failure_jump.\n", - (wint_t) c, - (wint_t) p1[3+OFFSET_ADDRESS_SIZE]); -#else - DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n", - (char) c, - (char) p1[3+OFFSET_ADDRESS_SIZE]); -#endif - } - -#ifndef WCHAR - else if ((re_opcode_t) p1[3] == charset - || (re_opcode_t) p1[3] == charset_not) - { - int negate = (re_opcode_t) p1[3] == charset_not; - - if (c < (unsigned) (p1[4] * BYTEWIDTH) - && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) - negate = !negate; - - /* `negate' is equal to 1 if c would match, which means - that we can't change to pop_failure_jump. */ - if (!negate) - { - p[-3] = (unsigned char) pop_failure_jump; - DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); - } - } -#endif /* not WCHAR */ - } -#ifndef WCHAR - else if ((re_opcode_t) *p2 == charset) - { - /* We win if the first character of the loop is not part - of the charset. */ - if ((re_opcode_t) p1[3] == exactn - && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5] - && (p2[2 + p1[5] / BYTEWIDTH] - & (1 << (p1[5] % BYTEWIDTH))))) - { - p[-3] = (unsigned char) pop_failure_jump; - DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); - } - - else if ((re_opcode_t) p1[3] == charset_not) - { - int idx; - /* We win if the charset_not inside the loop - lists every character listed in the charset after. */ - for (idx = 0; idx < (int) p2[1]; idx++) - if (! (p2[2 + idx] == 0 - || (idx < (int) p1[4] - && ((p2[2 + idx] & ~ p1[5 + idx]) == 0)))) - break; - - if (idx == p2[1]) - { - p[-3] = (unsigned char) pop_failure_jump; - DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); - } - } - else if ((re_opcode_t) p1[3] == charset) - { - int idx; - /* We win if the charset inside the loop - has no overlap with the one after the loop. */ - for (idx = 0; - idx < (int) p2[1] && idx < (int) p1[4]; - idx++) - if ((p2[2 + idx] & p1[5 + idx]) != 0) - break; - - if (idx == p2[1] || idx == p1[4]) - { - p[-3] = (unsigned char) pop_failure_jump; - DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); - } - } - } -#endif /* not WCHAR */ - } - p -= OFFSET_ADDRESS_SIZE; /* Point at relative address again. */ - if ((re_opcode_t) p[-1] != pop_failure_jump) - { - p[-1] = (UCHAR_T) jump; - DEBUG_PRINT1 (" Match => jump.\n"); - goto unconditional_jump; - } - /* Note fall through. */ - - - /* The end of a simple repeat has a pop_failure_jump back to - its matching on_failure_jump, where the latter will push a - failure point. The pop_failure_jump takes off failure - points put on by this pop_failure_jump's matching - on_failure_jump; we got through the pattern to here from the - matching on_failure_jump, so didn't fail. */ - case pop_failure_jump: - { - /* We need to pass separate storage for the lowest and - highest registers, even though we don't care about the - actual values. Otherwise, we will restore only one - register from the stack, since lowest will == highest in - `pop_failure_point'. */ - active_reg_t dummy_low_reg, dummy_high_reg; - UCHAR_T *pdummy = NULL; - const CHAR_T *sdummy = NULL; - - DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n"); - POP_FAILURE_POINT (sdummy, pdummy, - dummy_low_reg, dummy_high_reg, - reg_dummy, reg_dummy, reg_info_dummy); - } - /* Note fall through. */ - - unconditional_jump: -#ifdef _LIBC - DEBUG_PRINT2 ("\n%p: ", p); -#else - DEBUG_PRINT2 ("\n0x%x: ", p); -#endif - /* Note fall through. */ - - /* Unconditionally jump (without popping any failure points). */ - case jump: - EXTRACT_NUMBER_AND_INCR (mcnt, p); /* Get the amount to jump. */ - DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt); - p += mcnt; /* Do the jump. */ -#ifdef _LIBC - DEBUG_PRINT2 ("(to %p).\n", p); -#else - DEBUG_PRINT2 ("(to 0x%x).\n", p); -#endif - break; - - - /* We need this opcode so we can detect where alternatives end - in `group_match_null_string_p' et al. */ - case jump_past_alt: - DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n"); - goto unconditional_jump; - - - /* Normally, the on_failure_jump pushes a failure point, which - then gets popped at pop_failure_jump. We will end up at - pop_failure_jump, also, and with a pattern of, say, `a+', we - are skipping over the on_failure_jump, so we have to push - something meaningless for pop_failure_jump to pop. */ - case dummy_failure_jump: - DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n"); - /* It doesn't matter what we push for the string here. What - the code at `fail' tests is the value for the pattern. */ - PUSH_FAILURE_POINT (NULL, NULL, -2); - goto unconditional_jump; - - - /* At the end of an alternative, we need to push a dummy failure - point in case we are followed by a `pop_failure_jump', because - we don't want the failure point for the alternative to be - popped. For example, matching `(a|ab)*' against `aab' - requires that we match the `ab' alternative. */ - case push_dummy_failure: - DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n"); - /* See comments just above at `dummy_failure_jump' about the - two zeroes. */ - PUSH_FAILURE_POINT (NULL, NULL, -2); - break; - - /* Have to succeed matching what follows at least n times. - After that, handle like `on_failure_jump'. */ - case succeed_n: - EXTRACT_NUMBER (mcnt, p + OFFSET_ADDRESS_SIZE); - DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt); - - assert (mcnt >= 0); - /* Originally, this is how many times we HAVE to succeed. */ - if (mcnt > 0) - { - mcnt--; - p += OFFSET_ADDRESS_SIZE; - STORE_NUMBER_AND_INCR (p, mcnt); -#ifdef _LIBC - DEBUG_PRINT3 (" Setting %p to %d.\n", p - OFFSET_ADDRESS_SIZE - , mcnt); -#else - DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p - OFFSET_ADDRESS_SIZE - , mcnt); -#endif - } - else if (mcnt == 0) - { -#ifdef _LIBC - DEBUG_PRINT2 (" Setting two bytes from %p to no_op.\n", - p + OFFSET_ADDRESS_SIZE); -#else - DEBUG_PRINT2 (" Setting two bytes from 0x%x to no_op.\n", - p + OFFSET_ADDRESS_SIZE); -#endif /* _LIBC */ - -#ifdef WCHAR - p[1] = (UCHAR_T) no_op; -#else - p[2] = (UCHAR_T) no_op; - p[3] = (UCHAR_T) no_op; -#endif /* WCHAR */ - goto on_failure; - } - break; - - case jump_n: - EXTRACT_NUMBER (mcnt, p + OFFSET_ADDRESS_SIZE); - DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt); - - /* Originally, this is how many times we CAN jump. */ - if (mcnt) - { - mcnt--; - STORE_NUMBER (p + OFFSET_ADDRESS_SIZE, mcnt); - -#ifdef _LIBC - DEBUG_PRINT3 (" Setting %p to %d.\n", p + OFFSET_ADDRESS_SIZE, - mcnt); -#else - DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p + OFFSET_ADDRESS_SIZE, - mcnt); -#endif /* _LIBC */ - goto unconditional_jump; - } - /* If don't have to jump any more, skip over the rest of command. */ - else - p += 2 * OFFSET_ADDRESS_SIZE; - break; - - case set_number_at: - { - DEBUG_PRINT1 ("EXECUTING set_number_at.\n"); - - EXTRACT_NUMBER_AND_INCR (mcnt, p); - p1 = p + mcnt; - EXTRACT_NUMBER_AND_INCR (mcnt, p); -#ifdef _LIBC - DEBUG_PRINT3 (" Setting %p to %d.\n", p1, mcnt); -#else - DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p1, mcnt); -#endif - STORE_NUMBER (p1, mcnt); - break; - } - -#if 0 - /* The DEC Alpha C compiler 3.x generates incorrect code for the - test WORDCHAR_P (d - 1) != WORDCHAR_P (d) in the expansion of - AT_WORD_BOUNDARY, so this code is disabled. Expanding the - macro and introducing temporary variables works around the bug. */ - - case wordbound: - DEBUG_PRINT1 ("EXECUTING wordbound.\n"); - if (AT_WORD_BOUNDARY (d)) - break; - goto fail; - - case notwordbound: - DEBUG_PRINT1 ("EXECUTING notwordbound.\n"); - if (AT_WORD_BOUNDARY (d)) - goto fail; - break; -#else - case wordbound: - { - boolean prevchar, thischar; - - DEBUG_PRINT1 ("EXECUTING wordbound.\n"); - if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)) - break; - - prevchar = WORDCHAR_P (d - 1); - thischar = WORDCHAR_P (d); - if (prevchar != thischar) - break; - goto fail; - } - - case notwordbound: - { - boolean prevchar, thischar; - - DEBUG_PRINT1 ("EXECUTING notwordbound.\n"); - if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)) - goto fail; - - prevchar = WORDCHAR_P (d - 1); - thischar = WORDCHAR_P (d); - if (prevchar != thischar) - goto fail; - break; - } -#endif - - case wordbeg: - DEBUG_PRINT1 ("EXECUTING wordbeg.\n"); - if (!AT_STRINGS_END (d) && WORDCHAR_P (d) - && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1))) - break; - goto fail; - - case wordend: - DEBUG_PRINT1 ("EXECUTING wordend.\n"); - if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1) - && (AT_STRINGS_END (d) || !WORDCHAR_P (d))) - break; - goto fail; - -#ifdef emacs - case before_dot: - DEBUG_PRINT1 ("EXECUTING before_dot.\n"); - if (PTR_CHAR_POS ((unsigned char *) d) >= point) - goto fail; - break; - - case at_dot: - DEBUG_PRINT1 ("EXECUTING at_dot.\n"); - if (PTR_CHAR_POS ((unsigned char *) d) != point) - goto fail; - break; - - case after_dot: - DEBUG_PRINT1 ("EXECUTING after_dot.\n"); - if (PTR_CHAR_POS ((unsigned char *) d) <= point) - goto fail; - break; - - case syntaxspec: - DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt); - mcnt = *p++; - goto matchsyntax; - - case wordchar: - DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n"); - mcnt = (int) Sword; - matchsyntax: - PREFETCH (); - /* Can't use *d++ here; SYNTAX may be an unsafe macro. */ - d++; - if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt) - goto fail; - SET_REGS_MATCHED (); - break; - - case notsyntaxspec: - DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt); - mcnt = *p++; - goto matchnotsyntax; - - case notwordchar: - DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n"); - mcnt = (int) Sword; - matchnotsyntax: - PREFETCH (); - /* Can't use *d++ here; SYNTAX may be an unsafe macro. */ - d++; - if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt) - goto fail; - SET_REGS_MATCHED (); - break; - -#else /* not emacs */ - case wordchar: - DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n"); - PREFETCH (); - if (!WORDCHAR_P (d)) - goto fail; - SET_REGS_MATCHED (); - d++; - break; - - case notwordchar: - DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n"); - PREFETCH (); - if (WORDCHAR_P (d)) - goto fail; - SET_REGS_MATCHED (); - d++; - break; -#endif /* not emacs */ - - default: - abort (); - } - continue; /* Successfully executed one pattern command; keep going. */ - - - /* We goto here if a matching operation fails. */ - fail: - if (!FAIL_STACK_EMPTY ()) - { /* A restart point is known. Restore to that state. */ - DEBUG_PRINT1 ("\nFAIL:\n"); - POP_FAILURE_POINT (d, p, - lowest_active_reg, highest_active_reg, - regstart, regend, reg_info); - - /* If this failure point is a dummy, try the next one. */ - if (!p) - goto fail; - - /* If we failed to the end of the pattern, don't examine *p. */ - assert (p <= pend); - if (p < pend) - { - boolean is_a_jump_n = false; - - /* If failed to a backwards jump that's part of a repetition - loop, need to pop this failure point and use the next one. */ - switch ((re_opcode_t) *p) - { - case jump_n: - is_a_jump_n = true; - case maybe_pop_jump: - case pop_failure_jump: - case jump: - p1 = p + 1; - EXTRACT_NUMBER_AND_INCR (mcnt, p1); - p1 += mcnt; - - if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n) - || (!is_a_jump_n - && (re_opcode_t) *p1 == on_failure_jump)) - goto fail; - break; - default: - /* do nothing */ ; - } - } - - if (d >= string1 && d <= end1) - dend = end_match_1; - } - else - break; /* Matching at this starting point really fails. */ - } /* for (;;) */ - - if (best_regs_set) - goto restore_best_regs; - - FREE_VARIABLES (); - - return -1; /* Failure to match. */ -} /* re_match_2 */ - -/* Subroutine definitions for re_match_2. */ - - -/* We are passed P pointing to a register number after a start_memory. - - Return true if the pattern up to the corresponding stop_memory can - match the empty string, and false otherwise. - - If we find the matching stop_memory, sets P to point to one past its number. - Otherwise, sets P to an undefined byte less than or equal to END. - - We don't handle duplicates properly (yet). */ - -static boolean -PREFIX(group_match_null_string_p) (UCHAR_T **p, UCHAR_T *end, - PREFIX(register_info_type) *reg_info) -{ - int mcnt; - /* Point to after the args to the start_memory. */ - UCHAR_T *p1 = *p + 2; - - while (p1 < end) - { - /* Skip over opcodes that can match nothing, and return true or - false, as appropriate, when we get to one that can't, or to the - matching stop_memory. */ - - switch ((re_opcode_t) *p1) - { - /* Could be either a loop or a series of alternatives. */ - case on_failure_jump: - p1++; - EXTRACT_NUMBER_AND_INCR (mcnt, p1); - - /* If the next operation is not a jump backwards in the - pattern. */ - - if (mcnt >= 0) - { - /* Go through the on_failure_jumps of the alternatives, - seeing if any of the alternatives cannot match nothing. - The last alternative starts with only a jump, - whereas the rest start with on_failure_jump and end - with a jump, e.g., here is the pattern for `a|b|c': - - /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6 - /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3 - /exactn/1/c - - So, we have to first go through the first (n-1) - alternatives and then deal with the last one separately. */ - - - /* Deal with the first (n-1) alternatives, which start - with an on_failure_jump (see above) that jumps to right - past a jump_past_alt. */ - - while ((re_opcode_t) p1[mcnt-(1+OFFSET_ADDRESS_SIZE)] == - jump_past_alt) - { - /* `mcnt' holds how many bytes long the alternative - is, including the ending `jump_past_alt' and - its number. */ - - if (!PREFIX(alt_match_null_string_p) (p1, p1 + mcnt - - (1 + OFFSET_ADDRESS_SIZE), - reg_info)) - return false; - - /* Move to right after this alternative, including the - jump_past_alt. */ - p1 += mcnt; - - /* Break if it's the beginning of an n-th alternative - that doesn't begin with an on_failure_jump. */ - if ((re_opcode_t) *p1 != on_failure_jump) - break; - - /* Still have to check that it's not an n-th - alternative that starts with an on_failure_jump. */ - p1++; - EXTRACT_NUMBER_AND_INCR (mcnt, p1); - if ((re_opcode_t) p1[mcnt-(1+OFFSET_ADDRESS_SIZE)] != - jump_past_alt) - { - /* Get to the beginning of the n-th alternative. */ - p1 -= 1 + OFFSET_ADDRESS_SIZE; - break; - } - } - - /* Deal with the last alternative: go back and get number - of the `jump_past_alt' just before it. `mcnt' contains - the length of the alternative. */ - EXTRACT_NUMBER (mcnt, p1 - OFFSET_ADDRESS_SIZE); - - if (!PREFIX(alt_match_null_string_p) (p1, p1 + mcnt, reg_info)) - return false; - - p1 += mcnt; /* Get past the n-th alternative. */ - } /* if mcnt > 0 */ - break; - - - case stop_memory: - assert (p1[1] == **p); - *p = p1 + 2; - return true; - - - default: - if (!PREFIX(common_op_match_null_string_p) (&p1, end, reg_info)) - return false; - } - } /* while p1 < end */ - - return false; -} /* group_match_null_string_p */ - - -/* Similar to group_match_null_string_p, but doesn't deal with alternatives: - It expects P to be the first byte of a single alternative and END one - byte past the last. The alternative can contain groups. */ - -static boolean -PREFIX(alt_match_null_string_p) (UCHAR_T *p, UCHAR_T *end, - PREFIX(register_info_type) *reg_info) -{ - int mcnt; - UCHAR_T *p1 = p; - - while (p1 < end) - { - /* Skip over opcodes that can match nothing, and break when we get - to one that can't. */ - - switch ((re_opcode_t) *p1) - { - /* It's a loop. */ - case on_failure_jump: - p1++; - EXTRACT_NUMBER_AND_INCR (mcnt, p1); - p1 += mcnt; - break; - - default: - if (!PREFIX(common_op_match_null_string_p) (&p1, end, reg_info)) - return false; - } - } /* while p1 < end */ - - return true; -} /* alt_match_null_string_p */ - - -/* Deals with the ops common to group_match_null_string_p and - alt_match_null_string_p. - - Sets P to one after the op and its arguments, if any. */ - -static boolean -PREFIX(common_op_match_null_string_p) (UCHAR_T **p, UCHAR_T *end, - PREFIX(register_info_type) *reg_info) -{ - int mcnt; - boolean ret; - int reg_no; - UCHAR_T *p1 = *p; - - switch ((re_opcode_t) *p1++) - { - case no_op: - case begline: - case endline: - case begbuf: - case endbuf: - case wordbeg: - case wordend: - case wordbound: - case notwordbound: -#ifdef emacs - case before_dot: - case at_dot: - case after_dot: -#endif - break; - - case start_memory: - reg_no = *p1; - assert (reg_no > 0 && reg_no <= MAX_REGNUM); - ret = PREFIX(group_match_null_string_p) (&p1, end, reg_info); - - /* Have to set this here in case we're checking a group which - contains a group and a back reference to it. */ - - if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE) - REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret; - - if (!ret) - return false; - break; - - /* If this is an optimized succeed_n for zero times, make the jump. */ - case jump: - EXTRACT_NUMBER_AND_INCR (mcnt, p1); - if (mcnt >= 0) - p1 += mcnt; - else - return false; - break; - - case succeed_n: - /* Get to the number of times to succeed. */ - p1 += OFFSET_ADDRESS_SIZE; - EXTRACT_NUMBER_AND_INCR (mcnt, p1); - - if (mcnt == 0) - { - p1 -= 2 * OFFSET_ADDRESS_SIZE; - EXTRACT_NUMBER_AND_INCR (mcnt, p1); - p1 += mcnt; - } - else - return false; - break; - - case duplicate: - if (!REG_MATCH_NULL_STRING_P (reg_info[*p1])) - return false; - break; - - case set_number_at: - p1 += 2 * OFFSET_ADDRESS_SIZE; - - default: - /* All other opcodes mean we cannot match the empty string. */ - return false; - } - - *p = p1; - return true; -} /* common_op_match_null_string_p */ - - -/* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN - bytes; nonzero otherwise. */ - -static int -PREFIX(bcmp_translate) (const CHAR_T *s1, const CHAR_T *s2, register int len, - RE_TRANSLATE_TYPE translate) -{ - register const UCHAR_T *p1 = (const UCHAR_T *) s1; - register const UCHAR_T *p2 = (const UCHAR_T *) s2; - while (len) - { -#ifdef WCHAR - if (((*p1<=0xff)?translate[*p1++]:*p1++) - != ((*p2<=0xff)?translate[*p2++]:*p2++)) - return 1; -#else /* BYTE */ - if (translate[*p1++] != translate[*p2++]) return 1; -#endif /* WCHAR */ - len--; - } - return 0; -} - - -#else /* not INSIDE_RECURSION */ - -/* Entry points for GNU code. */ - -/* re_compile_pattern is the GNU regular expression compiler: it - compiles PATTERN (of length SIZE) and puts the result in BUFP. - Returns 0 if the pattern was valid, otherwise an error string. - - Assumes the `allocated' (and perhaps `buffer') and `translate' fields - are set in BUFP on entry. - - We call regex_compile to do the actual compilation. */ - -const char * -re_compile_pattern (const char *pattern, size_t length, - struct re_pattern_buffer *bufp) -{ - reg_errcode_t ret; - - /* GNU code is written to assume at least RE_NREGS registers will be set - (and at least one extra will be -1). */ - bufp->regs_allocated = REGS_UNALLOCATED; - - /* And GNU code determines whether or not to get register information - by passing null for the REGS argument to re_match, etc., not by - setting no_sub. */ - bufp->no_sub = 0; - - /* Match anchors at newline. */ - bufp->newline_anchor = 1; - -# ifdef MBS_SUPPORT - if (MB_CUR_MAX != 1) - ret = wcs_regex_compile (pattern, length, re_syntax_options, bufp); - else -# endif - ret = byte_regex_compile (pattern, length, re_syntax_options, bufp); - - if (!ret) - return NULL; - return gettext (re_error_msgid[(int) ret]); -} -#ifdef _LIBC -weak_alias (__re_compile_pattern, re_compile_pattern) -#endif - -/* Entry points compatible with 4.2 BSD regex library. We don't define - them unless specifically requested. */ - -#if defined _REGEX_RE_COMP || defined _LIBC - -/* BSD has one and only one pattern buffer. */ -static struct re_pattern_buffer re_comp_buf; - -char * -#ifdef _LIBC -/* Make these definitions weak in libc, so POSIX programs can redefine - these names if they don't use our functions, and still use - regcomp/regexec below without link errors. */ -weak_function -#endif -re_comp (const char *s) -{ - reg_errcode_t ret; - - if (!s) - { - if (!re_comp_buf.buffer) - return (char *) gettext ("No previous regular expression"); - return 0; - } - - if (!re_comp_buf.buffer) - { - re_comp_buf.buffer = (unsigned char *) malloc (200); - if (re_comp_buf.buffer == NULL) - return (char *) gettext (re_error_msgid[(int) REG_ESPACE]); - re_comp_buf.allocated = 200; - - re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH); - if (re_comp_buf.fastmap == NULL) - return (char *) gettext (re_error_msgid[(int) REG_ESPACE]); - } - - /* Since `re_exec' always passes NULL for the `regs' argument, we - don't need to initialize the pattern buffer fields which affect it. */ - - /* Match anchors at newlines. */ - re_comp_buf.newline_anchor = 1; - -# ifdef MBS_SUPPORT - if (MB_CUR_MAX != 1) - ret = wcs_regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf); - else -# endif - ret = byte_regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf); - - if (!ret) - return NULL; - - /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */ - return (char *) gettext (re_error_msgid[(int) ret]); -} - - -int -#ifdef _LIBC -weak_function -#endif -re_exec (const char *s) -{ - const int len = strlen (s); - return - 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0); -} - -#endif /* _REGEX_RE_COMP */ - -/* POSIX.2 functions. Don't define these for Emacs. */ - -#ifndef emacs - -/* regcomp takes a regular expression as a string and compiles it. - - PREG is a regex_t *. We do not expect any fields to be initialized, - since POSIX says we shouldn't. Thus, we set - - `buffer' to the compiled pattern; - `used' to the length of the compiled pattern; - `syntax' to RE_SYNTAX_POSIX_EXTENDED if the - REG_EXTENDED bit in CFLAGS is set; otherwise, to - RE_SYNTAX_POSIX_BASIC; - `newline_anchor' to REG_NEWLINE being set in CFLAGS; - `fastmap' to an allocated space for the fastmap; - `fastmap_accurate' to zero; - `re_nsub' to the number of subexpressions in PATTERN. - - PATTERN is the address of the pattern string. - - CFLAGS is a series of bits which affect compilation. - - If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we - use POSIX basic syntax. - - If REG_NEWLINE is set, then . and [^...] don't match newline. - Also, regexec will try a match beginning after every newline. - - If REG_ICASE is set, then we considers upper- and lowercase - versions of letters to be equivalent when matching. - - If REG_NOSUB is set, then when PREG is passed to regexec, that - routine will report only success or failure, and nothing about the - registers. - - It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for - the return codes and their meanings.) */ - -int -regcomp (regex_t *preg, const char *pattern, int cflags) -{ - reg_errcode_t ret; - reg_syntax_t syntax - = (cflags & REG_EXTENDED) ? - RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC; - - /* regex_compile will allocate the space for the compiled pattern. */ - preg->buffer = 0; - preg->allocated = 0; - preg->used = 0; - - /* Try to allocate space for the fastmap. */ - preg->fastmap = (char *) malloc (1 << BYTEWIDTH); - - if (cflags & REG_ICASE) - { - int i; - - preg->translate - = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE - * sizeof (*(RE_TRANSLATE_TYPE)0)); - if (preg->translate == NULL) - return (int) REG_ESPACE; - - /* Map uppercase characters to corresponding lowercase ones. */ - for (i = 0; i < CHAR_SET_SIZE; i++) - preg->translate[i] = ISUPPER (i) ? TOLOWER (i) : i; - } - else - preg->translate = NULL; - - /* If REG_NEWLINE is set, newlines are treated differently. */ - if (cflags & REG_NEWLINE) - { /* REG_NEWLINE implies neither . nor [^...] match newline. */ - syntax &= ~RE_DOT_NEWLINE; - syntax |= RE_HAT_LISTS_NOT_NEWLINE; - /* It also changes the matching behavior. */ - preg->newline_anchor = 1; - } - else - preg->newline_anchor = 0; - - preg->no_sub = !!(cflags & REG_NOSUB); - - /* POSIX says a null character in the pattern terminates it, so we - can use strlen here in compiling the pattern. */ -# ifdef MBS_SUPPORT - if (MB_CUR_MAX != 1) - ret = wcs_regex_compile (pattern, strlen (pattern), syntax, preg); - else -# endif - ret = byte_regex_compile (pattern, strlen (pattern), syntax, preg); - - /* POSIX doesn't distinguish between an unmatched open-group and an - unmatched close-group: both are REG_EPAREN. */ - if (ret == REG_ERPAREN) ret = REG_EPAREN; - - if (ret == REG_NOERROR && preg->fastmap) - { - /* Compute the fastmap now, since regexec cannot modify the pattern - buffer. */ - if (re_compile_fastmap (preg) == -2) - { - /* Some error occurred while computing the fastmap, just forget - about it. */ - free (preg->fastmap); - preg->fastmap = NULL; - } - } - - return (int) ret; -} -#ifdef _LIBC -weak_alias (__regcomp, regcomp) -#endif - - -/* regexec searches for a given pattern, specified by PREG, in the - string STRING. - - If NMATCH is zero or REG_NOSUB was set in the cflags argument to - `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at - least NMATCH elements, and we set them to the offsets of the - corresponding matched substrings. - - EFLAGS specifies `execution flags' which affect matching: if - REG_NOTBOL is set, then ^ does not match at the beginning of the - string; if REG_NOTEOL is set, then $ does not match at the end. - - We return 0 if we find a match and REG_NOMATCH if not. */ - -int -regexec (const regex_t *preg, const char *string, size_t nmatch, - regmatch_t pmatch[], int eflags) -{ - int ret; - struct re_registers regs; - regex_t private_preg; - int len = strlen (string); - boolean want_reg_info = !preg->no_sub && nmatch > 0; - - private_preg = *preg; - - private_preg.not_bol = !!(eflags & REG_NOTBOL); - private_preg.not_eol = !!(eflags & REG_NOTEOL); - - /* The user has told us exactly how many registers to return - information about, via `nmatch'. We have to pass that on to the - matching routines. */ - private_preg.regs_allocated = REGS_FIXED; - - if (want_reg_info) - { - regs.num_regs = nmatch; - regs.start = TALLOC (nmatch * 2, regoff_t); - if (regs.start == NULL) - return (int) REG_NOMATCH; - regs.end = regs.start + nmatch; - } - - /* Perform the searching operation. */ - ret = re_search (&private_preg, string, len, - /* start: */ 0, /* range: */ len, - want_reg_info ? ®s : (struct re_registers *) 0); - - /* Copy the register information to the POSIX structure. */ - if (want_reg_info) - { - if (ret >= 0) - { - unsigned r; - - for (r = 0; r < nmatch; r++) - { - pmatch[r].rm_so = regs.start[r]; - pmatch[r].rm_eo = regs.end[r]; - } - } - - /* If we needed the temporary register info, free the space now. */ - free (regs.start); - } - - /* We want zero return to mean success, unlike `re_search'. */ - return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH; -} -#ifdef _LIBC -weak_alias (__regexec, regexec) -#endif - - -/* Returns a message corresponding to an error code, ERRCODE, returned - from either regcomp or regexec. We don't use PREG here. */ - -size_t -regerror (int errcode, const regex_t *preg ATTRIBUTE_UNUSED, - char *errbuf, size_t errbuf_size) -{ - const char *msg; - size_t msg_size; - - if (errcode < 0 - || errcode >= (int) (sizeof (re_error_msgid) - / sizeof (re_error_msgid[0]))) - /* Only error codes returned by the rest of the code should be passed - to this routine. If we are given anything else, or if other regex - code generates an invalid error code, then the program has a bug. - Dump core so we can fix it. */ - abort (); - - msg = gettext (re_error_msgid[errcode]); - - msg_size = strlen (msg) + 1; /* Includes the null. */ - - if (errbuf_size != 0) - { - if (msg_size > errbuf_size) - { -#if defined HAVE_MEMPCPY || defined _LIBC - *((char *) mempcpy (errbuf, msg, errbuf_size - 1)) = '\0'; -#else - memcpy (errbuf, msg, errbuf_size - 1); - errbuf[errbuf_size - 1] = 0; -#endif - } - else - memcpy (errbuf, msg, msg_size); - } - - return msg_size; -} -#ifdef _LIBC -weak_alias (__regerror, regerror) -#endif - - -/* Free dynamically allocated space used by PREG. */ - -void -regfree (regex_t *preg) -{ - if (preg->buffer != NULL) - free (preg->buffer); - preg->buffer = NULL; - - preg->allocated = 0; - preg->used = 0; - - if (preg->fastmap != NULL) - free (preg->fastmap); - preg->fastmap = NULL; - preg->fastmap_accurate = 0; - - if (preg->translate != NULL) - free (preg->translate); - preg->translate = NULL; -} -#ifdef _LIBC -weak_alias (__regfree, regfree) -#endif - -#endif /* not emacs */ - -#endif /* not INSIDE_RECURSION */ - - -#undef STORE_NUMBER -#undef STORE_NUMBER_AND_INCR -#undef EXTRACT_NUMBER -#undef EXTRACT_NUMBER_AND_INCR - -#undef DEBUG_PRINT_COMPILED_PATTERN -#undef DEBUG_PRINT_DOUBLE_STRING - -#undef INIT_FAIL_STACK -#undef RESET_FAIL_STACK -#undef DOUBLE_FAIL_STACK -#undef PUSH_PATTERN_OP -#undef PUSH_FAILURE_POINTER -#undef PUSH_FAILURE_INT -#undef PUSH_FAILURE_ELT -#undef POP_FAILURE_POINTER -#undef POP_FAILURE_INT -#undef POP_FAILURE_ELT -#undef DEBUG_PUSH -#undef DEBUG_POP -#undef PUSH_FAILURE_POINT -#undef POP_FAILURE_POINT - -#undef REG_UNSET_VALUE -#undef REG_UNSET - -#undef PATFETCH -#undef PATFETCH_RAW -#undef PATUNFETCH -#undef TRANSLATE - -#undef INIT_BUF_SIZE -#undef GET_BUFFER_SPACE -#undef BUF_PUSH -#undef BUF_PUSH_2 -#undef BUF_PUSH_3 -#undef STORE_JUMP -#undef STORE_JUMP2 -#undef INSERT_JUMP -#undef INSERT_JUMP2 -#undef EXTEND_BUFFER -#undef GET_UNSIGNED_NUMBER -#undef FREE_STACK_RETURN - -# undef POINTER_TO_OFFSET -# undef MATCHING_IN_FRST_STRING -# undef PREFETCH -# undef AT_STRINGS_BEG -# undef AT_STRINGS_END -# undef WORDCHAR_P -# undef FREE_VAR -# undef FREE_VARIABLES -# undef NO_HIGHEST_ACTIVE_REG -# undef NO_LOWEST_ACTIVE_REG - -# undef CHAR_T -# undef UCHAR_T -# undef COMPILED_BUFFER_VAR -# undef OFFSET_ADDRESS_SIZE -# undef CHAR_CLASS_SIZE -# undef PREFIX -# undef ARG_PREFIX -# undef PUT_CHAR -# undef BYTE -# undef WCHAR - -# define DEFINED_ONCE diff --git a/libiberty/rename.c b/libiberty/rename.c deleted file mode 100644 index ad342ffca65..00000000000 --- a/libiberty/rename.c +++ /dev/null @@ -1,36 +0,0 @@ -/* rename -- rename a file - This function is in the public domain. */ - -/* - -@deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new}) - -Renames a file from @var{old} to @var{new}. If @var{new} already -exists, it is removed. - -@end deftypefn - -*/ - -#include "ansidecl.h" -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include -#ifdef HAVE_UNISTD_H -#include -#endif - -int -rename (const char *zfrom, const char *zto) -{ - if (link (zfrom, zto) < 0) - { - if (errno != EEXIST) - return -1; - if (unlink (zto) < 0 - || link (zfrom, zto) < 0) - return -1; - } - return unlink (zfrom); -} diff --git a/libiberty/rindex.c b/libiberty/rindex.c deleted file mode 100644 index 194ef9fad78..00000000000 --- a/libiberty/rindex.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Stub implementation of (obsolete) rindex(). */ - -/* - -@deftypefn Supplemental char* rindex (const char *@var{s}, int @var{c}) - -Returns a pointer to the last occurrence of the character @var{c} in -the string @var{s}, or @code{NULL} if not found. The use of @code{rindex} is -deprecated in new programs in favor of @code{strrchr}. - -@end deftypefn - -*/ - -extern char *strrchr (const char *, int); - -char * -rindex (const char *s, int c) -{ - return strrchr (s, c); -} diff --git a/libiberty/safe-ctype.c b/libiberty/safe-ctype.c deleted file mode 100644 index 0972b4b354f..00000000000 --- a/libiberty/safe-ctype.c +++ /dev/null @@ -1,255 +0,0 @@ -/* replacement macros. - - Copyright (C) 2000, 2001, 2002, 2003, 2004, - 2005 Free Software Foundation, Inc. - Contributed by Zack Weinberg . - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* - -@defvr Extension HOST_CHARSET -This macro indicates the basic character set and encoding used by the -host: more precisely, the encoding used for character constants in -preprocessor @samp{#if} statements (the C "execution character set"). -It is defined by @file{safe-ctype.h}, and will be an integer constant -with one of the following values: - -@ftable @code -@item HOST_CHARSET_UNKNOWN -The host character set is unknown - that is, not one of the next two -possibilities. - -@item HOST_CHARSET_ASCII -The host character set is ASCII. - -@item HOST_CHARSET_EBCDIC -The host character set is some variant of EBCDIC. (Only one of the -nineteen EBCDIC varying characters is tested; exercise caution.) -@end ftable -@end defvr - -@deffn Extension ISALPHA (@var{c}) -@deffnx Extension ISALNUM (@var{c}) -@deffnx Extension ISBLANK (@var{c}) -@deffnx Extension ISCNTRL (@var{c}) -@deffnx Extension ISDIGIT (@var{c}) -@deffnx Extension ISGRAPH (@var{c}) -@deffnx Extension ISLOWER (@var{c}) -@deffnx Extension ISPRINT (@var{c}) -@deffnx Extension ISPUNCT (@var{c}) -@deffnx Extension ISSPACE (@var{c}) -@deffnx Extension ISUPPER (@var{c}) -@deffnx Extension ISXDIGIT (@var{c}) - -These twelve macros are defined by @file{safe-ctype.h}. Each has the -same meaning as the corresponding macro (with name in lowercase) -defined by the standard header @file{ctype.h}. For example, -@code{ISALPHA} returns true for alphabetic characters and false for -others. However, there are two differences between these macros and -those provided by @file{ctype.h}: - -@itemize @bullet -@item These macros are guaranteed to have well-defined behavior for all -values representable by @code{signed char} and @code{unsigned char}, and -for @code{EOF}. - -@item These macros ignore the current locale; they are true for these -fixed sets of characters: -@multitable {@code{XDIGIT}} {yada yada yada yada yada yada yada yada} -@item @code{ALPHA} @tab @kbd{A-Za-z} -@item @code{ALNUM} @tab @kbd{A-Za-z0-9} -@item @code{BLANK} @tab @kbd{space tab} -@item @code{CNTRL} @tab @code{!PRINT} -@item @code{DIGIT} @tab @kbd{0-9} -@item @code{GRAPH} @tab @code{ALNUM || PUNCT} -@item @code{LOWER} @tab @kbd{a-z} -@item @code{PRINT} @tab @code{GRAPH ||} @kbd{space} -@item @code{PUNCT} @tab @kbd{`~!@@#$%^&*()_-=+[@{]@}\|;:'",<.>/?} -@item @code{SPACE} @tab @kbd{space tab \n \r \f \v} -@item @code{UPPER} @tab @kbd{A-Z} -@item @code{XDIGIT} @tab @kbd{0-9A-Fa-f} -@end multitable - -Note that, if the host character set is ASCII or a superset thereof, -all these macros will return false for all values of @code{char} outside -the range of 7-bit ASCII. In particular, both ISPRINT and ISCNTRL return -false for characters with numeric values from 128 to 255. -@end itemize -@end deffn - -@deffn Extension ISIDNUM (@var{c}) -@deffnx Extension ISIDST (@var{c}) -@deffnx Extension IS_VSPACE (@var{c}) -@deffnx Extension IS_NVSPACE (@var{c}) -@deffnx Extension IS_SPACE_OR_NUL (@var{c}) -@deffnx Extension IS_ISOBASIC (@var{c}) -These six macros are defined by @file{safe-ctype.h} and provide -additional character classes which are useful when doing lexical -analysis of C or similar languages. They are true for the following -sets of characters: - -@multitable {@code{SPACE_OR_NUL}} {yada yada yada yada yada yada yada yada} -@item @code{IDNUM} @tab @kbd{A-Za-z0-9_} -@item @code{IDST} @tab @kbd{A-Za-z_} -@item @code{VSPACE} @tab @kbd{\r \n} -@item @code{NVSPACE} @tab @kbd{space tab \f \v \0} -@item @code{SPACE_OR_NUL} @tab @code{VSPACE || NVSPACE} -@item @code{ISOBASIC} @tab @code{VSPACE || NVSPACE || PRINT} -@end multitable -@end deffn - -*/ - -#include "ansidecl.h" -#include -#include /* for EOF */ - -#if EOF != -1 - #error " requires EOF == -1" -#endif - -/* Shorthand */ -#define bl _sch_isblank -#define cn _sch_iscntrl -#define di _sch_isdigit -#define is _sch_isidst -#define lo _sch_islower -#define nv _sch_isnvsp -#define pn _sch_ispunct -#define pr _sch_isprint -#define sp _sch_isspace -#define up _sch_isupper -#define vs _sch_isvsp -#define xd _sch_isxdigit - -/* Masks. */ -#define L (const unsigned short) (lo|is |pr) /* lower case letter */ -#define XL (const unsigned short) (lo|is|xd|pr) /* lowercase hex digit */ -#define U (const unsigned short) (up|is |pr) /* upper case letter */ -#define XU (const unsigned short) (up|is|xd|pr) /* uppercase hex digit */ -#define D (const unsigned short) (di |xd|pr) /* decimal digit */ -#define P (const unsigned short) (pn |pr) /* punctuation */ -#define _ (const unsigned short) (pn|is |pr) /* underscore */ - -#define C (const unsigned short) ( cn) /* control character */ -#define Z (const unsigned short) (nv |cn) /* NUL */ -#define M (const unsigned short) (nv|sp |cn) /* cursor movement: \f \v */ -#define V (const unsigned short) (vs|sp |cn) /* vertical space: \r \n */ -#define T (const unsigned short) (nv|sp|bl|cn) /* tab */ -#define S (const unsigned short) (nv|sp|bl|pr) /* space */ - -/* Are we ASCII? */ -#if HOST_CHARSET == HOST_CHARSET_ASCII - -const unsigned short _sch_istable[256] = -{ - Z, C, C, C, C, C, C, C, /* NUL SOH STX ETX EOT ENQ ACK BEL */ - C, T, V, M, M, V, C, C, /* BS HT LF VT FF CR SO SI */ - C, C, C, C, C, C, C, C, /* DLE DC1 DC2 DC3 DC4 NAK SYN ETB */ - C, C, C, C, C, C, C, C, /* CAN EM SUB ESC FS GS RS US */ - S, P, P, P, P, P, P, P, /* SP ! " # $ % & ' */ - P, P, P, P, P, P, P, P, /* ( ) * + , - . / */ - D, D, D, D, D, D, D, D, /* 0 1 2 3 4 5 6 7 */ - D, D, P, P, P, P, P, P, /* 8 9 : ; < = > ? */ - P, XU, XU, XU, XU, XU, XU, U, /* @ A B C D E F G */ - U, U, U, U, U, U, U, U, /* H I J K L M N O */ - U, U, U, U, U, U, U, U, /* P Q R S T U V W */ - U, U, U, P, P, P, P, _, /* X Y Z [ \ ] ^ _ */ - P, XL, XL, XL, XL, XL, XL, L, /* ` a b c d e f g */ - L, L, L, L, L, L, L, L, /* h i j k l m n o */ - L, L, L, L, L, L, L, L, /* p q r s t u v w */ - L, L, L, P, P, P, P, C, /* x y z { | } ~ DEL */ - - /* high half of unsigned char is locale-specific, so all tests are - false in "C" locale */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -const unsigned char _sch_tolower[256] = -{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, - - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - - 91, 92, 93, 94, 95, 96, - - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - - 123,124,125,126,127, - - 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143, - 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159, - 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175, - 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191, - - 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207, - 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223, - 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239, - 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255, -}; - -const unsigned char _sch_toupper[256] = -{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, - - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - - 91, 92, 93, 94, 95, 96, - - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - - 123,124,125,126,127, - - 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143, - 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159, - 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175, - 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191, - - 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207, - 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223, - 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239, - 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255, -}; - -#else -# if HOST_CHARSET == HOST_CHARSET_EBCDIC - #error "FIXME: write tables for EBCDIC" -# else - #error "Unrecognized host character set" -# endif -#endif diff --git a/libiberty/setenv.c b/libiberty/setenv.c deleted file mode 100644 index 355af5a9dd6..00000000000 --- a/libiberty/setenv.c +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright (C) 1992, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. - This file based on setenv.c in the GNU C Library. - - The GNU C 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. - - The GNU C 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 the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - - -/* - -@deftypefn Supplemental int setenv (const char *@var{name}, const char *@var{value}, int @var{overwrite}) -@deftypefnx Supplemental void unsetenv (const char *@var{name}) - -@code{setenv} adds @var{name} to the environment with value -@var{value}. If the name was already present in the environment, -the new value will be stored only if @var{overwrite} is nonzero. -The companion @code{unsetenv} function removes @var{name} from the -environment. This implementation is not safe for multithreaded code. - -@end deftypefn - -*/ - -#if HAVE_CONFIG_H -# include -#endif - -#define setenv libiberty_setenv -#define unsetenv libiberty_unsetenv - -#include "ansidecl.h" -#include /* For `size_t' */ -#include /* For `NULL' */ - -#include -#if !defined(errno) && !defined(HAVE_ERRNO_DECL) -extern int errno; -#endif -#define __set_errno(ev) ((errno) = (ev)) - -#if HAVE_STDLIB_H -# include -#endif -#if HAVE_STRING_H -# include -#endif -#if HAVE_UNISTD_H -# include -#endif - -#define __environ environ -#ifndef HAVE_ENVIRON_DECL -extern char **environ; -#endif - -#undef setenv -#undef unsetenv - -/* LOCK and UNLOCK are defined as no-ops. This makes the libiberty - * implementation MT-Unsafe. */ -#define LOCK -#define UNLOCK - -/* Below this point, it's verbatim code from the glibc-2.0 implementation */ - -/* If this variable is not a null pointer we allocated the current - environment. */ -static char **last_environ; - - -int -setenv (const char *name, const char *value, int replace) -{ - register char **ep = 0; - register size_t size; - const size_t namelen = strlen (name); - const size_t vallen = strlen (value) + 1; - - LOCK; - - size = 0; - if (__environ != NULL) - { - for (ep = __environ; *ep != NULL; ++ep) - if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') - break; - else - ++size; - } - - if (__environ == NULL || *ep == NULL) - { - char **new_environ; - if (__environ == last_environ && __environ != NULL) - /* We allocated this space; we can extend it. */ - new_environ = (char **) realloc (last_environ, - (size + 2) * sizeof (char *)); - else - new_environ = (char **) malloc ((size + 2) * sizeof (char *)); - - if (new_environ == NULL) - { - UNLOCK; - return -1; - } - - new_environ[size] = (char *) malloc (namelen + 1 + vallen); - if (new_environ[size] == NULL) - { - free ((char *) new_environ); - __set_errno (ENOMEM); - UNLOCK; - return -1; - } - - if (__environ != last_environ) - memcpy ((char *) new_environ, (char *) __environ, - size * sizeof (char *)); - - memcpy (new_environ[size], name, namelen); - new_environ[size][namelen] = '='; - memcpy (&new_environ[size][namelen + 1], value, vallen); - - new_environ[size + 1] = NULL; - - last_environ = __environ = new_environ; - } - else if (replace) - { - size_t len = strlen (*ep); - if (len + 1 < namelen + 1 + vallen) - { - /* The existing string is too short; malloc a new one. */ - char *new_string = (char *) malloc (namelen + 1 + vallen); - if (new_string == NULL) - { - UNLOCK; - return -1; - } - *ep = new_string; - } - memcpy (*ep, name, namelen); - (*ep)[namelen] = '='; - memcpy (&(*ep)[namelen + 1], value, vallen); - } - - UNLOCK; - - return 0; -} - -void -unsetenv (const char *name) -{ - const size_t len = strlen (name); - char **ep; - - LOCK; - - for (ep = __environ; *ep; ++ep) - if (!strncmp (*ep, name, len) && (*ep)[len] == '=') - { - /* Found it. Remove this pointer by moving later ones back. */ - char **dp = ep; - do - dp[0] = dp[1]; - while (*dp++); - /* Continue the loop in case NAME appears again. */ - } - - UNLOCK; -} diff --git a/libiberty/sigsetmask.c b/libiberty/sigsetmask.c deleted file mode 100644 index 3b708b16adb..00000000000 --- a/libiberty/sigsetmask.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Version of sigsetmask.c - Written by Steve Chamberlain (sac@cygnus.com). - Contributed by Cygnus Support. - This file is in the public doamin. */ - -/* - -@deftypefn Supplemental int sigsetmask (int @var{set}) - -Sets the signal mask to the one provided in @var{set} and returns -the old mask (which, for libiberty's implementation, will always -be the value @code{1}). - -@end deftypefn - -*/ - -#define _POSIX_SOURCE -#include -/* Including seems to be needed by ISC. */ -#include -#include - -extern void abort (void) ATTRIBUTE_NORETURN; - -#ifdef SIG_SETMASK -int -sigsetmask (int set) -{ - sigset_t new_sig; - sigset_t old_sig; - - sigemptyset (&new_sig); - if (set != 0) { - abort(); /* FIXME, we don't know how to translate old mask to new */ - } - sigprocmask(SIG_SETMASK, &new_sig, &old_sig); - return 1; /* FIXME, we always return 1 as old value. */ -} -#endif diff --git a/libiberty/snprintf.c b/libiberty/snprintf.c deleted file mode 100644 index f1ba49f980f..00000000000 --- a/libiberty/snprintf.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Implement the snprintf function. - Copyright (C) 2003 Free Software Foundation, Inc. - Written by Kaveh R. Ghazi . - -This file is part of the libiberty library. This library 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, 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - -As a special exception, if you link this library with files -compiled with a GNU compiler to produce an executable, this does not cause -the resulting executable to be covered by the GNU General Public License. -This exception does not however invalidate any other reasons why -the executable file might be covered by the GNU General Public License. */ - -/* - -@deftypefn Supplemental int snprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, ...) - -This function is similar to sprintf, but it will print at most @var{n} -characters. On error the return value is -1, otherwise it returns the -number of characters that would have been printed had @var{n} been -sufficiently large, regardless of the actual value of @var{n}. Note -some pre-C99 system libraries do not implement this correctly so users -cannot generally rely on the return value if the system version of -this function is used. - -@end deftypefn - -*/ - -#include "ansidecl.h" - -#include -#include - -int vsnprintf (char *, size_t, const char *, va_list); - -int -snprintf (char *s, size_t n, const char *format, ...) -{ - int result; - VA_OPEN (ap, format); - VA_FIXEDARG (ap, char *, s); - VA_FIXEDARG (ap, size_t, n); - VA_FIXEDARG (ap, const char *, format); - result = vsnprintf (s, n, format, ap); - VA_CLOSE (ap); - return result; -} diff --git a/libiberty/sort.c b/libiberty/sort.c deleted file mode 100644 index 3738dd733e5..00000000000 --- a/libiberty/sort.c +++ /dev/null @@ -1,186 +0,0 @@ -/* Sorting algorithms. - Copyright (C) 2000 Free Software Foundation, Inc. - Contributed by Mark Mitchell . - -This file is part of GNU CC. - -GNU CC 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, or (at your option) -any later version. - -GNU CC 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 GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "libiberty.h" -#include "sort.h" -#ifdef HAVE_LIMITS_H -#include -#endif -#ifdef HAVE_SYS_PARAM_H -#include -#endif -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#endif - -#ifndef UCHAR_MAX -#define UCHAR_MAX ((unsigned char)(-1)) -#endif - -/* POINTERS and WORK are both arrays of N pointers. When this - function returns POINTERS will be sorted in ascending order. */ - -void sort_pointers (size_t n, void **pointers, void **work) -{ - /* The type of a single digit. This can be any unsigned integral - type. When changing this, DIGIT_MAX should be changed as - well. */ - typedef unsigned char digit_t; - - /* The maximum value a single digit can have. */ -#define DIGIT_MAX (UCHAR_MAX + 1) - - /* The Ith entry is the number of elements in *POINTERSP that have I - in the digit on which we are currently sorting. */ - unsigned int count[DIGIT_MAX]; - /* Nonzero if we are running on a big-endian machine. */ - int big_endian_p; - size_t i; - size_t j; - - /* The algorithm used here is radix sort which takes time linear in - the number of elements in the array. */ - - /* The algorithm here depends on being able to swap the two arrays - an even number of times. */ - if ((sizeof (void *) / sizeof (digit_t)) % 2 != 0) - abort (); - - /* Figure out the endianness of the machine. */ - for (i = 0, j = 0; i < sizeof (size_t); ++i) - { - j *= (UCHAR_MAX + 1); - j += i; - } - big_endian_p = (((char *)&j)[0] == 0); - - /* Move through the pointer values from least significant to most - significant digits. */ - for (i = 0; i < sizeof (void *) / sizeof (digit_t); ++i) - { - digit_t *digit; - digit_t *bias; - digit_t *top; - unsigned int *countp; - void **pointerp; - - /* The offset from the start of the pointer will depend on the - endianness of the machine. */ - if (big_endian_p) - j = sizeof (void *) / sizeof (digit_t) - i; - else - j = i; - - /* Now, perform a stable sort on this digit. We use counting - sort. */ - memset (count, 0, DIGIT_MAX * sizeof (unsigned int)); - - /* Compute the address of the appropriate digit in the first and - one-past-the-end elements of the array. On a little-endian - machine, the least-significant digit is closest to the front. */ - bias = ((digit_t *) pointers) + j; - top = ((digit_t *) (pointers + n)) + j; - - /* Count how many there are of each value. At the end of this - loop, COUNT[K] will contain the number of pointers whose Ith - digit is K. */ - for (digit = bias; - digit < top; - digit += sizeof (void *) / sizeof (digit_t)) - ++count[*digit]; - - /* Now, make COUNT[K] contain the number of pointers whose Ith - digit is less than or equal to K. */ - for (countp = count + 1; countp < count + DIGIT_MAX; ++countp) - *countp += countp[-1]; - - /* Now, drop the pointers into their correct locations. */ - for (pointerp = pointers + n - 1; pointerp >= pointers; --pointerp) - work[--count[((digit_t *) pointerp)[j]]] = *pointerp; - - /* Swap WORK and POINTERS so that POINTERS contains the sorted - array. */ - pointerp = pointers; - pointers = work; - work = pointerp; - } -} - -/* Everything below here is a unit test for the routines in this - file. */ - -#ifdef UNIT_TEST - -#include - -void *xmalloc (size_t n) -{ - return malloc (n); -} - -int main (int argc, char **argv) -{ - int k; - int result; - size_t i; - void **pointers; - void **work; - - if (argc > 1) - k = atoi (argv[1]); - else - k = 10; - - pointers = XNEWVEC (void*, k); - work = XNEWVEC (void*, k); - - for (i = 0; i < k; ++i) - { - pointers[i] = (void *) random (); - printf ("%x\n", pointers[i]); - } - - sort_pointers (k, pointers, work); - - printf ("\nSorted\n\n"); - - result = 0; - - for (i = 0; i < k; ++i) - { - printf ("%x\n", pointers[i]); - if (i > 0 && (char*) pointers[i] < (char*) pointers[i - 1]) - result = 1; - } - - free (pointers); - free (work); - - return result; -} - -#endif diff --git a/libiberty/spaces.c b/libiberty/spaces.c deleted file mode 100644 index 67481c9bcd8..00000000000 --- a/libiberty/spaces.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Allocate memory region filled with spaces. - Copyright (C) 1991 Free Software Foundation, Inc. - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* - -@deftypefn Extension char* spaces (int @var{count}) - -Returns a pointer to a memory region filled with the specified -number of spaces and null terminated. The returned pointer is -valid until at least the next call. - -@end deftypefn - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "ansidecl.h" -#include "libiberty.h" - -#if VMS -#include -#include -#else -/* For systems with larger pointers than ints, these must be declared. */ -extern PTR malloc (size_t); -extern void free (PTR); -#endif - -const char * -spaces (int count) -{ - register char *t; - static char *buf; - static int maxsize; - - if (count > maxsize) - { - if (buf) - { - free (buf); - } - buf = (char *) malloc (count + 1); - if (buf == (char *) 0) - return 0; - for (t = buf + count ; t != buf ; ) - { - *--t = ' '; - } - maxsize = count; - buf[count] = '\0'; - } - return (const char *) (buf + maxsize - count); -} - diff --git a/libiberty/splay-tree.c b/libiberty/splay-tree.c deleted file mode 100644 index 060f900ae0a..00000000000 --- a/libiberty/splay-tree.c +++ /dev/null @@ -1,526 +0,0 @@ -/* A splay-tree datatype. - Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. - Contributed by Mark Mitchell (mark@markmitchell.com). - -This file is part of GNU CC. - -GNU CC 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, or (at your option) -any later version. - -GNU CC 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 GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* For an easily readable description of splay-trees, see: - - Lewis, Harry R. and Denenberg, Larry. Data Structures and Their - Algorithms. Harper-Collins, Inc. 1991. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef HAVE_STDLIB_H -#include -#endif - -#include - -#include "libiberty.h" -#include "splay-tree.h" - -static void splay_tree_delete_helper (splay_tree, splay_tree_node); -static inline void rotate_left (splay_tree_node *, - splay_tree_node, splay_tree_node); -static inline void rotate_right (splay_tree_node *, - splay_tree_node, splay_tree_node); -static void splay_tree_splay (splay_tree, splay_tree_key); -static int splay_tree_foreach_helper (splay_tree, splay_tree_node, - splay_tree_foreach_fn, void*); - -/* Deallocate NODE (a member of SP), and all its sub-trees. */ - -static void -splay_tree_delete_helper (splay_tree sp, splay_tree_node node) -{ - splay_tree_node pending = 0; - splay_tree_node active = 0; - - if (!node) - return; - -#define KDEL(x) if (sp->delete_key) (*sp->delete_key)(x); -#define VDEL(x) if (sp->delete_value) (*sp->delete_value)(x); - - KDEL (node->key); - VDEL (node->value); - - /* We use the "key" field to hold the "next" pointer. */ - node->key = (splay_tree_key)pending; - pending = (splay_tree_node)node; - - /* Now, keep processing the pending list until there aren't any - more. This is a little more complicated than just recursing, but - it doesn't toast the stack for large trees. */ - - while (pending) - { - active = pending; - pending = 0; - while (active) - { - splay_tree_node temp; - - /* active points to a node which has its key and value - deallocated, we just need to process left and right. */ - - if (active->left) - { - KDEL (active->left->key); - VDEL (active->left->value); - active->left->key = (splay_tree_key)pending; - pending = (splay_tree_node)(active->left); - } - if (active->right) - { - KDEL (active->right->key); - VDEL (active->right->value); - active->right->key = (splay_tree_key)pending; - pending = (splay_tree_node)(active->right); - } - - temp = active; - active = (splay_tree_node)(temp->key); - (*sp->deallocate) ((char*) temp, sp->allocate_data); - } - } -#undef KDEL -#undef VDEL -} - -/* Rotate the edge joining the left child N with its parent P. PP is the - grandparents pointer to P. */ - -static inline void -rotate_left (splay_tree_node *pp, splay_tree_node p, splay_tree_node n) -{ - splay_tree_node tmp; - tmp = n->right; - n->right = p; - p->left = tmp; - *pp = n; -} - -/* Rotate the edge joining the right child N with its parent P. PP is the - grandparents pointer to P. */ - -static inline void -rotate_right (splay_tree_node *pp, splay_tree_node p, splay_tree_node n) -{ - splay_tree_node tmp; - tmp = n->left; - n->left = p; - p->right = tmp; - *pp = n; -} - -/* Bottom up splay of key. */ - -static void -splay_tree_splay (splay_tree sp, splay_tree_key key) -{ - if (sp->root == 0) - return; - - do { - int cmp1, cmp2; - splay_tree_node n, c; - - n = sp->root; - cmp1 = (*sp->comp) (key, n->key); - - /* Found. */ - if (cmp1 == 0) - return; - - /* Left or right? If no child, then we're done. */ - if (cmp1 < 0) - c = n->left; - else - c = n->right; - if (!c) - return; - - /* Next one left or right? If found or no child, we're done - after one rotation. */ - cmp2 = (*sp->comp) (key, c->key); - if (cmp2 == 0 - || (cmp2 < 0 && !c->left) - || (cmp2 > 0 && !c->right)) - { - if (cmp1 < 0) - rotate_left (&sp->root, n, c); - else - rotate_right (&sp->root, n, c); - return; - } - - /* Now we have the four cases of double-rotation. */ - if (cmp1 < 0 && cmp2 < 0) - { - rotate_left (&n->left, c, c->left); - rotate_left (&sp->root, n, n->left); - } - else if (cmp1 > 0 && cmp2 > 0) - { - rotate_right (&n->right, c, c->right); - rotate_right (&sp->root, n, n->right); - } - else if (cmp1 < 0 && cmp2 > 0) - { - rotate_right (&n->left, c, c->right); - rotate_left (&sp->root, n, n->left); - } - else if (cmp1 > 0 && cmp2 < 0) - { - rotate_left (&n->right, c, c->left); - rotate_right (&sp->root, n, n->right); - } - } while (1); -} - -/* Call FN, passing it the DATA, for every node below NODE, all of - which are from SP, following an in-order traversal. If FN every - returns a non-zero value, the iteration ceases immediately, and the - value is returned. Otherwise, this function returns 0. */ - -static int -splay_tree_foreach_helper (splay_tree sp, splay_tree_node node, - splay_tree_foreach_fn fn, void *data) -{ - int val; - - if (!node) - return 0; - - val = splay_tree_foreach_helper (sp, node->left, fn, data); - if (val) - return val; - - val = (*fn)(node, data); - if (val) - return val; - - return splay_tree_foreach_helper (sp, node->right, fn, data); -} - - -/* An allocator and deallocator based on xmalloc. */ -static void * -splay_tree_xmalloc_allocate (int size, void *data ATTRIBUTE_UNUSED) -{ - return (void *) xmalloc (size); -} - -static void -splay_tree_xmalloc_deallocate (void *object, void *data ATTRIBUTE_UNUSED) -{ - free (object); -} - - -/* Allocate a new splay tree, using COMPARE_FN to compare nodes, - DELETE_KEY_FN to deallocate keys, and DELETE_VALUE_FN to deallocate - values. Use xmalloc to allocate the splay tree structure, and any - nodes added. */ - -splay_tree -splay_tree_new (splay_tree_compare_fn compare_fn, - splay_tree_delete_key_fn delete_key_fn, - splay_tree_delete_value_fn delete_value_fn) -{ - return (splay_tree_new_with_allocator - (compare_fn, delete_key_fn, delete_value_fn, - splay_tree_xmalloc_allocate, splay_tree_xmalloc_deallocate, 0)); -} - - -/* Allocate a new splay tree, using COMPARE_FN to compare nodes, - DELETE_KEY_FN to deallocate keys, and DELETE_VALUE_FN to deallocate - values. */ - -splay_tree -splay_tree_new_with_allocator (splay_tree_compare_fn compare_fn, - splay_tree_delete_key_fn delete_key_fn, - splay_tree_delete_value_fn delete_value_fn, - splay_tree_allocate_fn allocate_fn, - splay_tree_deallocate_fn deallocate_fn, - void *allocate_data) -{ - splay_tree sp = (splay_tree) (*allocate_fn) (sizeof (struct splay_tree_s), - allocate_data); - sp->root = 0; - sp->comp = compare_fn; - sp->delete_key = delete_key_fn; - sp->delete_value = delete_value_fn; - sp->allocate = allocate_fn; - sp->deallocate = deallocate_fn; - sp->allocate_data = allocate_data; - - return sp; -} - -/* Deallocate SP. */ - -void -splay_tree_delete (splay_tree sp) -{ - splay_tree_delete_helper (sp, sp->root); - (*sp->deallocate) ((char*) sp, sp->allocate_data); -} - -/* Insert a new node (associating KEY with DATA) into SP. If a - previous node with the indicated KEY exists, its data is replaced - with the new value. Returns the new node. */ - -splay_tree_node -splay_tree_insert (splay_tree sp, splay_tree_key key, splay_tree_value value) -{ - int comparison = 0; - - splay_tree_splay (sp, key); - - if (sp->root) - comparison = (*sp->comp)(sp->root->key, key); - - if (sp->root && comparison == 0) - { - /* If the root of the tree already has the indicated KEY, just - replace the value with VALUE. */ - if (sp->delete_value) - (*sp->delete_value)(sp->root->value); - sp->root->value = value; - } - else - { - /* Create a new node, and insert it at the root. */ - splay_tree_node node; - - node = ((splay_tree_node) - (*sp->allocate) (sizeof (struct splay_tree_node_s), - sp->allocate_data)); - node->key = key; - node->value = value; - - if (!sp->root) - node->left = node->right = 0; - else if (comparison < 0) - { - node->left = sp->root; - node->right = node->left->right; - node->left->right = 0; - } - else - { - node->right = sp->root; - node->left = node->right->left; - node->right->left = 0; - } - - sp->root = node; - } - - return sp->root; -} - -/* Remove KEY from SP. It is not an error if it did not exist. */ - -void -splay_tree_remove (splay_tree sp, splay_tree_key key) -{ - splay_tree_splay (sp, key); - - if (sp->root && (*sp->comp) (sp->root->key, key) == 0) - { - splay_tree_node left, right; - - left = sp->root->left; - right = sp->root->right; - - /* Delete the root node itself. */ - if (sp->delete_value) - (*sp->delete_value) (sp->root->value); - (*sp->deallocate) (sp->root, sp->allocate_data); - - /* One of the children is now the root. Doesn't matter much - which, so long as we preserve the properties of the tree. */ - if (left) - { - sp->root = left; - - /* If there was a right child as well, hang it off the - right-most leaf of the left child. */ - if (right) - { - while (left->right) - left = left->right; - left->right = right; - } - } - else - sp->root = right; - } -} - -/* Lookup KEY in SP, returning VALUE if present, and NULL - otherwise. */ - -splay_tree_node -splay_tree_lookup (splay_tree sp, splay_tree_key key) -{ - splay_tree_splay (sp, key); - - if (sp->root && (*sp->comp)(sp->root->key, key) == 0) - return sp->root; - else - return 0; -} - -/* Return the node in SP with the greatest key. */ - -splay_tree_node -splay_tree_max (splay_tree sp) -{ - splay_tree_node n = sp->root; - - if (!n) - return NULL; - - while (n->right) - n = n->right; - - return n; -} - -/* Return the node in SP with the smallest key. */ - -splay_tree_node -splay_tree_min (splay_tree sp) -{ - splay_tree_node n = sp->root; - - if (!n) - return NULL; - - while (n->left) - n = n->left; - - return n; -} - -/* Return the immediate predecessor KEY, or NULL if there is no - predecessor. KEY need not be present in the tree. */ - -splay_tree_node -splay_tree_predecessor (splay_tree sp, splay_tree_key key) -{ - int comparison; - splay_tree_node node; - - /* If the tree is empty, there is certainly no predecessor. */ - if (!sp->root) - return NULL; - - /* Splay the tree around KEY. That will leave either the KEY - itself, its predecessor, or its successor at the root. */ - splay_tree_splay (sp, key); - comparison = (*sp->comp)(sp->root->key, key); - - /* If the predecessor is at the root, just return it. */ - if (comparison < 0) - return sp->root; - - /* Otherwise, find the rightmost element of the left subtree. */ - node = sp->root->left; - if (node) - while (node->right) - node = node->right; - - return node; -} - -/* Return the immediate successor KEY, or NULL if there is no - successor. KEY need not be present in the tree. */ - -splay_tree_node -splay_tree_successor (splay_tree sp, splay_tree_key key) -{ - int comparison; - splay_tree_node node; - - /* If the tree is empty, there is certainly no successor. */ - if (!sp->root) - return NULL; - - /* Splay the tree around KEY. That will leave either the KEY - itself, its predecessor, or its successor at the root. */ - splay_tree_splay (sp, key); - comparison = (*sp->comp)(sp->root->key, key); - - /* If the successor is at the root, just return it. */ - if (comparison > 0) - return sp->root; - - /* Otherwise, find the leftmost element of the right subtree. */ - node = sp->root->right; - if (node) - while (node->left) - node = node->left; - - return node; -} - -/* Call FN, passing it the DATA, for every node in SP, following an - in-order traversal. If FN every returns a non-zero value, the - iteration ceases immediately, and the value is returned. - Otherwise, this function returns 0. */ - -int -splay_tree_foreach (splay_tree sp, splay_tree_foreach_fn fn, void *data) -{ - return splay_tree_foreach_helper (sp, sp->root, fn, data); -} - -/* Splay-tree comparison function, treating the keys as ints. */ - -int -splay_tree_compare_ints (splay_tree_key k1, splay_tree_key k2) -{ - if ((int) k1 < (int) k2) - return -1; - else if ((int) k1 > (int) k2) - return 1; - else - return 0; -} - -/* Splay-tree comparison function, treating the keys as pointers. */ - -int -splay_tree_compare_pointers (splay_tree_key k1, splay_tree_key k2) -{ - if ((char*) k1 < (char*) k2) - return -1; - else if ((char*) k1 > (char*) k2) - return 1; - else - return 0; -} diff --git a/libiberty/stpcpy.c b/libiberty/stpcpy.c deleted file mode 100644 index 57b32d1c841..00000000000 --- a/libiberty/stpcpy.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Implement the stpcpy function. - Copyright (C) 2003 Free Software Foundation, Inc. - Written by Kaveh R. Ghazi . - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* - -@deftypefn Supplemental char* stpcpy (char *@var{dst}, const char *@var{src}) - -Copies the string @var{src} into @var{dst}. Returns a pointer to -@var{dst} + strlen(@var{src}). - -@end deftypefn - -*/ - -#include -#include - -extern size_t strlen (const char *); -extern PTR memcpy (PTR, const PTR, size_t); - -char * -stpcpy (char *dst, const char *src) -{ - const size_t len = strlen (src); - return (char *) memcpy (dst, src, len + 1) + len; -} diff --git a/libiberty/stpncpy.c b/libiberty/stpncpy.c deleted file mode 100644 index f97206a09e6..00000000000 --- a/libiberty/stpncpy.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Implement the stpncpy function. - Copyright (C) 2003 Free Software Foundation, Inc. - Written by Kaveh R. Ghazi . - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* - -@deftypefn Supplemental char* stpncpy (char *@var{dst}, const char *@var{src}, size_t @var{len}) - -Copies the string @var{src} into @var{dst}, copying exactly @var{len} -and padding with zeros if necessary. If @var{len} < strlen(@var{src}) -then return @var{dst} + @var{len}, otherwise returns @var{dst} + -strlen(@var{src}). - -@end deftypefn - -*/ - -#include -#include - -extern size_t strlen (const char *); -extern char *strncpy (char *, const char *, size_t); - -char * -stpncpy (char *dst, const char *src, size_t len) -{ - size_t n = strlen (src); - if (n > len) - n = len; - return strncpy (dst, src, len) + n; -} diff --git a/libiberty/strcasecmp.c b/libiberty/strcasecmp.c deleted file mode 100644 index 131d81c2ce7..00000000000 --- a/libiberty/strcasecmp.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 1987 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that this notice is preserved and that due credit is given - * to the University of California at Berkeley. The name of the University - * may not be used to endorse or promote products derived from this - * software without specific written prior permission. This software - * is provided ``as is'' without express or implied warranty. - */ - -/* - -@deftypefn Supplemental int strcasecmp (const char *@var{s1}, const char *@var{s2}) - -A case-insensitive @code{strcmp}. - -@end deftypefn - -*/ - -#if defined(LIBC_SCCS) && !defined(lint) -static char sccsid[] = "@(#)strcasecmp.c 5.5 (Berkeley) 11/24/87"; -#endif /* LIBC_SCCS and not lint */ - -#include -#include - -/* - * This array is designed for mapping upper and lower case letter - * together for a case independent comparison. The mappings are - * based upon ascii character sequences. - */ -typedef unsigned char uc; -static const unsigned char charmap[] = { - (uc)'\000',(uc)'\001',(uc)'\002',(uc)'\003',(uc)'\004',(uc)'\005',(uc)'\006',(uc)'\007', - (uc)'\010',(uc)'\011',(uc)'\012',(uc)'\013',(uc)'\014',(uc)'\015',(uc)'\016',(uc)'\017', - (uc)'\020',(uc)'\021',(uc)'\022',(uc)'\023',(uc)'\024',(uc)'\025',(uc)'\026',(uc)'\027', - (uc)'\030',(uc)'\031',(uc)'\032',(uc)'\033',(uc)'\034',(uc)'\035',(uc)'\036',(uc)'\037', - (uc)'\040',(uc)'\041',(uc)'\042',(uc)'\043',(uc)'\044',(uc)'\045',(uc)'\046',(uc)'\047', - (uc)'\050',(uc)'\051',(uc)'\052',(uc)'\053',(uc)'\054',(uc)'\055',(uc)'\056',(uc)'\057', - (uc)'\060',(uc)'\061',(uc)'\062',(uc)'\063',(uc)'\064',(uc)'\065',(uc)'\066',(uc)'\067', - (uc)'\070',(uc)'\071',(uc)'\072',(uc)'\073',(uc)'\074',(uc)'\075',(uc)'\076',(uc)'\077', - (uc)'\100',(uc)'\141',(uc)'\142',(uc)'\143',(uc)'\144',(uc)'\145',(uc)'\146',(uc)'\147', - (uc)'\150',(uc)'\151',(uc)'\152',(uc)'\153',(uc)'\154',(uc)'\155',(uc)'\156',(uc)'\157', - (uc)'\160',(uc)'\161',(uc)'\162',(uc)'\163',(uc)'\164',(uc)'\165',(uc)'\166',(uc)'\167', - (uc)'\170',(uc)'\171',(uc)'\172',(uc)'\133',(uc)'\134',(uc)'\135',(uc)'\136',(uc)'\137', - (uc)'\140',(uc)'\141',(uc)'\142',(uc)'\143',(uc)'\144',(uc)'\145',(uc)'\146',(uc)'\147', - (uc)'\150',(uc)'\151',(uc)'\152',(uc)'\153',(uc)'\154',(uc)'\155',(uc)'\156',(uc)'\157', - (uc)'\160',(uc)'\161',(uc)'\162',(uc)'\163',(uc)'\164',(uc)'\165',(uc)'\166',(uc)'\167', - (uc)'\170',(uc)'\171',(uc)'\172',(uc)'\173',(uc)'\174',(uc)'\175',(uc)'\176',(uc)'\177', - (uc)'\200',(uc)'\201',(uc)'\202',(uc)'\203',(uc)'\204',(uc)'\205',(uc)'\206',(uc)'\207', - (uc)'\210',(uc)'\211',(uc)'\212',(uc)'\213',(uc)'\214',(uc)'\215',(uc)'\216',(uc)'\217', - (uc)'\220',(uc)'\221',(uc)'\222',(uc)'\223',(uc)'\224',(uc)'\225',(uc)'\226',(uc)'\227', - (uc)'\230',(uc)'\231',(uc)'\232',(uc)'\233',(uc)'\234',(uc)'\235',(uc)'\236',(uc)'\237', - (uc)'\240',(uc)'\241',(uc)'\242',(uc)'\243',(uc)'\244',(uc)'\245',(uc)'\246',(uc)'\247', - (uc)'\250',(uc)'\251',(uc)'\252',(uc)'\253',(uc)'\254',(uc)'\255',(uc)'\256',(uc)'\257', - (uc)'\260',(uc)'\261',(uc)'\262',(uc)'\263',(uc)'\264',(uc)'\265',(uc)'\266',(uc)'\267', - (uc)'\270',(uc)'\271',(uc)'\272',(uc)'\273',(uc)'\274',(uc)'\275',(uc)'\276',(uc)'\277', - (uc)'\300',(uc)'\341',(uc)'\342',(uc)'\343',(uc)'\344',(uc)'\345',(uc)'\346',(uc)'\347', - (uc)'\350',(uc)'\351',(uc)'\352',(uc)'\353',(uc)'\354',(uc)'\355',(uc)'\356',(uc)'\357', - (uc)'\360',(uc)'\361',(uc)'\362',(uc)'\363',(uc)'\364',(uc)'\365',(uc)'\366',(uc)'\367', - (uc)'\370',(uc)'\371',(uc)'\372',(uc)'\333',(uc)'\334',(uc)'\335',(uc)'\336',(uc)'\337', - (uc)'\340',(uc)'\341',(uc)'\342',(uc)'\343',(uc)'\344',(uc)'\345',(uc)'\346',(uc)'\347', - (uc)'\350',(uc)'\351',(uc)'\352',(uc)'\353',(uc)'\354',(uc)'\355',(uc)'\356',(uc)'\357', - (uc)'\360',(uc)'\361',(uc)'\362',(uc)'\363',(uc)'\364',(uc)'\365',(uc)'\366',(uc)'\367', - (uc)'\370',(uc)'\371',(uc)'\372',(uc)'\373',(uc)'\374',(uc)'\375',(uc)'\376',(uc)'\377', -}; - -int -strcasecmp(const char *s1, const char *s2) -{ - register unsigned char u1, u2; - - for (;;) { - u1 = (unsigned char) *s1++; - u2 = (unsigned char) *s2++; - if (charmap[u1] != charmap[u2]) { - return charmap[u1] - charmap[u2]; - } - if (u1 == '\0') { - return 0; - } - } -} - diff --git a/libiberty/strchr.c b/libiberty/strchr.c deleted file mode 100644 index 935805ef4f4..00000000000 --- a/libiberty/strchr.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Portable version of strchr() - This function is in the public domain. */ - -/* - -@deftypefn Supplemental char* strchr (const char *@var{s}, int @var{c}) - -Returns a pointer to the first occurrence of the character @var{c} in -the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the -null character, the results are undefined. - -@end deftypefn - -*/ - -#include - -char * -strchr (register const char *s, int c) -{ - do { - if (*s == c) - { - return (char*)s; - } - } while (*s++); - return (0); -} diff --git a/libiberty/strdup.c b/libiberty/strdup.c deleted file mode 100644 index 78c2093b61a..00000000000 --- a/libiberty/strdup.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - -@deftypefn Supplemental char* strdup (const char *@var{s}) - -Returns a pointer to a copy of @var{s} in memory obtained from -@code{malloc}, or @code{NULL} if insufficient memory was available. - -@end deftypefn - -*/ - -#include -#include - -extern size_t strlen (const char*); -extern PTR malloc (size_t); -extern PTR memcpy (PTR, const PTR, size_t); - -char * -strdup(const char *s) -{ - size_t len = strlen (s) + 1; - char *result = (char*) malloc (len); - if (result == (char*) 0) - return (char*) 0; - return (char*) memcpy (result, s, len); -} diff --git a/libiberty/strerror.c b/libiberty/strerror.c deleted file mode 100644 index 0efadc3d65e..00000000000 --- a/libiberty/strerror.c +++ /dev/null @@ -1,809 +0,0 @@ -/* Extended support for using errno values. - Written by Fred Fish. fnf@cygnus.com - This file is in the public domain. --Per Bothner. */ - -#include "config.h" - -#ifdef HAVE_SYS_ERRLIST -/* Note that errno.h (not sure what OS) or stdio.h (BSD 4.4, at least) - might declare sys_errlist in a way that the compiler might consider - incompatible with our later declaration, perhaps by using const - attributes. So we hide the declaration in errno.h (if any) using a - macro. */ -#define sys_nerr sys_nerr__ -#define sys_errlist sys_errlist__ -#endif - -#include "ansidecl.h" -#include "libiberty.h" - -#include -#include - -#ifdef HAVE_SYS_ERRLIST -#undef sys_nerr -#undef sys_errlist -#endif - -/* Routines imported from standard C runtime libraries. */ - -#ifdef HAVE_STDLIB_H -#include -#else -extern PTR malloc (); -#endif - -#ifdef HAVE_STRING_H -#include -#else -extern PTR memset (); -#endif - -#ifndef MAX -# define MAX(a,b) ((a) > (b) ? (a) : (b)) -#endif - -static void init_error_tables (void); - -/* Translation table for errno values. See intro(2) in most UNIX systems - Programmers Reference Manuals. - - Note that this table is generally only accessed when it is used at runtime - to initialize errno name and message tables that are indexed by errno - value. - - Not all of these errnos will exist on all systems. This table is the only - thing that should have to be updated as new error numbers are introduced. - It's sort of ugly, but at least its portable. */ - -struct error_info -{ - const int value; /* The numeric value from */ - const char *const name; /* The equivalent symbolic value */ -#ifndef HAVE_SYS_ERRLIST - const char *const msg; /* Short message about this value */ -#endif -}; - -#ifndef HAVE_SYS_ERRLIST -# define ENTRY(value, name, msg) {value, name, msg} -#else -# define ENTRY(value, name, msg) {value, name} -#endif - -static const struct error_info error_table[] = -{ -#if defined (EPERM) - ENTRY(EPERM, "EPERM", "Not owner"), -#endif -#if defined (ENOENT) - ENTRY(ENOENT, "ENOENT", "No such file or directory"), -#endif -#if defined (ESRCH) - ENTRY(ESRCH, "ESRCH", "No such process"), -#endif -#if defined (EINTR) - ENTRY(EINTR, "EINTR", "Interrupted system call"), -#endif -#if defined (EIO) - ENTRY(EIO, "EIO", "I/O error"), -#endif -#if defined (ENXIO) - ENTRY(ENXIO, "ENXIO", "No such device or address"), -#endif -#if defined (E2BIG) - ENTRY(E2BIG, "E2BIG", "Arg list too long"), -#endif -#if defined (ENOEXEC) - ENTRY(ENOEXEC, "ENOEXEC", "Exec format error"), -#endif -#if defined (EBADF) - ENTRY(EBADF, "EBADF", "Bad file number"), -#endif -#if defined (ECHILD) - ENTRY(ECHILD, "ECHILD", "No child processes"), -#endif -#if defined (EWOULDBLOCK) /* Put before EAGAIN, sometimes aliased */ - ENTRY(EWOULDBLOCK, "EWOULDBLOCK", "Operation would block"), -#endif -#if defined (EAGAIN) - ENTRY(EAGAIN, "EAGAIN", "No more processes"), -#endif -#if defined (ENOMEM) - ENTRY(ENOMEM, "ENOMEM", "Not enough space"), -#endif -#if defined (EACCES) - ENTRY(EACCES, "EACCES", "Permission denied"), -#endif -#if defined (EFAULT) - ENTRY(EFAULT, "EFAULT", "Bad address"), -#endif -#if defined (ENOTBLK) - ENTRY(ENOTBLK, "ENOTBLK", "Block device required"), -#endif -#if defined (EBUSY) - ENTRY(EBUSY, "EBUSY", "Device busy"), -#endif -#if defined (EEXIST) - ENTRY(EEXIST, "EEXIST", "File exists"), -#endif -#if defined (EXDEV) - ENTRY(EXDEV, "EXDEV", "Cross-device link"), -#endif -#if defined (ENODEV) - ENTRY(ENODEV, "ENODEV", "No such device"), -#endif -#if defined (ENOTDIR) - ENTRY(ENOTDIR, "ENOTDIR", "Not a directory"), -#endif -#if defined (EISDIR) - ENTRY(EISDIR, "EISDIR", "Is a directory"), -#endif -#if defined (EINVAL) - ENTRY(EINVAL, "EINVAL", "Invalid argument"), -#endif -#if defined (ENFILE) - ENTRY(ENFILE, "ENFILE", "File table overflow"), -#endif -#if defined (EMFILE) - ENTRY(EMFILE, "EMFILE", "Too many open files"), -#endif -#if defined (ENOTTY) - ENTRY(ENOTTY, "ENOTTY", "Not a typewriter"), -#endif -#if defined (ETXTBSY) - ENTRY(ETXTBSY, "ETXTBSY", "Text file busy"), -#endif -#if defined (EFBIG) - ENTRY(EFBIG, "EFBIG", "File too large"), -#endif -#if defined (ENOSPC) - ENTRY(ENOSPC, "ENOSPC", "No space left on device"), -#endif -#if defined (ESPIPE) - ENTRY(ESPIPE, "ESPIPE", "Illegal seek"), -#endif -#if defined (EROFS) - ENTRY(EROFS, "EROFS", "Read-only file system"), -#endif -#if defined (EMLINK) - ENTRY(EMLINK, "EMLINK", "Too many links"), -#endif -#if defined (EPIPE) - ENTRY(EPIPE, "EPIPE", "Broken pipe"), -#endif -#if defined (EDOM) - ENTRY(EDOM, "EDOM", "Math argument out of domain of func"), -#endif -#if defined (ERANGE) - ENTRY(ERANGE, "ERANGE", "Math result not representable"), -#endif -#if defined (ENOMSG) - ENTRY(ENOMSG, "ENOMSG", "No message of desired type"), -#endif -#if defined (EIDRM) - ENTRY(EIDRM, "EIDRM", "Identifier removed"), -#endif -#if defined (ECHRNG) - ENTRY(ECHRNG, "ECHRNG", "Channel number out of range"), -#endif -#if defined (EL2NSYNC) - ENTRY(EL2NSYNC, "EL2NSYNC", "Level 2 not synchronized"), -#endif -#if defined (EL3HLT) - ENTRY(EL3HLT, "EL3HLT", "Level 3 halted"), -#endif -#if defined (EL3RST) - ENTRY(EL3RST, "EL3RST", "Level 3 reset"), -#endif -#if defined (ELNRNG) - ENTRY(ELNRNG, "ELNRNG", "Link number out of range"), -#endif -#if defined (EUNATCH) - ENTRY(EUNATCH, "EUNATCH", "Protocol driver not attached"), -#endif -#if defined (ENOCSI) - ENTRY(ENOCSI, "ENOCSI", "No CSI structure available"), -#endif -#if defined (EL2HLT) - ENTRY(EL2HLT, "EL2HLT", "Level 2 halted"), -#endif -#if defined (EDEADLK) - ENTRY(EDEADLK, "EDEADLK", "Deadlock condition"), -#endif -#if defined (ENOLCK) - ENTRY(ENOLCK, "ENOLCK", "No record locks available"), -#endif -#if defined (EBADE) - ENTRY(EBADE, "EBADE", "Invalid exchange"), -#endif -#if defined (EBADR) - ENTRY(EBADR, "EBADR", "Invalid request descriptor"), -#endif -#if defined (EXFULL) - ENTRY(EXFULL, "EXFULL", "Exchange full"), -#endif -#if defined (ENOANO) - ENTRY(ENOANO, "ENOANO", "No anode"), -#endif -#if defined (EBADRQC) - ENTRY(EBADRQC, "EBADRQC", "Invalid request code"), -#endif -#if defined (EBADSLT) - ENTRY(EBADSLT, "EBADSLT", "Invalid slot"), -#endif -#if defined (EDEADLOCK) - ENTRY(EDEADLOCK, "EDEADLOCK", "File locking deadlock error"), -#endif -#if defined (EBFONT) - ENTRY(EBFONT, "EBFONT", "Bad font file format"), -#endif -#if defined (ENOSTR) - ENTRY(ENOSTR, "ENOSTR", "Device not a stream"), -#endif -#if defined (ENODATA) - ENTRY(ENODATA, "ENODATA", "No data available"), -#endif -#if defined (ETIME) - ENTRY(ETIME, "ETIME", "Timer expired"), -#endif -#if defined (ENOSR) - ENTRY(ENOSR, "ENOSR", "Out of streams resources"), -#endif -#if defined (ENONET) - ENTRY(ENONET, "ENONET", "Machine is not on the network"), -#endif -#if defined (ENOPKG) - ENTRY(ENOPKG, "ENOPKG", "Package not installed"), -#endif -#if defined (EREMOTE) - ENTRY(EREMOTE, "EREMOTE", "Object is remote"), -#endif -#if defined (ENOLINK) - ENTRY(ENOLINK, "ENOLINK", "Link has been severed"), -#endif -#if defined (EADV) - ENTRY(EADV, "EADV", "Advertise error"), -#endif -#if defined (ESRMNT) - ENTRY(ESRMNT, "ESRMNT", "Srmount error"), -#endif -#if defined (ECOMM) - ENTRY(ECOMM, "ECOMM", "Communication error on send"), -#endif -#if defined (EPROTO) - ENTRY(EPROTO, "EPROTO", "Protocol error"), -#endif -#if defined (EMULTIHOP) - ENTRY(EMULTIHOP, "EMULTIHOP", "Multihop attempted"), -#endif -#if defined (EDOTDOT) - ENTRY(EDOTDOT, "EDOTDOT", "RFS specific error"), -#endif -#if defined (EBADMSG) - ENTRY(EBADMSG, "EBADMSG", "Not a data message"), -#endif -#if defined (ENAMETOOLONG) - ENTRY(ENAMETOOLONG, "ENAMETOOLONG", "File name too long"), -#endif -#if defined (EOVERFLOW) - ENTRY(EOVERFLOW, "EOVERFLOW", "Value too large for defined data type"), -#endif -#if defined (ENOTUNIQ) - ENTRY(ENOTUNIQ, "ENOTUNIQ", "Name not unique on network"), -#endif -#if defined (EBADFD) - ENTRY(EBADFD, "EBADFD", "File descriptor in bad state"), -#endif -#if defined (EREMCHG) - ENTRY(EREMCHG, "EREMCHG", "Remote address changed"), -#endif -#if defined (ELIBACC) - ENTRY(ELIBACC, "ELIBACC", "Can not access a needed shared library"), -#endif -#if defined (ELIBBAD) - ENTRY(ELIBBAD, "ELIBBAD", "Accessing a corrupted shared library"), -#endif -#if defined (ELIBSCN) - ENTRY(ELIBSCN, "ELIBSCN", ".lib section in a.out corrupted"), -#endif -#if defined (ELIBMAX) - ENTRY(ELIBMAX, "ELIBMAX", "Attempting to link in too many shared libraries"), -#endif -#if defined (ELIBEXEC) - ENTRY(ELIBEXEC, "ELIBEXEC", "Cannot exec a shared library directly"), -#endif -#if defined (EILSEQ) - ENTRY(EILSEQ, "EILSEQ", "Illegal byte sequence"), -#endif -#if defined (ENOSYS) - ENTRY(ENOSYS, "ENOSYS", "Operation not applicable"), -#endif -#if defined (ELOOP) - ENTRY(ELOOP, "ELOOP", "Too many symbolic links encountered"), -#endif -#if defined (ERESTART) - ENTRY(ERESTART, "ERESTART", "Interrupted system call should be restarted"), -#endif -#if defined (ESTRPIPE) - ENTRY(ESTRPIPE, "ESTRPIPE", "Streams pipe error"), -#endif -#if defined (ENOTEMPTY) - ENTRY(ENOTEMPTY, "ENOTEMPTY", "Directory not empty"), -#endif -#if defined (EUSERS) - ENTRY(EUSERS, "EUSERS", "Too many users"), -#endif -#if defined (ENOTSOCK) - ENTRY(ENOTSOCK, "ENOTSOCK", "Socket operation on non-socket"), -#endif -#if defined (EDESTADDRREQ) - ENTRY(EDESTADDRREQ, "EDESTADDRREQ", "Destination address required"), -#endif -#if defined (EMSGSIZE) - ENTRY(EMSGSIZE, "EMSGSIZE", "Message too long"), -#endif -#if defined (EPROTOTYPE) - ENTRY(EPROTOTYPE, "EPROTOTYPE", "Protocol wrong type for socket"), -#endif -#if defined (ENOPROTOOPT) - ENTRY(ENOPROTOOPT, "ENOPROTOOPT", "Protocol not available"), -#endif -#if defined (EPROTONOSUPPORT) - ENTRY(EPROTONOSUPPORT, "EPROTONOSUPPORT", "Protocol not supported"), -#endif -#if defined (ESOCKTNOSUPPORT) - ENTRY(ESOCKTNOSUPPORT, "ESOCKTNOSUPPORT", "Socket type not supported"), -#endif -#if defined (EOPNOTSUPP) - ENTRY(EOPNOTSUPP, "EOPNOTSUPP", "Operation not supported on transport endpoint"), -#endif -#if defined (EPFNOSUPPORT) - ENTRY(EPFNOSUPPORT, "EPFNOSUPPORT", "Protocol family not supported"), -#endif -#if defined (EAFNOSUPPORT) - ENTRY(EAFNOSUPPORT, "EAFNOSUPPORT", "Address family not supported by protocol"), -#endif -#if defined (EADDRINUSE) - ENTRY(EADDRINUSE, "EADDRINUSE", "Address already in use"), -#endif -#if defined (EADDRNOTAVAIL) - ENTRY(EADDRNOTAVAIL, "EADDRNOTAVAIL","Cannot assign requested address"), -#endif -#if defined (ENETDOWN) - ENTRY(ENETDOWN, "ENETDOWN", "Network is down"), -#endif -#if defined (ENETUNREACH) - ENTRY(ENETUNREACH, "ENETUNREACH", "Network is unreachable"), -#endif -#if defined (ENETRESET) - ENTRY(ENETRESET, "ENETRESET", "Network dropped connection because of reset"), -#endif -#if defined (ECONNABORTED) - ENTRY(ECONNABORTED, "ECONNABORTED", "Software caused connection abort"), -#endif -#if defined (ECONNRESET) - ENTRY(ECONNRESET, "ECONNRESET", "Connection reset by peer"), -#endif -#if defined (ENOBUFS) - ENTRY(ENOBUFS, "ENOBUFS", "No buffer space available"), -#endif -#if defined (EISCONN) - ENTRY(EISCONN, "EISCONN", "Transport endpoint is already connected"), -#endif -#if defined (ENOTCONN) - ENTRY(ENOTCONN, "ENOTCONN", "Transport endpoint is not connected"), -#endif -#if defined (ESHUTDOWN) - ENTRY(ESHUTDOWN, "ESHUTDOWN", "Cannot send after transport endpoint shutdown"), -#endif -#if defined (ETOOMANYREFS) - ENTRY(ETOOMANYREFS, "ETOOMANYREFS", "Too many references: cannot splice"), -#endif -#if defined (ETIMEDOUT) - ENTRY(ETIMEDOUT, "ETIMEDOUT", "Connection timed out"), -#endif -#if defined (ECONNREFUSED) - ENTRY(ECONNREFUSED, "ECONNREFUSED", "Connection refused"), -#endif -#if defined (EHOSTDOWN) - ENTRY(EHOSTDOWN, "EHOSTDOWN", "Host is down"), -#endif -#if defined (EHOSTUNREACH) - ENTRY(EHOSTUNREACH, "EHOSTUNREACH", "No route to host"), -#endif -#if defined (EALREADY) - ENTRY(EALREADY, "EALREADY", "Operation already in progress"), -#endif -#if defined (EINPROGRESS) - ENTRY(EINPROGRESS, "EINPROGRESS", "Operation now in progress"), -#endif -#if defined (ESTALE) - ENTRY(ESTALE, "ESTALE", "Stale NFS file handle"), -#endif -#if defined (EUCLEAN) - ENTRY(EUCLEAN, "EUCLEAN", "Structure needs cleaning"), -#endif -#if defined (ENOTNAM) - ENTRY(ENOTNAM, "ENOTNAM", "Not a XENIX named type file"), -#endif -#if defined (ENAVAIL) - ENTRY(ENAVAIL, "ENAVAIL", "No XENIX semaphores available"), -#endif -#if defined (EISNAM) - ENTRY(EISNAM, "EISNAM", "Is a named type file"), -#endif -#if defined (EREMOTEIO) - ENTRY(EREMOTEIO, "EREMOTEIO", "Remote I/O error"), -#endif - ENTRY(0, NULL, NULL) -}; - -#ifdef EVMSERR -/* This is not in the table, because the numeric value of EVMSERR (32767) - lies outside the range of sys_errlist[]. */ -static struct { int value; const char *name, *msg; } - evmserr = { EVMSERR, "EVMSERR", "VMS-specific error" }; -#endif - -/* Translation table allocated and initialized at runtime. Indexed by the - errno value to find the equivalent symbolic value. */ - -static const char **error_names; -static int num_error_names = 0; - -/* Translation table allocated and initialized at runtime, if it does not - already exist in the host environment. Indexed by the errno value to find - the descriptive string. - - We don't export it for use in other modules because even though it has the - same name, it differs from other implementations in that it is dynamically - initialized rather than statically initialized. */ - -#ifndef HAVE_SYS_ERRLIST - -#define sys_nerr sys_nerr__ -#define sys_errlist sys_errlist__ -static int sys_nerr; -static const char **sys_errlist; - -#else - -extern int sys_nerr; -extern char *sys_errlist[]; - -#endif - -/* - -NAME - - init_error_tables -- initialize the name and message tables - -SYNOPSIS - - static void init_error_tables (); - -DESCRIPTION - - Using the error_table, which is initialized at compile time, generate - the error_names and the sys_errlist (if needed) tables, which are - indexed at runtime by a specific errno value. - -BUGS - - The initialization of the tables may fail under low memory conditions, - in which case we don't do anything particularly useful, but we don't - bomb either. Who knows, it might succeed at a later point if we free - some memory in the meantime. In any case, the other routines know - how to deal with lack of a table after trying to initialize it. This - may or may not be considered to be a bug, that we don't specifically - warn about this particular failure mode. - -*/ - -static void -init_error_tables (void) -{ - const struct error_info *eip; - int nbytes; - - /* If we haven't already scanned the error_table once to find the maximum - errno value, then go find it now. */ - - if (num_error_names == 0) - { - for (eip = error_table; eip -> name != NULL; eip++) - { - if (eip -> value >= num_error_names) - { - num_error_names = eip -> value + 1; - } - } - } - - /* Now attempt to allocate the error_names table, zero it out, and then - initialize it from the statically initialized error_table. */ - - if (error_names == NULL) - { - nbytes = num_error_names * sizeof (char *); - if ((error_names = (const char **) malloc (nbytes)) != NULL) - { - memset (error_names, 0, nbytes); - for (eip = error_table; eip -> name != NULL; eip++) - { - error_names[eip -> value] = eip -> name; - } - } - } - -#ifndef HAVE_SYS_ERRLIST - - /* Now attempt to allocate the sys_errlist table, zero it out, and then - initialize it from the statically initialized error_table. */ - - if (sys_errlist == NULL) - { - nbytes = num_error_names * sizeof (char *); - if ((sys_errlist = (const char **) malloc (nbytes)) != NULL) - { - memset (sys_errlist, 0, nbytes); - sys_nerr = num_error_names; - for (eip = error_table; eip -> name != NULL; eip++) - { - sys_errlist[eip -> value] = eip -> msg; - } - } - } - -#endif - -} - -/* - - -@deftypefn Extension int errno_max (void) - -Returns the maximum @code{errno} value for which a corresponding -symbolic name or message is available. Note that in the case where we -use the @code{sys_errlist} supplied by the system, it is possible for -there to be more symbolic names than messages, or vice versa. In -fact, the manual page for @code{perror(3C)} explicitly warns that one -should check the size of the table (@code{sys_nerr}) before indexing -it, since new error codes may be added to the system before they are -added to the table. Thus @code{sys_nerr} might be smaller than value -implied by the largest @code{errno} value defined in @code{}. - -We return the maximum value that can be used to obtain a meaningful -symbolic name or message. - -@end deftypefn - -*/ - -int -errno_max (void) -{ - int maxsize; - - if (error_names == NULL) - { - init_error_tables (); - } - maxsize = MAX (sys_nerr, num_error_names); - return (maxsize - 1); -} - -#ifndef HAVE_STRERROR - -/* - -@deftypefn Supplemental char* strerror (int @var{errnoval}) - -Maps an @code{errno} number to an error message string, the contents -of which are implementation defined. On systems which have the -external variables @code{sys_nerr} and @code{sys_errlist}, these -strings will be the same as the ones used by @code{perror}. - -If the supplied error number is within the valid range of indices for -the @code{sys_errlist}, but no message is available for the particular -error number, then returns the string @samp{Error @var{num}}, where -@var{num} is the error number. - -If the supplied error number is not a valid index into -@code{sys_errlist}, returns @code{NULL}. - -The returned string is only guaranteed to be valid only until the -next call to @code{strerror}. - -@end deftypefn - -*/ - -char * -strerror (int errnoval) -{ - const char *msg; - static char buf[32]; - -#ifndef HAVE_SYS_ERRLIST - - if (error_names == NULL) - { - init_error_tables (); - } - -#endif - - if ((errnoval < 0) || (errnoval >= sys_nerr)) - { -#ifdef EVMSERR - if (errnoval == evmserr.value) - msg = evmserr.msg; - else -#endif - /* Out of range, just return NULL */ - msg = NULL; - } - else if ((sys_errlist == NULL) || (sys_errlist[errnoval] == NULL)) - { - /* In range, but no sys_errlist or no entry at this index. */ - sprintf (buf, "Error %d", errnoval); - msg = buf; - } - else - { - /* In range, and a valid message. Just return the message. */ - msg = (char *) sys_errlist[errnoval]; - } - - return (msg); -} - -#endif /* ! HAVE_STRERROR */ - - -/* - -@deftypefn Replacement {const char*} strerrno (int @var{errnum}) - -Given an error number returned from a system call (typically returned -in @code{errno}), returns a pointer to a string containing the -symbolic name of that error number, as found in @code{}. - -If the supplied error number is within the valid range of indices for -symbolic names, but no name is available for the particular error -number, then returns the string @samp{Error @var{num}}, where @var{num} -is the error number. - -If the supplied error number is not within the range of valid -indices, then returns @code{NULL}. - -The contents of the location pointed to are only guaranteed to be -valid until the next call to @code{strerrno}. - -@end deftypefn - -*/ - -const char * -strerrno (int errnoval) -{ - const char *name; - static char buf[32]; - - if (error_names == NULL) - { - init_error_tables (); - } - - if ((errnoval < 0) || (errnoval >= num_error_names)) - { -#ifdef EVMSERR - if (errnoval == evmserr.value) - name = evmserr.name; - else -#endif - /* Out of range, just return NULL */ - name = NULL; - } - else if ((error_names == NULL) || (error_names[errnoval] == NULL)) - { - /* In range, but no error_names or no entry at this index. */ - sprintf (buf, "Error %d", errnoval); - name = (const char *) buf; - } - else - { - /* In range, and a valid name. Just return the name. */ - name = error_names[errnoval]; - } - - return (name); -} - -/* - -@deftypefn Extension int strtoerrno (const char *@var{name}) - -Given the symbolic name of a error number (e.g., @code{EACCES}), map it -to an errno value. If no translation is found, returns 0. - -@end deftypefn - -*/ - -int -strtoerrno (const char *name) -{ - int errnoval = 0; - - if (name != NULL) - { - if (error_names == NULL) - { - init_error_tables (); - } - for (errnoval = 0; errnoval < num_error_names; errnoval++) - { - if ((error_names[errnoval] != NULL) && - (strcmp (name, error_names[errnoval]) == 0)) - { - break; - } - } - if (errnoval == num_error_names) - { -#ifdef EVMSERR - if (strcmp (name, evmserr.name) == 0) - errnoval = evmserr.value; - else -#endif - errnoval = 0; - } - } - return (errnoval); -} - - -/* A simple little main that does nothing but print all the errno translations - if MAIN is defined and this file is compiled and linked. */ - -#ifdef MAIN - -#include - -int -main (void) -{ - int errn; - int errnmax; - const char *name; - const char *msg; - char *strerror (); - - errnmax = errno_max (); - printf ("%d entries in names table.\n", num_error_names); - printf ("%d entries in messages table.\n", sys_nerr); - printf ("%d is max useful index.\n", errnmax); - - /* Keep printing values until we get to the end of *both* tables, not - *either* table. Note that knowing the maximum useful index does *not* - relieve us of the responsibility of testing the return pointer for - NULL. */ - - for (errn = 0; errn <= errnmax; errn++) - { - name = strerrno (errn); - name = (name == NULL) ? "" : name; - msg = strerror (errn); - msg = (msg == NULL) ? "" : msg; - printf ("%-4d%-18s%s\n", errn, name, msg); - } - - return 0; -} - -#endif diff --git a/libiberty/strncasecmp.c b/libiberty/strncasecmp.c deleted file mode 100644 index 47700dde518..00000000000 --- a/libiberty/strncasecmp.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 1987 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that this notice is preserved and that due credit is given - * to the University of California at Berkeley. The name of the University - * may not be used to endorse or promote products derived from this - * software without specific written prior permission. This software - * is provided ``as is'' without express or implied warranty. - */ - -/* - -@deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2}) - -A case-insensitive @code{strncmp}. - -@end deftypefn - -*/ - -#if defined(LIBC_SCCS) && !defined(lint) -static char sccsid[] = "@(#)strcasecmp.c 5.5 (Berkeley) 11/24/87"; -#endif /* LIBC_SCCS and not lint */ - -#include -#include - -/* - * This array is designed for mapping upper and lower case letter - * together for a case independent comparison. The mappings are - * based upon ascii character sequences. - */ -static const unsigned char charmap[] = { - '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', - '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', - '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', - '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', - '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', - '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', - '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', - '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', - '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', - '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', - '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', - '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', - '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', - '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', - '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', - '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', - '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', - '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', - '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', - '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', - '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', - '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', - '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', - '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', - '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347', - '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', - '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', - '\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337', - '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', - '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', - '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', - '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377', -}; - -int -strncasecmp(const char *s1, const char *s2, register size_t n) -{ - register unsigned char u1, u2; - - for (; n != 0; --n) { - u1 = (unsigned char) *s1++; - u2 = (unsigned char) *s2++; - if (charmap[u1] != charmap[u2]) { - return charmap[u1] - charmap[u2]; - } - if (u1 == '\0') { - return 0; - } - } - return 0; -} diff --git a/libiberty/strncmp.c b/libiberty/strncmp.c deleted file mode 100644 index 916c2f07a8a..00000000000 --- a/libiberty/strncmp.c +++ /dev/null @@ -1,33 +0,0 @@ -/* strncmp -- compare two strings, stop after n bytes. - This function is in the public domain. */ - -/* - -@deftypefn Supplemental int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n}) - -Compares the first @var{n} bytes of two strings, returning a value as -@code{strcmp}. - -@end deftypefn - -*/ - -#include -#include - -int -strncmp(const char *s1, const char *s2, register size_t n) -{ - register unsigned char u1, u2; - - while (n-- > 0) - { - u1 = (unsigned char) *s1++; - u2 = (unsigned char) *s2++; - if (u1 != u2) - return u1 - u2; - if (u1 == '\0') - return 0; - } - return 0; -} diff --git a/libiberty/strndup.c b/libiberty/strndup.c deleted file mode 100644 index 9e9b4e2991f..00000000000 --- a/libiberty/strndup.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Implement the strndup function. - Copyright (C) 2005 Free Software Foundation, Inc. - Written by Kaveh R. Ghazi . - -This file is part of the libiberty library. -Libiberty 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. - -Libiberty 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 libiberty; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ - -/* - -@deftypefn Extension char* strndup (const char *@var{s}, size_t @var{n}) - -Returns a pointer to a copy of @var{s} with at most @var{n} characters -in memory obtained from @code{malloc}, or @code{NULL} if insufficient -memory was available. The result is always NUL terminated. - -@end deftypefn - -*/ - -#include "ansidecl.h" -#include - -extern size_t strlen (const char*); -extern PTR malloc (size_t); -extern PTR memcpy (PTR, const PTR, size_t); - -char * -strndup (const char *s, size_t n) -{ - char *result; - size_t len = strlen (s); - - if (n < len) - len = n; - - result = (char *) malloc (len + 1); - if (!result) - return 0; - - result[len] = '\0'; - return (char *) memcpy (result, s, len); -} diff --git a/libiberty/strrchr.c b/libiberty/strrchr.c deleted file mode 100644 index 5cf7c14d8b7..00000000000 --- a/libiberty/strrchr.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Portable version of strrchr(). - This function is in the public domain. */ - -/* - -@deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c}) - -Returns a pointer to the last occurrence of the character @var{c} in -the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the -null character, the results are undefined. - -@end deftypefn - -*/ - -#include - -char * -strrchr (register const char *s, int c) -{ - char *rtnval = 0; - - do { - if (*s == c) - rtnval = (char*) s; - } while (*s++); - return (rtnval); -} diff --git a/libiberty/strsignal.c b/libiberty/strsignal.c deleted file mode 100644 index c3a16ab9bdc..00000000000 --- a/libiberty/strsignal.c +++ /dev/null @@ -1,608 +0,0 @@ -/* Extended support for using signal values. - Written by Fred Fish. fnf@cygnus.com - This file is in the public domain. */ - -#include "config.h" -#include "ansidecl.h" -#include "libiberty.h" - -/* We need to declare sys_siglist, because even if the system provides - it we can't assume that it is declared in (for example, - SunOS provides sys_siglist, but it does not declare it in any - header file). fHowever, we can't declare sys_siglist portably, - because on some systems it is declared with const and on some - systems it is declared without const. If we were using autoconf, - we could work out the right declaration. Until, then we just - ignore any declaration in the system header files, and always - declare it ourselves. With luck, this will always work. */ -#define sys_siglist no_such_symbol -#define sys_nsig sys_nsig__no_such_symbol - -#include -#include - -/* Routines imported from standard C runtime libraries. */ - -#ifdef HAVE_STDLIB_H -#include -#else -extern PTR malloc (); -#endif - -#ifdef HAVE_STRING_H -#include -#else -extern PTR memset (); -#endif - -/* Undefine the macro we used to hide the definition of sys_siglist - found in the system header files. */ -#undef sys_siglist -#undef sys_nsig - -#ifndef NULL -# define NULL (void *) 0 -#endif - -#ifndef MAX -# define MAX(a,b) ((a) > (b) ? (a) : (b)) -#endif - -static void init_signal_tables (void); - -/* Translation table for signal values. - - Note that this table is generally only accessed when it is used at runtime - to initialize signal name and message tables that are indexed by signal - value. - - Not all of these signals will exist on all systems. This table is the only - thing that should have to be updated as new signal numbers are introduced. - It's sort of ugly, but at least its portable. */ - -struct signal_info -{ - const int value; /* The numeric value from */ - const char *const name; /* The equivalent symbolic value */ -#ifndef HAVE_SYS_SIGLIST - const char *const msg; /* Short message about this value */ -#endif -}; - -#ifndef HAVE_SYS_SIGLIST -# define ENTRY(value, name, msg) {value, name, msg} -#else -# define ENTRY(value, name, msg) {value, name} -#endif - -static const struct signal_info signal_table[] = -{ -#if defined (SIGHUP) - ENTRY(SIGHUP, "SIGHUP", "Hangup"), -#endif -#if defined (SIGINT) - ENTRY(SIGINT, "SIGINT", "Interrupt"), -#endif -#if defined (SIGQUIT) - ENTRY(SIGQUIT, "SIGQUIT", "Quit"), -#endif -#if defined (SIGILL) - ENTRY(SIGILL, "SIGILL", "Illegal instruction"), -#endif -#if defined (SIGTRAP) - ENTRY(SIGTRAP, "SIGTRAP", "Trace/breakpoint trap"), -#endif -/* Put SIGIOT before SIGABRT, so that if SIGIOT==SIGABRT then SIGABRT - overrides SIGIOT. SIGABRT is in ANSI and POSIX.1, and SIGIOT isn't. */ -#if defined (SIGIOT) - ENTRY(SIGIOT, "SIGIOT", "IOT trap"), -#endif -#if defined (SIGABRT) - ENTRY(SIGABRT, "SIGABRT", "Aborted"), -#endif -#if defined (SIGEMT) - ENTRY(SIGEMT, "SIGEMT", "Emulation trap"), -#endif -#if defined (SIGFPE) - ENTRY(SIGFPE, "SIGFPE", "Arithmetic exception"), -#endif -#if defined (SIGKILL) - ENTRY(SIGKILL, "SIGKILL", "Killed"), -#endif -#if defined (SIGBUS) - ENTRY(SIGBUS, "SIGBUS", "Bus error"), -#endif -#if defined (SIGSEGV) - ENTRY(SIGSEGV, "SIGSEGV", "Segmentation fault"), -#endif -#if defined (SIGSYS) - ENTRY(SIGSYS, "SIGSYS", "Bad system call"), -#endif -#if defined (SIGPIPE) - ENTRY(SIGPIPE, "SIGPIPE", "Broken pipe"), -#endif -#if defined (SIGALRM) - ENTRY(SIGALRM, "SIGALRM", "Alarm clock"), -#endif -#if defined (SIGTERM) - ENTRY(SIGTERM, "SIGTERM", "Terminated"), -#endif -#if defined (SIGUSR1) - ENTRY(SIGUSR1, "SIGUSR1", "User defined signal 1"), -#endif -#if defined (SIGUSR2) - ENTRY(SIGUSR2, "SIGUSR2", "User defined signal 2"), -#endif -/* Put SIGCLD before SIGCHLD, so that if SIGCLD==SIGCHLD then SIGCHLD - overrides SIGCLD. SIGCHLD is in POXIX.1 */ -#if defined (SIGCLD) - ENTRY(SIGCLD, "SIGCLD", "Child status changed"), -#endif -#if defined (SIGCHLD) - ENTRY(SIGCHLD, "SIGCHLD", "Child status changed"), -#endif -#if defined (SIGPWR) - ENTRY(SIGPWR, "SIGPWR", "Power fail/restart"), -#endif -#if defined (SIGWINCH) - ENTRY(SIGWINCH, "SIGWINCH", "Window size changed"), -#endif -#if defined (SIGURG) - ENTRY(SIGURG, "SIGURG", "Urgent I/O condition"), -#endif -#if defined (SIGIO) - /* "I/O pending" has also been suggested, but is misleading since the - signal only happens when the process has asked for it, not everytime - I/O is pending. */ - ENTRY(SIGIO, "SIGIO", "I/O possible"), -#endif -#if defined (SIGPOLL) - ENTRY(SIGPOLL, "SIGPOLL", "Pollable event occurred"), -#endif -#if defined (SIGSTOP) - ENTRY(SIGSTOP, "SIGSTOP", "Stopped (signal)"), -#endif -#if defined (SIGTSTP) - ENTRY(SIGTSTP, "SIGTSTP", "Stopped (user)"), -#endif -#if defined (SIGCONT) - ENTRY(SIGCONT, "SIGCONT", "Continued"), -#endif -#if defined (SIGTTIN) - ENTRY(SIGTTIN, "SIGTTIN", "Stopped (tty input)"), -#endif -#if defined (SIGTTOU) - ENTRY(SIGTTOU, "SIGTTOU", "Stopped (tty output)"), -#endif -#if defined (SIGVTALRM) - ENTRY(SIGVTALRM, "SIGVTALRM", "Virtual timer expired"), -#endif -#if defined (SIGPROF) - ENTRY(SIGPROF, "SIGPROF", "Profiling timer expired"), -#endif -#if defined (SIGXCPU) - ENTRY(SIGXCPU, "SIGXCPU", "CPU time limit exceeded"), -#endif -#if defined (SIGXFSZ) - ENTRY(SIGXFSZ, "SIGXFSZ", "File size limit exceeded"), -#endif -#if defined (SIGWIND) - ENTRY(SIGWIND, "SIGWIND", "SIGWIND"), -#endif -#if defined (SIGPHONE) - ENTRY(SIGPHONE, "SIGPHONE", "SIGPHONE"), -#endif -#if defined (SIGLOST) - ENTRY(SIGLOST, "SIGLOST", "Resource lost"), -#endif -#if defined (SIGWAITING) - ENTRY(SIGWAITING, "SIGWAITING", "Process's LWPs are blocked"), -#endif -#if defined (SIGLWP) - ENTRY(SIGLWP, "SIGLWP", "Signal LWP"), -#endif -#if defined (SIGDANGER) - ENTRY(SIGDANGER, "SIGDANGER", "Swap space dangerously low"), -#endif -#if defined (SIGGRANT) - ENTRY(SIGGRANT, "SIGGRANT", "Monitor mode granted"), -#endif -#if defined (SIGRETRACT) - ENTRY(SIGRETRACT, "SIGRETRACT", "Need to relinguish monitor mode"), -#endif -#if defined (SIGMSG) - ENTRY(SIGMSG, "SIGMSG", "Monitor mode data available"), -#endif -#if defined (SIGSOUND) - ENTRY(SIGSOUND, "SIGSOUND", "Sound completed"), -#endif -#if defined (SIGSAK) - ENTRY(SIGSAK, "SIGSAK", "Secure attention"), -#endif - ENTRY(0, NULL, NULL) -}; - -/* Translation table allocated and initialized at runtime. Indexed by the - signal value to find the equivalent symbolic value. */ - -static const char **signal_names; -static int num_signal_names = 0; - -/* Translation table allocated and initialized at runtime, if it does not - already exist in the host environment. Indexed by the signal value to find - the descriptive string. - - We don't export it for use in other modules because even though it has the - same name, it differs from other implementations in that it is dynamically - initialized rather than statically initialized. */ - -#ifndef HAVE_SYS_SIGLIST - -static int sys_nsig; -static const char **sys_siglist; - -#else - -#ifdef NSIG -static int sys_nsig = NSIG; -#else -#ifdef _NSIG -static int sys_nsig = _NSIG; -#endif -#endif -extern const char * const sys_siglist[]; - -#endif - - -/* - -NAME - - init_signal_tables -- initialize the name and message tables - -SYNOPSIS - - static void init_signal_tables (); - -DESCRIPTION - - Using the signal_table, which is initialized at compile time, generate - the signal_names and the sys_siglist (if needed) tables, which are - indexed at runtime by a specific signal value. - -BUGS - - The initialization of the tables may fail under low memory conditions, - in which case we don't do anything particularly useful, but we don't - bomb either. Who knows, it might succeed at a later point if we free - some memory in the meantime. In any case, the other routines know - how to deal with lack of a table after trying to initialize it. This - may or may not be considered to be a bug, that we don't specifically - warn about this particular failure mode. - -*/ - -static void -init_signal_tables (void) -{ - const struct signal_info *eip; - int nbytes; - - /* If we haven't already scanned the signal_table once to find the maximum - signal value, then go find it now. */ - - if (num_signal_names == 0) - { - for (eip = signal_table; eip -> name != NULL; eip++) - { - if (eip -> value >= num_signal_names) - { - num_signal_names = eip -> value + 1; - } - } - } - - /* Now attempt to allocate the signal_names table, zero it out, and then - initialize it from the statically initialized signal_table. */ - - if (signal_names == NULL) - { - nbytes = num_signal_names * sizeof (char *); - if ((signal_names = (const char **) malloc (nbytes)) != NULL) - { - memset (signal_names, 0, nbytes); - for (eip = signal_table; eip -> name != NULL; eip++) - { - signal_names[eip -> value] = eip -> name; - } - } - } - -#ifndef HAVE_SYS_SIGLIST - - /* Now attempt to allocate the sys_siglist table, zero it out, and then - initialize it from the statically initialized signal_table. */ - - if (sys_siglist == NULL) - { - nbytes = num_signal_names * sizeof (char *); - if ((sys_siglist = (const char **) malloc (nbytes)) != NULL) - { - memset (sys_siglist, 0, nbytes); - sys_nsig = num_signal_names; - for (eip = signal_table; eip -> name != NULL; eip++) - { - sys_siglist[eip -> value] = eip -> msg; - } - } - } - -#endif - -} - - -/* - -@deftypefn Extension int signo_max (void) - -Returns the maximum signal value for which a corresponding symbolic -name or message is available. Note that in the case where we use the -@code{sys_siglist} supplied by the system, it is possible for there to -be more symbolic names than messages, or vice versa. In fact, the -manual page for @code{psignal(3b)} explicitly warns that one should -check the size of the table (@code{NSIG}) before indexing it, since -new signal codes may be added to the system before they are added to -the table. Thus @code{NSIG} might be smaller than value implied by -the largest signo value defined in @code{}. - -We return the maximum value that can be used to obtain a meaningful -symbolic name or message. - -@end deftypefn - -*/ - -int -signo_max (void) -{ - int maxsize; - - if (signal_names == NULL) - { - init_signal_tables (); - } - maxsize = MAX (sys_nsig, num_signal_names); - return (maxsize - 1); -} - - -/* - -@deftypefn Supplemental {const char *} strsignal (int @var{signo}) - -Maps an signal number to an signal message string, the contents of -which are implementation defined. On systems which have the external -variable @code{sys_siglist}, these strings will be the same as the -ones used by @code{psignal()}. - -If the supplied signal number is within the valid range of indices for -the @code{sys_siglist}, but no message is available for the particular -signal number, then returns the string @samp{Signal @var{num}}, where -@var{num} is the signal number. - -If the supplied signal number is not a valid index into -@code{sys_siglist}, returns @code{NULL}. - -The returned string is only guaranteed to be valid only until the next -call to @code{strsignal}. - -@end deftypefn - -*/ - -#ifndef HAVE_STRSIGNAL - -const char * -strsignal (int signo) -{ - const char *msg; - static char buf[32]; - -#ifndef HAVE_SYS_SIGLIST - - if (signal_names == NULL) - { - init_signal_tables (); - } - -#endif - - if ((signo < 0) || (signo >= sys_nsig)) - { - /* Out of range, just return NULL */ - msg = NULL; - } - else if ((sys_siglist == NULL) || (sys_siglist[signo] == NULL)) - { - /* In range, but no sys_siglist or no entry at this index. */ - sprintf (buf, "Signal %d", signo); - msg = (const char *) buf; - } - else - { - /* In range, and a valid message. Just return the message. */ - msg = (const char *) sys_siglist[signo]; - } - - return (msg); -} - -#endif /* ! HAVE_STRSIGNAL */ - -/* - -@deftypefn Extension {const char*} strsigno (int @var{signo}) - -Given an signal number, returns a pointer to a string containing the -symbolic name of that signal number, as found in @code{}. - -If the supplied signal number is within the valid range of indices for -symbolic names, but no name is available for the particular signal -number, then returns the string @samp{Signal @var{num}}, where -@var{num} is the signal number. - -If the supplied signal number is not within the range of valid -indices, then returns @code{NULL}. - -The contents of the location pointed to are only guaranteed to be -valid until the next call to @code{strsigno}. - -@end deftypefn - -*/ - -const char * -strsigno (int signo) -{ - const char *name; - static char buf[32]; - - if (signal_names == NULL) - { - init_signal_tables (); - } - - if ((signo < 0) || (signo >= num_signal_names)) - { - /* Out of range, just return NULL */ - name = NULL; - } - else if ((signal_names == NULL) || (signal_names[signo] == NULL)) - { - /* In range, but no signal_names or no entry at this index. */ - sprintf (buf, "Signal %d", signo); - name = (const char *) buf; - } - else - { - /* In range, and a valid name. Just return the name. */ - name = signal_names[signo]; - } - - return (name); -} - - -/* - -@deftypefn Extension int strtosigno (const char *@var{name}) - -Given the symbolic name of a signal, map it to a signal number. If no -translation is found, returns 0. - -@end deftypefn - -*/ - -int -strtosigno (const char *name) -{ - int signo = 0; - - if (name != NULL) - { - if (signal_names == NULL) - { - init_signal_tables (); - } - for (signo = 0; signo < num_signal_names; signo++) - { - if ((signal_names[signo] != NULL) && - (strcmp (name, signal_names[signo]) == 0)) - { - break; - } - } - if (signo == num_signal_names) - { - signo = 0; - } - } - return (signo); -} - - -/* - -@deftypefn Supplemental void psignal (unsigned @var{signo}, char *@var{message}) - -Print @var{message} to the standard error, followed by a colon, -followed by the description of the signal specified by @var{signo}, -followed by a newline. - -@end deftypefn - -*/ - -#ifndef HAVE_PSIGNAL - -void -psignal (unsigned signo, char *message) -{ - if (signal_names == NULL) - { - init_signal_tables (); - } - if ((signo <= 0) || (signo >= sys_nsig)) - { - fprintf (stderr, "%s: unknown signal\n", message); - } - else - { - fprintf (stderr, "%s: %s\n", message, sys_siglist[signo]); - } -} - -#endif /* ! HAVE_PSIGNAL */ - - -/* A simple little main that does nothing but print all the signal translations - if MAIN is defined and this file is compiled and linked. */ - -#ifdef MAIN - -#include - -int -main (void) -{ - int signo; - int maxsigno; - const char *name; - const char *msg; - - maxsigno = signo_max (); - printf ("%d entries in names table.\n", num_signal_names); - printf ("%d entries in messages table.\n", sys_nsig); - printf ("%d is max useful index.\n", maxsigno); - - /* Keep printing values until we get to the end of *both* tables, not - *either* table. Note that knowing the maximum useful index does *not* - relieve us of the responsibility of testing the return pointer for - NULL. */ - - for (signo = 0; signo <= maxsigno; signo++) - { - name = strsigno (signo); - name = (name == NULL) ? "" : name; - msg = strsignal (signo); - msg = (msg == NULL) ? "" : msg; - printf ("%-4d%-18s%s\n", signo, name, msg); - } - - return 0; -} - -#endif diff --git a/libiberty/strstr.c b/libiberty/strstr.c deleted file mode 100644 index 60902ea40ee..00000000000 --- a/libiberty/strstr.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Simple implementation of strstr for systems without it. - This function is in the public domain. */ - -/* - -@deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub}) - -This function searches for the substring @var{sub} in the string -@var{string}, not including the terminating null characters. A pointer -to the first occurrence of @var{sub} is returned, or @code{NULL} if the -substring is absent. If @var{sub} points to a string with zero -length, the function returns @var{string}. - -@end deftypefn - - -*/ - - -/* FIXME: The above description is ANSI compiliant. This routine has not - been validated to comply with it. -fnf */ - -#include - -extern char *strchr (const char *, int); -extern int strncmp (const void *, const void *, size_t); -extern size_t strlen (const char *); - -char * -strstr (const char *s1, const char *s2) -{ - const char *p = s1; - const size_t len = strlen (s2); - - for (; (p = strchr (p, *s2)) != 0; p++) - { - if (strncmp (p, s2, len) == 0) - return (char *)p; - } - return (0); -} diff --git a/libiberty/strtod.c b/libiberty/strtod.c deleted file mode 100644 index adbc33b0da0..00000000000 --- a/libiberty/strtod.c +++ /dev/null @@ -1,136 +0,0 @@ -/* Implementation of strtod for systems with atof. - Copyright (C) 1991, 1995, 2002 Free Software Foundation, Inc. - -This file is part of the libiberty library. This library 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, 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. - -As a special exception, if you link this library with files -compiled with a GNU compiler to produce an executable, this does not cause -the resulting executable to be covered by the GNU General Public License. -This exception does not however invalidate any other reasons why -the executable file might be covered by the GNU General Public License. */ - -/* - -@deftypefn Supplemental double strtod (const char *@var{string}, char **@var{endptr}) - -This ISO C function converts the initial portion of @var{string} to a -@code{double}. If @var{endptr} is not @code{NULL}, a pointer to the -character after the last character used in the conversion is stored in -the location referenced by @var{endptr}. If no conversion is -performed, zero is returned and the value of @var{string} is stored in -the location referenced by @var{endptr}. - -@end deftypefn - -*/ - -#include "ansidecl.h" -#include "safe-ctype.h" - -extern double atof (const char *); - -/* Disclaimer: this is currently just used by CHILL in GDB and therefore - has not been tested well. It may have been tested for nothing except - that it compiles. */ - -double -strtod (char *str, char **ptr) -{ - char *p; - - if (ptr == (char **)0) - return atof (str); - - p = str; - - while (ISSPACE (*p)) - ++p; - - if (*p == '+' || *p == '-') - ++p; - - /* INF or INFINITY. */ - if ((p[0] == 'i' || p[0] == 'I') - && (p[1] == 'n' || p[1] == 'N') - && (p[2] == 'f' || p[2] == 'F')) - { - if ((p[3] == 'i' || p[3] == 'I') - && (p[4] == 'n' || p[4] == 'N') - && (p[5] == 'i' || p[5] == 'I') - && (p[6] == 't' || p[6] == 'T') - && (p[7] == 'y' || p[7] == 'Y')) - { - *ptr = p + 8; - return atof (str); - } - else - { - *ptr = p + 3; - return atof (str); - } - } - - /* NAN or NAN(foo). */ - if ((p[0] == 'n' || p[0] == 'N') - && (p[1] == 'a' || p[1] == 'A') - && (p[2] == 'n' || p[2] == 'N')) - { - p += 3; - if (*p == '(') - { - ++p; - while (*p != '\0' && *p != ')') - ++p; - if (*p == ')') - ++p; - } - *ptr = p; - return atof (str); - } - - /* digits, with 0 or 1 periods in it. */ - if (ISDIGIT (*p) || *p == '.') - { - int got_dot = 0; - while (ISDIGIT (*p) || (!got_dot && *p == '.')) - { - if (*p == '.') - got_dot = 1; - ++p; - } - - /* Exponent. */ - if (*p == 'e' || *p == 'E') - { - int i; - i = 1; - if (p[i] == '+' || p[i] == '-') - ++i; - if (ISDIGIT (p[i])) - { - while (ISDIGIT (p[i])) - ++i; - *ptr = p + i; - return atof (str); - } - } - *ptr = p; - return atof (str); - } - /* Didn't find any digits. Doesn't look like a number. */ - *ptr = str; - return 0.0; -} diff --git a/libiberty/strtol.c b/libiberty/strtol.c deleted file mode 100644 index acc7882192b..00000000000 --- a/libiberty/strtol.c +++ /dev/null @@ -1,163 +0,0 @@ -/*- - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. [rescinded 22 July 1999] - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - -@deftypefn Supplemental {long int} strtol (const char *@var{string}, char **@var{endptr}, int @var{base}) -@deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, char **@var{endptr}, int @var{base}) - -The @code{strtol} function converts the string in @var{string} to a -long integer value according to the given @var{base}, which must be -between 2 and 36 inclusive, or be the special value 0. If @var{base} -is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x} -to indicate bases 8 and 16, respectively, else default to base 10. -When the base is 16 (either explicitly or implicitly), a prefix of -@code{0x} is allowed. The handling of @var{endptr} is as that of -@code{strtod} above. The @code{strtoul} function is the same, except -that the converted value is unsigned. - -@end deftypefn - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#ifdef HAVE_LIMITS_H -#include -#endif -#ifdef HAVE_SYS_PARAM_H -#include -#endif -#include -#ifdef NEED_DECLARATION_ERRNO -extern int errno; -#endif -#include "safe-ctype.h" - -/* FIXME: It'd be nice to configure around these, but the include files are too - painful. These macros should at least be more portable than hardwired hex - constants. */ - -#ifndef ULONG_MAX -#define ULONG_MAX ((unsigned long)(~0L)) /* 0xFFFFFFFF */ -#endif - -#ifndef LONG_MAX -#define LONG_MAX ((long)(ULONG_MAX >> 1)) /* 0x7FFFFFFF */ -#endif - -#ifndef LONG_MIN -#define LONG_MIN ((long)(~LONG_MAX)) /* 0x80000000 */ -#endif - -/* - * Convert a string to a long integer. - * - * Ignores `locale' stuff. Assumes that the upper and lower case - * alphabets and digits are each contiguous. - */ -long -strtol(const char *nptr, char **endptr, register int base) -{ - register const char *s = nptr; - register unsigned long acc; - register int c; - register unsigned long cutoff; - register int neg = 0, any, cutlim; - - /* - * Skip white space and pick up leading +/- sign if any. - * If base is 0, allow 0x for hex and 0 for octal, else - * assume decimal; if base is already 16, allow 0x. - */ - do { - c = *s++; - } while (ISSPACE(c)); - if (c == '-') { - neg = 1; - c = *s++; - } else if (c == '+') - c = *s++; - if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = c == '0' ? 8 : 10; - - /* - * Compute the cutoff value between legal numbers and illegal - * numbers. That is the largest legal value, divided by the - * base. An input number that is greater than this value, if - * followed by a legal input character, is too big. One that - * is equal to this value may be valid or not; the limit - * between valid and invalid numbers is then based on the last - * digit. For instance, if the range for longs is - * [-2147483648..2147483647] and the input base is 10, - * cutoff will be set to 214748364 and cutlim to either - * 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated - * a value > 214748364, or equal but the next digit is > 7 (or 8), - * the number is too big, and we will return a range error. - * - * Set any if any `digits' consumed; make it negative to indicate - * overflow. - */ - cutoff = neg ? -(unsigned long)LONG_MIN : LONG_MAX; - cutlim = cutoff % (unsigned long)base; - cutoff /= (unsigned long)base; - for (acc = 0, any = 0;; c = *s++) { - if (ISDIGIT(c)) - c -= '0'; - else if (ISALPHA(c)) - c -= ISUPPER(c) ? 'A' - 10 : 'a' - 10; - else - break; - if (c >= base) - break; - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - any = -1; - else { - any = 1; - acc *= base; - acc += c; - } - } - if (any < 0) { - acc = neg ? LONG_MIN : LONG_MAX; - errno = ERANGE; - } else if (neg) - acc = -acc; - if (endptr != 0) - *endptr = (char *) (any ? s - 1 : nptr); - return (acc); -} diff --git a/libiberty/strtoul.c b/libiberty/strtoul.c deleted file mode 100644 index ba80063531e..00000000000 --- a/libiberty/strtoul.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 1990 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. [rescinded 22 July 1999] - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#ifdef HAVE_LIMITS_H -#include -#endif -#ifdef HAVE_SYS_PARAM_H -#include -#endif -#include -#ifdef NEED_DECLARATION_ERRNO -extern int errno; -#endif -#if 0 -#include -#endif -#include "ansidecl.h" -#include "safe-ctype.h" - -#ifndef ULONG_MAX -#define ULONG_MAX ((unsigned long)(~0L)) /* 0xFFFFFFFF */ -#endif - -/* - * Convert a string to an unsigned long integer. - * - * Ignores `locale' stuff. Assumes that the upper and lower case - * alphabets and digits are each contiguous. - */ -unsigned long -strtoul(const char *nptr, char **endptr, register int base) -{ - register const char *s = nptr; - register unsigned long acc; - register int c; - register unsigned long cutoff; - register int neg = 0, any, cutlim; - - /* - * See strtol for comments as to the logic used. - */ - do { - c = *s++; - } while (ISSPACE(c)); - if (c == '-') { - neg = 1; - c = *s++; - } else if (c == '+') - c = *s++; - if ((base == 0 || base == 16) && - c == '0' && (*s == 'x' || *s == 'X')) { - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = c == '0' ? 8 : 10; - cutoff = (unsigned long)ULONG_MAX / (unsigned long)base; - cutlim = (unsigned long)ULONG_MAX % (unsigned long)base; - for (acc = 0, any = 0;; c = *s++) { - if (ISDIGIT(c)) - c -= '0'; - else if (ISALPHA(c)) - c -= ISUPPER(c) ? 'A' - 10 : 'a' - 10; - else - break; - if (c >= base) - break; - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - any = -1; - else { - any = 1; - acc *= base; - acc += c; - } - } - if (any < 0) { - acc = ULONG_MAX; - errno = ERANGE; - } else if (neg) - acc = -acc; - if (endptr != 0) - *endptr = (char *) (any ? s - 1 : nptr); - return (acc); -} diff --git a/libiberty/strverscmp.c b/libiberty/strverscmp.c deleted file mode 100644 index 04e1e4ae99e..00000000000 --- a/libiberty/strverscmp.c +++ /dev/null @@ -1,157 +0,0 @@ -/* Compare strings while treating digits characters numerically. - Copyright (C) 1997, 2002, 2005 Free Software Foundation, Inc. - This file is part of the libiberty library. - Contributed by Jean-François Bignolles , 1997. - - Libiberty is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - Libiberty 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301 USA. */ - -#include "libiberty.h" -#include "safe-ctype.h" - -/* -@deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2}) -The @code{strverscmp} function compares the string @var{s1} against -@var{s2}, considering them as holding indices/version numbers. Return -value follows the same conventions as found in the @code{strverscmp} -function. In fact, if @var{s1} and @var{s2} contain no digits, -@code{strverscmp} behaves like @code{strcmp}. - -Basically, we compare strings normally (character by character), until -we find a digit in each string - then we enter a special comparison -mode, where each sequence of digits is taken as a whole. If we reach the -end of these two parts without noticing a difference, we return to the -standard comparison mode. There are two types of numeric parts: -"integral" and "fractional" (those begin with a '0'). The types -of the numeric parts affect the way we sort them: - -@itemize @bullet -@item -integral/integral: we compare values as you would expect. - -@item -fractional/integral: the fractional part is less than the integral one. -Again, no surprise. - -@item -fractional/fractional: the things become a bit more complex. -If the common prefix contains only leading zeroes, the longest part is less -than the other one; else the comparison behaves normally. -@end itemize - -@smallexample -strverscmp ("no digit", "no digit") - @result{} 0 // @r{same behavior as strcmp.} -strverscmp ("item#99", "item#100") - @result{} <0 // @r{same prefix, but 99 < 100.} -strverscmp ("alpha1", "alpha001") - @result{} >0 // @r{fractional part inferior to integral one.} -strverscmp ("part1_f012", "part1_f01") - @result{} >0 // @r{two fractional parts.} -strverscmp ("foo.009", "foo.0") - @result{} <0 // @r{idem, but with leading zeroes only.} -@end smallexample - -This function is especially useful when dealing with filename sorting, -because filenames frequently hold indices/version numbers. -@end deftypefun - -*/ - -/* states: S_N: normal, S_I: comparing integral part, S_F: comparing - fractional parts, S_Z: idem but with leading Zeroes only */ -#define S_N 0x0 -#define S_I 0x4 -#define S_F 0x8 -#define S_Z 0xC - -/* result_type: CMP: return diff; LEN: compare using len_diff/diff */ -#define CMP 2 -#define LEN 3 - - -/* Compare S1 and S2 as strings holding indices/version numbers, - returning less than, equal to or greater than zero if S1 is less than, - equal to or greater than S2 (for more info, see the Glibc texinfo doc). */ - -int -strverscmp (const char *s1, const char *s2) -{ - const unsigned char *p1 = (const unsigned char *) s1; - const unsigned char *p2 = (const unsigned char *) s2; - unsigned char c1, c2; - int state; - int diff; - - /* Symbol(s) 0 [1-9] others (padding) - Transition (10) 0 (01) d (00) x (11) - */ - static const unsigned int next_state[] = - { - /* state x d 0 - */ - /* S_N */ S_N, S_I, S_Z, S_N, - /* S_I */ S_N, S_I, S_I, S_I, - /* S_F */ S_N, S_F, S_F, S_F, - /* S_Z */ S_N, S_F, S_Z, S_Z - }; - - static const int result_type[] = - { - /* state x/x x/d x/0 x/- d/x d/d d/0 d/- - 0/x 0/d 0/0 0/- -/x -/d -/0 -/- */ - - /* S_N */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, - CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, - /* S_I */ CMP, -1, -1, CMP, +1, LEN, LEN, CMP, - +1, LEN, LEN, CMP, CMP, CMP, CMP, CMP, - /* S_F */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, - CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, - /* S_Z */ CMP, +1, +1, CMP, -1, CMP, CMP, CMP, - -1, CMP, CMP, CMP - }; - - if (p1 == p2) - return 0; - - c1 = *p1++; - c2 = *p2++; - /* Hint: '0' is a digit too. */ - state = S_N | ((c1 == '0') + (ISDIGIT (c1) != 0)); - - while ((diff = c1 - c2) == 0 && c1 != '\0') - { - state = next_state[state]; - c1 = *p1++; - c2 = *p2++; - state |= (c1 == '0') + (ISDIGIT (c1) != 0); - } - - state = result_type[state << 2 | (((c2 == '0') + (ISDIGIT (c2) != 0)))]; - - switch (state) - { - case CMP: - return diff; - - case LEN: - while (ISDIGIT (*p1++)) - if (!ISDIGIT (*p2++)) - return 1; - - return ISDIGIT (*p2) ? -1 : diff; - - default: - return state; - } -} diff --git a/libiberty/ternary.c b/libiberty/ternary.c deleted file mode 100644 index 8fc561a4531..00000000000 --- a/libiberty/ternary.c +++ /dev/null @@ -1,157 +0,0 @@ -/* ternary.c - Ternary Search Trees - Copyright (C) 2001 Free Software Foundation, Inc. - - Contributed by Daniel Berlin (dan@cgsoftware.com) - - This program 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, - USA. */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef HAVE_STDLIB_H -#include -#endif - -#include - -#include "libiberty.h" -#include "ternary.h" - -/* Non-recursive so we don't waste stack space/time on large - insertions. */ - -PTR -ternary_insert (ternary_tree *root, const char *s, PTR data, int replace) -{ - int diff; - ternary_tree curr, *pcurr; - - /* Start at the root. */ - pcurr = root; - /* Loop until we find the right position */ - while ((curr = *pcurr)) - { - /* Calculate the difference */ - diff = *s - curr->splitchar; - /* Handle current char equal to node splitchar */ - if (diff == 0) - { - /* Handle the case of a string we already have */ - if (*s++ == 0) - { - if (replace) - curr->eqkid = (ternary_tree) data; - return (PTR) curr->eqkid; - } - pcurr = &(curr->eqkid); - } - /* Handle current char less than node splitchar */ - else if (diff < 0) - { - pcurr = &(curr->lokid); - } - /* Handle current char greater than node splitchar */ - else - { - pcurr = &(curr->hikid); - } - } - /* It's not a duplicate string, and we should insert what's left of - the string, into the tree rooted at curr */ - for (;;) - { - /* Allocate the memory for the node, and fill it in */ - *pcurr = XNEW (ternary_node); - curr = *pcurr; - curr->splitchar = *s; - curr->lokid = curr->hikid = curr->eqkid = 0; - - /* Place nodes until we hit the end of the string. - When we hit it, place the data in the right place, and - return. - */ - if (*s++ == 0) - { - curr->eqkid = (ternary_tree) data; - return data; - } - pcurr = &(curr->eqkid); - } -} - -/* Free the ternary search tree rooted at p. */ -void -ternary_cleanup (ternary_tree p) -{ - if (p) - { - ternary_cleanup (p->lokid); - if (p->splitchar) - ternary_cleanup (p->eqkid); - ternary_cleanup (p->hikid); - free (p); - } -} - -/* Non-recursive find of a string in the ternary tree */ -PTR -ternary_search (const ternary_node *p, const char *s) -{ - const ternary_node *curr; - int diff, spchar; - spchar = *s; - curr = p; - /* Loop while we haven't hit a NULL node or returned */ - while (curr) - { - /* Calculate the difference */ - diff = spchar - curr->splitchar; - /* Handle the equal case */ - if (diff == 0) - { - if (spchar == 0) - return (PTR) curr->eqkid; - spchar = *++s; - curr = curr->eqkid; - } - /* Handle the less than case */ - else if (diff < 0) - curr = curr->lokid; - /* All that's left is greater than */ - else - curr = curr->hikid; - } - return NULL; -} - -/* For those who care, the recursive version of the search. Useful if - you want a starting point for pmsearch or nearsearch. */ -static PTR -ternary_recursivesearch (const ternary_node *p, const char *s) -{ - if (!p) - return 0; - if (*s < p->splitchar) - return ternary_recursivesearch (p->lokid, s); - else if (*s > p->splitchar) - return ternary_recursivesearch (p->hikid, s); - else - { - if (*s == 0) - return (PTR) p->eqkid; - return ternary_recursivesearch (p->eqkid, ++s); - } -} diff --git a/libiberty/testsuite/Makefile.in b/libiberty/testsuite/Makefile.in deleted file mode 100644 index 534626e952d..00000000000 --- a/libiberty/testsuite/Makefile.in +++ /dev/null @@ -1,90 +0,0 @@ -# -# Makefile -# Copyright (C) 1999, 2002, 2006 -# Free Software Foundation -# -# This file is part of the libiberty library. -# Libiberty 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. -# -# Libiberty 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 libiberty; see the file COPYING.LIB. If not, -# write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# - -# This file was written by Tom Tromey . - -# -# Makefile for libiberty/testsuite directory -# - -srcdir = @srcdir@ -VPATH = @srcdir@ - -SHELL = @SHELL@ - -CC = @CC@ -CFLAGS = @CFLAGS@ -LIBCFLAGS = $(CFLAGS) - -# Multilib support variables. -MULTISRCTOP = - -INCDIR=$(srcdir)/../$(MULTISRCTOP)../include - -all: - -# CHECK is set to "really_check" or the empty string by configure. -check: @CHECK@ - -really-check: check-cplus-dem check-pexecute check-expandargv - -# Run some tests of the demangler. -check-cplus-dem: test-demangle $(srcdir)/demangle-expected - ./test-demangle < $(srcdir)/demangle-expected - -# Check the pexecute code. -check-pexecute: test-pexecute - ./test-pexecute - -# Check the expandargv functionality -check-expandargv: test-expandargv - ./test-expandargv - -TEST_COMPILE = $(CC) @DEFS@ $(LIBCFLAGS) -I.. -I$(INCDIR) $(HDEFINES) -test-demangle: $(srcdir)/test-demangle.c ../libiberty.a - $(TEST_COMPILE) -o test-demangle \ - $(srcdir)/test-demangle.c ../libiberty.a - -test-pexecute: $(srcdir)/test-pexecute.c ../libiberty.a - $(TEST_COMPILE) -DHAVE_CONFIG_H -I.. -o test-pexecute \ - $(srcdir)/test-pexecute.c ../libiberty.a - -test-expandargv: $(srcdir)/test-expandargv.c ../libiberty.a - $(TEST_COMPILE) -DHAVE_CONFIG_H -I.. -o test-expandargv \ - $(srcdir)/test-expandargv.c ../libiberty.a - -# Standard (either GNU or Cygnus) rules we don't use. -html install-html info install-info clean-info dvi install etags tags installcheck: - -# The standard clean rules. -mostlyclean: - rm -f test-demangle - rm -f test-pexecute - rm -f test-expandargv -clean: mostlyclean -distclean: clean - rm -f Makefile -maintainer-clean realclean: distclean - -Makefile: $(srcdir)/Makefile.in ../config.status - CONFIG_FILES=testsuite/Makefile CONFIG_HEADERS= \ - cd .. && $(SHELL) ./config.status diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected deleted file mode 100644 index fa2a2fed245..00000000000 --- a/libiberty/testsuite/demangle-expected +++ /dev/null @@ -1,3807 +0,0 @@ -# This file holds test cases for the demangler. -# Each test case looks like this: -# options -# input to be demangled -# expected output -# -# Supported options: -# --format= Sets the demangling style. -# --no-params There are two lines of expected output; the first -# is with DMGL_PARAMS, the second is without it. -# --is-v3-ctor Calls is_gnu_v3_mangled_ctor on input; expected -# output is an integer representing ctor_kind. -# --is-v3-dtor Likewise, but for dtors. -# --ret-postfix Passes the DMGL_RET_POSTFIX option -# -# For compatibility, just in case it matters, the options line may be -# empty, to mean --format=auto. If it doesn't start with --, then it -# may contain only a format name. -# -# A line starting with `#' is ignored. -# However, blank lines in this file are NOT ignored. -# ---format=gnu --no-params -AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue -ivTSolver::AddAlignment(unsigned int, ivInteractor *, ivTGlue *) -ivTSolver::AddAlignment -# ---format=gnu --no-params -ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic -ArrowLine::ArrowheadIntersects(Arrowhead *, BoxObj &, Graphic *) -ArrowLine::ArrowheadIntersects -# ---format=gnu --no-params -AtEnd__13ivRubberGroup -ivRubberGroup::AtEnd(void) -ivRubberGroup::AtEnd -# ---format=gnu --no-params -BgFilter__9ivTSolverP12ivInteractor -ivTSolver::BgFilter(ivInteractor *) -ivTSolver::BgFilter -# ---format=gnu --no-params -Check__6UArrayi -UArray::Check(int) -UArray::Check -# ---format=gnu --no-params -CoreConstDecls__8TextCodeR7ostream -TextCode::CoreConstDecls(ostream &) -TextCode::CoreConstDecls -# ---format=gnu --no-params -Detach__8StateVarP12StateVarView -StateVar::Detach(StateVarView *) -StateVar::Detach -# ---format=gnu --no-params -Done__9ComponentG8Iterator -Component::Done(Iterator) -Component::Done -# ---format=gnu --no-params -Effect__11RelateManipR7ivEvent -RelateManip::Effect(ivEvent &) -RelateManip::Effect -# ---format=gnu --no-params -FindFixed__FRP4CNetP4CNet -FindFixed(CNet *&, CNet *) -FindFixed -# ---format=gnu --no-params -Fix48_abort__FR8twolongs -Fix48_abort(twolongs &) -Fix48_abort -# ---format=gnu --no-params -GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2 -iv2_6_VScroller::GetBarInfo(ivPerspective *, int &, int &) -iv2_6_VScroller::GetBarInfo -# ---format=gnu --no-params -GetBgColor__C9ivPainter -ivPainter::GetBgColor(void) const -ivPainter::GetBgColor -# ---format=gnu --no-params -InsertBody__15H_PullrightMenuii -H_PullrightMenu::InsertBody(int, int) -H_PullrightMenu::InsertBody -# ---format=gnu --no-params -InsertCharacter__9TextManipc -TextManip::InsertCharacter(char) -TextManip::InsertCharacter -# ---format=gnu --no-params -InsertToplevel__7ivWorldP12ivInteractorT1 -ivWorld::InsertToplevel(ivInteractor *, ivInteractor *) -ivWorld::InsertToplevel -# ---format=gnu --no-params -InsertToplevel__7ivWorldP12ivInteractorT1iiUi -ivWorld::InsertToplevel(ivInteractor *, ivInteractor *, int, int, unsigned int) -ivWorld::InsertToplevel -# ---format=gnu --no-params -IsAGroup__FP11GraphicViewP11GraphicComp -IsAGroup(GraphicView *, GraphicComp *) -IsAGroup -# ---format=gnu --no-params -IsA__10ButtonCodeUl -ButtonCode::IsA(unsigned long) -ButtonCode::IsA -# ---format=gnu --no-params -ReadName__FR7istreamPc -ReadName(istream &, char *) -ReadName -# ---format=gnu --no-params -Redraw__13StringBrowseriiii -StringBrowser::Redraw(int, int, int, int) -StringBrowser::Redraw -# ---format=gnu --no-params -Rotate__13ivTransformerf -ivTransformer::Rotate(float) -ivTransformer::Rotate -# ---format=gnu --no-params -Rotated__C13ivTransformerf -ivTransformer::Rotated(float) const -ivTransformer::Rotated -# ---format=gnu --no-params -Round__Ff -Round(float) -Round -# ---format=gnu --no-params -SetExport__16MemberSharedNameUi -MemberSharedName::SetExport(unsigned int) -MemberSharedName::SetExport -# ---format=gnu --no-params -Set__14ivControlState13ControlStatusUi -ivControlState::Set(ControlStatus, unsigned int) -ivControlState::Set -# ---format=gnu --no-params -Set__5DFacePcii -DFace::Set(char *, int, int) -DFace::Set -# ---format=gnu --no-params -VConvert__9ivTSolverP12ivInteractorRP8TElementT2 -ivTSolver::VConvert(ivInteractor *, TElement *&, TElement *&) -ivTSolver::VConvert -# ---format=gnu --no-params -VConvert__9ivTSolverP7ivTGlueRP8TElement -ivTSolver::VConvert(ivTGlue *, TElement *&) -ivTSolver::VConvert -# ---format=gnu --no-params -VOrder__9ivTSolverUiRP12ivInteractorT2 -ivTSolver::VOrder(unsigned int, ivInteractor *&, ivInteractor *&) -ivTSolver::VOrder -# ---format=gnu --no-params -_10PageButton$__both -PageButton::__both -PageButton::__both -# ---format=gnu --no-params -_3RNG$singleMantissa -RNG::singleMantissa -RNG::singleMantissa -# ---format=gnu --no-params -_5IComp$_release -IComp::_release -IComp::_release -# ---format=gnu --no-params -_$_10BitmapComp -BitmapComp::~BitmapComp(void) -BitmapComp::~BitmapComp -# ---format=gnu --no-params -_$_9__io_defs -__io_defs::~__io_defs(void) -__io_defs::~__io_defs -# ---format=gnu --no-params -_$_Q23foo3bar -foo::bar::~bar(void) -foo::bar::~bar -# ---format=gnu --no-params -_$_Q33foo3bar4bell -foo::bar::bell::~bell(void) -foo::bar::bell::~bell -# ---format=gnu --no-params -__10ivTelltaleiP7ivGlyph -ivTelltale::ivTelltale(int, ivGlyph *) -ivTelltale::ivTelltale -# ---format=gnu --no-params -__10ivViewportiP12ivInteractorUi -ivViewport::ivViewport(int, ivInteractor *, unsigned int) -ivViewport::ivViewport -# ---format=gnu --no-params -__10ostrstream -ostrstream::ostrstream(void) -ostrstream::ostrstream -# ---format=gnu --no-params -__10ostrstreamPcii -ostrstream::ostrstream(char *, int, int) -ostrstream::ostrstream -# ---format=gnu --no-params -__11BitmapTablei -BitmapTable::BitmapTable(int) -BitmapTable::BitmapTable -# ---format=gnu --no-params -__12ViewportCodeP12ViewportComp -ViewportCode::ViewportCode(ViewportComp *) -ViewportCode::ViewportCode -# ---format=gnu --no-params -__12iv2_6_Borderii -iv2_6_Border::iv2_6_Border(int, int) -iv2_6_Border::iv2_6_Border -# ---format=gnu --no-params -__12ivBreak_Listl -ivBreak_List::ivBreak_List(long) -ivBreak_List::ivBreak_List -# ---format=gnu --no-params -__14iv2_6_MenuItemiP12ivInteractor -iv2_6_MenuItem::iv2_6_MenuItem(int, ivInteractor *) -iv2_6_MenuItem::iv2_6_MenuItem -# ---format=gnu --no-params -__20DisplayList_IteratorR11DisplayList -DisplayList_Iterator::DisplayList_Iterator(DisplayList &) -DisplayList_Iterator::DisplayList_Iterator -# ---format=gnu --no-params -__3fooRT0 -foo::foo(foo &) -foo::foo -# ---format=gnu --no-params -__3fooiN31 -foo::foo(int, int, int, int) -foo::foo -# ---format=gnu --no-params -__3fooiRT0iT2iT2 -foo::foo(int, foo &, int, foo &, int, foo &) -foo::foo -# ---format=gnu --no-params -__6KeyMapPT0 -KeyMap::KeyMap(KeyMap *) -KeyMap::KeyMap -# ---format=gnu --no-params -__8ArrowCmdP6EditorUiUi -ArrowCmd::ArrowCmd(Editor *, unsigned int, unsigned int) -ArrowCmd::ArrowCmd -# ---format=gnu --no-params -__9F_EllipseiiiiP7Graphic -F_Ellipse::F_Ellipse(int, int, int, int, Graphic *) -F_Ellipse::F_Ellipse -# ---format=gnu --no-params -__9FrameDataP9FrameCompi -FrameData::FrameData(FrameComp *, int) -FrameData::FrameData -# ---format=gnu --no-params -__9HVGraphicP9CanvasVarP7Graphic -HVGraphic::HVGraphic(CanvasVar *, Graphic *) -HVGraphic::HVGraphic -# ---format=gnu --no-params -__Q23foo3bar -foo::bar::bar(void) -foo::bar::bar -# ---format=gnu --no-params -__Q33foo3bar4bell -foo::bar::bell::bell(void) -foo::bar::bell::bell -# ---format=gnu --no-params -__aa__3fooRT0 -foo::operator&&(foo &) -foo::operator&& -# ---format=gnu --no-params -__aad__3fooRT0 -foo::operator&=(foo &) -foo::operator&= -# ---format=gnu --no-params -__ad__3fooRT0 -foo::operator&(foo &) -foo::operator& -# ---format=gnu --no-params -__adv__3fooRT0 -foo::operator/=(foo &) -foo::operator/= -# ---format=gnu --no-params -__aer__3fooRT0 -foo::operator^=(foo &) -foo::operator^= -# ---format=gnu --no-params -__als__3fooRT0 -foo::operator<<=(foo &) -foo::operator<<= -# ---format=gnu --no-params -__amd__3fooRT0 -foo::operator%=(foo &) -foo::operator%= -# ---format=gnu --no-params -__ami__3fooRT0 -foo::operator-=(foo &) -foo::operator-= -# ---format=gnu --no-params -__aml__3FixRT0 -Fix::operator*=(Fix &) -Fix::operator*= -# ---format=gnu --no-params -__aml__5Fix16i -Fix16::operator*=(int) -Fix16::operator*= -# ---format=gnu --no-params -__aml__5Fix32RT0 -Fix32::operator*=(Fix32 &) -Fix32::operator*= -# ---format=gnu --no-params -__aor__3fooRT0 -foo::operator|=(foo &) -foo::operator|= -# ---format=gnu --no-params -__apl__3fooRT0 -foo::operator+=(foo &) -foo::operator+= -# ---format=gnu --no-params -__ars__3fooRT0 -foo::operator>>=(foo &) -foo::operator>>= -# ---format=gnu --no-params -__as__3fooRT0 -foo::operator=(foo &) -foo::operator= -# ---format=gnu --no-params -__cl__3fooRT0 -foo::operator()(foo &) -foo::operator() -# ---format=gnu --no-params -__cl__6Normal -Normal::operator()(void) -Normal::operator() -# ---format=gnu --no-params -__cl__6Stringii -String::operator()(int, int) -String::operator() -# ---format=gnu --no-params -__cm__3fooRT0 -foo::operator, (foo &) -foo::operator, -# ---format=gnu --no-params -__co__3foo -foo::operator~(void) -foo::operator~ -# ---format=gnu --no-params -__dl__3fooPv -foo::operator delete(void *) -foo::operator delete -# ---format=gnu --no-params -__dv__3fooRT0 -foo::operator/(foo &) -foo::operator/ -# ---format=gnu --no-params -__eq__3fooRT0 -foo::operator==(foo &) -foo::operator== -# ---format=gnu --no-params -__er__3fooRT0 -foo::operator^(foo &) -foo::operator^ -# ---format=gnu --no-params -__ge__3fooRT0 -foo::operator>=(foo &) -foo::operator>= -# ---format=gnu --no-params -__gt__3fooRT0 -foo::operator>(foo &) -foo::operator> -# ---format=gnu --no-params -__le__3fooRT0 -foo::operator<=(foo &) -foo::operator<= -# ---format=gnu --no-params -__ls__3fooRT0 -foo::operator<<(foo &) -foo::operator<< -# ---format=gnu --no-params -__ls__FR7ostreamPFR3ios_R3ios -operator<<(ostream &, ios &(*)(ios &)) -operator<< -# ---format=gnu --no-params -__ls__FR7ostreamR3Fix -operator<<(ostream &, Fix &) -operator<< -# ---format=gnu --no-params -__lt__3fooRT0 -foo::operator<(foo &) -foo::operator< -# ---format=gnu --no-params -__md__3fooRT0 -foo::operator%(foo &) -foo::operator% -# ---format=gnu --no-params -__mi__3fooRT0 -foo::operator-(foo &) -foo::operator- -# ---format=gnu --no-params -__ml__3fooRT0 -foo::operator*(foo &) -foo::operator* -# ---format=gnu --no-params -__mm__3fooi -foo::operator--(int) -foo::operator-- -# ---format=gnu --no-params -__ne__3fooRT0 -foo::operator!=(foo &) -foo::operator!= -# ---format=gnu --no-params -__nt__3foo -foo::operator!(void) -foo::operator! -# ---format=gnu --no-params -__nw__3fooi -foo::operator new(int) -foo::operator new -# ---format=gnu --no-params -__oo__3fooRT0 -foo::operator||(foo &) -foo::operator|| -# ---format=gnu --no-params -__opPc__3foo -foo::operator char *(void) -foo::operator char * -# ---format=gnu --no-params -__opi__3foo -foo::operator int(void) -foo::operator int -# ---format=gnu --no-params -__or__3fooRT0 -foo::operator|(foo &) -foo::operator| -# ---format=gnu --no-params -__pl__3fooRT0 -foo::operator+(foo &) -foo::operator+ -# ---format=gnu --no-params -__pp__3fooi -foo::operator++(int) -foo::operator++ -# ---format=gnu --no-params -__rf__3foo -foo::operator->(void) -foo::operator-> -# ---format=gnu --no-params -__rm__3fooRT0 -foo::operator->*(foo &) -foo::operator->* -# ---format=gnu --no-params -__rs__3fooRT0 -foo::operator>>(foo &) -foo::operator>> -# ---format=gnu --no-params -_new_Fix__FUs -_new_Fix(unsigned short) -_new_Fix -# ---format=gnu --no-params -_vt.foo -foo virtual table -foo virtual table -# ---format=gnu --no-params -_vt.foo.bar -foo::bar virtual table -foo::bar virtual table -# ---format=gnu --no-params -_vt$foo -foo virtual table -foo virtual table -# ---format=gnu --no-params -_vt$foo$bar -foo::bar virtual table -foo::bar virtual table -# ---format=gnu --no-params -append__7ivGlyphPT0 -ivGlyph::append(ivGlyph *) -ivGlyph::append -# ---format=gnu --no-params -clearok__FP7_win_sti -clearok(_win_st *, int) -clearok -# ---format=gnu --no-params -complexfunc2__FPFPc_i -complexfunc2(int (*)(char *)) -complexfunc2 -# ---format=gnu --no-params -complexfunc3__FPFPFPl_s_i -complexfunc3(int (*)(short (*)(long *))) -complexfunc3 -# ---format=gnu --no-params -complexfunc4__FPFPFPc_s_i -complexfunc4(int (*)(short (*)(char *))) -complexfunc4 -# ---format=gnu --no-params -complexfunc5__FPFPc_PFl_i -complexfunc5(int (*(*)(char *))(long)) -complexfunc5 -# ---format=gnu --no-params -complexfunc6__FPFPi_PFl_i -complexfunc6(int (*(*)(int *))(long)) -complexfunc6 -# ---format=gnu --no-params -complexfunc7__FPFPFPc_i_PFl_i -complexfunc7(int (*(*)(int (*)(char *)))(long)) -complexfunc7 -# ---format=gnu --no-params -foo__FiN30 -foo(int, int, int, int) -foo -# ---format=gnu --no-params -foo__FiR3fooiT1iT1 -foo(int, foo &, int, foo &, int, foo &) -foo -# ---format=gnu --no-params -foo___3barl -bar::foo_(long) -bar::foo_ -# ---format=gnu --no-params -insert__15ivClippingStacklRP8_XRegion -ivClippingStack::insert(long, _XRegion *&) -ivClippingStack::insert -# ---format=gnu --no-params -insert__16ChooserInfo_ListlR11ChooserInfo -ChooserInfo_List::insert(long, ChooserInfo &) -ChooserInfo_List::insert -# ---format=gnu --no-params -insert__17FontFamilyRepListlRP15ivFontFamilyRep -FontFamilyRepList::insert(long, ivFontFamilyRep *&) -FontFamilyRepList::insert -# ---format=gnu --no-params -leaveok__FP7_win_stc -leaveok(_win_st *, char) -leaveok -# ---format=gnu --no-params -left_mover__C7ivMFKitP12ivAdjustableP7ivStyle -ivMFKit::left_mover(ivAdjustable *, ivStyle *) const -ivMFKit::left_mover -# ---format=gnu --no-params -overload1arg__FSc -overload1arg(signed char) -overload1arg -# ---format=gnu --no-params -overload1arg__FUc -overload1arg(unsigned char) -overload1arg -# ---format=gnu --no-params -overload1arg__FUi -overload1arg(unsigned int) -overload1arg -# ---format=gnu --no-params -overload1arg__FUl -overload1arg(unsigned long) -overload1arg -# ---format=gnu --no-params -overload1arg__FUs -overload1arg(unsigned short) -overload1arg -# ---format=gnu --no-params -overload1arg__Fc -overload1arg(char) -overload1arg -# ---format=gnu --no-params -overload1arg__Fd -overload1arg(double) -overload1arg -# ---format=gnu --no-params -overload1arg__Ff -overload1arg(float) -overload1arg -# ---format=gnu --no-params -overload1arg__Fi -overload1arg(int) -overload1arg -# ---format=gnu --no-params -overload1arg__Fl -overload1arg(long) -overload1arg -# ---format=gnu --no-params -overload1arg__Fs -overload1arg(short) -overload1arg -# ---format=gnu --no-params -overload1arg__Fv -overload1arg(void) -overload1arg -# ---format=gnu --no-params -overloadargs__Fi -overloadargs(int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fii -overloadargs(int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiii -overloadargs(int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiii -overloadargs(int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiii -overloadargs(int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiii -overloadargs(int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiiii -overloadargs(int, int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiiiii -overloadargs(int, int, int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiiiiii -overloadargs(int, int, int, int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiiiiiii -overloadargs(int, int, int, int, int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiiiiiiii -overloadargs(int, int, int, int, int, int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -poke__8ivRasterUlUlffff -ivRaster::poke(unsigned long, unsigned long, float, float, float, float) -ivRaster::poke -# ---format=gnu --no-params -polar__Fdd -polar(double, double) -polar -# ---format=gnu --no-params -scale__13ivTransformerff -ivTransformer::scale(float, float) -ivTransformer::scale -# ---format=gnu --no-params -sgetn__7filebufPci -filebuf::sgetn(char *, int) -filebuf::sgetn -# ---format=gnu --no-params -shift__FP5_FrepiT0 -shift(_Frep *, int, _Frep *) -shift -# ---format=gnu --no-params -test__C6BitSeti -BitSet::test(int) const -BitSet::test -# ---format=gnu --no-params -test__C6BitSetii -BitSet::test(int, int) const -BitSet::test -# ---format=gnu --no-params -text_source__8Documentl -Document::text_source(long) -Document::text_source -# ---format=gnu --no-params -variance__6Erlangd -Erlang::variance(double) -Erlang::variance -# ---format=gnu --no-params -view__14DocumentViewerP8ItemViewP11TabularItem -DocumentViewer::view(ItemView *, TabularItem *) -DocumentViewer::view -# ---format=gnu --no-params -xy_extents__11ivExtensionffff -ivExtension::xy_extents(float, float, float, float) -ivExtension::xy_extents -# ---format=gnu --no-params -zero__8osMemoryPvUi -osMemory::zero(void *, unsigned int) -osMemory::zero -# ---format=gnu --no-params -_2T4$N -T4::N -T4::N -# ---format=gnu --no-params -_Q22T42t1$N -T4::t1::N -T4::t1::N -# ---format=gnu --no-params -get__2T1 -T1::get(void) -T1::get -# ---format=gnu --no-params -get__Q22T11a -T1::a::get(void) -T1::a::get -# ---format=gnu --no-params -get__Q32T11a1b -T1::a::b::get(void) -T1::a::b::get -# ---format=gnu --no-params -get__Q42T11a1b1c -T1::a::b::c::get(void) -T1::a::b::c::get -# ---format=gnu --no-params -get__Q52T11a1b1c1d -T1::a::b::c::d::get(void) -T1::a::b::c::d::get -# ---format=gnu --no-params -put__2T1i -T1::put(int) -T1::put -# ---format=gnu --no-params -put__Q22T11ai -T1::a::put(int) -T1::a::put -# ---format=gnu --no-params -put__Q32T11a1bi -T1::a::b::put(int) -T1::a::b::put -# ---format=gnu --no-params -put__Q42T11a1b1ci -T1::a::b::c::put(int) -T1::a::b::c::put -# ---format=gnu --no-params -put__Q52T11a1b1c1di -T1::a::b::c::d::put(int) -T1::a::b::c::d::put -# ---format=gnu --no-params -bar__3fooPv -foo::bar(void *) -foo::bar -# ---format=gnu --no-params -bar__C3fooPv -foo::bar(void *) const -foo::bar -# ---format=gnu --no-params -__eq__3fooRT0 -foo::operator==(foo &) -foo::operator== -# ---format=gnu --no-params -__eq__C3fooR3foo -foo::operator==(foo &) const -foo::operator== -# ---format=gnu --no-params -elem__t6vector1Zdi -vector::elem(int) -vector::elem -# ---format=gnu --no-params -elem__t6vector1Zii -vector::elem(int) -vector::elem -# ---format=gnu --no-params -__t6vector1Zdi -vector::vector(int) -vector::vector -# ---format=gnu --no-params -__t6vector1Zii -vector::vector(int) -vector::vector -# ---format=gnu --no-params -_$_t6vector1Zdi -vector::~vector(int) -vector::~vector -# ---format=gnu --no-params -_$_t6vector1Zii -vector::~vector(int) -vector::~vector -# ---format=gnu --no-params -__nw__t2T11ZcUi -T1::operator new(unsigned int) -T1::operator new -# ---format=gnu --no-params -__nw__t2T11Z1tUi -T1::operator new(unsigned int) -T1::operator new -# ---format=gnu --no-params -__dl__t2T11ZcPv -T1::operator delete(void *) -T1::operator delete -# ---format=gnu --no-params -__dl__t2T11Z1tPv -T1::operator delete(void *) -T1::operator delete -# ---format=gnu --no-params -__t2T11Zci -T1::T1(int) -T1::T1 -# ---format=gnu --no-params -__t2T11Zc -T1::T1(void) -T1::T1 -# ---format=gnu --no-params -__t2T11Z1ti -T1::T1(int) -T1::T1 -# ---format=gnu --no-params -__t2T11Z1t -T1::T1(void) -T1::T1 -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity3Pix -List::Pix::Pix(void) -List::Pix::Pix -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element -List::Pix::Pix(List::element *) -List::Pix::Pix -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix -List::Pix::Pix(List::Pix const &) -List::Pix::Pix -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0 -List::element::element(VHDLEntity const &, List::element *) -List::element::element -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element -List::element::element(List::element const &) -List::element::element -# ---format=gnu --no-params -__cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity -VHDLLibrary::operator()(PixX >) const -VHDLLibrary::operator() -# ---format=gnu --no-params -__cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix -List::operator()(List::Pix const &) const -List::operator() -# ---format=gnu --no-params -__ne__FPvRCQ2t4List1Z10VHDLEntity3Pix -operator!=(void *, List::Pix const &) -operator!= -# ---format=gnu --no-params -__ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity -operator!=(void *, PixX > const &) -operator!= -# ---format=gnu --no-params -__t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity -List::List(List const &) -List::List -# ---format=gnu --no-params -__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity -PixX >::PixX(void) -PixX >::PixX -# ---format=gnu --no-params -__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix -PixX >::PixX(VHDLLibraryRep *, List::Pix) -PixX >::PixX -# ---format=gnu --no-params -__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity -PixX >::PixX(PixX > const &) -PixX >::PixX -# ---format=gnu --no-params -nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity -VHDLLibrary::nextE(PixX > &) const -VHDLLibrary::nextE -# ---format=gnu --no-params -next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix -List::next(List::Pix &) const -List::next -# ---format=gnu --no-params -_GLOBAL_$D$set -global destructors keyed to set -global destructors keyed to set -# ---format=gnu --no-params -_GLOBAL_$I$set -global constructors keyed to set -global constructors keyed to set -# ---format=gnu --no-params -__as__t5ListS1ZUiRCt5ListS1ZUi -ListS::operator=(ListS const &) -ListS::operator= -# ---format=gnu --no-params -__cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix -ListS::operator()(ListS::Vix const &) const -ListS::operator() -# ---format=gnu --no-params -__cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix -SetLS::operator()(SetLS::Vix const &) const -SetLS::operator() -# ---format=gnu --no-params -__t10ListS_link1ZUiRCUiPT0 -ListS_link::ListS_link(unsigned int const &, ListS_link *) -ListS_link::ListS_link -# ---format=gnu --no-params -__t10ListS_link1ZUiRCt10ListS_link1ZUi -ListS_link::ListS_link(ListS_link const &) -ListS_link::ListS_link -# ---format=gnu --no-params -__t5ListS1ZUiRCt5ListS1ZUi -ListS::ListS(ListS const &) -ListS::ListS -# ---format=gnu --no-params -next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix -ListS::next(ListS::Vix &) const -ListS::next -# ---format=gnu --no-params -__ne__FPvRCQ2t5SetLS1ZUi3Vix -operator!=(void *, SetLS::Vix const &) -operator!= -# ---format=gnu --no-params -__t8ListElem1Z5LabelRt4List1Z5Label -ListElem