thumb_skip_prologue too adventurous

Jonathan Larmour
2000-04-01T00:00:00Z

Hi Fernando,

You checked in the following change to arm-tdep.c:

revision 1.46
date: 2000/01/28 15:32:04; author: fnasser; state: Exp; lines: +84 -22
2000-01-28 Fernando Nasser <fnasser@totem.to.cygnus.com>
* arm-tdep.c (thumb_skip_prologue, thumb_scan_prologue): Add
support for new style thumb prologues.

However this has broken small functions, e.g. void foo() { for (;;); } etc.
because such functions contain no prologue. e.g. for foo(), there is only
one instruction which is a branch to itself. However thumb_skip_prologue
will continue past the end of this small function and into the next one.
Thus breakpoints, etc. get set in completely the wrong place.

The essential issue is that thumb_skip_prologue must not be allowed to
continue on after the end of the function, even if it hasn't found the
prologue.

The attached patch certainly fixes things for me, but I'm not sure if it's
the right answer. If it is, please check it in; if not, tell me what I
should do :-).

Thanks,

Jifl

2000-03-18 Jonathan Larmour <jlarmour@redhat.co.uk>

* arm-tdep.c (thumb_skip_prologue): Take function end addr argument
so that we can stop searching for the prologue past the function end
(arm_skip_prologue): Call thumb_skip_prologue with function end addr

--
Red Hat, 35 Cambridge Place, Cambridge, UK. CB2 1NS Tel: +44 (1223) 728762
"Plan to be spontaneous tomorrow." || These opinions are all my own fault
From green@cygnus.com Sat Apr 01 00:00:00 2000
From: Anthony Green <green@cygnus.com>
To: Daniel Berlin <dan@cgsoftware.com>
Cc: gdb-patches@sourceware.cygnus.com
Subject: Re: Generic g++ exception catch/throw support
Date: Sat, 01 Apr 2000 00:00:00 -0000
Message-id: <rlputaujdk.fsf@hoser.cygnus.com>
References: <Pine.LNX.4.10.10001251034001.10773-200000@propylaea.anduin.com>
X-SW-Source: 2000-q1/msg00516.html
Content-length: 774

Daniel wrote:
> Using this patch, you can get generic g++ exception catch/throw support
> (using catch catch and catch throw).

Some comments...

* This won't work on platforms using sjlj exceptions. throw_helper
only exists on targets using PC range table style exceptions.

* I don't see __start_cp_handler in the mainline libgcc sources. Is
this something special in the BeOS libgcc?

* Once these issues are sorted out, the GCC people should be told that
gdb intends to use these functions as hooks. We can comment the
libgcc sources then to make sure people think twice before
modifying them.

AG

--
Anthony Green Red Hat
Sunnyvale, California
From fche@cygnus.com Sat Apr 01 00:00:00 2000
From: fche@cygnus.com (Frank Ch. Eigler)
To: gdb-patches@sourceware.cygnus.com
Cc: jlarmour@redhat.co.uk
Subject: Re: [PATCH] sparclite sim: make buffer_read_memory match prototype
Date: Sat, 01 Apr 2000 00:00:00 -0000
Message-id: <o5ya809jxm.fsf@toenail.to.cygnus.com>
References: <38BFBABB.2FED863B@redhat.co.uk>
X-SW-Source: 2000-q1/msg00472.html
Content-length: 67

> [erc32 buffer_read_memory patch]

Thanks, it's in.

- FChE
From cgf@cygnus.com Sat Apr 01 00:00:00 2000
From: cgf@cygnus.com (Chris Faylor)
To: gdb-patches@sourceware.cygnus.com
Subject: Re: dlclose()
Date: Sat, 01 Apr 2000 00:00:00 -0000
Message-id: <88qer9$lbd$1@cronkite.cygnus.com>
References: <200002161953.OAA07411@devserv.devel.redhat.com> <200002200521.AAA29598@devserv.devel.redhat.com> <88nurn$e4d$1@cronkite.cygnus.com> <b7lfzhkj6.fsf@rtl.cygnus.com>
X-SW-Source: 2000-q1/msg00266.html
Content-length: 1805

In article < b7lfzhkj6.fsf@rtl.cygnus.com >,
Jim Kingdon <kingdon@redhat.com> wrote:
>I'd probably argue that the distributed testing resulting from getting
>patches checked in is more effective QA than getting obsessed with
>testsuites but that isn't really the point in the sense that I'd like
>to see both.

Since running the testsuite should be a relatively trivial sanity test I
don't see why you would even raise the issue of "getting obsessed".

For the record *I'd* like to see people run a test suite on their
machine before a patch even makes it to gdb-patches. I don't see any
reason why you would expect somebody else to take time to test out your
potentially buggy patch submissions.

We've already seen at least one recent case where a test suite run prior
to an overly optimistic check-in would probably have saved people from
breakage. I would think that that was argument enough for adopting this
practice.

"Distributed testing" means "distributed confusion" when problem source
code makes it into the repository. It means that we will invariably see
the same problem reported to various gdb mailing lists multiple times.
That means more work for the people who report the problem as well as
more work for people who are responding to the people who report the
problem.

Of course it is inevitable that there will be breakage when somebody
checks in a patch. However, if we have a tool for reducing the
potential for breakage even slightly, we should use it. At Cygnus/Red
Hat, we actually have a policy that no checkins are to be made without
checking a test suite run for regressions for just this reason.
--
cgf@cygnus.com Cygnus Solutions, a Red Hat company
http://sourcware.cygnus.com/ http://www.redhat.com/
From jtc@redback.com Sat Apr 01 00:00:00 2000
From: jtc@redback.com (J.T. Conklin)
To: gdb-patches@sourceware.cygnus.com
Subject: patch: convert gdbserver to autoconf, add netbsd/i386 support
Date: Sat, 01 Apr 2000 00:00:00 -0000
Message-id: <5mn1p88ma8.fsf@jtc.redbacknetworks.com>
X-SW-Source: 2000-q1/msg00119.html
Content-length: 63369

Some time ago I submitted a patch that converted gdbserver to autoconf
with the following note.

"While adding support for NetBSD systems to gdbserver, I noticed that
gdbserver's configure.in had some significant errors in addition to
still being Cygnus configure.

The first problem was if ../config/${hostfile} was present, it would
be linked to xm.h instead of ../config/${gdb_host_cpu}/${hostfile}.
The same with targetfile and nativefile.

GDB used to do the same thing three or four years back, but that was
changed so processor specific headers could inherit from OS specific
headers for those OS's that supported multiple architectures (at the
time, lynxos and possibly svr4. Now there is *bsd and linux as well).

The second problem was that the names of the host, target, and native
headers were extracted from the host and target makefile stub with awk
and assumed that the variable definitions would have whitespace follow-
ing the equals sign in the assignment. This restriction was lifted for
GDB years ago as well, so there is a some risk that *.mh and *.mt files
that work fine with GDB won't work with gdbserver.

And by the time I fixed the above issues, it seemed trivial enough to
go the next step and convert everything to use autoconf. The enclosed
patch contains those changes."

My plan was to first do the autoconf conversion, and then submit a
follow up patch that added netbsd support.

Unfortunately, that patch had some problems, and although Stan and I
bounced around some email trying to get them resolved, it eventually
dropped to the bottom of our respective piles.

I picked up the pieces earlier in the week. I did both the autoconf
conversion and the netbsd/i386 support together, which should ensure
that the end result will work this time. Support for most of the
other netbsd ports will follow soon.

I used autoconf 2.12 to generate the gdbserver/configure script. If
there's a more official version, feel free to re-generate it.

--jtc

2000-02-10 J.T. Conklin <jtc@redback.com>

* config/i386/nbsd.mt (GDBSERVER_DEPFILES): Add low-nbsd.o
* configure.tgt (i[3456]86-*-netbsd*): add gdbserver to
configdirs.
* gdbserver/low-nbsd.c: New file.

* gdbserver/Makefile.in: convert to autoconf.
* gdbserver/configure.in: likewise.
* gdbserver/configure: generate.

Index: gdb/gdb/configure.tgt
diff -c gdb/gdb/configure.tgt:1.13 gdb/gdb/configure.tgt:1.14
*** gdb/gdb/configure.tgt:1.13 Thu Feb 10 18:35:17 2000
--- gdb/gdb/configure.tgt Thu Feb 10 18:35:17 2000
***************
*** 86,92 ****
i[3456]86-*-aix*) gdb_target=i386aix ;;
i[3456]86-*-bsd*) gdb_target=i386bsd ;;
i[3456]86-*-freebsd*) gdb_target=fbsd ;;
! i[3456]86-*-netbsd*) gdb_target=nbsd ;;
i[3456]86-*-os9k) gdb_target=i386os9k ;;
i[3456]86-*-go32*) gdb_target=i386aout ;;
i[3456]86-*-msdosdjgpp*) gdb_target=go32 ;;
--- 86,93 ----
i[3456]86-*-aix*) gdb_target=i386aix ;;
i[3456]86-*-bsd*) gdb_target=i386bsd ;;
i[3456]86-*-freebsd*) gdb_target=fbsd ;;
! i[3456]86-*-netbsd*) gdb_target=nbsd
! configdirs="${configdirs} gdbserver" ;;
i[3456]86-*-os9k) gdb_target=i386os9k ;;
i[3456]86-*-go32*) gdb_target=i386aout ;;
i[3456]86-*-msdosdjgpp*) gdb_target=go32 ;;
Index: gdb/gdb/config/i386/nbsd.mt
diff -c gdb/gdb/config/i386/nbsd.mt:1.1.1.1 gdb/gdb/config/i386/nbsd.mt:1.2
*** gdb/gdb/config/i386/nbsd.mt:1.1.1.1 Wed May 19 10:39:05 1999
--- gdb/gdb/config/i386/nbsd.mt Thu Feb 10 18:35:26 2000
***************
*** 1,3 ****
--- 1,5 ----
# Target: Intel 386 running NetBSD
TDEPFILES= i386-tdep.o i387-tdep.o solib.o
TM_FILE= tm-nbsd.h
+
+ GDBSERVER_DEPFILES= low-nbsd.o
Index: gdb/gdb/gdbserver/Makefile.in
diff -c gdb/gdb/gdbserver/Makefile.in:1.1.1.3 gdb/gdb/gdbserver/Makefile.in:1.2
*** gdb/gdb/gdbserver/Makefile.in:1.1.1.3 Thu Nov 11 16:51:10 1999
--- gdb/gdb/gdbserver/Makefile.in Thu Feb 10 18:35:36 2000
***************
*** 1,4 ****
! #Copyright 1989, 90, 91, 92, 93, 94, 95, 96, 1997
#Free Software Foundation, Inc.

# This file is part of GDB.
--- 1,4 ----
! #Copyright 1989, 90, 91, 92, 93, 94, 95, 96, 97, 99, 2000
#Free Software Foundation, Inc.

# This file is part of GDB.
***************
*** 17,32 ****
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

! prefix = /usr/local

! program_transform_name =
! exec_prefix = $(prefix)
! bindir = $(exec_prefix)/bin
! libdir = $(exec_prefix)/lib
tooldir = $(libdir)/$(target_alias)

! datadir = $(prefix)/share
! mandir = $(prefix)/man
man1dir = $(mandir)/man1
man2dir = $(mandir)/man2
man3dir = $(mandir)/man3
--- 17,34 ----
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

! prefix = @prefix@
! exec_prefix = @exec_prefix@

! host_alias = @host_alias@
! target_alias = @target_alias@
! program_transform_name = @program_transform_name@
! bindir = @bindir@
! libdir = @libdir@
tooldir = $(libdir)/$(target_alias)

! datadir = @datadir@
! mandir = @mandir@
man1dir = $(mandir)/man1
man2dir = $(mandir)/man2
man3dir = $(mandir)/man3
***************
*** 36,50 ****
man7dir = $(mandir)/man7
man8dir = $(mandir)/man8
man9dir = $(mandir)/man9
! infodir = $(prefix)/info
htmldir = $(prefix)/html
! includedir = $(prefix)/include

SHELL = /bin/sh

! INSTALL = `cd $(srcdir)/../..;pwd`/install-sh -c
! INSTALL_PROGRAM = $(INSTALL)
! INSTALL_DATA = $(INSTALL)

AR = ar
AR_FLAGS = qv
--- 38,52 ----
man7dir = $(mandir)/man7
man8dir = $(mandir)/man8
man9dir = $(mandir)/man9
! infodir = @infodir@
htmldir = $(prefix)/html
! includedir = @includedir@

SHELL = /bin/sh

! INSTALL = @INSTALL@
! INSTALL_PROGRAM = @INSTALL_PROGRAM@
! INSTALL_DATA = @INSTALL_DATA@

AR = ar
AR_FLAGS = qv
***************
*** 61,67 ****

# Directory containing source files. Don't clean up the spacing,
# this exact string is matched for by the "configure" script.
! srcdir = .

# It is also possible that you will need to add -I/usr/include/sys to the
# CFLAGS section if your system doesn't have fcntl.h in /usr/include (which
--- 63,70 ----

# Directory containing source files. Don't clean up the spacing,
# this exact string is matched for by the "configure" script.
! srcdir = @srcdir@
! VPATH = @srcdir@

# It is also possible that you will need to add -I/usr/include/sys to the
# CFLAGS section if your system doesn't have fcntl.h in /usr/include (which
***************
*** 117,130 ****
LINTFLAGS= $(BFD_CFLAGS)

# Host and target-dependent makefile fragments come in here.
! ####
# End of host and target-dependent makefile fragments

# All source files that go into linking GDB remote server.

! SFILES = $(srcdir)/low-lynx.c $(srcdir)/low-sparc.c $(srcdir)/low-sun3.c \
! $(srcdir)/low-hppabsd.c \
! $(srcdir)/utils.c $(srcdir)/server.c $(srcdir)/remote-utils.c

DEPFILES = $(GDBSERVER_DEPFILES)

--- 120,135 ----
LINTFLAGS= $(BFD_CFLAGS)

# Host and target-dependent makefile fragments come in here.
! @host_makefile_frag@
! @target_makefile_frag@
# End of host and target-dependent makefile fragments

# All source files that go into linking GDB remote server.

! SFILES = $(srcdir)/low-hppabsd.c $(srcdir)/low-linux.c $(srcdir)/low-lynx.c \
! $(srcdir)/low-nbsd.c $(srcdir)/low-sim.c $(srcdir)/low-sparc.c \
! $(srcdir)/low-sun3.c $(srcdir)/utils.c $(srcdir)/server.c \
! $(srcdir)/remote-utils.c

DEPFILES = $(GDBSERVER_DEPFILES)

***************
*** 175,184 ****
${CC-LD} $(GLOBAL_CFLAGS) $(LDFLAGS) -o gdbreplay gdbreplay.o \
$(XM_CLIBS)

- config.status:
- @echo "You must configure gdbserver. Look at the README file for details."
- @false
-
# Put the proper machine-specific files first, so M-. on a machine
# specific routine gets the one for the correct machine.
# The xyzzy stuff below deals with empty DEPFILES
--- 180,185 ----
***************
*** 196,202 ****

clean:
rm -f *.o ${ADD_FILES} *~
! rm -f gdbserver core make.log

distclean: clean
rm -f nm.h tm.h xm.h config.status
--- 197,203 ----

clean:
rm -f *.o ${ADD_FILES} *~
! rm -f gdbserver gdbreplay core make.log

distclean: clean
rm -f nm.h tm.h xm.h config.status
***************
*** 208,216 ****

STAGESTUFF=${OBS} ${TSOBS} ${NTSOBS} ${ADD_FILES} init.c init.o version.c gdb

! Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) $(target_makefile_frag)
$(SHELL) ./config.status

force:

version.c: Makefile
--- 209,220 ----

STAGESTUFF=${OBS} ${TSOBS} ${NTSOBS} ${ADD_FILES} init.c init.o version.c gdb

! Makefile: Makefile.in config.status @frags@
$(SHELL) ./config.status

+ config.status: configure
+ $(SHELL) ./config.status --recheck
+
force:

version.c: Makefile
***************
*** 236,241 ****
--- 240,246 ----
remote-utils.o : ${srcdir}/remote-utils.c ${srcdir}/server.h
low-linux.o : ${srcdir}/low-linux.c ${srcdir}/server.h
low-lynx.o : ${srcdir}/low-lynx.c ${srcdir}/server.h
+ low-nbsd.o : ${srcdir}/low-nbsd.c ${srcdir}/server.h
low-sim.o : ${srcdir}/low-sim.c ${srcdir}/server.h
low-sparc.o : $(srcdir)/low-sparc.c $(srcdir)/server.h
low-sun3.o : $(srcdir)/low-sun3.c $(srcdir)/server.h
Index: gdb/gdb/gdbserver/configure
diff -c /dev/null gdb/gdb/gdbserver/configure:1.1
*** /dev/null Thu Feb 10 18:35:36 2000
--- gdb/gdb/gdbserver/configure Thu Feb 10 18:35:36 2000
***************
*** 0 ****
--- 1,1078 ----
+ #! /bin/sh
+
+ # Guess values for system-dependent variables and create Makefiles.
+ # Generated automatically using autoconf version 2.12
+ # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+ #
+ # This configure script is free software; the Free Software Foundation
+ # gives unlimited permission to copy, distribute and modify it.
+
+ # Defaults:
+ ac_help=
+ ac_default_prefix=/usr/local
+ # Any additions from configure.in:
+
+ # Initialize some variables set by options.
+ # The variables have the same names as the options, with
+ # dashes changed to underlines.
+ build=NONE
+ cache_file=./config.cache
+ exec_prefix=NONE
+ host=NONE
+ no_create=
+ nonopt=NONE
+ no_recursion=
+ prefix=NONE
+ program_prefix=NONE
+ program_suffix=NONE
+ program_transform_name=s,x,x,
+ silent=
+ site=
+ srcdir=
+ target=NONE
+ verbose=
+ x_includes=NONE
+ x_libraries=NONE
+ bindir='${exec_prefix}/bin'
+ sbindir='${exec_prefix}/sbin'
+ libexecdir='${exec_prefix}/libexec'
+ datadir='${prefix}/share'
+ sysconfdir='${prefix}/etc'
+ sharedstatedir='${prefix}/com'
+ localstatedir='${prefix}/var'
+ libdir='${exec_prefix}/lib'
+ includedir='${prefix}/include'
+ oldincludedir='/usr/include'
+ infodir='${prefix}/info'
+ mandir='${prefix}/man'
+
+ # Initialize some other variables.
+ subdirs=
+ MFLAGS= MAKEFLAGS=
+ # Maximum number of lines to put in a shell here document.
+ ac_max_here_lines=12
+
+ ac_prev=
+ for ac_option
+ do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+ Usage: configure [options] [host]
+ Options: [defaults in brackets after descriptions]
+ Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+ Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+ EOF
+ cat << EOF
+ Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+ Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+ EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.12"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+ done
+
+ if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+ fi
+
+ trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+ # File descriptor usage:
+ # 0 standard input
+ # 1 file creation
+ # 2 errors and warnings
+ # 3 some systems may open it to /dev/tty
+ # 4 used on the Kubota Titan
+ # 6 checking for... messages and results
+ # 5 compiler messages saved in config.log
+ if test "$silent" = yes; then
+ exec 6>/dev/null
+ else
+ exec 6>&1
+ fi
+ exec 5>./config.log
+
+ echo "\
+ This file contains any messages produced by compilers while
+ running configure, to aid debugging if configure makes a mistake.
+ " 1>&5
+
+ # Strip out --no-create and --no-recursion so they do not pile up.
+ # Also quote any args containing shell metacharacters.
+ ac_configure_args=
+ for ac_arg
+ do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+ done
+
+ # NLS nuisances.
+ # Only set these to C if already set. These must not be set unconditionally
+ # because not all systems understand e.g. LANG=C (notably SCO).
+ # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+ # Non-C LC_CTYPE values break the ctype check.
+ if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+ if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+ if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+ if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+ # confdefs.h avoids OS command line length limits that DEFS can exceed.
+ rm -rf conftest* confdefs.h
+ # AIX cpp loses on an empty file, so make sure it contains at least a newline.
+ echo > confdefs.h
+
+ # A filename unique to this package, relative to the directory that
+ # configure is in, which we can look for to find out if srcdir is correct.
+ ac_unique_file=server.c
+
+ # Find the source files, if location was not specified.
+ if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+ else
+ ac_srcdir_defaulted=no
+ fi
+ if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+ fi
+ srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+ # Prefer explicitly selected file to automatically selected ones.
+ if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+ fi
+ for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+ done
+
+ if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+ else
+ echo "creating cache $cache_file"
+ > $cache_file
+ fi
+
+ ac_ext=c
+ # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ cross_compiling=$ac_cv_prog_cc_cross
+
+ if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+ ' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+ else
+ ac_n= ac_c='\c' ac_t=
+ fi
+
+
+
+ ac_aux_dir=
+ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+ done
+ if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+ fi
+ ac_config_guess=$ac_aux_dir/config.guess
+ ac_config_sub=$ac_aux_dir/config.sub
+ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+
+ # Do some error checking and defaulting for the host and target type.
+ # The inputs are:
+ # configure --host=HOST --target=TARGET --build=BUILD NONOPT
+ #
+ # The rules are:
+ # 1. You are not allowed to specify --host, --target, and nonopt at the
+ # same time.
+ # 2. Host defaults to nonopt.
+ # 3. If nonopt is not specified, then host defaults to the current host,
+ # as determined by config.guess.
+ # 4. Target and build default to nonopt.
+ # 5. If nonopt is not specified, then target and build default to host.
+
+ # The aliases save the names the user supplied, while $host etc.
+ # will get canonicalized.
+ case $host---$target---$nonopt in
+ NONE---*---* | *---NONE---* | *---*---NONE) ;;
+ *) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
+ esac
+
+
+ # Make sure we can run config.sub.
+ if $ac_config_sub sun4 >/dev/null 2>&1; then :
+ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+ fi
+
+ echo $ac_n "checking host system type""... $ac_c" 1>&6
+ echo "configure:570: checking host system type" >&5
+
+ host_alias=$host
+ case "$host_alias" in
+ NONE)
+ case $nonopt in
+ NONE)
+ if host_alias=`$ac_config_guess`; then :
+ else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+ fi ;;
+ *) host_alias=$nonopt ;;
+ esac ;;
+ esac
+
+ host=`$ac_config_sub $host_alias`
+ host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+ host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ echo "$ac_t""$host" 1>&6
+
+ echo $ac_n "checking target system type""... $ac_c" 1>&6
+ echo "configure:591: checking target system type" >&5
+
+ target_alias=$target
+ case "$target_alias" in
+ NONE)
+ case $nonopt in
+ NONE) target_alias=$host_alias ;;
+ *) target_alias=$nonopt ;;
+ esac ;;
+ esac
+
+ target=`$ac_config_sub $target_alias`
+ target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+ target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ echo "$ac_t""$target" 1>&6
+
+ echo $ac_n "checking build system type""... $ac_c" 1>&6
+ echo "configure:609: checking build system type" >&5
+
+ build_alias=$build
+ case "$build_alias" in
+ NONE)
+ case $nonopt in
+ NONE) build_alias=$host_alias ;;
+ *) build_alias=$nonopt ;;
+ esac ;;
+ esac
+
+ build=`$ac_config_sub $build_alias`
+ build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+ build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+ build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ echo "$ac_t""$build" 1>&6
+
+ test "$host_alias" != "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+ # 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
+ # AFS /usr/afsws/bin/install, which mishandles nonexistent args
+ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # ./install, which can be erroneously created by make from ./install.sh.
+ echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+ echo "configure:642: checking for a BSD compatible install" >&5
+ if test -z "$INSTALL"; then
+ if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ for ac_prog in ginstall installbsd scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ # OSF/1 installbsd also uses dspmsg, but is usable.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+ fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+ fi
+ echo "$ac_t""$INSTALL" 1>&6
+
+ # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+ # It thinks the first close brace ends the variable substitution.
+ test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+ . ${srcdir}/../configure.host
+
+ . ${srcdir}/../configure.tgt
+
+ frags=
+ host_makefile_frag=${srcdir}/../config/${gdb_host_cpu}/${gdb_host}.mh
+ if test ! -f ${host_makefile_frag}; then
+ { echo "configure: error: "*** GDB remote does not support host ${host}"" 1>&2; exit 1; }
+ fi
+ frags="$frags $host_makefile_frag"
+
+ target_makefile_frag=${srcdir}/../config/${gdb_target_cpu}/${gdb_target}.mt
+ if test ! -f ${target_makefile_frag}; then
+ { echo "configure: error: "*** GDB remote does not support target ${target}"" 1>&2; exit 1; }
+ fi
+ frags="$frags $target_makefile_frag"
+
+
+
+
+
+ hostfile=`sed -n '
+ s/XM_FILE[ ]*=[ ]*\([^ ]*\)/\1/p
+ ' ${host_makefile_frag}`
+
+ targetfile=`sed -n '
+ s/TM_FILE[ ]*=[ ]*\([^ ]*\)/\1/p
+ ' ${target_makefile_frag}`
+
+ if test "${target}" = "${host}"; then
+ nativefile=`sed -n '
+ s/NAT_FILE[ ]*=[ ]*\([^ ]*\)/\1/p
+ ' ${host_makefile_frag}`
+ fi
+
+ # If hostfile (XM_FILE) and/or targetfile (TM_FILE) and/or nativefile
+ # (NAT_FILE) is not set in the ?config/* file, we don't make the
+ # corresponding links. But we have to remove the xm.h files and tm.h
+ # files anyway, e.g. when switching from "configure host" to
+ # "configure none".
+
+ files=
+ links=
+ rm -f xm.h
+ rm -f ser-hardwire.c
+ if test "${hostfile}" != ""; then
+ files="${files} ../config/${gdb_host_cpu}/${hostfile}"
+ links="${links} xm.h"
+ fi
+ rm -f tm.h
+ if test "${targetfile}" != ""; then
+ files="${files} ../config/${gdb_target_cpu}/${targetfile}"
+ links="${links} tm.h"
+ fi
+ rm -f nm.h
+ if test "${nativefile}" != ""; then
+ files="${files} ../config/${gdb_host_cpu}/${nativefile}"
+ links="${links} nm.h"
+ # temporary scaffolding until all hosts have the host/target/native
+ # split in place.
+ else
+ files="${files} ../config/nm-empty.h"
+ links="${links} nm.h"
+ fi
+
+
+ trap '' 1 2 15
+ cat > confcache <<\EOF
+ # This file is a shell script that caches the results of configure
+ # tests run on this system so they can be shared between configure
+ # scripts and configure runs. It is not useful on other systems.
+ # If it contains results you don't want to keep, you may remove or edit it.
+ #
+ # By default, configure uses ./config.cache as the cache file,
+ # creating it if it does not exist already. You can give configure
+ # the --cache-file=FILE option to use a different cache file; that is
+ # what configure does when it calls configure scripts in
+ # subdirectories, so they share the cache.
+ # Giving --cache-file=/dev/null disables caching, for debugging configure.
+ # config.status only pays attention to the cache file if you give it the
+ # --recheck option to rerun configure.
+ #
+ EOF
+ # The following way of writing the cache mishandles newlines in values,
+ # but we know of no workaround that is simple, portable, and efficient.
+ # So, don't put newlines in cache variables' values.
+ # Ultrix sh set writes to stderr and can't be redirected directly,
+ # and sets the high bit in the cache file unless we assign to the vars.
+ (set) 2>&1 |
+ case `(ac_space=' '; set) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+ if cmp -s $cache_file confcache; then
+ :
+ else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+ fi
+ rm -f confcache
+
+ trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+ test "x$prefix" = xNONE && prefix=$ac_default_prefix
+ # Let make expand exec_prefix.
+ test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+ # Any assignment to VPATH causes Sun make to only execute
+ # the first set of double-colon rules, so remove it if not needed.
+ # If there is a colon in the path, we need to keep it.
+ if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+ fi
+
+ trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+ # Transform confdefs.h into DEFS.
+ # Protect against shell expansion while executing Makefile rules.
+ # Protect against Makefile macro expansion.
+ cat > conftest.defs <<\EOF
+ s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+ s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
+ s%\[%\\&%g
+ s%\]%\\&%g
+ s%\$%$$%g
+ EOF
+ DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+ rm -f conftest.defs
+
+
+ # Without the "./", some shells look in PATH for config.status.
+ : ${CONFIG_STATUS=./config.status}
+
+ echo creating $CONFIG_STATUS
+ rm -f $CONFIG_STATUS
+ cat > $CONFIG_STATUS <<EOF
+ #! /bin/sh
+ # Generated automatically by configure.
+ # Run this file to recreate the current configuration.
+ # This directory was configured as follows,
+ # on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+ #
+ # $0 $ac_configure_args
+ #
+ # Compiler output produced by configure, useful for debugging
+ # configure, is in ./config.log if it exists.
+
+ ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+ for ac_option
+ do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.12"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+ done
+
+ ac_given_srcdir=$srcdir
+ ac_given_INSTALL="$INSTALL"
+
+ trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+ EOF
+ cat >> $CONFIG_STATUS <<EOF
+
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+ $ac_vpsub
+ $extrasub
+ s%@CFLAGS@%$CFLAGS%g
+ s%@CPPFLAGS@%$CPPFLAGS%g
+ s%@CXXFLAGS@%$CXXFLAGS%g
+ s%@DEFS@%$DEFS%g
+ s%@LDFLAGS@%$LDFLAGS%g
+ s%@LIBS@%$LIBS%g
+ s%@exec_prefix@%$exec_prefix%g
+ s%@prefix@%$prefix%g
+ s%@program_transform_name@%$program_transform_name%g
+ s%@bindir@%$bindir%g
+ s%@sbindir@%$sbindir%g
+ s%@libexecdir@%$libexecdir%g
+ s%@datadir@%$datadir%g
+ s%@sysconfdir@%$sysconfdir%g
+ s%@sharedstatedir@%$sharedstatedir%g
+ s%@localstatedir@%$localstatedir%g
+ s%@libdir@%$libdir%g
+ s%@includedir@%$includedir%g
+ s%@oldincludedir@%$oldincludedir%g
+ s%@infodir@%$infodir%g
+ s%@mandir@%$mandir%g
+ s%@host@%$host%g
+ s%@host_alias@%$host_alias%g
+ s%@host_cpu@%$host_cpu%g
+ s%@host_vendor@%$host_vendor%g
+ s%@host_os@%$host_os%g
+ s%@target@%$target%g
+ s%@target_alias@%$target_alias%g
+ s%@target_cpu@%$target_cpu%g
+ s%@target_vendor@%$target_vendor%g
+ s%@target_os@%$target_os%g
+ s%@build@%$build%g
+ s%@build_alias@%$build_alias%g
+ s%@build_cpu@%$build_cpu%g
+ s%@build_vendor@%$build_vendor%g
+ s%@build_os@%$build_os%g
+ s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+ s%@INSTALL_DATA@%$INSTALL_DATA%g
+ /@host_makefile_frag@/r $host_makefile_frag
+ s%@host_makefile_frag@%%g
+ /@target_makefile_frag@/r $target_makefile_frag
+ s%@target_makefile_frag@%%g
+ s%@frags@%$frags%g
+
+ CEOF
+ EOF
+
+ cat >> $CONFIG_STATUS <<\EOF
+
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ ac_file=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=""
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+ EOF
+
+ cat >> $CONFIG_STATUS <<EOF
+
+ CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+ EOF
+ cat >> $CONFIG_STATUS <<\EOF
+ for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+ # $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+ s%@configure_input@%$configure_input%g
+ s%@srcdir@%$srcdir%g
+ s%@top_srcdir@%$top_srcdir%g
+ s%@INSTALL@%$INSTALL%g
+ " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+ fi; done
+ rm -f conftest.s*
+
+ EOF
+
+ cat >> $CONFIG_STATUS <<EOF
+ ac_sources="$files"
+ ac_dests="$links"
+ EOF
+
+ cat >> $CONFIG_STATUS <<\EOF
+ srcdir=$ac_given_srcdir
+ while test -n "$ac_sources"; do
+ set $ac_dests; ac_dest=$1; shift; ac_dests=$*
+ set $ac_sources; ac_source=$1; shift; ac_sources=$*
+
+ echo "linking $srcdir/$ac_source to $ac_dest"
+
+ if test ! -r $srcdir/$ac_source; then
+ { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; }
+ fi
+ rm -f $ac_dest
+
+ # Make relative symlinks.
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then
+ # The dest file is in a subdirectory.
+ test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir"
+ ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dest_dir_suffix.
+ ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dest_dir_suffix= ac_dots=
+ fi
+
+ case "$srcdir" in
+ [/$]*) ac_rel_source="$srcdir/$ac_source" ;;
+ *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;;
+ esac
+
+ # Make a symlink if possible; otherwise try a hard link.
+ if ln -s $ac_rel_source $ac_dest 2>/dev/null ||
+ ln $srcdir/$ac_source $ac_dest; then :
+ else
+ { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; }
+ fi
+ done
+ EOF
+ cat >> $CONFIG_STATUS <<EOF
+
+ EOF
+ cat >> $CONFIG_STATUS <<\EOF
+
+ exit 0
+ EOF
+ chmod +x $CONFIG_STATUS
+ rm -fr confdefs* $ac_clean_files
+ test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
Index: gdb/gdb/gdbserver/configure.in
diff -c gdb/gdb/gdbserver/configure.in:1.1.1.1 gdb/gdb/gdbserver/configure.in:1.2
*** gdb/gdb/gdbserver/configure.in:1.1.1.1 Wed May 19 10:39:36 1999
--- gdb/gdb/gdbserver/configure.in Thu Feb 10 18:35:36 2000
***************
*** 1,46 ****
! srcname="Remote GDB server"
! srctrigger=server.c
! gdb_serial_driver=../ser-unix.c

! # per-host:

! . ${srcdir}/../configure.host
!
! echo "gdbserver/configure.in: host is $host, target is $target"

! if [ ! -f ${srcdir}/../config/${gdb_host_cpu}/${gdb_host}.mh ]; then
! echo '***' "GDB remote does not support host ${host}" 1>&2
! exit 1
! fi

! # We really shouldn't depend on there being a space after XM_FILE= ...
! hostfile=`awk '$1 == "XM_FILE=" { print $2 }' <${srcdir}/../config/${gdb_host_cpu}/${gdb_host}.mh`
!
! # per-target:

. ${srcdir}/../configure.tgt

! echo "gdbserver/configure.in: host_cpu is $host_cpu, target_cpu is $target_cpu"
!
! if [ ! -f ${srcdir}/../config/${gdb_target_cpu}/${gdb_target}.mt ]; then
! echo '***' "GDB remote does not support target ${target}" 1>&2
! exit 1
! fi
!
! if [ -z "${removing}" ] ; then
! cat ${srcdir}/../config/${gdb_host_cpu}/${gdb_host}.mh ${srcdir}/../config/${gdb_target_cpu}/${gdb_target}.mt | awk '$1 == "#msg" {
! print substr($0,6)}'
fi
!
! # We really shouldn't depend on there being a space after TM_FILE= ...
! targetfile=`awk '$1 == "TM_FILE=" { print $2 }' <${srcdir}/../config/${gdb_target_cpu}/${gdb_target}.mt`
!
! if [ "${target}" = "${host}" ] ; then
! nativefile=`awk '$1 == "NAT_FILE=" { print $2 }' <${srcdir}/../config/${gdb_host_cpu}/${gdb_host}.mh`
! fi
!
! host_makefile_frag=../config/${gdb_host_cpu}/${gdb_host}.mh
! target_makefile_frag=../config/${gdb_target_cpu}/${gdb_target}.mt

# If hostfile (XM_FILE) and/or targetfile (TM_FILE) and/or nativefile
# (NAT_FILE) is not set in the ?config/* file, we don't make the
--- 1,65 ----
! dnl Autoconf configure script for GDB server.
! dnl Copyright 2000 Free Software Foundation, Inc.
! dnl
! dnl This file is part of GDB.
! dnl
! dnl This program is free software; you can redistribute it and/or modify
! dnl it under the terms of the GNU General Public License as published by
! dnl the Free Software Foundation; either version 2 of the License, or
! dnl (at your option) any later version.
! dnl
! dnl This program is distributed in the hope that it will be useful,
! dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
! dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! dnl GNU General Public License for more details.
! dnl
! dnl You should have received a copy of the GNU General Public License
! dnl along with this program; if not, write to the Free Software
! dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

! dnl Process this file with autoconf to produce a configure script.

! AC_INIT(server.c)

! AC_CANONICAL_SYSTEM
! AC_PROG_INSTALL

! . ${srcdir}/../configure.host

. ${srcdir}/../configure.tgt

! frags=
! host_makefile_frag=${srcdir}/../config/${gdb_host_cpu}/${gdb_host}.mh
! if test ! -f ${host_makefile_frag}; then
! AC_MSG_ERROR("*** GDB remote does not support host ${host}")
! fi
! frags="$frags $host_makefile_frag"
!
! target_makefile_frag=${srcdir}/../config/${gdb_target_cpu}/${gdb_target}.mt
! if test ! -f ${target_makefile_frag}; then
! AC_MSG_ERROR("*** GDB remote does not support target ${target}")
! fi
! frags="$frags $target_makefile_frag"
!
! AC_SUBST_FILE(host_makefile_frag)
! AC_SUBST_FILE(target_makefile_frag)
! AC_SUBST(frags)
!
! changequote(,)dnl
! hostfile=`sed -n '
! s/XM_FILE[ ]*=[ ]*\([^ ]*\)/\1/p
! ' ${host_makefile_frag}`
!
! targetfile=`sed -n '
! s/TM_FILE[ ]*=[ ]*\([^ ]*\)/\1/p
! ' ${target_makefile_frag}`
!
! if test "${target}" = "${host}"; then
! nativefile=`sed -n '
! s/NAT_FILE[ ]*=[ ]*\([^ ]*\)/\1/p
! ' ${host_makefile_frag}`
fi
! changequote([,])dnl

# If hostfile (XM_FILE) and/or targetfile (TM_FILE) and/or nativefile
# (NAT_FILE) is not set in the ?config/* file, we don't make the
***************
*** 52,84 ****
links=
rm -f xm.h
rm -f ser-hardwire.c
! if [ "${hostfile}" != "" ]; then
! if [ -f ${srcdir}/../config/${hostfile} ]; then
! files="${files} ../config/${hostfile}"
! else
! files="${files} ../config/${gdb_host_cpu}/${hostfile}"
! fi
links="${links} xm.h"
-
- # files="${files} ${gdb_serial_driver}"
- # links="${links} ser-hardwire.c"
fi
rm -f tm.h
! if [ "${targetfile}" != "" ]; then
! if [ -f ${srcdir}/../config/${targetfile} ]; then
! files="${files} ../config/${targetfile}"
! else
! files="${files} ../config/${gdb_target_cpu}/${targetfile}"
! fi
links="${links} tm.h"
fi
rm -f nm.h
! if [ "${nativefile}" != "" ]; then
! if [ -f ${srcdir}/../config/${nativefile} ]; then
! files="${files} ../config/${nativefile}"
! else
! files="${files} ../config/${gdb_host_cpu}/${nativefile}"
! fi
links="${links} nm.h"
# temporary scaffolding until all hosts have the host/target/native
# split in place.
--- 71,88 ----
links=
rm -f xm.h
rm -f ser-hardwire.c
! if test "${hostfile}" != ""; then
! files="${files} ../config/${gdb_host_cpu}/${hostfile}"
links="${links} xm.h"
fi
rm -f tm.h
! if test "${targetfile}" != ""; then
! files="${files} ../config/${gdb_target_cpu}/${targetfile}"
links="${links} tm.h"
fi
rm -f nm.h
! if test "${nativefile}" != ""; then
! files="${files} ../config/${gdb_host_cpu}/${nativefile}"
links="${links} nm.h"
# temporary scaffolding until all hosts have the host/target/native
# split in place.
***************
*** 86,100 ****
files="${files} ../config/nm-empty.h"
links="${links} nm.h"
fi

! if [ ${target_cpu} = "sparclite" ]; then
! configdirs="${configdirs} sparclite"
! fi
!
! # post-target:
!
! if [ "${nativefile}" = "" ] ; then
! sed -e '/^NATDEPFILES= /s//# NATDEPFILES= /' \
! < Makefile > Makefile.tem
! mv -f Makefile.tem Makefile
! fi
--- 90,95 ----
files="${files} ../config/nm-empty.h"
links="${links} nm.h"
fi
+ AC_LINK_FILES($files, $links)

! AC_OUTPUT(Makefile)
Index: gdb/gdb/gdbserver/low-nbsd.c
diff -c /dev/null gdb/gdb/gdbserver/low-nbsd.c:1.2
*** /dev/null Thu Feb 10 18:35:36 2000
--- gdb/gdb/gdbserver/low-nbsd.c Thu Feb 10 18:35:36 2000
***************
*** 0 ****
--- 1,320 ----
+ /* Low level interface to ptrace, for the remote server for GDB.
+ Copyright (C) 1986, 1987, 1993, 2000 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. */
+
+ #include "defs.h"
+ #include <sys/types.h>
+ #include <sys/wait.h>
+ #include "frame.h"
+ #include "inferior.h"
+
+ #include <stdio.h>
+ #include <errno.h>
+
+ /***************Begin MY defs*********************/
+ int quit_flag = 0;
+ static char my_registers[REGISTER_BYTES];
+ char *registers = my_registers;
+
+ /* Index within `registers' of the first byte of the space for
+ register N. */
+
+ char buf2[MAX_REGISTER_RAW_SIZE];
+ /***************End MY defs*********************/
+
+ #include <sys/ptrace.h>
+ #include <machine/reg.h>
+
+ extern int sys_nerr;
+ // extern char **sys_errlist;
+ extern char **environ;
+ extern int inferior_pid;
+ void quit (), perror_with_name ();
+
+ #ifdef TM_I386_H
+ /* i386_register_raw_size[i] is the number of bytes of storage in the
+ actual machine representation for register i. */
+ int i386_register_raw_size[MAX_NUM_REGS] = {
+ 4, 4, 4, 4,
+ 4, 4, 4, 4,
+ 4, 4, 4, 4,
+ 4, 4, 4, 4,
+ 10, 10, 10, 10,
+ 10, 10, 10, 10,
+ 4, 4, 4, 4,
+ 4, 4, 4, 4,
+ 16, 16, 16, 16,
+ 16, 16, 16, 16,
+ 4
+ };
+
+ int i386_register_byte[MAX_NUM_REGS];
+
+ static void
+ initialize_arch()
+ {
+ /* Initialize the table saying where each register starts in the
+ register file. */
+ {
+ int i, offset;
+
+ offset = 0;
+ for (i = 0; i < MAX_NUM_REGS; i++)
+ {
+ i386_register_byte[i] = offset;
+ offset += i386_register_raw_size[i];
+ }
+ }
+ }
+
+ #endif
+
+
+ /* Start an inferior process and returns its pid.
+ ALLARGS is a vector of program-name and args.
+ ENV is the environment vector to pass. */
+
+ int
+ create_inferior (program, allargs)
+ char *program;
+ char **allargs;
+ {
+ int pid;
+
+ pid = fork ();
+ if (pid < 0)
+ perror_with_name ("fork");
+
+ if (pid == 0)
+ {
+ ptrace (PT_TRACE_ME, 0, 0, 0);
+
+ execv (program, allargs);
+
+ fprintf (stderr, "Cannot exec %s: %s.\n", program,
+ errno < sys_nerr ? sys_errlist[errno] : "unknown error");
+ fflush (stderr);
+ _exit (0177);
+ }
+
+ return pid;
+ }
+
+ /* Kill the inferior process. Make us have no inferior. */
+
+ void
+ kill_inferior ()
+ {
+ if (inferior_pid == 0)
+ return;
+ ptrace (PT_KILL, inferior_pid, 0, 0);
+ wait (0);
+ /*************inferior_died ();****VK**************/
+ }
+
+ /* Return nonzero if the given thread is still alive. */
+ int
+ mythread_alive (pid)
+ int pid;
+ {
+ return 1;
+ }
+
+ /* Wait for process, returns status */
+
+ unsigned char
+ mywait (status)
+ char *status;
+ {
+ int pid;
+ int w;
+
+ pid = wait (&w);
+ if (pid != inferior_pid)
+ perror_with_name ("wait");
+
+ if (WIFEXITED (w))
+ {
+ fprintf (stderr, "\nChild exited with retcode = %x \n", WEXITSTATUS (w));
+ *status = 'W';
+ return ((unsigned char) WEXITSTATUS (w));
+ }
+ else if (!WIFSTOPPED (w))
+ {
+ fprintf (stderr, "\nChild terminated with signal = %x \n", WTERMSIG (w));
+ *status = 'X';
+ return ((unsigned char) WTERMSIG (w));
+ }
+
+ fetch_inferior_registers (0);
+
+ *status = 'T';
+ return ((unsigned char) WSTOPSIG (w));
+ }
+
+ /* Resume execution of the inferior process.
+ If STEP is nonzero, single-step it.
+ If SIGNAL is nonzero, give it that signal. */
+
+ void
+ myresume (step, signal)
+ int step;
+ int signal;
+ {
+ errno = 0;
+ ptrace (step ? PT_STEP : PT_CONTINUE, inferior_pid,
+ (PTRACE_ARG3_TYPE) 1, signal);
+ if (errno)
+ perror_with_name ("ptrace");
+ }
+
+ /* Fetch one or more registers from the inferior. REGNO == -1 to get
+ them all. We actually fetch more than requested, when convenient,
+ marking them as valid so we won't fetch them again. */
+
+ void
+ fetch_inferior_registers (ignored)
+ int ignored;
+ {
+ struct reg inferior_registers;
+ struct fpreg inferior_fp_registers;
+
+ ptrace (PT_GETREGS, inferior_pid,
+ (PTRACE_ARG3_TYPE) &inferior_registers, 0);
+ memcpy (&registers[REGISTER_BYTE(0)], &inferior_registers,
+ sizeof(inferior_registers));
+
+ #if 0 /* def FP0_REGNUM */
+ ptrace (PT_GETFPREGS, inferior_pid,
+ (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0);
+ memcpy (&registers[REGISTER_BYTE(FP0_REGNUM)], &inferior_fp_registers,
+ sizeof(inferior_fp_registers));
+ #endif
+ }
+
+ /* Store our register values back into the inferior.
+ If REGNO is -1, do this for all registers.
+ Otherwise, REGNO specifies which register (so we can save time). */
+
+ void
+ store_inferior_registers (ignored)
+ int ignored;
+ {
+ struct reg inferior_registers;
+ struct fpreg inferior_fp_registers;
+
+ memcpy (&inferior_registers, &registers[REGISTER_BYTE(0)],
+ sizeof(inferior_registers));
+ ptrace (PT_SETREGS, inferior_pid,
+ (PTRACE_ARG3_TYPE) &inferior_registers, 0);
+
+ #if 0 /* def FP0_REGNUM */
+ memcpy (&inferior_fp_registers, &registers[REGISTER_BYTE (FP0_REGNUM)],
+ sizeof (inferior_fp_registers));
+ ptrace (PT_SETFPREGS, inferior_pid,
+ (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0);
+ #endif
+ }
+
+ /* NOTE! I tried using PTRACE_READDATA, etc., to read and write memory
+ in the NEW_SUN_PTRACE case.
+ It ought to be straightforward. But it appears that writing did
+ not write the data that I specified. I cannot understand where
+ it got the data that it actually did write. */
+
+ /* Copy LEN bytes from inferior's memory starting at MEMADDR
+ to debugger memory starting at MYADDR. */
+
+ read_inferior_memory (memaddr, myaddr, len)
+ CORE_ADDR memaddr;
+ char *myaddr;
+ int len;
+ {
+ register int i;
+ /* Round starting address down to longword boundary. */
+ register CORE_ADDR addr = memaddr & -sizeof (int);
+ /* Round ending address up; get number of longwords that makes. */
+ register int count
+ = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
+ /* Allocate buffer of that many longwords. */
+ register int *buffer = (int *) alloca (count * sizeof (int));
+
+ /* Read all the longwords */
+ for (i = 0; i < count; i++, addr += sizeof (int))
+ {
+ buffer[i] = ptrace (PT_READ_D, inferior_pid, (PTRACE_ARG3_TYPE) addr, 0);
+ }
+
+ /* Copy appropriate bytes out of the buffer. */
+ memcpy (myaddr, (char *) buffer + (memaddr & (sizeof (int) - 1)), len);
+ }
+
+ /* Copy LEN bytes of data from debugger memory at MYADDR
+ to inferior's memory at MEMADDR.
+ On failure (cannot write the inferior)
+ returns the value of errno. */
+
+ int
+ write_inferior_memory (memaddr, myaddr, len)
+ CORE_ADDR memaddr;
+ char *myaddr;
+ int len;
+ {
+ register int i;
+ /* Round starting address down to longword boundary. */
+ register CORE_ADDR addr = memaddr & -sizeof (int);
+ /* Round ending address up; get number of longwords that makes. */
+ register int count
+ = (((memaddr + len) - addr) + sizeof (int) - 1) / sizeof (int);
+ /* Allocate buffer of that many longwords. */
+ register int *buffer = (int *) alloca (count * sizeof (int));
+ extern int errno;
+
+ /* Fill start and end extra bytes of buffer with existing memory data. */
+
+ buffer[0] = ptrace (PT_READ_D, inferior_pid, (PTRACE_ARG3_TYPE) addr, 0);
+
+ if (count > 1)
+ {
+ buffer[count - 1]
+ = ptrace (PT_READ_D, inferior_pid,
+ (PTRACE_ARG3_TYPE) addr + (count - 1) * sizeof (int), 0);
+ }
+
+ /* Copy data to be written over corresponding part of buffer */
+
+ memcpy ((char *) buffer + (memaddr & (sizeof (int) - 1)), myaddr, len);
+
+ /* Write the entire buffer. */
+
+ for (i = 0; i < count; i++, addr += sizeof (int))
+ {
+ errno = 0;
+ ptrace (PT_WRITE_D, inferior_pid, (PTRACE_ARG3_TYPE) addr, buffer[i]);
+ if (errno)
+ return errno;
+ }
+
+ return 0;
+ }
+ \f
+ void
+ initialize_low ()
+ {
+ initialize_arch ();
+ }

--
J.T. Conklin
RedBack Networks
From akale@veritas.com Sat Apr 01 00:00:00 2000
From: "Amit S. Kale" <akale@veritas.com>
To: Todd Whitesel <toddpw@windriver.com>, kingdon@redhat.com (Jim Kingdon)
Cc: akale@veritas.com, kettenis@wins.uva.nl, gdb@sourceware.cygnus.com, gdb-patches@sourceware.cygnus.com
Subject: Re: Regression caused by elfread.c patch
Date: Sat, 01 Apr 2000 00:00:00 -0000
Message-id: <00021514224700.31608@fermat.vxindia.veritas.com>
References: <200002150800.AAA07477@alabama.wrs.com>
X-SW-Source: 2000-q1/msg00154.html
Content-length: 2745

Hi,

On Tue, 15 Feb 2000, Jim Kingdon wrote:
> > That was because Jim didn't checkin my patch correctly.
> > He has fixed it now.
>
> No, this is a different problem.

Apolgies to Jim, because the problem was not his fault as said by me.

> I don't see how your patch could work at all - sym->section->index is
> a very different number than a SECT_OFF_* code. The SECT_OFF_* code
> (which gets fed to ANOFFSET) isn't computed until later in the
> function (via the call to record_minimal_symbol_and_info).

The patch I sent is working in some configurations. I have been using it for
debugging linux kernel. This patch was needed to load module object files using
'add-symbol-file' after loading kernel object file using 'symbol-file'.

I guess gdb first prepares text, data, bss segments and following code
bfd/section.c:bfd_make_section_anyway():
newsect->index = abfd->section_count++;
indicates that section->index contains SECT_OFF_* codes when segments are
loaded. This may not have been designed this way, but it seems to be that way.

Using sym->section->index is not right for segments that are not text or data
segments. Using sym->section->index should be all right for data segments.

I suggest following patch. I have verified that the vfprintf problem reported
by Mark does not appear with this patch. I haven't tested it with test suite.

--- elfread.c Tue Feb 15 13:54:52 2000
+++ ../../../utils/src/gdb/elfread.c Tue Feb 15 10:56:30 2000
@@ -293,14 +293,11 @@ elf_symtab_read (objfile, dynamic)
if (number_of_symbols < 0)
error ("Can't read symbols from %s: %s", bfd_get_filename (objfile->obfd),
bfd_errmsg (bfd_get_error ()));
+ /* FIXME: Should use section specific offset, not SECT_OFF_TEXT. */
+ offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
for (i = 0; i < number_of_symbols; i++)
{
sym = symbol_table[i];
- if (sym->section->flags & SEC_DATA) {
- offset = ANOFFSET (objfile->section_offsets, sym->section->index);
- } else {
- offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT);
- }
if (sym->name == NULL || *sym->name == '\0')
{
/* Skip names that don't exist (shouldn't happen), or names

On Tue, 15 Feb 2000, Todd Whitesel wrote:
> [snip]
> However, so few configurations (read: vxWorks and ??) actually use different
> offsets for, say, SECT_OFF_TEXT and SECT_OFF_DATA, that no one notices the
> problems with it. (We read relocatable .o files too, which is also rare.)

It won'd be rare when gdb will be used by more people to debug linux kernel
modules.
> [snip]

--
Amit Kale
Veritas Software ( http://www.veritas.com )
From ac131313@cygnus.com Sat Apr 01 00:00:00 2000
From: Andrew Cagney <ac131313@cygnus.com>
To: RDBrown@mira.net, RodneyBrown@pmsc.com
Cc: gdb-patches@sourceware.cygnus.com
Subject: Re: Attempt at ATTRIBUTE_UNUSED patch
Date: Sat, 01 Apr 2000 00:00:00 -0000
Message-id: <38C0AEF6.139716C6@cygnus.com>
References: <200002292125.IAA00707@ppp88.dyn138.pacific.net.au>
X-SW-Source: 2000-q1/msg00501.html
Content-length: 316

Rodney Brown wrote:
>
> The enclosed scripts use the warnings from the gdb build with gcc and the
> standard format of gdb source to add appropriate ATTRIBUTE_UNUSED
> decorations. (Workaround for lack of Copyright assignment)
>
> In gdb/gdb

FYI,

I've put this into my ``once 5.0 branch is cut'' queue.

Andrew
From tm@netcom.com Sat Apr 01 00:00:00 2000
From: Toshiyasu Morita <tm@netcom.com>
To: msnyder@cygnus.com (Michael Snyder)
Cc: gdb-patches@sourceware.cygnus.com
Subject: Re: [PATCH]: Allow struct compare in expressions.
Date: Sat, 01 Apr 2000 00:00:00 -0000
Message-id: <200003222218.OAA02705@netcom.com>
References: <200003222043.MAA10512@cleaver.cygnus.com>
X-SW-Source: 2000-q1/msg00921.html
Content-length: 4958

Does this compare ignore the padding in the struct?

>
>
> The following change allows GDB to evaluate (and set watchpoints on)
> expressions of the form (a == b) and (a != b), where a and b are
> simple C structs or unions. It would be possible to extend this
> further by allowing simple binary comparison for classes that don't
> have an operator== method: I leave that as an exercise for someone
> else.
>
> Jim Blandy, David Taylor, I think both of your approvals is required.
>
> 2000-03-22 Michael Snyder <msnyder@cleaver.cygnus.com>
>
> * eval.c (evaluate_subexp_standard): allow for simple comparison
> of structures, in the absense of C++ method symbols.
> * symtab.c (total_number_of_methods): make public, for use above.
> * symtab.h (total_number_of_methods): publish prototype.
>
> Index: ChangeLog
> ===================================================================
> RCS file: /cvs/src/src/gdb/ChangeLog,v
> retrieving revision 1.163
> diff -c -r1.163 ChangeLog
> *** ChangeLog 2000/03/22 09:45:01 1.163
> --- ChangeLog 2000/03/22 20:38:33
> ***************
> *** 1,3 ****
> --- 1,10 ----
> + 2000-03-22 Michael Snyder <msnyder@cleaver.cygnus.com>
> +
> + * eval.c (evaluate_subexp_standard): allow for simple comparison
> + of structures, in the absense of C++ method symbols.
> + * symtab.c (total_number_of_methods): make public, for use above.
> + * symtab.h (total_number_of_methods): publish prototype.
> +
> 2000-03-22 Mark Kettenis <kettenis@gnu.org>
>
> * config/i386/tm-i386aix.h (I386_AIX_TARGET): Remove.
> Index: eval.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/eval.c,v
> retrieving revision 1.2
> diff -c -r1.2 eval.c
> *** eval.c 2000/03/14 17:01:04 1.2
> --- eval.c 2000/03/22 20:38:34
> ***************
> *** 1448,1454 ****
> arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
> if (noside == EVAL_SKIP)
> goto nosideret;
> ! if (binop_user_defined_p (op, arg1, arg2))
> {
> return value_x_binop (arg1, arg2, op, OP_NULL, noside);
> }
> --- 1448,1459 ----
> arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
> if (noside == EVAL_SKIP)
> goto nosideret;
> !
> ! /* NOTE: because BINOP_EQUAL is a legal operaton for
> ! C structs (as opposed to C++ classes), revert to
> ! simple value comparison if the type has no methods. */
> ! if (binop_user_defined_p (op, arg1, arg2) &&
> ! total_number_of_methods (arg1->type) > 0)
> {
> return value_x_binop (arg1, arg2, op, OP_NULL, noside);
> }
> ***************
> *** 1463,1469 ****
> arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
> if (noside == EVAL_SKIP)
> goto nosideret;
> ! if (binop_user_defined_p (op, arg1, arg2))
> {
> return value_x_binop (arg1, arg2, op, OP_NULL, noside);
> }
> --- 1468,1479 ----
> arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
> if (noside == EVAL_SKIP)
> goto nosideret;
> !
> ! /* NOTE: because BINOP_NOTEQUAL is a legal operaton for
> ! C structs (as opposed to C++ classes), revert to
> ! simple value comparison if the type has no methods. */
> ! if (binop_user_defined_p (op, arg1, arg2) &&
> ! total_number_of_methods (arg1->type) > 0)
> {
> return value_x_binop (arg1, arg2, op, OP_NULL, noside);
> }
> Index: symtab.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/symtab.c,v
> retrieving revision 1.2
> diff -c -r1.2 symtab.c
> *** symtab.c 2000/02/08 04:39:02 1.2
> --- symtab.c 2000/03/22 20:38:34
> ***************
> *** 2217,2225 ****
> reader because the type of the baseclass might still be stubbed
> when the definition of the derived class is parsed. */
>
> ! static int total_number_of_methods PARAMS ((struct type * type));
> !
> ! static int
> total_number_of_methods (type)
> struct type *type;
> {
> --- 2217,2223 ----
> reader because the type of the baseclass might still be stubbed
> when the definition of the derived class is parsed. */
>
> ! int
> total_number_of_methods (type)
> struct type *type;
> {
> Index: symtab.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/symtab.h,v
> retrieving revision 1.4
> diff -c -r1.4 symtab.h
> *** symtab.h 2000/03/21 22:37:42 1.4
> --- symtab.h 2000/03/22 20:38:34
> ***************
> *** 1462,1467 ****
> --- 1462,1472 ----
> extern int
> in_prologue PARAMS ((CORE_ADDR pc, CORE_ADDR func_start));
>
> + /* Number of method symbols for TYPE
> + (and all its base classes) */
> + extern int
> + total_number_of_methods PARAMS ((struct type * type));
> +
> extern struct symbol *
> fixup_symbol_section PARAMS ((struct symbol *, struct objfile *));
>
>