GDB: Upgrade version from 7.0 to 7.2
authorJohn Marino <draco@marino.st>
Tue, 3 May 2011 22:11:24 +0000 (00:11 +0200)
committerJohn Marino <draco@marino.st>
Sat, 7 May 2011 08:24:47 +0000 (10:24 +0200)
It was thought that an minor point upgrade of gdb would be a straight-
forward task, but that wasn't the case.  There was an architectural change
between version 7.0 and 7.2 that introduced the concept of separate program
spaces and address spaces for each "inferior" (process being debugged) that
required a rework of the kernel debugger to make it work properly.

One ramification from this change is now GDB 7.2 starts off with one
inferior with process ID of 0.  GDB 7.0 started off with no inferiors
pre-defined.  However, there is a legitimate process with PID 0, and that's
the swapper.  GDB 7.2 had to be modified to behave one way as gdb and
differently as kgdb.  An undocumented command-line option "--kernel" was
added, which prevents the initial inferior from being created, and disables
all asserts and checks for pid 0.  There is no reason for a normal user to
use the --kernel option; it's only for kgdb to signal to gdb to operate
differently.

The major required change to kgdb was to create an unique program space and
address space for each inferior.  The trick to get threading symbols to
display was to copy the object file and target section data from the
initial program space over to each additionally created one.  There are
some other minor changed required by function prototype changes and some
minor improvements were borrowed from FreeBSD.

GDB 7.3 should be released relatively soon.  This update to GDB 7.2 is
considered a stepping-stone upgrade.  There are no apparently design
changes between versions 7.2 and 7.3, so the update to 7.3 is expected
to be very easy, and will occur after the 7.3 release, assuming there are
no issues found with the 7.2 upgrade.

=============================================
 Changes by GDB 7.1 (Released 18 March 2010)
=============================================

* C++ Improvements

  ** Namespace Support

  GDB now supports importing of namespaces in C++.  This enables the
  user to inspect variables from imported namespaces.  Support for
  namepace aliasing has also been added.  So, if a namespace is
  aliased in the current scope (e.g. namepace C=A; ) the user can
  print variables using the alias (e.g. (gdb) print C::x).

  ** Bug Fixes

  All known bugs relating to the printing of virtual base class were
  fixed.  It is now possible to call overloaded static methods using a
  qualified name.

  ** Cast Operators

  The C++ cast operators static_cast<>, dynamic_cast<>, const_cast<>,
  and reinterpret_cast<> are now handled by the C++ expression parser.

* New targets

Xilinx MicroBlaze microblaze-*-*
Renesas RX rx-*-elf

* New Simulators

Xilinx MicroBlaze microblaze
Renesas RX rx

* Multi-program debugging.

  GDB now has support for multi-program (a.k.a. multi-executable or
  multi-exec) debugging.  This allows for debugging multiple inferiors
  simultaneously each running a different program under the same GDB
  session.  See "Debugging Multiple Inferiors and Programs" in the
  manual for more information.  This implied some user visible changes
  in the multi-inferior support.  For example, "info inferiors" now
  lists inferiors that are not running yet or that have exited
  already.  See also "New commands" and "New options" below.

* New tracing features

  GDB's tracepoint facility now includes several new features:

  ** Trace state variables

  GDB tracepoints now include support for trace state variables, which
  are variables managed by the target agent during a tracing
  experiment.  They are useful for tracepoints that trigger each
  other, so for instance one tracepoint can count hits in a variable,
  and then a second tracepoint has a condition that is true when the
  count reaches a particular value.  Trace state variables share the
  $-syntax of GDB convenience variables, and can appear in both
  tracepoint actions and condition expressions.  Use the "tvariable"
  command to create, and "info tvariables" to view; see "Trace State
  Variables" in the manual for more detail.

  ** Fast tracepoints

  GDB now includes an option for defining fast tracepoints, which
  targets may implement more efficiently, such as by installing a jump
  into the target agent rather than a trap instruction.  The resulting
  speedup can be by two orders of magnitude or more, although the
  tradeoff is that some program locations on some target architectures
  might not allow fast tracepoint installation, for instance if the
  instruction to be replaced is shorter than the jump.  To request a
  fast tracepoint, use the "ftrace" command, with syntax identical to
  the regular trace command.

  ** Disconnected tracing

  It is now possible to detach GDB from the target while it is running
  a trace experiment, then reconnect later to see how the experiment
  is going.  In addition, a new variable disconnected-tracing lets you
  tell the target agent whether to continue running a trace if the
  connection is lost unexpectedly.

  ** Trace files

  GDB now has the ability to save the trace buffer into a file, and
  then use that file as a target, similarly to you can do with
  corefiles.  You can select trace frames, print data that was
  collected in them, and use tstatus to display the state of the
  tracing run at the moment that it was saved.  To create a trace
  file, use "tsave <filename>", and to use it, do "target tfile
  <name>".

  ** Circular trace buffer

  You can ask the target agent to handle the trace buffer as a
  circular buffer, discarding the oldest trace frames to make room for
  newer ones, by setting circular-trace-buffer to on.  This feature may
  not be available for all target agents.

* Changed commands

disassemble
  The disassemble command, when invoked with two arguments, now requires
  the arguments to be comma-separated.

info variables
  The info variables command now displays variable definitions.  Files
  which only declare a variable are not shown.

source
  The source command is now capable of sourcing Python scripts.
  This feature is dependent on the debugger being build with Python
  support.

  Related to this enhancement is also the introduction of a new command
  "set script-extension" (see below).

* New commands (for set/show, see "New options" below)

record save [<FILENAME>]
  Save a file (in core file format) containing the process record
  execution log for replay debugging at a later time.

record restore <FILENAME>
  Restore the process record execution log that was saved at an
  earlier time, for replay debugging.

add-inferior [-copies <N>] [-exec <FILENAME>]
  Add a new inferior.

clone-inferior [-copies <N>] [ID]
  Make a new inferior ready to execute the same program another
  inferior has loaded.

remove-inferior ID
  Remove an inferior.

maint info program-spaces
  List the program spaces loaded into GDB.

set remote interrupt-sequence [Ctrl-C | BREAK | BREAK-g]
show remote interrupt-sequence
  Allow the user to select one of ^C, a BREAK signal or BREAK-g
  as the sequence to the remote target in order to interrupt the execution.
  Ctrl-C is a default.  Some system prefers BREAK which is high level of
  serial line for some certain time.  Linux kernel prefers BREAK-g, a.k.a
  Magic SysRq g.  It is BREAK signal and character 'g'.

set remote interrupt-on-connect [on | off]
show remote interrupt-on-connect
  When interrupt-on-connect is ON, gdb sends interrupt-sequence to
  remote target when gdb connects to it.  This is needed when you debug
  Linux kernel.

set remotebreak [on | off]
show remotebreak
Deprecated.  Use "set/show remote interrupt-sequence" instead.

tvariable $NAME [ = EXP ]
  Create or modify a trace state variable.

info tvariables
  List trace state variables and their values.

delete tvariable $NAME ...
  Delete one or more trace state variables.

teval EXPR, ...
  Evaluate the given expressions without collecting anything into the
  trace buffer. (Valid in tracepoint actions only.)

ftrace FN / FILE:LINE / *ADDR
  Define a fast tracepoint at the given function, line, or address.

* New expression syntax

  GDB now parses the 0b prefix of binary numbers the same way as GCC does.
  GDB now parses 0b101010 identically with 42.

* New options

set follow-exec-mode new|same
show follow-exec-mode
  Control whether GDB reuses the same inferior across an exec call or
  creates a new one.  This is useful to be able to restart the old
  executable after the inferior having done an exec call.

set default-collect EXPR, ...
show default-collect
   Define a list of expressions to be collected at each tracepoint.
   This is a useful way to ensure essential items are not overlooked,
   such as registers or a critical global variable.

set disconnected-tracing
show disconnected-tracing
   If set to 1, the target is instructed to continue tracing if it
   loses its connection to GDB.  If 0, the target is to stop tracing
   upon disconnection.

set circular-trace-buffer
show circular-trace-buffer
   If set to on, the target is instructed to use a circular trace buffer
   and discard the oldest trace frames instead of stopping the trace due
   to a full trace buffer.  If set to off, the trace stops when the buffer
   fills up.  Some targets may not support this.

set script-extension off|soft|strict
show script-extension
   If set to "off", the debugger does not perform any script language
   recognition, and all sourced files are assumed to be GDB scripts.
   If set to "soft" (the default), files are sourced according to
   filename extension, falling back to GDB scripts if the first
   evaluation failed.
   If set to "strict", files are sourced according to filename extension.

set ada trust-PAD-over-XVS on|off
show ada trust-PAD-over-XVS
   If off, activate a workaround against a bug in the debugging information
   generated by the compiler for PAD types (see gcc/exp_dbug.ads in
   the GCC sources for more information about the GNAT encoding and
   PAD types in particular).  It is always safe to set this option to
   off, but this introduces a slight performance penalty.  The default
   is on.

* Python API Improvements

  ** GDB provides the new class gdb.LazyString.  This is useful in
     some pretty-printing cases.  The new method gdb.Value.lazy_string
     provides a simple way to create objects of this type.

  ** The fields returned by gdb.Type.fields now have an
     `is_base_class' attribute.

  ** The new method gdb.Type.range returns the range of an array type.

  ** The new method gdb.parse_and_eval can be used to parse and
     evaluate an expression.

* New remote packets

QTDV
   Define a trace state variable.

qTV
   Get the current value of a trace state variable.

QTDisconnected
   Set desired tracing behavior upon disconnection.

QTBuffer:circular
   Set the trace buffer to be linear or circular.

qTfP, qTsP
   Get data about the tracepoints currently in use.

* Bug fixes

Process record now works correctly with hardware watchpoints.

Multiple bug fixes have been made to the mips-irix port, making it
much more reliable. In particular:
  - Debugging threaded applications is now possible again.  Previously,
    GDB would hang while starting the program, or while waiting for
    the program to stop at a breakpoint.
  - Attaching to a running process no longer hangs.
  - An error occurring while loading a core file has been fixed.
  - Changing the value of the PC register now works again.  This fixes
    problems observed when using the "jump" command, or when calling
    a function from GDB, or even when assigning a new value to $pc.
  - With the "finish" and "return" commands, the return value for functions
    returning a small array is now correctly printed.
  - It is now possible to break on shared library code which gets executed
    during a shared library init phase (code executed while executing
    their .init section).  Previously, the breakpoint would have no effect.
  - GDB is now able to backtrace through the signal handler for
    non-threaded programs.

PIE (Position Independent Executable) programs debugging is now supported.
This includes debugging execution of PIC (Position Independent Code) shared
libraries although for that, it should be possible to run such libraries as an
executable program.

=================================================
 Changes by GDB 7.2 (Released 02 September 2010)
=================================================

* Shared library support for remote targets by default

  When GDB is configured for a generic, non-OS specific target, like
  for example, --target=arm-eabi or one of the many *-*-elf targets,
  GDB now queries remote stubs for loaded shared libraries using the
  `qXfer:libraries:read' packet.  Previously, shared library support
  was always disabled for such configurations.

* C++ Improvements:

  ** Argument Dependent Lookup (ADL)

  In C++ ADL lookup directs function search to the namespaces of its
  arguments even if the namespace has not been imported.
  For example:
    namespace A
      {
        class B { };
        void foo (B) { }
      }
    ...
    A::B b
    foo(b)
  Here the compiler will search for `foo' in the namespace of 'b'
  and find A::foo.  GDB now supports this.  This construct is commonly
  used in the Standard Template Library for operators.

  ** Improved User Defined Operator Support

  In addition to member operators, GDB now supports lookup of operators
  defined in a namespace and imported with a `using' directive, operators
  defined in the global scope, operators imported implicitly from an
  anonymous namespace, and the ADL operators mentioned in the previous
  entry.
  GDB now also supports proper overload resolution for all the previously
  mentioned flavors of operators.

  ** static const class members

  Printing of static const class members that are initialized in the
  class definition has been fixed.

* Windows Thread Information Block access.

  On Windows targets, GDB now supports displaying the Windows Thread
  Information Block (TIB) structure.  This structure is visible either
  by using the new command `info w32 thread-information-block' or, by
  dereferencing the new convenience variable named `$_tlb', a
  thread-specific pointer to the TIB.  This feature is also supported
  when remote debugging using GDBserver.

* Static tracepoints

  Static tracepoints are calls in the user program into a tracing
  library.  One such library is a port of the LTTng kernel tracer to
  userspace --- UST (LTTng Userspace Tracer, http://lttng.org/ust).
  When debugging with GDBserver, GDB now supports combining the GDB
  tracepoint machinery with such libraries.  For example: the user can
  use GDB to probe a static tracepoint marker (a call from the user
  program into the tracing library) with the new "strace" command (see
  "New commands" below).  This creates a "static tracepoint" in the
  breakpoint list, that can be manipulated with the same feature set
  as fast and regular tracepoints.  E.g., collect registers, local and
  global variables, collect trace state variables, and define
  tracepoint conditions.  In addition, the user can collect extra
  static tracepoint marker specific data, by collecting the new
  $_sdata internal variable.  When analyzing the trace buffer, you can
  inspect $_sdata like any other variable available to GDB.  For more
  information, see the "Tracepoints" chapter in GDB user manual.  New
  remote packets have been defined to support static tracepoints, see
  the "New remote packets" section below.

* Better reconstruction of tracepoints after disconnected tracing

  GDB will attempt to download the original source form of tracepoint
  definitions when starting a trace run, and then will upload these
  upon reconnection to the target, resulting in a more accurate
  reconstruction of the tracepoints that are in use on the target.

* Observer mode

  You can now exercise direct control over the ways that GDB can
  affect your program.  For instance, you can disallow the setting of
  breakpoints, so that the program can run continuously (assuming
  non-stop mode).  In addition, the "observer" variable is available
  to switch all of the different controls; in observer mode, GDB
  cannot affect the target's behavior at all, which is useful for
  tasks like diagnosing live systems in the field.

* The new convenience variable $_thread holds the number of the
  current thread.

* New remote packets

qGetTIBAddr

  Return the address of the Windows Thread Information Block of a given thread.

qRelocInsn

  In response to several of the tracepoint packets, the target may now
  also respond with a number of intermediate `qRelocInsn' request
  packets before the final result packet, to have GDB handle
  relocating an instruction to execute at a different address.  This
  is particularly useful for stubs that support fast tracepoints.  GDB
  reports support for this feature in the qSupported packet.

qTfSTM, qTsSTM

  List static tracepoint markers in the target program.

qTSTMat

  List static tracepoint markers at a given address in the target
  program.

qXfer:statictrace:read

  Read the static trace data collected (by a `collect $_sdata'
  tracepoint action).  The remote stub reports support for this packet
  to gdb's qSupported query.

QAllow

  Send the current settings of GDB's permission flags.

QTDPsrc

  Send part of the source (textual) form of a tracepoint definition,
  which includes location, conditional, and action list.

* The source command now accepts a -s option to force searching for the
  script in the source search path even if the script name specifies
  a directory.

* New features in the GDB remote stub, GDBserver

  - GDBserver now support tracepoints (including fast tracepoints, and
    static tracepoints).  The feature is currently supported by the
    i386-linux and amd64-linux builds.  See the "Tracepoints support
    in gdbserver" section in the manual for more information.

    GDBserver JIT compiles the tracepoint's conditional agent
    expression bytecode into native code whenever possible for low
    overhead dynamic tracepoints conditionals.  For such tracepoints,
    an expression that examines program state is evaluated when the
    tracepoint is reached, in order to determine whether to capture
    trace data.  If the condition is simple and false, processing the
    tracepoint finishes very quickly and no data is gathered.

    GDBserver interfaces with the UST (LTTng Userspace Tracer) library
    for static tracepoints support.

  - GDBserver now supports x86_64 Windows 64-bit debugging.

* GDB now sends xmlRegisters= in qSupported packet to indicate that
  it understands register description.

* The --batch flag now disables pagination and queries.

* X86 general purpose registers

  GDB now supports reading/writing byte, word and double-word x86
  general purpose registers directly.  This means you can use, say,
  $ah or $ax to refer, respectively, to the byte register AH and
  16-bit word register AX that are actually portions of the 32-bit
  register EAX or 64-bit register RAX.

* The `commands' command now accepts a range of breakpoints to modify.
  A plain `commands' following a command that creates multiple
  breakpoints affects all the breakpoints set by that command.  This
  applies to breakpoints set by `rbreak', and also applies when a
  single `break' command creates multiple breakpoints (e.g.,
  breakpoints on overloaded c++ functions).

* The `rbreak' command now accepts a filename specification as part of
  its argument, limiting the functions selected by the regex to those
  in the specified file.

* Support for remote debugging Windows and SymbianOS shared libraries
  from Unix hosts has been improved.  Non Windows GDB builds now can
  understand target reported file names that follow MS-DOS based file
  system semantics, such as file names that include drive letters and
  use the backslash character as directory separator.  This makes it
  possible to transparently use the "set sysroot" and "set
  solib-search-path" on Unix hosts to point as host copies of the
  target's shared libraries.  See the new command "set
  target-file-system-kind" described below, and the "Commands to
  specify files" section in the user manual for more information.

* New commands

eval template, expressions...
  Convert the values of one or more expressions under the control
  of the string template to a command line, and call it.

set target-file-system-kind unix|dos-based|auto
show target-file-system-kind
  Set or show the assumed file system kind for target reported file
  names.

save breakpoints <filename>
  Save all current breakpoint definitions to a file suitable for use
  in a later debugging session.  To read the saved breakpoint
  definitions, use the `source' command.

`save tracepoints' is a new alias for `save-tracepoints'.  The latter
is now deprecated.

info static-tracepoint-markers
  Display information about static tracepoint markers in the target.

strace FN | FILE:LINE | *ADDR | -m MARKER_ID
  Define a static tracepoint by probing a marker at the given
  function, line, address, or marker ID.

set observer on|off
show observer
  Enable and disable observer mode.

set may-write-registers on|off
set may-write-memory on|off
set may-insert-breakpoints on|off
set may-insert-tracepoints on|off
set may-insert-fast-tracepoints on|off
set may-interrupt on|off
  Set individual permissions for GDB effects on the target.  Note that
  some of these settings can have undesirable or surprising
  consequences, particularly when changed in the middle of a session.
  For instance, disabling the writing of memory can prevent
  breakpoints from being inserted, cause single-stepping to fail, or
  even crash your program, if you disable after breakpoints have been
  inserted.  However, GDB should not crash.

set record memory-query on|off
show record memory-query
  Control whether to stop the inferior if memory changes caused
  by an instruction cannot be recorded.

* Changed commands

disassemble
  The disassemble command now supports "start,+length" form of two arguments.

* Python scripting

** GDB now provides a new directory location, called the python directory,
   where Python scripts written for GDB can be installed.  The location
   of that directory is <data-directory>/python, where <data-directory>
   is the GDB data directory.  For more details, see section `Scripting
   GDB using Python' in the manual.

** The GDB Python API now has access to breakpoints, symbols, symbol
   tables, program spaces, inferiors, threads and frame's code blocks.
   Additionally, GDB Parameters can now be created from the API, and
   manipulated via set/show in the CLI.

** New functions gdb.target_charset, gdb.target_wide_charset,
   gdb.progspaces, gdb.current_progspace, and gdb.string_to_argv.

** New exception gdb.GdbError.

** Pretty-printers are now also looked up in the current program space.

** Pretty-printers can now be individually enabled and disabled.

** GDB now looks for names of Python scripts to auto-load in a
   special section named `.debug_gdb_scripts', in addition to looking
   for a OBJFILE-gdb.py script when OBJFILE is read by the debugger.

* Tracepoint actions were unified with breakpoint commands. In particular,
there are no longer differences in "info break" output for breakpoints and
tracepoints and the "commands" command can be used for both tracepoints and
regular breakpoints.

* New targets

ARM Symbian arm*-*-symbianelf*

* D language support.
  GDB now supports debugging programs written in the D programming
  language.

* GDB now supports the extended ptrace interface for PowerPC which is
  available since Linux kernel version 2.6.34.  This automatically enables
  any hardware breakpoints and additional hardware watchpoints available in
  the processor.  The old ptrace interface exposes just one hardware
  watchpoint and no hardware breakpoints.

* GDB is now able to use the Data Value Compare (DVC) register available on
  embedded PowerPC processors to implement in hardware simple watchpoint
  conditions of the form:

  watch ADDRESS|VARIABLE if ADDRESS|VARIABLE == CONSTANT EXPRESSION

  This works in native GDB running on Linux kernels with the extended ptrace
  interface mentioned above.

23 files changed:
contrib/gdb-7/README.DELETED
contrib/gdb-7/README.DRAGONFLY
contrib/gdb-7/gdb/defs.h
contrib/gdb-7/gdb/inferior.c
contrib/gdb-7/gdb/infrun.c
contrib/gdb-7/gdb/main.c
gnu/usr.bin/gdb/Makefile.inc
gnu/usr.bin/gdb/gdb/ada-lex.c [new file with mode: 0644]
gnu/usr.bin/gdb/gdb/doc/Makefile
gnu/usr.bin/gdb/kgdb/kgdb.c
gnu/usr.bin/gdb/kgdb/kgdb.h
gnu/usr.bin/gdb/kgdb/kld.c
gnu/usr.bin/gdb/kgdb/kthr.c
gnu/usr.bin/gdb/kgdb/trgt.c
gnu/usr.bin/gdb/libbfd/Makefile
gnu/usr.bin/gdb/libbfd/bfdver.h [new file with mode: 0644]
gnu/usr.bin/gdb/libdecnumber/Makefile
gnu/usr.bin/gdb/libdecnumber/config.h
gnu/usr.bin/gdb/libdecnumber/gstdint.h [new file with mode: 0644]
gnu/usr.bin/gdb/libgdb/Makefile
gnu/usr.bin/gdb/libgdb/config.h
gnu/usr.bin/gdb/libgdb/gstdint.h [new file with mode: 0644]
gnu/usr.bin/gdb/libiberty/Makefile

index 49424d5..0e86ba7 100644 (file)
@@ -1,6 +1,7 @@
 ChangeLog
 MAINTAINERS
 Makefile.def
+Makefile.in
 Makefile.tpl
 README-maintainer-mode
 bfd/ChangeLog
@@ -11,12 +12,14 @@ bfd/ChangeLog-2005
 bfd/ChangeLog-2006
 bfd/ChangeLog-2007
 bfd/ChangeLog-2008
+bfd/ChangeLog-2009
 bfd/ChangeLog-9193
 bfd/ChangeLog-9495
 bfd/ChangeLog-9697
 bfd/ChangeLog-9899
 bfd/MAINTAINERS
 bfd/Makefile.am
+bfd/Makefile.in
 bfd/PORTING
 bfd/TODO
 bfd/acinclude.m4
@@ -54,7 +57,6 @@ bfd/coff-i960.c
 bfd/coff-ia64.c
 bfd/coff-m68k.c
 bfd/coff-m88k.c
-bfd/coff-maxq.c
 bfd/coff-mcore.c
 bfd/coff-mips.c
 bfd/coff-or32.c
@@ -117,7 +119,6 @@ bfd/cpu-m68hc11.c
 bfd/cpu-m68hc12.c
 bfd/cpu-m68k.c
 bfd/cpu-m88k.c
-bfd/cpu-maxq.c
 bfd/cpu-mcore.c
 bfd/cpu-mep.c
 bfd/cpu-microblaze.c
@@ -134,6 +135,7 @@ bfd/cpu-pj.c
 bfd/cpu-plugin.c
 bfd/cpu-powerpc.c
 bfd/cpu-rs6000.c
+bfd/cpu-rx.c
 bfd/cpu-s390.c
 bfd/cpu-score.c
 bfd/cpu-sh.c
@@ -142,6 +144,7 @@ bfd/cpu-spu.c
 bfd/cpu-tic30.c
 bfd/cpu-tic4x.c
 bfd/cpu-tic54x.c
+bfd/cpu-tic6x.c
 bfd/cpu-tic80.c
 bfd/cpu-v850.c
 bfd/cpu-vax.c
@@ -218,6 +221,9 @@ bfd/elf32-sh64.h
 bfd/elf32-sparc.c
 bfd/elf32-spu.c
 bfd/elf32-spu.h
+bfd/elf32-rx.c
+bfd/elf32-tic6x.c
+bfd/elf32-tic6x.h
 bfd/elf32-v850.c
 bfd/elf32-vax.c
 bfd/elf32-xc16x.c
@@ -278,6 +284,7 @@ bfd/m88kmach3.c
 bfd/m88kopenbsd.c
 bfd/mach-o-i386.c
 bfd/mach-o-target.c
+bfd/mach-o-x86-64.c
 bfd/mach-o.c
 bfd/mach-o.h
 bfd/makefile.vms
@@ -347,11 +354,9 @@ bfd/vax1knetbsd.c
 bfd/vaxbsd.c
 bfd/vaxnetbsd.c
 bfd/versados.c
-bfd/vms-gsd.c
-bfd/vms-hdr.c
+bfd/vms-alpha.c
+bfd/vms-lib.c
 bfd/vms-misc.c
-bfd/vms-tir.c
-bfd/vms.c
 bfd/vms.h
 bfd/warning.m4
 bfd/xcoff-target.h
@@ -367,6 +372,7 @@ config.guess
 config.rpath
 config.sub
 configure
+configure.ac
 depcomp
 djunpack.bat
 etc/
@@ -391,8 +397,10 @@ gdb/ChangeLog-2005
 gdb/ChangeLog-2006
 gdb/ChangeLog-2007
 gdb/ChangeLog-2008
+gdb/ChangeLog-2009
 gdb/ChangeLog-3.x
 gdb/MAINTAINERS
+gdb/Makefile.in
 gdb/NEWS
 gdb/acinclude.m4
 gdb/aclocal.m4
@@ -430,6 +438,7 @@ gdb/amd64obsd-tdep.c
 gdb/arm-linux-nat.c
 gdb/arm-linux-tdep.c
 gdb/arm-linux-tdep.h
+gdb/arm-symbian-tdep.c
 gdb/arm-tdep.c
 gdb/arm-tdep.h
 gdb/arm-wince-tdep.c
@@ -458,8 +467,6 @@ gdb/config/i386/nbsdaout.mh
 gdb/config/i386/nbsdelf.mh
 gdb/config/i386/nm-fbsd.h
 gdb/config/i386/nm-i386gnu.h
-gdb/config/i386/nm-i386sol2.h
-gdb/config/i386/nm-linux.h
 gdb/config/i386/nto.mh
 gdb/config/i386/obsd.mh
 gdb/config/i386/obsd64.mh
@@ -495,8 +502,6 @@ gdb/dicos-tdep.c
 gdb/dicos-tdep.h
 gdb/dink32-rom.c
 gdb/doc/ChangeLog
-gdb/doc/LRS
-gdb/doc/a4rc.sed
 gdb/doc/annotate.info
 gdb/doc/configure
 gdb/doc/configure.ac
@@ -506,9 +511,13 @@ gdb/doc/gdb.info-2
 gdb/doc/gdb.info-3
 gdb/doc/gdb.info-4
 gdb/doc/gdb.info-5
+gdb/doc/gdb.info-6
 gdb/doc/gdbint.info
 gdb/doc/gdbint.info-1
 gdb/doc/gdbint.info-2
+gdb/doc/LRS
+gdb/doc/Makefile.in
+gdb/doc/a4rc.sed
 gdb/doc/lpsrc.sed
 gdb/doc/psrc.sed
 gdb/doc/refcard.tex
@@ -534,6 +543,7 @@ gdb/features/arm-with-vfpv2.xml
 gdb/features/arm-with-vfpv3.c
 gdb/features/arm-with-vfpv3.xml
 gdb/features/gdbserver-regs.xsl
+gdb/features/m68k-core.xml
 gdb/features/mips-cp0.xml
 gdb/features/mips-cpu.xml
 gdb/features/mips-fpu.xml
@@ -546,6 +556,17 @@ gdb/features/mips64-linux.c
 gdb/features/mips64-linux.xml
 gdb/features/number-regs.xsl
 gdb/features/rs6000/
+gdb/features/s390-acr.xml
+gdb/features/s390-core32.xml
+gdb/features/s390-core64.xml
+gdb/features/s390-fpr.xml
+gdb/features/s390-linux32.c
+gdb/features/s390-linux32.xml
+gdb/features/s390-linux64.c
+gdb/features/s390-linux64.xml
+gdb/features/s390x-core64.xml
+gdb/features/s390x-linux64.c
+gdb/features/s390x-linux64.xml
 gdb/features/sort-regs.xsl
 gdb/features/xscale-iwmmxt.xml
 gdb/frv-linux-tdep.c
@@ -595,6 +616,7 @@ gdb/i386-sol2-nat.c
 gdb/i386-sol2-tdep.c
 gdb/i386-stub.c
 gdb/i386-windows-nat.c
+gdb/i386fbsd-nat.c
 gdb/i386gnu-nat.c
 gdb/i386gnu-tdep.c
 gdb/i386nbsd-nat.c
@@ -645,6 +667,10 @@ gdb/m88kbsd-nat.c
 gdb/machoread.c
 gdb/mep-tdep.c
 gdb/mi/ChangeLog-1999-2003
+gdb/microblaze-linux-tdep.c
+gdb/microblaze-rom.c
+gdb/microblaze-tdep.c
+gdb/microblaze-tdep.h
 gdb/mingw-hdep.c
 gdb/mips-irix-tdep.c
 gdb/mips-linux-nat.c
@@ -702,6 +728,23 @@ gdb/proc-why.c
 gdb/process_reply.defs
 gdb/procfs.c
 gdb/procfs.h
+gdb/python/py-block.c
+gdb/python/py-breakpoint.c
+gdb/python/py-cmd.c
+gdb/python/py-frame.c
+gdb/python/py-function.c
+gdb/python/py-inferior.c
+gdb/python/py-infthread.c
+gdb/python/py-lazy-string.c
+gdb/python/py-objfile.c
+gdb/python/py-param.c
+gdb/python/py-progspace.c
+gdb/python/py-symbol.c
+gdb/python/py-symtab.c
+gdb/python/py-type.c
+gdb/python/py-utils.c
+gdb/python/python-config.py
+gdb/python/python-internal.h
 gdb/regformats/arm-with-iwmmxt.dat
 gdb/regformats/arm-with-neon.dat
 gdb/regformats/arm-with-vfpv2.dat
@@ -709,20 +752,20 @@ gdb/regformats/arm-with-vfpv3.dat
 gdb/regformats/mips-linux.dat
 gdb/regformats/mips64-linux.dat
 gdb/regformats/reg-arm.dat
+gdb/regformats/reg-cf.dat
 gdb/regformats/reg-cris.dat
 gdb/regformats/reg-crisv32.dat
-gdb/regformats/reg-i386-linux.dat
 gdb/regformats/reg-ia64.dat
 gdb/regformats/reg-m32r.dat
 gdb/regformats/reg-m68k.dat
-gdb/regformats/reg-s390.dat
-gdb/regformats/reg-s390x.dat
 gdb/regformats/reg-sh.dat
 gdb/regformats/reg-sparc64.dat
 gdb/regformats/reg-spu.dat
-gdb/regformats/reg-x86-64-linux.dat
 gdb/regformats/reg-xtensa.dat
 gdb/regformats/rs6000/
+gdb/regformats/s390-linux32.dat
+gdb/regformats/s390-linux64.dat
+gdb/regformats/s390x-linux64.dat
 gdb/remote-m32r-sdi.c
 gdb/remote-mips.c
 gdb/remote-sim.c
@@ -731,6 +774,7 @@ gdb/rs6000-aix-tdep.c
 gdb/rs6000-nat.c
 gdb/rs6000-tdep.c
 gdb/rs6000-tdep.h
+gdb/rx-tdep.c
 gdb/s390-nat.c
 gdb/s390-tdep.c
 gdb/s390-tdep.h
@@ -745,7 +789,6 @@ gdb/sh-tdep.h
 gdb/sh64-tdep.c
 gdb/shnbsd-nat.c
 gdb/shnbsd-tdep.c
-gdb/shnbsd-tdep.h
 gdb/sol-thread.c
 gdb/sol2-tdep.c
 gdb/sol2-tdep.h
@@ -762,8 +805,6 @@ gdb/solib-som.h
 gdb/solib-spu.c
 gdb/solib-spu.h
 gdb/solib-sunos.c
-gdb/solib-target.c
-gdb/solib-target.h
 gdb/somread.c
 gdb/sparc-linux-nat.c
 gdb/sparc-linux-tdep.c
@@ -799,6 +840,8 @@ gdb/syscalls/amd64-linux.xml
 gdb/syscalls/i386-linux.xml
 gdb/syscalls/ppc-linux.xml
 gdb/syscalls/ppc64-linux.xml
+gdb/syscalls/sparc-linux.xml
+gdb/syscalls/sparc64-linux.xml
 gdb/testsuite/
 gdb/tui/ChangeLog-1998-2003
 gdb/v850-tdep.c
@@ -839,6 +882,7 @@ include/aout/reloc.h
 include/aout/sun4.h
 include/binary-io.h
 include/bout.h
+include/cgen/ChangeLog
 include/coff/ChangeLog
 include/coff/ChangeLog-9103
 include/coff/alpha.h
@@ -855,7 +899,6 @@ include/coff/i960.h
 include/coff/ia64.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
@@ -921,11 +964,14 @@ include/elf/or32.h
 include/elf/pj.h
 include/elf/ppc.h
 include/elf/ppc64.h
+include/elf/rx.h
 include/elf/s390.h
 include/elf/score.h
 include/elf/sh.h
 include/elf/sparc.h
 include/elf/spu.h
+include/elf/tic6x-attrs.h
+include/elf/tic6x.h
 include/elf/v850.h
 include/elf/vax.h
 include/elf/xc16x.h
@@ -944,6 +990,7 @@ include/gdb/sim-h8300.h
 include/gdb/sim-lm32.h
 include/gdb/sim-m32c.h
 include/gdb/sim-ppc.h
+include/gdb/sim-rx.h
 include/gdb/sim-sh.h
 include/gdbm.h
 include/hp-symtab.h
@@ -958,7 +1005,6 @@ 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/cr16.h
@@ -976,7 +1022,6 @@ 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
@@ -992,6 +1037,7 @@ include/opcode/pn.h
 include/opcode/ppc.h
 include/opcode/pyr.h
 include/opcode/s390.h
+include/opcode/rx.h
 include/opcode/score-datadep.h
 include/opcode/score-inst.h
 include/opcode/sparc.h
@@ -1001,6 +1047,10 @@ include/opcode/tahoe.h
 include/opcode/tic30.h
 include/opcode/tic4x.h
 include/opcode/tic54x.h
+include/opcode/tic6x-control-registers.h
+include/opcode/tic6x-insn-formats.h
+include/opcode/tic6x-opcode-table.h
+include/opcode/tic6x.h
 include/opcode/tic80.h
 include/opcode/v850.h
 include/opcode/vax.h
@@ -1009,13 +1059,16 @@ include/partition.h
 include/plugin-api.h
 include/progress.h
 include/sha1.h
+include/som/
 include/sort.h
 include/xtensa-config.h
 include/xtensa-isa-internal.h
 include/xtensa-isa.h
+include/vms/
 install-sh
 intl/
 libdecnumber/ChangeLog
+libdecnumber/Makefile.in
 libdecnumber/aclocal.m4
 libdecnumber/bid/
 libdecnumber/config.in
@@ -1041,6 +1094,7 @@ libdecnumber/decSingle.c
 libdecnumber/decSingle.h
 libdecnumber/decSingleSymbols.h
 libiberty/ChangeLog
+libiberty/Makefile.in
 libiberty/_doprnt.c
 libiberty/aclocal.m4
 libiberty/alloca.c
@@ -1157,10 +1211,12 @@ opcodes/ChangeLog-2005
 opcodes/ChangeLog-2006
 opcodes/ChangeLog-2007
 opcodes/ChangeLog-2008
+opcodes/ChangeLog-2009
 opcodes/ChangeLog-9297
 opcodes/ChangeLog-9899
 opcodes/MAINTAINERS
 opcodes/Makefile.am
+opcodes/Makefile.in
 opcodes/aclocal.m4
 opcodes/alpha-dis.c
 opcodes/alpha-opc.c
@@ -1179,8 +1235,6 @@ opcodes/cgen-dis.c
 opcodes/cgen-dis.in
 opcodes/cgen-ibld.in
 opcodes/cgen-opc.c
-opcodes/cgen-ops.h
-opcodes/cgen-types.h
 opcodes/cgen.sh
 opcodes/config.in
 opcodes/configure
@@ -1288,7 +1342,6 @@ opcodes/m68k-dis.c
 opcodes/m68k-opc.c
 opcodes/m88k-dis.c
 opcodes/makefile.vms
-opcodes/maxq-dis.c
 opcodes/mcore-dis.c
 opcodes/mcore-opc.h
 opcodes/mep-asm.c
@@ -1299,6 +1352,7 @@ opcodes/mep-ibld.c
 opcodes/mep-opc.c
 opcodes/mep-opc.h
 opcodes/microblaze-dis.c
+opcodes/microblaze-dis.h
 opcodes/microblaze-opc.h
 opcodes/microblaze-opcm.h
 opcodes/mips-dis.c
@@ -1317,6 +1371,7 @@ opcodes/mt-ibld.c
 opcodes/mt-opc.c
 opcodes/mt-opc.h
 opcodes/ns32k-dis.c
+opcodes/opc2c.c
 opcodes/openrisc-asm.c
 opcodes/openrisc-desc.c
 opcodes/openrisc-desc.h
@@ -1333,6 +1388,9 @@ opcodes/pj-opc.c
 opcodes/po/
 opcodes/ppc-dis.c
 opcodes/ppc-opc.c
+opcodes/rx-decode.c
+opcodes/rx-decode.opc
+opcodes/rx-dis.c
 opcodes/s390-dis.c
 opcodes/s390-mkopc.c
 opcodes/s390-opc.c
@@ -1354,6 +1412,7 @@ opcodes/tic30-dis.c
 opcodes/tic4x-dis.c
 opcodes/tic54x-dis.c
 opcodes/tic54x-opc.c
+opcodes/tic6x-dis.c
 opcodes/tic80-dis.c
 opcodes/tic80-opc.c
 opcodes/v850-dis.c
@@ -1386,6 +1445,7 @@ readline/COPYING
 readline/ChangeLog.gdb
 readline/INSTALL
 readline/MANIFEST
+readline/Makefile.in
 readline/NEWS
 readline/README
 readline/USAGE
@@ -1402,6 +1462,7 @@ readline/configure.in
 readline/cross-build/
 readline/display.c
 readline/doc/ChangeLog.gdb
+readline/doc/Makefile.in
 readline/doc/fdl.texi
 readline/doc/history.3
 readline/doc/history.texi
index 9e13314..e76c9ee 100644 (file)
@@ -1,5 +1,37 @@
-Original Source can be downloaded from:
-ftp://ftp.gnu.org/gnu/gdb/gdb-7.0.tar.bz2
-MD5 (gdb-7.0.tar.bz2) = 3386a7b69c010785c920ffc1e9cb890a
+GNU GDB 7.2
+===========
+
+Original source can be downloaded from:
+http://ftp.gnu.org/gnu/gdb
+
+file = gdb-7.2.tar.bz2
+date = 3 Sep 2010
+size = 18530613
+sha1 = cae138dee0c11778c471a1d5e4b09e0ae08f9e9d
 
 A list of files and directories removed is in README.DELETED
+
+The following files were added:
+       gdb/amd64dfly-nat.c
+       gdb/amd64dfly-tdep.c
+       gdb/i386dfly-nat.c
+       gdb/i386dfly-tdep.c
+
+Local modifications applied to following files:
+       bfd/config.bfd     (remove for gdb 7.3)
+       gdb/amd64-tdep.h
+       gdb/charset.c
+       gdb/configure.host
+       gdb/configure.tgt
+       gdb/defs.h
+       gdb/i386-tdep.h
+       gdb/i386bsd-nat.c
+       gdb/i386fbsd-tdep.c
+       gdb/inferiors.c
+       gdb/infrun.c
+       gdb/main.c
+       gdb/osabi.c
+       gdb/tui-io.c
+       include/elf/common.h
+       include/libiberty.h
\ No newline at end of file
index 48582ab..51fc390 100644 (file)
@@ -1233,4 +1233,8 @@ void dummy_obstack_deallocate (void *object, void *data);
 extern void initialize_progspace (void);
 extern void initialize_inferiors (void);
 
+/* For DragonFly kgdb */
+
+extern int kernel_debugger;
+
 #endif /* #ifndef DEFS_H */
index 28c5867..0b80370 100644 (file)
@@ -137,7 +137,7 @@ add_inferior_silent (int pid)
 
   observer_notify_inferior_added (inf);
 
-  if (pid != 0)
+  if (kernel_debugger || (pid != 0))
     inferior_appeared (inf, pid);
 
   return inf;
@@ -334,7 +334,7 @@ discard_all_inferiors (void)
 
   for (inf = inferior_list; inf; inf = inf->next)
     {
-      if (inf->pid != 0)
+      if (kernel_debugger || (inf->pid != 0))
        exit_inferior_silent (inf->pid);
     }
 }
@@ -359,7 +359,7 @@ find_inferior_pid (int pid)
   /* Looking for inferior pid == 0 is always wrong, and indicative of
      a bug somewhere else.  There may be more than one with pid == 0,
      for instance.  */
-  gdb_assert (pid != 0);
+  gdb_assert (kernel_debugger || (pid != 0));
 
   for (inf = inferior_list; inf; inf = inf->next)
     if (inf->pid == pid)
@@ -452,7 +452,7 @@ have_inferiors (void)
   struct inferior *inf;
 
   for (inf = inferior_list; inf; inf = inf->next)
-    if (inf->pid != 0)
+    if (kernel_debugger || (inf->pid != 0))
       return 1;
 
   return 0;
@@ -488,7 +488,7 @@ prune_inferiors (void)
     {
       if (ss == current
          || !ss->removable
-         || ss->pid != 0)
+         || (kernel_debugger || (ss->pid != 0)))
        {
          ss_link = &ss->next;
          ss = *ss_link;
@@ -568,11 +568,11 @@ print_inferior (struct ui_out *uiout, int requested_inferior)
 
       ui_out_field_int (uiout, "number", inf->num);
 
-      if (inf->pid)
+      if (kernel_debugger || (inf->pid != 0))
        ui_out_field_string (uiout, "target-id",
                             target_pid_to_str (pid_to_ptid (inf->pid)));
       else
-       ui_out_field_string (uiout, "target-id", "<null>");
+        ui_out_field_string (uiout, "target-id", "<null>");
 
       if (inf->pspace->ebfd)
        ui_out_field_string (uiout, "exec",
@@ -1028,9 +1028,16 @@ initialize_inferiors (void)
      can only allocate an inferior when all those modules have done
      that.  Do this after initialize_progspace, due to the
      current_program_space reference.  */
-  current_inferior_ = add_inferior (0);
-  current_inferior_->pspace = current_program_space;
-  current_inferior_->aspace = current_program_space->aspace;
+     
+  /* However, when invoked by DragonFly kgdb which always has many inferiors,
+     the default inferior will not be defined.  The swapper process always has
+     pid 0, which conflicts with the default. */
+
+  if (!kernel_debugger) {
+    current_inferior_ = add_inferior (0);
+    current_inferior_->pspace = current_program_space;
+    current_inferior_->aspace = current_program_space->aspace;
+  }
 
   add_info ("inferiors", info_inferiors_command,
            _("IDs of currently known inferiors."));
index 54b1d9f..77a9502 100644 (file)
@@ -1049,7 +1049,7 @@ remove_displaced_stepping_state (int pid)
 {
   struct displaced_step_inferior_state *it, **prev_next_p;
 
-  gdb_assert (pid != 0);
+  gdb_assert (kernel_debugger || (pid != 0));
 
   it = displaced_step_inferior_states;
   prev_next_p = &displaced_step_inferior_states;
index bfd1213..48cf63a 100644 (file)
@@ -91,6 +91,9 @@ extern int write_files;
 /* GDB as it has been invoked from the command line (i.e. argv[0]).  */
 static char *gdb_program_name;
 
+/* DragonFly kgdb support */
+int kernel_debugger;
+
 static void print_gdb_help (struct ui_file *);
 
 /* These two are used to set the external editor commands when gdb is farming
@@ -379,6 +382,7 @@ captured_main (void *data)
       OPT_ANNOTATE,
       OPT_STATISTICS,
       OPT_TUI,
+      OPT_KGDB,
       OPT_NOWINDOWS,
       OPT_WINDOWS
     };
@@ -404,6 +408,7 @@ captured_main (void *data)
       {"fullname", no_argument, 0, 'f'},
       {"f", no_argument, 0, 'f'},
 
+      {"kernel", no_argument, 0, OPT_KGDB},
       {"annotate", required_argument, 0, OPT_ANNOTATE},
       {"help", no_argument, &print_help, 1},
       {"se", required_argument, 0, OPT_SE},
@@ -492,6 +497,9 @@ captured_main (void *data)
            exit (1);
 #endif
            break;
+         case OPT_KGDB:
+           kernel_debugger = 1;
+           break;
          case OPT_WINDOWS:
            /* FIXME: cagney/2003-03-01: Not sure if this option is
                actually useful, and if it is, what it should do.  */
@@ -915,6 +923,7 @@ Can't attach to process and specify a core file at the same time."));
 int
 gdb_main (struct captured_main_args *args)
 {
+  kernel_debugger = 0;
   use_windows = args->use_windows;
   catch_errors (captured_main, args, "", RETURN_MASK_ALL);
   /* The only way to end up here is by an error (normal exit is
index dc62e8c..5b8c449 100644 (file)
@@ -1,4 +1,4 @@
-CSTD?=         gnu89
+#CSTD?=                gnu89
 
 BASEDIR=       ${.CURDIR}/${RELATIVE}../../../../contrib/gdb-7
 
diff --git a/gnu/usr.bin/gdb/gdb/ada-lex.c b/gnu/usr.bin/gdb/gdb/ada-lex.c
new file mode 100644 (file)
index 0000000..dc76ff2
--- /dev/null
@@ -0,0 +1,2500 @@
+#line 2 "ada-lex.c"
+/* A lexical scanner generated by flex */
+
+/* Scanner skeleton version:
+ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+ */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+#include <stdio.h>
+#include <unistd.h>
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <stdlib.h>
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_PROTOS
+#define YY_USE_CONST
+
+#endif /* __STDC__ */
+#endif /* ! __cplusplus */
+
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include <io.h>
+#include <stdlib.h>
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#define YY_BUF_SIZE 16384
+
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+extern int yyleng;
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator).  This
+ * avoids problems with code like:
+ *
+ *     if ( condition_holds )
+ *             yyless( 5 );
+ *     else
+ *             do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up yytext. */ \
+               *yy_cp = yy_hold_char; \
+               YY_RESTORE_YY_MORE_OFFSET \
+               yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+               YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+               } \
+       while ( 0 )
+
+#define unput(c) yyunput( c, yytext_ptr )
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+typedef unsigned int yy_size_t;
+
+
+struct yy_buffer_state
+       {
+       FILE *yy_input_file;
+
+       char *yy_ch_buf;                /* input buffer */
+       char *yy_buf_pos;               /* current position in input buffer */
+
+       /* Size of input buffer in bytes, not including room for EOB
+        * characters.
+        */
+       yy_size_t yy_buf_size;
+
+       /* Number of characters read into yy_ch_buf, not including EOB
+        * characters.
+        */
+       int yy_n_chars;
+
+       /* Whether we "own" the buffer - i.e., we know we created it,
+        * and can xrealloc() it to grow it, and should xfree() it to
+        * delete it.
+        */
+       int yy_is_our_buffer;
+
+       /* Whether this is an "interactive" input source; if so, and
+        * if we're using stdio for input, then we want to use getc()
+        * instead of fread(), to make sure we stop fetching input after
+        * each newline.
+        */
+       int yy_is_interactive;
+
+       /* Whether we're considered to be at the beginning of a line.
+        * If so, '^' rules will be active on the next match, otherwise
+        * not.
+        */
+       int yy_at_bol;
+
+       /* Whether to try to fill the input buffer when we reach the
+        * end of it.
+        */
+       int yy_fill_buffer;
+
+       int yy_buffer_status;
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+       /* When an EOF's been seen but there's still some text to process
+        * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+        * shouldn't try reading from the input source any more.  We might
+        * still have a bunch of tokens to match, though, because of
+        * possible backing-up.
+        *
+        * When we actually see the EOF, we change the status to "new"
+        * (via yyrestart()), so that the user can continue scanning by
+        * just pointing yyin at a new input file.
+        */
+#define YY_BUFFER_EOF_PENDING 2
+       };
+
+static YY_BUFFER_STATE yy_current_buffer = 0;
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ */
+#define YY_CURRENT_BUFFER yy_current_buffer
+
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+
+static int yy_n_chars;         /* number of characters read into yy_ch_buf */
+
+
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1;                /* whether we need to initialize */
+static int yy_start = 0;       /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart YY_PROTO(( FILE *input_file ));
+
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yyxrealloc YY_PROTO(( void *, yy_size_t ));
+static void yy_flex_free YY_PROTO(( void * ));
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+       { \
+       if ( ! yy_current_buffer ) \
+               yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+       yy_current_buffer->yy_is_interactive = is_interactive; \
+       }
+
+#define yy_set_bol(at_bol) \
+       { \
+       if ( ! yy_current_buffer ) \
+               yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+       yy_current_buffer->yy_at_bol = at_bol; \
+       }
+
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+
+typedef unsigned char YY_CHAR;
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+typedef int yy_state_type;
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+       yytext_ptr = yy_bp; \
+       yyleng = (int) (yy_cp - yy_bp); \
+       yy_hold_char = *yy_cp; \
+       *yy_cp = '\0'; \
+       yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 54
+#define YY_END_OF_BUFFER 55
+static yyconst short int yy_accept[196] =
+    {   0,
+        0,    0,    0,    0,   55,   53,    1,    1,   15,   52,
+       42,   53,   44,   45,   42,   43,   42,   42,   42,    4,
+        4,   42,   42,   42,   42,   51,   48,   48,   48,   48,
+       48,   48,   48,   48,   48,   48,   48,   41,    0,   14,
+        0,   52,    0,    0,    0,    0,    0,    0,    0,   36,
+        2,    0,   35,    0,   47,   47,   38,    0,    0,    4,
+        0,    0,   50,   37,   39,    0,   34,   40,    0,    0,
+       48,    0,   48,   48,   48,   48,   48,   16,   21,   48,
+       48,   48,   48,   26,   48,   48,   48,   48,   48,   48,
+        0,   14,    0,   12,   12,    0,   33,    2,    0,   47,
+
+       47,    0,    9,    0,    3,    7,    0,   48,    0,    0,
+        0,   48,   18,   19,   48,   48,   22,   23,   24,   48,
+       48,   28,   48,   48,   48,   48,   30,    0,    0,    0,
+        0,    0,    0,   47,   46,    6,    0,    0,    9,    0,
+        3,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   48,   20,   48,   25,   48,   17,   29,
+       48,   31,    0,   49,    0,    0,    0,    0,   48,    0,
+        0,    0,    0,    0,    0,    0,   32,   48,   48,    0,
+        0,    5,   11,    0,    8,   27,    0,    5,    0,    8,
+       13,    0,   10,   10,    0
+
+    } ;
+
+static yyconst int yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    4,    5,    6,    7,    8,    5,    9,   10,   11,
+       12,   13,   14,   15,   16,   17,   18,   19,   20,   20,
+       20,   20,   20,   20,   20,   20,   20,   21,   22,   23,
+       24,   25,    5,   26,   30,   31,   32,   33,   34,   35,
+       36,   37,   38,   36,   39,   40,   41,   42,   43,   36,
+       36,   44,   45,   46,   47,   36,   48,   49,   36,   36,
+       27,    5,   28,    5,   29,    5,   30,   31,   32,   33,
+
+       34,   35,   36,   37,   38,   36,   39,   40,   41,   42,
+       43,   36,   36,   44,   45,   46,   47,   36,   48,   49,
+       36,   36,   26,   22,   26,    5,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst int yy_meta[50] =
+    {   0,
+        1,    2,    3,    4,    5,    6,    7,    8,    5,    9,
+        5,    5,    5,    5,    5,    5,   10,    5,   11,   11,
+        5,    5,   12,   13,   14,    5,    5,    5,   15,   16,
+       16,   16,   16,   16,   16,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,   17,   17,   17
+    } ;
+
+static yyconst short int yy_base[217] =
+    {   0,
+        0,    0,  622,  615,  620,  759,  759,  759,   44,    0,
+      759,   71,  759,  759,  606,  759,  601,  119,  591,  118,
+      124,   30,  590,  588,  588,  759,   53,  152,   22,   97,
+       98,  103,  117,  119,   27,  140,  137,  194,  151,  759,
+      160,    0,  242,  601,  594,  593,  592,  120,  282,  759,
+        0,  330,  759,    0,    0,  560,  759,    0,   40,  329,
+      171,    0,  759,  759,  759,  574,  759,  759,  171,  245,
+      759,  336,  150,  219,  223,  226,  227,  162,  228,  262,
+      263,  310,  266,  265,  313,  268,  312,  330,  320,  334,
+      572,  569,  366,  377,  759,  380,  547,    0,  530,    0,
+
+      501,  169,  363,   46,  365,    0,  503,  386,  402,  417,
+        0,  417,  335,  344,  412,  387,  360,  386,  406,  413,
+      431,  407,  425,  408,  437,  438,  421,  518,    0,  472,
+      497,  475,  474,  759,    0,  456,    0,  246,  458,  284,
+      462,  451,  403,  464,  477,  478,  454,  408,  402,  392,
+      390,  364,  376,  509,  455,  483,  458,  485,  473,  489,
+      491,  492,  367,  759,  387,  516,  366,   48,  535,  326,
+      312,  270,  220,  219,  207,  164,  501,  509,  511,  144,
+      282,  527,   98,  117,  529,  519,   42,  540,  321,  543,
+      562,  403,  548,  551,  759,  580,  590,  606,  611,  627,
+
+      644,  647,  654,  487,  562,  661,  677,  689,  695,  706,
+      708,  724,  563,  565,  731,  742
+    } ;
+
+static yyconst short int yy_def[217] =
+    {   0,
+      195,    1,    1,    1,  195,  195,  195,  195,  196,  197,
+      195,  195,  195,  195,  195,  195,  195,  198,  195,  195,
+      195,  195,  199,  195,  195,  195,  200,  200,   28,   28,
+       28,   28,   28,   28,   28,   28,   28,  195,  196,  195,
+      196,  197,   38,   38,   38,   43,  195,   43,   43,  195,
+      201,  198,  195,  202,  203,  203,  195,  204,  195,  195,
+      195,  205,  195,  195,  195,  206,  195,  195,  195,  195,
+      195,  207,   28,   28,   28,   28,   28,   28,   28,   28,
+       28,   28,   28,   28,   28,   28,   28,   28,   28,   28,
+       49,  208,  195,  195,  195,   43,   49,  201,  209,  203,
+
+      203,  210,  195,  195,  195,  205,  206,  195,  207,  195,
+      211,  212,   28,   28,   28,   28,   28,   28,   28,   28,
+       28,   28,   28,   28,   28,   28,   28,  195,  213,  195,
+      195,   43,  209,  195,  203,  195,  214,  210,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  215,  212,   28,   28,   28,   28,   28,   28,
+       28,   28,  195,  195,   43,  195,  216,  195,  195,  195,
+      195,  195,  195,  195,  195,  215,   28,   28,   28,   43,
+      195,  195,  195,  216,  195,   28,   43,  195,  195,  195,
+      195,  195,  195,  195,    0,  195,  195,  195,  195,  195,
+
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195
+    } ;
+
+static yyconst short int yy_nxt[809] =
+    {   0,
+        6,    7,    8,    7,    6,    9,    6,   10,   11,   12,
+       13,   14,   15,   11,   16,   17,   18,   19,   20,   21,
+       22,   11,   23,   24,   25,   26,   11,   11,   27,   28,
+       27,   27,   27,   29,   30,   27,   27,   31,   27,   27,
+       32,   33,   34,   35,   27,   36,   27,   27,   37,   40,
+       63,  191,   73,   64,   69,   69,   70,   73,  103,  103,
+       86,   76,   71,   73,  105,  105,  185,  185,   73,   72,
+       41,   43,   44,   44,   45,   46,   46,   46,   46,   46,
+       47,   46,   46,   46,   46,   46,   46,   46,   46,   46,
+       46,   46,   46,   46,   46,   46,   46,   48,   46,   46,
+
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       52,   52,   52,  183,   58,   96,   77,   73,   73,   94,
+       58,  189,   78,   73,   59,   53,   60,   60,   73,   79,
+       59,   54,   60,   60,   73,   80,   60,   73,   56,   73,
+       81,   61,   60,   69,   69,   70,   40,   61,   73,   82,
+       73,   71,   84,   83,   85,   92,   62,   73,   72,   87,
+       73,  187,   69,   69,   69,  136,   88,   41,   73,   90,
+       73,   73,   74,   89,  104,  137,   41,   72,  169,  105,
+      105,   73,   73,   75,   43,   44,   44,   44,   43,   43,
+
+       43,   43,   43,   73,   43,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+       43,   43,   43,   91,   91,   91,   91,   91,   91,   91,
+       91,   91,   91,   91,   91,   91,   91,   91,   91,   91,
+       91,   91,   91,   43,   43,   43,   69,   69,   70,   73,
+      142,   93,  136,   73,   71,  114,   73,   73,   73,  142,
+       73,   72,  137,  113,   73,  142,  116,   73,   73,   73,
+      115,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+       43,   94,   73,   73,  117,   73,   73,  168,   73,  168,
+
+      182,  182,  142,   73,   73,  120,   73,   73,  122,   73,
+      118,   97,   97,   97,   97,   97,   97,   97,   97,   97,
+       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
+       97,   52,   52,   52,  192,   58,  192,  109,  109,  109,
+       73,  110,   73,   73,  142,   59,  195,   60,   60,  121,
+       73,   73,   54,   73,   73,  119,  123,   60,  111,   56,
+       73,   73,   61,  124,   73,   73,  126,  130,  130,  130,
+      142,   73,  183,  125,   73,   73,   73,  127,  130,  130,
+      130,  139,  139,  141,  141,   73,  131,   69,   69,   70,
+       73,  139,  180,  141,   39,   71,  140,  131,  132,  132,
+
+      169,   73,   72,  109,  109,  109,  175,  110,  169,  132,
+      132,  132,  132,  132,  132,  142,   73,   73,   69,   69,
+       70,  193,  193,  174,  111,  142,   71,   73,   73,  143,
+      142,  156,  142,   72,  144,  142,   73,   73,   73,  145,
+      142,  146,   73,   73,  173,  155,  147,   73,   73,  160,
+      172,   73,  157,   73,   73,   73,  169,  148,  149,  150,
+      151,   73,   73,  159,  158,  152,   73,   73,   73,  169,
+      161,  162,   73,  130,  130,  130,  139,  139,   73,   73,
+      141,  141,  169,  169,  170,   73,  139,  142,   73,  166,
+      141,  140,  131,  165,  165,  171,   73,  102,  134,   73,
+
+      142,  142,  102,   73,  165,  165,  165,  165,  165,  165,
+       69,   69,   70,   73,   73,   73,  177,  164,   71,   73,
+      179,   73,   73,  163,   73,   72,   73,  108,  178,  181,
+       73,   73,   73,   73,  182,  182,   69,   69,   70,   73,
+      135,   73,   73,  159,   71,  188,  188,  190,  190,   73,
+       73,   72,   73,  186,  134,  188,   93,  190,  188,  188,
+       73,  190,  190,  130,  130,  130,  194,  194,  188,  194,
+      194,  190,  106,  128,  128,  167,  194,  106,  128,  194,
+      167,   93,  131,   39,   39,   39,   39,   39,   39,   39,
+       39,   39,   39,   39,   39,   39,   39,   42,  108,  101,
+
+       42,   95,   94,   94,   42,   42,   42,   55,   55,   55,
+       93,   68,   67,   65,   57,   55,   51,   55,   50,  195,
+       55,   55,   55,   66,   38,   66,   66,   66,   73,   73,
+       73,   38,  195,  195,  195,   73,   73,   73,  195,  195,
+      195,   73,   73,   73,   98,   98,  195,   98,   98,   98,
+       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
+       98,   99,   99,   99,  100,  195,  195,  195,  100,  100,
+      100,  107,  195,  195,  107,  107,  107,  107,  112,  112,
+      112,  195,  112,  195,  195,  195,  195,  195,  112,  195,
+      195,  112,  112,  112,  129,  195,  195,  195,  195,  129,
+
+      195,  195,  195,  195,  129,  133,  195,  195,  133,  133,
+      133,  133,  138,  195,  195,  138,  138,  195,  195,  195,
+      138,  138,  153,  153,  153,  154,  154,  154,  195,  195,
+      195,  195,  154,  154,  154,  195,  195,  195,  154,  154,
+      154,  176,  195,  195,  176,  176,  176,  176,  184,  195,
+      195,  195,  184,  195,  195,  195,  184,  184,    5,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+
+      195,  195,  195,  195,  195,  195,  195,  195
+    } ;
+
+static yyconst short int yy_chk[809] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    9,
+       22,  187,   29,   22,   27,   27,   27,   35,   59,   59,
+       35,   29,   27,   29,  104,  104,  168,  168,   35,   27,
+        9,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       18,   18,   18,  184,   20,   48,   30,   30,   31,   48,
+       21,  183,   31,   32,   20,   18,   20,   20,   30,   31,
+       21,   18,   21,   21,   32,   32,   20,   33,   18,   34,
+       33,   20,   21,   28,   28,   28,   39,   21,   33,   33,
+       34,   28,   34,   33,   34,   41,   20,   37,   28,   36,
+       36,  180,   69,   69,   69,  102,   36,   39,   37,   37,
+       73,   36,   28,   36,   61,  102,   41,   69,  176,   61,
+       61,   73,   78,   28,   38,   38,   38,   38,   38,   38,
+
+       38,   38,   38,   78,   38,   38,   38,   38,   38,   38,
+       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
+       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
+       38,   38,   38,   38,   38,   38,   38,   38,   38,   38,
+       38,   38,   38,   43,   43,   43,   70,   70,   70,   74,
+      175,   43,  138,   75,   70,   75,   76,   77,   79,  174,
+       74,   70,  138,   74,   75,  173,   77,   76,   77,   79,
+       76,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+       43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
+       43,   49,   80,   81,   80,   84,   83,  140,   86,  140,
+
+      181,  181,  172,   80,   81,   83,   84,   83,   86,   86,
+       81,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   52,   52,   52,  189,   60,  189,   72,   72,   72,
+       82,   72,   87,   85,  171,   60,   52,   60,   60,   85,
+       89,   82,   52,   87,   85,   82,   87,   60,   72,   52,
+       88,   89,   60,   88,   90,  113,   89,   93,   93,   93,
+      170,   88,  167,   88,  114,   90,  113,   90,   94,   94,
+       94,  103,  103,  105,  105,  114,   93,  108,  108,  108,
+      117,  103,  165,  105,  163,  108,  103,   94,   96,   96,
+
+      153,  117,  108,  109,  109,  109,  152,  109,  143,   96,
+       96,   96,   96,   96,   96,  143,  118,  116,  112,  112,
+      112,  192,  192,  151,  109,  110,  112,  118,  116,  110,
+      110,  116,  110,  112,  110,  150,  119,  122,  124,  110,
+      110,  110,  115,  120,  149,  115,  110,  119,  122,  124,
+      148,  127,  120,  115,  120,  123,  142,  110,  110,  110,
+      110,  121,  127,  123,  121,  110,  123,  125,  126,  144,
+      125,  126,  121,  130,  130,  130,  139,  139,  125,  126,
+      141,  141,  145,  146,  147,  155,  139,  144,  157,  136,
+      141,  139,  130,  132,  132,  147,  155,  204,  133,  157,
+
+      145,  146,  204,  159,  132,  132,  132,  132,  132,  132,
+      154,  154,  154,  156,  159,  158,  156,  131,  154,  160,
+      161,  161,  162,  128,  156,  154,  158,  107,  158,  166,
+      160,  177,  161,  162,  166,  166,  169,  169,  169,  178,
+      101,  179,  177,  179,  169,  182,  182,  185,  185,  186,
+      178,  169,  179,  178,   99,  182,   97,  185,  188,  188,
+      186,  190,  190,  191,  191,  191,  193,  193,  188,  194,
+      194,  190,  205,  213,   92,  214,  193,  205,  213,  194,
+      214,   91,  191,  196,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  196,  196,  196,  197,   66,   56,
+
+      197,   47,   46,   45,  197,  197,  197,  198,  198,  198,
+       44,   25,   24,   23,   19,  198,   17,  198,   15,    5,
+      198,  198,  198,  199,    4,  199,  199,  199,  200,  200,
+      200,    3,    0,    0,    0,  200,  200,  200,    0,    0,
+        0,  200,  200,  200,  201,  201,    0,  201,  201,  201,
+      201,  201,  201,  201,  201,  201,  201,  201,  201,  201,
+      201,  202,  202,  202,  203,    0,    0,    0,  203,  203,
+      203,  206,    0,    0,  206,  206,  206,  206,  207,  207,
+      207,    0,  207,    0,    0,    0,    0,    0,  207,    0,
+        0,  207,  207,  207,  208,    0,    0,    0,    0,  208,
+
+        0,    0,    0,    0,  208,  209,    0,    0,  209,  209,
+      209,  209,  210,    0,    0,  210,  210,    0,    0,    0,
+      210,  210,  211,  211,  211,  212,  212,  212,    0,    0,
+        0,    0,  212,  212,  212,    0,    0,    0,  212,  212,
+      212,  215,    0,    0,  215,  215,  215,  215,  216,    0,
+        0,    0,  216,    0,    0,    0,  216,  216,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+
+      195,  195,  195,  195,  195,  195,  195,  195
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "ada-lex.l"
+#define INITIAL 0
+/* FLEX lexer for Ada expressions, for GDB.
+   Copyright (C) 1994, 1997, 1998, 2000, 2001, 2002, 2003, 2007, 2008, 2009,
+   2010 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 3 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, see <http://www.gnu.org/licenses/>.  */
+/*----------------------------------------------------------------------*/
+/* The converted version of this file is to be included in ada-exp.y, */
+/* the Ada parser for gdb.  The function yylex obtains characters from */
+/* the global pointer lexptr.  It returns a syntactic category for */
+/* each successive token and places a semantic value into yylval */
+/* (ada-lval), defined by the parser.   */
+#line 44 "ada-lex.l"
+
+#define NUMERAL_WIDTH 256
+#define LONGEST_SIGN ((ULONGEST) 1 << (sizeof(LONGEST) * HOST_CHAR_BIT - 1))
+
+/* Temporary staging for numeric literals.  */
+static char numbuf[NUMERAL_WIDTH];
+ static void canonicalizeNumeral (char *s1, const char *);
+static struct stoken processString (const char*, int);
+static int processInt (const char *, const char *, const char *);
+static int processReal (const char *);
+static struct stoken processId (const char *, int);
+static int processAttribute (const char *);
+static int find_dot_all (const char *);
+
+#undef YY_DECL
+#define YY_DECL static int yylex ( void )
+
+/* Flex generates a static function "input" which is not used.
+   Defining YY_NO_INPUT comments it out.  */
+#define YY_NO_INPUT
+
+#undef YY_INPUT
+#define YY_INPUT(BUF, RESULT, MAX_SIZE) \
+    if ( *lexptr == '\000' ) \
+      (RESULT) = YY_NULL; \
+    else \
+      { \
+        *(BUF) = *lexptr; \
+        (RESULT) = 1; \
+       lexptr += 1; \
+      }
+
+static int find_dot_all (const char *);
+
+#define BEFORE_QUAL_QUOTE 1
+
+#line 672 "ada-lex.c"
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap YY_PROTO(( void ));
+#else
+extern int yywrap YY_PROTO(( void ));
+#endif
+#endif
+
+#ifndef YY_NO_UNPUT
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput YY_PROTO(( void ));
+#else
+static int input YY_PROTO(( void ));
+#endif
+#endif
+
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include <stdlib.h>
+#endif
+#else
+/* Just try to get by without declaring the routines.  This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#endif
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+       if ( yy_current_buffer->yy_is_interactive ) \
+               { \
+               int c = '*', n; \
+               for ( n = 0; n < max_size && \
+                            (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+                       buf[n] = (char) c; \
+               if ( c == '\n' ) \
+                       buf[n++] = (char) c; \
+               if ( c == EOF && ferror( yyin ) ) \
+                       YY_FATAL_ERROR( "input in flex scanner failed" ); \
+               result = n; \
+               } \
+       else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+                 && ferror( yyin ) ) \
+               YY_FATAL_ERROR( "input in flex scanner failed" );
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL int yylex YY_PROTO(( void ))
+#endif
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+       YY_USER_ACTION
+
+YY_DECL
+       {
+       register yy_state_type yy_current_state;
+       register char *yy_cp = NULL, *yy_bp = NULL;
+       register int yy_act;
+
+#line 84 "ada-lex.l"
+
+
+#line 826 "ada-lex.c"
+
+       if ( yy_init )
+               {
+               yy_init = 0;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+               if ( ! yy_start )
+                       yy_start = 1;   /* first start state */
+
+               if ( ! yyin )
+                       yyin = stdin;
+
+               if ( ! yyout )
+                       yyout = stdout;
+
+               if ( ! yy_current_buffer )
+                       yy_current_buffer =
+                               yy_create_buffer( yyin, YY_BUF_SIZE );
+
+               yy_load_buffer_state();
+               }
+
+       while ( 1 )             /* loops until end-of-file is reached */
+               {
+               yy_cp = yy_c_buf_p;
+
+               /* Support of yytext. */
+               *yy_cp = yy_hold_char;
+
+               /* yy_bp points to the position in yy_ch_buf of the start of
+                * the current run.
+                */
+               yy_bp = yy_cp;
+
+               yy_current_state = yy_start;
+yy_match:
+               do
+                       {
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+                       if ( yy_accept[yy_current_state] )
+                               {
+                               yy_last_accepting_state = yy_current_state;
+                               yy_last_accepting_cpos = yy_cp;
+                               }
+                       while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+                               {
+                               yy_current_state = (int) yy_def[yy_current_state];
+                               if ( yy_current_state >= 196 )
+                                       yy_c = yy_meta[(unsigned int) yy_c];
+                               }
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+                       ++yy_cp;
+                       }
+               while ( yy_base[yy_current_state] != 759 );
+
+yy_find_action:
+               yy_act = yy_accept[yy_current_state];
+               if ( yy_act == 0 )
+                       { /* have to back up */
+                       yy_cp = yy_last_accepting_cpos;
+                       yy_current_state = yy_last_accepting_state;
+                       yy_act = yy_accept[yy_current_state];
+                       }
+
+               YY_DO_BEFORE_ACTION;
+
+
+do_action:     /* This label is used only to access EOF actions. */
+
+
+               switch ( yy_act )
+       { /* beginning of action switch */
+                       case 0: /* must back up */
+                       /* undo the effects of YY_DO_BEFORE_ACTION */
+                       *yy_cp = yy_hold_char;
+                       yy_cp = yy_last_accepting_cpos;
+                       yy_current_state = yy_last_accepting_state;
+                       goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 86 "ada-lex.l"
+{ }
+       YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 88 "ada-lex.l"
+{ yyterminate(); }
+       YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 90 "ada-lex.l"
+{
+                  canonicalizeNumeral (numbuf, yytext);
+                  return processInt (NULL, numbuf, strrchr(numbuf, 'e')+1);
+                }
+       YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 95 "ada-lex.l"
+{
+                  canonicalizeNumeral (numbuf, yytext);
+                  return processInt (NULL, numbuf, NULL);
+                }
+       YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 100 "ada-lex.l"
+{
+                  canonicalizeNumeral (numbuf, yytext);
+                  return processInt (numbuf,
+                                     strchr (numbuf, '#') + 1,
+                                     strrchr(numbuf, '#') + 1);
+                }
+       YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 107 "ada-lex.l"
+{
+                  canonicalizeNumeral (numbuf, yytext);
+                  return processInt (numbuf, strchr (numbuf, '#') + 1, NULL);
+                }
+       YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 112 "ada-lex.l"
+{
+                 canonicalizeNumeral (numbuf, yytext+2);
+                 return processInt ("16#", numbuf, NULL);
+               }
+       YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 118 "ada-lex.l"
+{
+                  canonicalizeNumeral (numbuf, yytext);
+                  return processReal (numbuf);
+               }
+       YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 123 "ada-lex.l"
+{
+                  canonicalizeNumeral (numbuf, yytext);
+                  return processReal (numbuf);
+               }
+       YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 128 "ada-lex.l"
+{
+                   error (_("Based real literals not implemented yet."));
+               }
+       YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 132 "ada-lex.l"
+{
+                   error (_("Based real literals not implemented yet."));
+               }
+       YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 136 "ada-lex.l"
+{
+                  yylval.typed_val.type = type_char ();
+                  yylval.typed_val.val = yytext[1];
+                  return CHARLIT;
+               }
+       YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 142 "ada-lex.l"
+{
+                   int v;
+                   yylval.typed_val.type = type_char ();
+                  sscanf (yytext+3, "%2x", &v);
+                  yylval.typed_val.val = v;
+                  return CHARLIT;
+               }
+       YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 150 "ada-lex.l"
+{
+                  yylval.sval = processString (yytext+1, yyleng-2);
+                  return STRING;
+               }
+       YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 155 "ada-lex.l"
+{
+                   error (_("ill-formed or non-terminated string literal"));
+               }
+       YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 160 "ada-lex.l"
+{
+                 while (*lexptr != 'i' && *lexptr != 'I')
+                   lexptr -= 1;
+                 yyrestart(NULL);
+                 return 0;
+               }
+       YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 167 "ada-lex.l"
+{
+                  /* This keyword signals the end of the expression and
+                     will be processed separately.  */
+                 while (*lexptr != 't' && *lexptr != 'T')
+                   lexptr--;
+                 yyrestart(NULL);
+                 return 0;
+               }
+       YY_BREAK
+/* ADA KEYWORDS */
+case 18:
+YY_RULE_SETUP
+#line 178 "ada-lex.l"
+{ return ABS; }
+       YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 179 "ada-lex.l"
+{ return _AND_; }
+       YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 180 "ada-lex.l"
+{ return ELSE; }
+       YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 181 "ada-lex.l"
+{ return IN; }
+       YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 182 "ada-lex.l"
+{ return MOD; }
+       YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 183 "ada-lex.l"
+{ return NEW; }
+       YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 184 "ada-lex.l"
+{ return NOT; }
+       YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 185 "ada-lex.l"
+{ return NULL_PTR; }
+       YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 186 "ada-lex.l"
+{ return OR; }
+       YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 187 "ada-lex.l"
+{ return OTHERS; }
+       YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 188 "ada-lex.l"
+{ return REM; }
+       YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 189 "ada-lex.l"
+{ return THEN; }
+       YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 190 "ada-lex.l"
+{ return XOR; }
+       YY_BREAK
+/* BOOLEAN "KEYWORDS" */
+/* True and False are not keywords in Ada, but rather enumeration constants.
+    However, the boolean type is no longer represented as an enum, so True
+    and False are no longer defined in symbol tables.  We compromise by
+    making them keywords (when bare). */
+case 31:
+YY_RULE_SETUP
+#line 199 "ada-lex.l"
+{ return TRUEKEYWORD; }
+       YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 200 "ada-lex.l"
+{ return FALSEKEYWORD; }
+       YY_BREAK
+/* ATTRIBUTES */
+case 33:
+YY_RULE_SETUP
+#line 204 "ada-lex.l"
+{ return processAttribute (yytext+1); }
+       YY_BREAK
+/* PUNCTUATION */
+case 34:
+YY_RULE_SETUP
+#line 208 "ada-lex.l"
+{ return ARROW; }
+       YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 209 "ada-lex.l"
+{ return DOTDOT; }
+       YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 210 "ada-lex.l"
+{ return STARSTAR; }
+       YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 211 "ada-lex.l"
+{ return ASSIGN; }
+       YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 212 "ada-lex.l"
+{ return NOTEQUAL; }
+       YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 213 "ada-lex.l"
+{ return LEQ; }
+       YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 214 "ada-lex.l"
+{ return GEQ; }
+       YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 216 "ada-lex.l"
+{ BEGIN INITIAL; return '\''; }
+       YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 218 "ada-lex.l"
+{ return yytext[0]; }
+       YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 220 "ada-lex.l"
+{ if (paren_depth == 0 && comma_terminates)
+                   {
+                     lexptr -= 1;
+                     yyrestart(NULL);
+                     return 0;
+                   }
+                 else
+                   return ',';
+               }
+       YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 230 "ada-lex.l"
+{ paren_depth += 1; return '('; }
+       YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 231 "ada-lex.l"
+{ if (paren_depth == 0)
+                   {
+                     lexptr -= 1;
+                     yyrestart(NULL);
+                     return 0;
+                   }
+                 else
+                   {
+                     paren_depth -= 1;
+                     return ')';
+                   }
+               }
+       YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 244 "ada-lex.l"
+{ return DOT_ALL; }
+       YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 246 "ada-lex.l"
+{
+                 yylval.sval = processId (yytext+1, yyleng-1);
+                 return DOT_ID;
+               }
+       YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 251 "ada-lex.l"
+{
+                  int all_posn = find_dot_all (yytext);
+
+                  if (all_posn == -1 && yytext[yyleng-1] == '\'')
+                   {
+                     BEGIN BEFORE_QUAL_QUOTE;
+                     yyless (yyleng-1);
+                   }
+                  else if (all_posn >= 0)
+                   yyless (all_posn);
+                  yylval.sval = processId (yytext, yyleng);
+                  return NAME;
+               }
+       YY_BREAK
+/* GDB EXPRESSION CONSTRUCTS  */
+case 49:
+YY_RULE_SETUP
+#line 268 "ada-lex.l"
+{
+                  yyless (yyleng - 2);
+                 yylval.sval = processId (yytext, yyleng);
+                 return NAME;
+               }
+       YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 274 "ada-lex.l"
+{ return COLONCOLON; }
+       YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 276 "ada-lex.l"
+{ return yytext[0]; }
+       YY_BREAK
+/* REGISTERS AND GDB CONVENIENCE VARIABLES */
+case 52:
+YY_RULE_SETUP
+#line 280 "ada-lex.l"
+{
+                 yylval.sval.ptr = yytext;
+                 yylval.sval.length = yyleng;
+                 return SPECIAL_VARIABLE;
+               }
+       YY_BREAK
+/* CATCH-ALL ERROR CASE */
+case 53:
+YY_RULE_SETUP
+#line 288 "ada-lex.l"
+{ error (_("Invalid character '%s' in expression."), yytext); }
+       YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 289 "ada-lex.l"
+YY_FATAL_ERROR( "flex scanner jammed" );
+       YY_BREAK
+#line 1286 "ada-lex.c"
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(BEFORE_QUAL_QUOTE):
+       yyterminate();
+
+       case YY_END_OF_BUFFER:
+               {
+               /* Amount of text matched not including the EOB char. */
+               int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+
+               /* Undo the effects of YY_DO_BEFORE_ACTION. */
+               *yy_cp = yy_hold_char;
+               YY_RESTORE_YY_MORE_OFFSET
+
+               if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+                       {
+                       /* We're scanning a new file or input source.  It's
+                        * possible that this happened because the user
+                        * just pointed yyin at a new source and called
+                        * yylex().  If so, then we have to assure
+                        * consistency between yy_current_buffer and our
+                        * globals.  Here is the right place to do so, because
+                        * this is the first action (other than possibly a
+                        * back-up) that will match for the new input source.
+                        */
+                       yy_n_chars = yy_current_buffer->yy_n_chars;
+                       yy_current_buffer->yy_input_file = yyin;
+                       yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+                       }
+
+               /* Note that here we test for yy_c_buf_p "<=" to the position
+                * of the first EOB in the buffer, since yy_c_buf_p will
+                * already have been incremented past the NUL character
+                * (since all states make transitions on EOB to the
+                * end-of-buffer state).  Contrast this with the test
+                * in input().
+                */
+               if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+                       { /* This was really a NUL. */
+                       yy_state_type yy_next_state;
+
+                       yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+
+                       yy_current_state = yy_get_previous_state();
+
+                       /* Okay, we're now positioned to make the NUL
+                        * transition.  We couldn't have
+                        * yy_get_previous_state() go ahead and do it
+                        * for us because it doesn't know how to deal
+                        * with the possibility of jamming (and we don't
+                        * want to build jamming into it because then it
+                        * will run more slowly).
+                        */
+
+                       yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+                       yy_bp = yytext_ptr + YY_MORE_ADJ;
+
+                       if ( yy_next_state )
+                               {
+                               /* Consume the NUL. */
+                               yy_cp = ++yy_c_buf_p;
+                               yy_current_state = yy_next_state;
+                               goto yy_match;
+                               }
+
+                       else
+                               {
+                               yy_cp = yy_c_buf_p;
+                               goto yy_find_action;
+                               }
+                       }
+
+               else switch ( yy_get_next_buffer() )
+                       {
+                       case EOB_ACT_END_OF_FILE:
+                               {
+                               yy_did_buffer_switch_on_eof = 0;
+
+                               if ( yywrap() )
+                                       {
+                                       /* Note: because we've taken care in
+                                        * yy_get_next_buffer() to have set up
+                                        * yytext, we can now set up
+                                        * yy_c_buf_p so that if some total
+                                        * hoser (like flex itself) wants to
+                                        * call the scanner after we return the
+                                        * YY_NULL, it'll still work - another
+                                        * YY_NULL will get returned.
+                                        */
+                                       yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+
+                                       yy_act = YY_STATE_EOF(YY_START);
+                                       goto do_action;
+                                       }
+
+                               else
+                                       {
+                                       if ( ! yy_did_buffer_switch_on_eof )
+                                               YY_NEW_FILE;
+                                       }
+                               break;
+                               }
+
+                       case EOB_ACT_CONTINUE_SCAN:
+                               yy_c_buf_p =
+                                       yytext_ptr + yy_amount_of_matched_text;
+
+                               yy_current_state = yy_get_previous_state();
+
+                               yy_cp = yy_c_buf_p;
+                               yy_bp = yytext_ptr + YY_MORE_ADJ;
+                               goto yy_match;
+
+                       case EOB_ACT_LAST_MATCH:
+                               yy_c_buf_p =
+                               &yy_current_buffer->yy_ch_buf[yy_n_chars];
+
+                               yy_current_state = yy_get_previous_state();
+
+                               yy_cp = yy_c_buf_p;
+                               yy_bp = yytext_ptr + YY_MORE_ADJ;
+                               goto yy_find_action;
+                       }
+               break;
+               }
+
+       default:
+               YY_FATAL_ERROR(
+                       "fatal flex scanner internal error--no action found" );
+       } /* end of action switch */
+               } /* end of scanning one token */
+       } /* end of yylex */
+
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *     EOB_ACT_LAST_MATCH -
+ *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *     EOB_ACT_END_OF_FILE - end of file
+ */
+
+static int yy_get_next_buffer()
+       {
+       register char *dest = yy_current_buffer->yy_ch_buf;
+       register char *source = yytext_ptr;
+       register int number_to_move, i;
+       int ret_val;
+
+       if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+               YY_FATAL_ERROR(
+               "fatal flex scanner internal error--end of buffer missed" );
+
+       if ( yy_current_buffer->yy_fill_buffer == 0 )
+               { /* Don't try to fill the buffer, so this is an EOF. */
+               if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+                       {
+                       /* We matched a single character, the EOB, so
+                        * treat this as a final EOF.
+                        */
+                       return EOB_ACT_END_OF_FILE;
+                       }
+
+               else
+                       {
+                       /* We matched some text prior to the EOB, first
+                        * process it.
+                        */
+                       return EOB_ACT_LAST_MATCH;
+                       }
+               }
+
+       /* Try to read more data. */
+
+       /* First move last chars to start of buffer. */
+       number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+
+       for ( i = 0; i < number_to_move; ++i )
+               *(dest++) = *(source++);
+
+       if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+               /* don't do the read, it's not guaranteed to return an EOF,
+                * just force an EOF
+                */
+               yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+
+       else
+               {
+               int num_to_read =
+                       yy_current_buffer->yy_buf_size - number_to_move - 1;
+
+               while ( num_to_read <= 0 )
+                       { /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+                       YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
+
+                       /* just a shorter name for the current buffer */
+                       YY_BUFFER_STATE b = yy_current_buffer;
+
+                       int yy_c_buf_p_offset =
+                               (int) (yy_c_buf_p - b->yy_ch_buf);
+
+                       if ( b->yy_is_our_buffer )
+                               {
+                               int new_size = b->yy_buf_size * 2;
+
+                               if ( new_size <= 0 )
+                                       b->yy_buf_size += b->yy_buf_size / 8;
+                               else
+                                       b->yy_buf_size *= 2;
+
+                               b->yy_ch_buf = (char *)
+                                       /* Include room in for 2 EOB chars. */
+                                       yyxrealloc( (void *) b->yy_ch_buf,
+                                                        b->yy_buf_size + 2 );
+                               }
+                       else
+                               /* Can't grow it, we don't own it. */
+                               b->yy_ch_buf = 0;
+
+                       if ( ! b->yy_ch_buf )
+                               YY_FATAL_ERROR(
+                               "fatal error - scanner input buffer overflow" );
+
+                       yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+                       num_to_read = yy_current_buffer->yy_buf_size -
+                                               number_to_move - 1;
+#endif
+                       }
+
+               if ( num_to_read > YY_READ_BUF_SIZE )
+                       num_to_read = YY_READ_BUF_SIZE;
+
+               /* Read in more data. */
+               YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+                       yy_n_chars, num_to_read );
+
+               yy_current_buffer->yy_n_chars = yy_n_chars;
+               }
+
+       if ( yy_n_chars == 0 )
+               {
+               if ( number_to_move == YY_MORE_ADJ )
+                       {
+                       ret_val = EOB_ACT_END_OF_FILE;
+                       yyrestart( yyin );
+                       }
+
+               else
+                       {
+                       ret_val = EOB_ACT_LAST_MATCH;
+                       yy_current_buffer->yy_buffer_status =
+                               YY_BUFFER_EOF_PENDING;
+                       }
+               }
+
+       else
+               ret_val = EOB_ACT_CONTINUE_SCAN;
+
+       yy_n_chars += number_to_move;
+       yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+       yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+       yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+
+       return ret_val;
+       }
+
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+static yy_state_type yy_get_previous_state()
+       {
+       register yy_state_type yy_current_state;
+       register char *yy_cp;
+
+       yy_current_state = yy_start;
+
+       for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+               {
+               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+               if ( yy_accept[yy_current_state] )
+                       {
+                       yy_last_accepting_state = yy_current_state;
+                       yy_last_accepting_cpos = yy_cp;
+                       }
+               while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+                       {
+                       yy_current_state = (int) yy_def[yy_current_state];
+                       if ( yy_current_state >= 196 )
+                               yy_c = yy_meta[(unsigned int) yy_c];
+                       }
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+               }
+
+       return yy_current_state;
+       }
+
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *     next_state = yy_try_NUL_trans( current_state );
+ */
+
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+       {
+       register int yy_is_jam;
+       register char *yy_cp = yy_c_buf_p;
+
+       register YY_CHAR yy_c = 1;
+       if ( yy_accept[yy_current_state] )
+               {
+               yy_last_accepting_state = yy_current_state;
+               yy_last_accepting_cpos = yy_cp;
+               }
+       while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+               {
+               yy_current_state = (int) yy_def[yy_current_state];
+               if ( yy_current_state >= 196 )
+                       yy_c = yy_meta[(unsigned int) yy_c];
+               }
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+       yy_is_jam = (yy_current_state == 195);
+
+       return yy_is_jam ? 0 : yy_current_state;
+       }
+
+
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static void yyunput( int c, register char *yy_bp )
+#else
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+       {
+       register char *yy_cp = yy_c_buf_p;
+
+       /* undo effects of setting up yytext */
+       *yy_cp = yy_hold_char;
+
+       if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+               { /* need to shift things up to make room */
+               /* +2 for EOB chars. */
+               register int number_to_move = yy_n_chars + 2;
+               register char *dest = &yy_current_buffer->yy_ch_buf[
+                                       yy_current_buffer->yy_buf_size + 2];
+               register char *source =
+                               &yy_current_buffer->yy_ch_buf[number_to_move];
+
+               while ( source > yy_current_buffer->yy_ch_buf )
+                       *--dest = *--source;
+
+               yy_cp += (int) (dest - source);
+               yy_bp += (int) (dest - source);
+               yy_current_buffer->yy_n_chars =
+                       yy_n_chars = yy_current_buffer->yy_buf_size;
+
+               if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+                       YY_FATAL_ERROR( "flex scanner push-back overflow" );
+               }
+
+       *--yy_cp = (char) c;
+
+
+       yytext_ptr = yy_bp;
+       yy_hold_char = *yy_cp;
+       yy_c_buf_p = yy_cp;
+       }
+#endif /* ifndef YY_NO_UNPUT */
+
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#endif
+       {
+       int c;
+
+       *yy_c_buf_p = yy_hold_char;
+
+       if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+               {
+               /* yy_c_buf_p now points to the character we want to return.
+                * If this occurs *before* the EOB characters, then it's a
+                * valid NUL; if not, then we've hit the end of the buffer.
+                */
+               if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+                       /* This was really a NUL. */
+                       *yy_c_buf_p = '\0';
+
+               else
+                       { /* need more input */
+                       int offset = yy_c_buf_p - yytext_ptr;
+                       ++yy_c_buf_p;
+
+                       switch ( yy_get_next_buffer() )
+                               {
+                               case EOB_ACT_LAST_MATCH:
+                                       /* This happens because yy_g_n_b()
+                                        * sees that we've accumulated a
+                                        * token and flags that we need to
+                                        * try matching the token before
+                                        * proceeding.  But for input(),
+                                        * there's no matching to consider.
+                                        * So convert the EOB_ACT_LAST_MATCH
+                                        * to EOB_ACT_END_OF_FILE.
+                                        */
+
+                                       /* Reset buffer status. */
+                                       yyrestart( yyin );
+
+                                       /* fall through */
+
+                               case EOB_ACT_END_OF_FILE:
+                                       {
+                                       if ( yywrap() )
+                                               return EOF;
+
+                                       if ( ! yy_did_buffer_switch_on_eof )
+                                               YY_NEW_FILE;
+#ifdef __cplusplus
+                                       return yyinput();
+#else
+                                       return input();
+#endif
+                                       }
+
+                               case EOB_ACT_CONTINUE_SCAN:
+                                       yy_c_buf_p = yytext_ptr + offset;
+                                       break;
+                               }
+                       }
+               }
+
+       c = *(unsigned char *) yy_c_buf_p;      /* cast for 8-bit char's */
+       *yy_c_buf_p = '\0';     /* preserve yytext */
+       yy_hold_char = *++yy_c_buf_p;
+
+
+       return c;
+       }
+#endif /* YY_NO_INPUT */
+
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+       {
+       if ( ! yy_current_buffer )
+               yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+       yy_init_buffer( yy_current_buffer, input_file );
+       yy_load_buffer_state();
+       }
+
+
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+       {
+       if ( yy_current_buffer == new_buffer )
+               return;
+
+       if ( yy_current_buffer )
+               {
+               /* Flush out information for old buffer. */
+               *yy_c_buf_p = yy_hold_char;
+               yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+               yy_current_buffer->yy_n_chars = yy_n_chars;
+               }
+
+       yy_current_buffer = new_buffer;
+       yy_load_buffer_state();
+
+       /* We don't actually know whether we did this switch during
+        * EOF (yywrap()) processing, but the only time this flag
+        * is looked at is after yywrap() is called, so it's safe
+        * to go ahead and always set it.
+        */
+       yy_did_buffer_switch_on_eof = 1;
+       }
+
+
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+       {
+       yy_n_chars = yy_current_buffer->yy_n_chars;
+       yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+       yyin = yy_current_buffer->yy_input_file;
+       yy_hold_char = *yy_c_buf_p;
+       }
+
+
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+       {
+       YY_BUFFER_STATE b;
+
+       b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+       b->yy_buf_size = size;
+
+       /* yy_ch_buf has to be 2 characters longer than the size given because
+        * we need to put in 2 end-of-buffer characters.
+        */
+       b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+       if ( ! b->yy_ch_buf )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+       b->yy_is_our_buffer = 1;
+
+       yy_init_buffer( b, file );
+
+       return b;
+       }
+
+
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+       {
+       if ( ! b )
+               return;
+
+       if ( b == yy_current_buffer )
+               yy_current_buffer = (YY_BUFFER_STATE) 0;
+
+       if ( b->yy_is_our_buffer )
+               yy_flex_free( (void *) b->yy_ch_buf );
+
+       yy_flex_free( (void *) b );
+       }
+
+
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+
+       {
+       yy_flush_buffer( b );
+
+       b->yy_input_file = file;
+       b->yy_fill_buffer = 1;
+
+#if YY_ALWAYS_INTERACTIVE
+       b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+       b->yy_is_interactive = 0;
+#else
+       b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+       }
+
+
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+       {
+       if ( ! b )
+               return;
+
+       b->yy_n_chars = 0;
+
+       /* We always need two end-of-buffer characters.  The first causes
+        * a transition to the end-of-buffer state.  The second causes
+        * a jam in that state.
+        */
+       b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+       b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+       b->yy_buf_pos = &b->yy_ch_buf[0];
+
+       b->yy_at_bol = 1;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       if ( b == yy_current_buffer )
+               yy_load_buffer_state();
+       }
+
+
+#ifndef YY_NO_SCAN_BUFFER
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+       {
+       YY_BUFFER_STATE b;
+
+       if ( size < 2 ||
+            base[size-2] != YY_END_OF_BUFFER_CHAR ||
+            base[size-1] != YY_END_OF_BUFFER_CHAR )
+               /* They forgot to leave room for the EOB's. */
+               return 0;
+
+       b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+       b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
+       b->yy_buf_pos = b->yy_ch_buf = base;
+       b->yy_is_our_buffer = 0;
+       b->yy_input_file = 0;
+       b->yy_n_chars = b->yy_buf_size;
+       b->yy_is_interactive = 0;
+       b->yy_at_bol = 1;
+       b->yy_fill_buffer = 0;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       yy_switch_to_buffer( b );
+
+       return b;
+       }
+#endif
+
+
+#ifndef YY_NO_SCAN_STRING
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+       {
+       int len;
+       for ( len = 0; yy_str[len]; ++len )
+               ;
+
+       return yy_scan_bytes( yy_str, len );
+       }
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+       {
+       YY_BUFFER_STATE b;
+       char *buf;
+       yy_size_t n;
+       int i;
+
+       /* Get memory for full buffer, including space for trailing EOB's. */
+       n = len + 2;
+       buf = (char *) yy_flex_alloc( n );
+       if ( ! buf )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+       for ( i = 0; i < len; ++i )
+               buf[i] = bytes[i];
+
+       buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+
+       b = yy_scan_buffer( buf, n );
+       if ( ! b )
+               YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+       /* It's okay to grow etc. this buffer, and we should throw it
+        * away when we're done.
+        */
+       b->yy_is_our_buffer = 1;
+
+       return b;
+       }
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+       {
+       if ( yy_start_stack_ptr >= yy_start_stack_depth )
+               {
+               yy_size_t new_size;
+
+               yy_start_stack_depth += YY_START_STACK_INCR;
+               new_size = yy_start_stack_depth * sizeof( int );
+
+               if ( ! yy_start_stack )
+                       yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+               else
+                       yy_start_stack = (int *) yyxrealloc(
+                                       (void *) yy_start_stack, new_size );
+
+               if ( ! yy_start_stack )
+                       YY_FATAL_ERROR(
+                       "out of memory expanding start-condition stack" );
+               }
+
+       yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+       BEGIN(new_state);
+       }
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state()
+       {
+       if ( --yy_start_stack_ptr < 0 )
+               YY_FATAL_ERROR( "start-condition stack underflow" );
+
+       BEGIN(yy_start_stack[yy_start_stack_ptr]);
+       }
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state()
+       {
+       return yy_start_stack[yy_start_stack_ptr - 1];
+       }
+#endif
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+       {
+       (void) fprintf( stderr, "%s\n", msg );
+       exit( YY_EXIT_FAILURE );
+       }
+
+
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up yytext. */ \
+               yytext[yyleng] = yy_hold_char; \
+               yy_c_buf_p = yytext + n; \
+               yy_hold_char = *yy_c_buf_p; \
+               *yy_c_buf_p = '\0'; \
+               yyleng = n; \
+               } \
+       while ( 0 )
+
+
+/* Internal utility routines. */
+
+#ifndef yytext_ptr
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+       {
+       register int i;
+       for ( i = 0; i < n; ++i )
+               s1[i] = s2[i];
+       }
+#endif
+
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+       {
+       register int n;
+       for ( n = 0; s[n]; ++n )
+               ;
+
+       return n;
+       }
+#endif
+
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+       {
+       return (void *) xmalloc( size );
+       }
+
+#ifdef YY_USE_PROTOS
+static void *yyxrealloc( void *ptr, yy_size_t size )
+#else
+static void *yyxrealloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+       {
+       /* The cast to (char *) in the following accommodates both
+        * implementations that use char* generic pointers, and those
+        * that use void* generic pointers.  It works with the latter
+        * because both ANSI C and C++ allow castless assignment from
+        * any pointer type to void*, and deal with argument conversions
+        * as though doing an assignment.
+        */
+       return (void *) xrealloc( (char *) ptr, size );
+       }
+
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+       {
+       xfree( ptr );
+       }
+
+#if YY_MAIN
+int main()
+       {
+       yylex();
+       return 0;
+       }
+#endif
+#line 289 "ada-lex.l"
+
+
+#include <ctype.h>
+#include "gdb_string.h"
+
+/* Initialize the lexer for processing new expression. */
+
+void
+lexer_init (FILE *inp)
+{
+  BEGIN INITIAL;
+  yyrestart (inp);
+}
+
+
+/* Copy S2 to S1, removing all underscores, and downcasing all letters.  */
+
+static void
+canonicalizeNumeral (char *s1, const char *s2)
+{
+  for (; *s2 != '\000'; s2 += 1)
+    {
+      if (*s2 != '_')
+       {
+         *s1 = tolower(*s2);
+         s1 += 1;
+       }
+    }
+  s1[0] = '\000';
+}
+
+/* Interprets the prefix of NUM that consists of digits of the given BASE
+   as an integer of that BASE, with the string EXP as an exponent.
+   Puts value in yylval, and returns INT, if the string is valid.  Causes
+   an error if the number is improperly formated.   BASE, if NULL, defaults
+   to "10", and EXP to "1".  The EXP does not contain a leading 'e' or 'E'.
+ */
+
+static int
+processInt (const char *base0, const char *num0, const char *exp0)
+{
+  ULONGEST result;
+  long exp;
+  int base;
+
+  char *trailer;
+
+  if (base0 == NULL)
+    base = 10;
+  else
+    {
+      base = strtol (base0, (char **) NULL, 10);
+      if (base < 2 || base > 16)
+       error (_("Invalid base: %d."), base);
+    }
+
+  if (exp0 == NULL)
+    exp = 0;
+  else
+    exp = strtol(exp0, (char **) NULL, 10);
+
+  errno = 0;
+  result = strtoulst (num0, (const char **) &trailer, base);
+  if (errno == ERANGE)
+    error (_("Integer literal out of range"));
+  if (isxdigit(*trailer))
+    error (_("Invalid digit `%c' in based literal"), *trailer);
+
+  while (exp > 0)
+    {
+      if (result > (ULONG_MAX / base))
+       error (_("Integer literal out of range"));
+      result *= base;
+      exp -= 1;
+    }
+
+  if ((result >> (gdbarch_int_bit (parse_gdbarch)-1)) == 0)
+    yylval.typed_val.type = type_int ();
+  else if ((result >> (gdbarch_long_bit (parse_gdbarch)-1)) == 0)
+    yylval.typed_val.type = type_long ();
+  else if (((result >> (gdbarch_long_bit (parse_gdbarch)-1)) >> 1) == 0)
+    {
+      /* We have a number representable as an unsigned integer quantity.
+         For consistency with the C treatment, we will treat it as an
+        anonymous modular (unsigned) quantity.  Alas, the types are such
+        that we need to store .val as a signed quantity.  Sorry
+         for the mess, but C doesn't officially guarantee that a simple
+         assignment does the trick (no, it doesn't; read the reference manual).
+       */
+      yylval.typed_val.type
+       = builtin_type (parse_gdbarch)->builtin_unsigned_long;
+      if (result & LONGEST_SIGN)
+       yylval.typed_val.val =
+         (LONGEST) (result & ~LONGEST_SIGN)
+         - (LONGEST_SIGN>>1) - (LONGEST_SIGN>>1);
+      else
+       yylval.typed_val.val = (LONGEST) result;
+      return INT;
+    }
+  else
+    yylval.typed_val.type = type_long_long ();
+
+  yylval.typed_val.val = (LONGEST) result;
+  return INT;
+}
+
+static int
+processReal (const char *num0)
+{
+  sscanf (num0, "%" DOUBLEST_SCAN_FORMAT, &yylval.typed_val_float.dval);
+
+  yylval.typed_val_float.type = type_float ();
+  if (sizeof(DOUBLEST) >= gdbarch_double_bit (parse_gdbarch)
+                           / TARGET_CHAR_BIT)
+    yylval.typed_val_float.type = type_double ();
+  if (sizeof(DOUBLEST) >= gdbarch_long_double_bit (parse_gdbarch)
+                           / TARGET_CHAR_BIT)
+    yylval.typed_val_float.type = type_long_double ();
+
+  return FLOAT;
+}
+
+
+/* Store a canonicalized version of NAME0[0..LEN-1] in yylval.ssym.  The
+   resulting string is valid until the next call to ada_parse.  It differs
+   from NAME0 in that:
+    + Characters between '...' or <...> are transfered verbatim to 
+      yylval.ssym.
+    + <, >, and trailing "'" characters in quoted sequences are removed
+      (a leading quote is preserved to indicate that the name is not to be
+      GNAT-encoded).
+    + Unquoted whitespace is removed.
+    + Unquoted alphabetic characters are mapped to lower case.
+   Result is returned as a struct stoken, but for convenience, the string
+   is also null-terminated.  Result string valid until the next call of
+   ada_parse.
+ */
+static struct stoken
+processId (const char *name0, int len)
+{
+  char *name = obstack_alloc (&temp_parse_space, len + 11);
+  int i0, i;
+  struct stoken result;
+
+  while (len > 0 && isspace (name0[len-1]))
+    len -= 1;
+  i = i0 = 0;
+  while (i0 < len)
+    {
+      if (isalnum (name0[i0]))
+       {
+         name[i] = tolower (name0[i0]);
+         i += 1; i0 += 1;
+       }
+      else switch (name0[i0])
+       {
+       default:
+         name[i] = name0[i0];
+         i += 1; i0 += 1;
+         break;
+       case ' ': case '\t':
+         i0 += 1;
+         break;
+       case '\'':
+         do
+           {
+             name[i] = name0[i0];
+             i += 1; i0 += 1;
+           }
+         while (i0 < len && name0[i0] != '\'');
+         i0 += 1;
+         break;
+       case '<':
+         i0 += 1;
+         while (i0 < len && name0[i0] != '>')
+           {
+             name[i] = name0[i0];
+             i += 1; i0 += 1;
+           }
+         i0 += 1;
+         break;
+       }
+    }
+  name[i] = '\000';
+
+  result.ptr = name;
+  result.length = i;
+  return result;
+}
+
+/* Return TEXT[0..LEN-1], a string literal without surrounding quotes,
+   with special hex character notations replaced with characters. 
+   Result valid until the next call to ada_parse.  */
+
+static struct stoken
+processString (const char *text, int len)
+{
+  const char *p;
+  char *q;
+  const char *lim = text + len;
+  struct stoken result;
+
+  q = result.ptr = obstack_alloc (&temp_parse_space, len);
+  p = text;
+  while (p < lim)
+    {
+      if (p[0] == '[' && p[1] == '"' && p+2 < lim)
+         {
+           if (p[2] == '"')  /* "...["""]... */
+             {
+               *q = '"';
+              p += 4;
+            }
+           else
+            {
+               int chr;
+              sscanf (p+2, "%2x", &chr);
+              *q = (char) chr;
+              p += 5;
+            }
+         }
+       else
+         *q = *p;
+       q += 1;
+       p += 1;
+     }
+  result.length = q - result.ptr;
+  return result;
+}
+
+/* Returns the position within STR of the '.' in a
+   '.{WHITE}*all' component of a dotted name, or -1 if there is none.
+   Note: we actually don't need this routine, since 'all' can never be an
+   Ada identifier.  Thus, looking up foo.all or foo.all.x as a name
+   must fail, and will eventually be interpreted as (foo).all or
+   (foo).all.x.  However, this does avoid an extraneous lookup. */
+
+static int
+find_dot_all (const char *str)
+{
+  int i;
+  for (i = 0; str[i] != '\000'; i += 1)
+    {
+      if (str[i] == '.')
+       {
+         int i0 = i;
+         do
+           i += 1;
+         while (isspace (str[i]));
+         if (strncmp (str+i, "all", 3) == 0
+             && ! isalnum (str[i+3]) && str[i+3] != '_')
+           return i0;
+       }
+    }
+  return -1;
+}
+
+/* Returns non-zero iff string SUBSEQ matches a subsequence of STR, ignoring
+   case.  */
+
+static int
+subseqMatch (const char *subseq, const char *str)
+{
+  if (subseq[0] == '\0')
+    return 1;
+  else if (str[0] == '\0')
+    return 0;
+  else if (tolower (subseq[0]) == tolower (str[0]))
+    return subseqMatch (subseq+1, str+1) || subseqMatch (subseq, str+1);
+  else
+    return subseqMatch (subseq, str+1);
+}
+
+
+static struct { const char *name; int code; }
+attributes[] = {
+  { "address", TICK_ADDRESS },
+  { "unchecked_access", TICK_ACCESS },
+  { "unrestricted_access", TICK_ACCESS },
+  { "access", TICK_ACCESS },
+  { "first", TICK_FIRST },
+  { "last", TICK_LAST },
+  { "length", TICK_LENGTH },
+  { "max", TICK_MAX },
+  { "min", TICK_MIN },
+  { "modulus", TICK_MODULUS },
+  { "pos", TICK_POS },
+  { "range", TICK_RANGE },
+  { "size", TICK_SIZE },
+  { "tag", TICK_TAG },
+  { "val", TICK_VAL },
+  { NULL, -1 }
+};
+
+/* Return the syntactic code corresponding to the attribute name or
+   abbreviation STR.  */
+
+static int
+processAttribute (const char *str)
+{
+  int i, k;
+
+  for (i = 0; attributes[i].code != -1; i += 1)
+    if (strcasecmp (str, attributes[i].name) == 0)
+      return attributes[i].code;
+
+  for (i = 0, k = -1; attributes[i].code != -1; i += 1)
+    if (subseqMatch (str, attributes[i].name))
+      {
+       if (k == -1)
+         k = i;
+       else
+         error (_("ambiguous attribute name: `%s'"), str);
+      }
+  if (k == -1)
+    error (_("unrecognized attribute: `%s'"), str);
+
+  return attributes[k].code;
+}
+
+int
+yywrap(void)
+{
+  return 1;
+}
+
+/* Dummy definition to suppress warnings about unused static definitions. */
+typedef void (*dummy_function) ();
+dummy_function ada_flex_use[] = 
+{ 
+  (dummy_function) yyunput
+};
index 899a7bb..c8b4481 100644 (file)
@@ -18,15 +18,17 @@ INFOENTRY_annotate= "* GDB annotation.                      Annotations for the GNU debugger (GDB).
 
 CLEANFILES=    gdb-cfg.texi
 
-gdb.info: gdb.texinfo fdl.texi gpl.texi agentexpr.texi gdb-cfg.texi GDBvn.texi rluser.texi inc-hist.texinfo
+gdb.info: gdb.texinfo fdl.texi gpl.texi agentexpr.texi \
+       rluser.texi inc-hist.texinfo \
+       gdb-cfg.texi GDBvn.texi
 
 gdb-cfg.texi: ${SRCDIR}/all-cfg.texi
        cp ${SRCDIR}/all-cfg.texi ${.TARGET}
 
-gdbint.info: gdbint.texinfo fdl.texi gpl.texi gdb-cfg.texi GDBvn.texi
+gdbint.info: gdbint.texinfo fdl.texi observer.texi gdb-cfg.texi GDBvn.texi
 
 stabs.info: stabs.texinfo fdl.texi
 
-annotate.info: annotate.texinfo fdl.texi gdb-cfg.texi
+annotate.info: annotate.texinfo fdl.texi gdb-cfg.texi GDBvn.texi
 
 .include <bsd.info.mk>
index 84dc99a..177ab61 100644 (file)
@@ -129,7 +129,7 @@ kernel_from_dumpnr(int nr)
        snprintf(path, sizeof(path), "%s/info.%d", crashdir, nr);
        info = fopen(path, "r");
        if (info == NULL) {
-               warn(path);
+               warn("%s", path);
                return;
        }
        while (fgets(path, sizeof(path), info) != NULL) {
@@ -226,11 +226,13 @@ kgdb_dmesg(void)
                return;
        bufp = kgdb_parse("msgbufp->msg_ptr");
        size = (int)kgdb_parse("msgbufp->msg_size");
+       if (bufp == 0 || size == 0)
+               return;
        rseq = (int)kgdb_parse("msgbufp->msg_bufr");
        wseq = (int)kgdb_parse("msgbufp->msg_bufx");
        rseq = MSGBUF_SEQ_TO_POS(size, rseq);
        wseq = MSGBUF_SEQ_TO_POS(size, wseq);
-       if (bufp == 0 || size == 0 || rseq == wseq)
+       if (rseq == wseq)
                return;
 
        printf("\nUnread portion of the kernel message buffer:\n");
@@ -333,6 +335,7 @@ main(int argc, char *argv[])
        args.interpreter_p = INTERP_CONSOLE;
        args.argv = malloc(sizeof(char *));
        args.argv[0] = argv[0];
+       add_arg(&args, "--kernel");
 
        while ((ch = getopt(argc, argv, "ac:d:fn:qr:vw")) != -1) {
                switch (ch) {
@@ -409,7 +412,7 @@ main(int argc, char *argv[])
        if (dumpnr >= 0) {
                snprintf(path, sizeof(path), "%s/vmcore.%d", crashdir, dumpnr);
                if (stat(path, &st) == -1)
-                       err(1, path);
+                       err(1, "%s", path);
                if (!S_ISREG(st.st_mode))
                        errx(1, "%s: not a regular file", path);
                vmcore = strdup(path);
index 40aa95a..35b4d86 100644 (file)
@@ -67,7 +67,7 @@ struct kthr *kgdb_thr_select(struct kthr *);
 char        *kgdb_thr_extra_thread_info(int);
 char        *kgdb_thr_pid_to_str(ptid_t);
 
-uintptr_t kgdb_lookup(const char *sym);
+CORE_ADDR kgdb_lookup(const char *sym);
 CORE_ADDR kgdb_parse_1(const char *, int);
 
 #define        kgdb_parse(exp)         kgdb_parse_1((exp), 0)
index 70b31a9..3fd5d37 100644 (file)
@@ -23,7 +23,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/gnu/usr.bin/gdb/kgdb/kld.c,v 1.11 2008/10/02 20:42:10 jhb Exp $
+ * $FreeBSD: src/gnu/usr.bin/gdb/kgdb/kld.c, svn 210424 2010/07/23 avg $
  */
 
 #include <sys/param.h>
@@ -204,6 +204,25 @@ find_kld_address (char *arg, CORE_ADDR *address)
        return (0);
 }
 
+static void
+adjust_section_address (struct target_section *sec, CORE_ADDR *curr_base)
+{
+       struct bfd_section *asect = sec->the_bfd_section;
+       bfd *abfd = sec->bfd;
+
+       if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) {
+               sec->addr += *curr_base;
+               sec->endaddr += *curr_base;
+               return;
+       }
+
+       *curr_base = align_power(*curr_base,
+           bfd_get_section_alignment(abfd, asect));
+       sec->addr = *curr_base;
+       sec->endaddr = sec->addr + bfd_section_size(abfd, asect);
+       *curr_base = sec->endaddr;
+}
+
 static void
 load_kld (char *path, CORE_ADDR base_addr, int from_tty)
 {
@@ -211,6 +230,7 @@ load_kld (char *path, CORE_ADDR base_addr, int from_tty)
        struct target_section *sections = NULL, *sections_end = NULL, *s;
        struct cleanup *cleanup;
        bfd *bfd;
+       CORE_ADDR curr_addr;
        int i;
 
        /* Open the kld. */
@@ -231,10 +251,9 @@ load_kld (char *path, CORE_ADDR base_addr, int from_tty)
        if (build_section_table (bfd, &sections, &sections_end))
                error("\"%s\": can't find file sections", path);
        cleanup = make_cleanup(xfree, sections);
-       for (s = sections; s < sections_end; s++) {
-               s->addr += base_addr;
-               s->endaddr += base_addr;
-       }
+       curr_addr = base_addr;
+       for (s = sections; s < sections_end; s++)
+               adjust_section_address(s, &curr_addr);
 
        /* Build a section addr info to pass to symbol_file_add(). */
        sap = build_section_addr_info_from_section_table (sections,
@@ -291,9 +310,12 @@ kgdb_add_kld_cmd (char *arg, int from_tty)
 static void
 kld_relocate_section_addresses (struct so_list *so, struct target_section *sec)
 {
+       static CORE_ADDR curr_addr;
+
+       if (sec == so->sections)
+               curr_addr = so->lm_info->base_address;
 
-       sec->addr += so->lm_info->base_address;
-       sec->endaddr += so->lm_info->base_address;
+       adjust_section_address(sec, &curr_addr);
 }
 
 static void
@@ -309,7 +331,7 @@ kld_clear_solib (void)
 }
 
 static void
-kld_solib_create_inferior_hook (void)
+kld_solib_create_inferior_hook (int from_tty)
 {
 }
 
index c8e3337..6e32d03 100644 (file)
 
 #include "kgdb.h"
 
-static uintptr_t dumppcb;
+static CORE_ADDR dumppcb;
 static int dumptid;
 
 static struct kthr *first;
 struct kthr *curkthr;
 
-uintptr_t
+CORE_ADDR
 kgdb_lookup(const char *sym)
 {
        struct nlist nl[2];
 
-       nl[0].n_name = (char *)(uintptr_t)sym;
+       nl[0].n_name = (char *)(CORE_ADDR)sym;
        nl[1].n_name = NULL;
        if (kvm_nlist(kvm, nl) != 0)
                return (0);
@@ -78,7 +78,7 @@ kgdb_thr_init(void)
        struct lwp lwp;
        struct mdglobaldata gd;
        struct kthr *kt;
-       uintptr_t addr, paddr, prvspace;
+       CORE_ADDR addr, paddr, prvspace;
        int cpu, ncpus;
 
        while (first != NULL) {
index 4ccff73..21429bc 100644 (file)
@@ -86,11 +86,12 @@ static void
 kgdb_trgt_open(char *filename, int from_tty)
 {
        struct cleanup *old_chain;
-       struct thread_info *ti;
        struct kthr *kt;
+       struct inferior *inf8;
+       struct program_space *pspace;
        kvm_t *nkvm;
        char *temp;
-       int ontop;
+       int first_inferior = 1;
 
        target_preopen (from_tty);
        if (!filename)
@@ -120,7 +121,7 @@ kgdb_trgt_open(char *filename, int from_tty)
        vmcore = filename;
        old_chain = make_cleanup(kgdb_core_cleanup, NULL);
 
-       ontop = !push_target (&kgdb_trgt_ops);
+       push_target (&kgdb_trgt_ops);
        discard_cleanups (old_chain);
 
        kgdb_dmesg();
@@ -128,9 +129,25 @@ kgdb_trgt_open(char *filename, int from_tty)
        init_thread_list();
        kt = kgdb_thr_init();
        while (kt != NULL) {
-               if (!in_inferior_list(kt->pid))
-                       add_inferior(kt->pid);
-               ti = add_thread_silent(ptid_build(kt->pid, 0, kt->tid));
+               if (!in_inferior_list(kt->pid)) {
+                     inf8 = add_inferior(kt->pid);
+                     if (first_inferior) {
+                       first_inferior = 0;
+                       set_current_inferior (inf8);
+                       pspace = current_program_space;
+                       pspace->ebfd = 0;
+                       pspace->ebfd_mtime = 0;
+                     } else {                    
+                       pspace = add_program_space(new_address_space());
+                       pspace->symfile_object_file = symfile_objfile;
+                       pspace->objfiles = object_files;
+                       pspace->target_sections = 
+                               current_program_space->target_sections;
+                     }
+                     inf8->pspace = pspace;
+                     inf8->aspace = pspace->aspace;
+                }
+               add_thread(ptid_build(kt->pid, 0, kt->tid));
                kt = kgdb_thr_next(kt);
        }
        if (curkthr != 0)
@@ -138,17 +155,12 @@ kgdb_trgt_open(char *filename, int from_tty)
 
        frame_unwind_prepend_unwinder(get_frame_arch(get_current_frame()), &kgdb_trgt_trapframe_unwind);
 
-       if (ontop) {
-               /* XXX: fetch registers? */
-               kld_init();
-               reinit_frame_cache();
-               select_frame (get_current_frame());
-               print_stack_frame(get_selected_frame(NULL),
-                   frame_relative_level(get_selected_frame(NULL)), 1);
-       } else
-               warning(
-       "you won't be able to access this vmcore until you terminate\n\
-your %s; do ``info files''", target_longname);
+       /* XXX: fetch registers? */
+       kld_init();
+       reinit_frame_cache();
+       select_frame (get_current_frame());
+       print_stack_frame(get_selected_frame(NULL),
+         frame_relative_level(get_selected_frame(NULL)), 1);
 }
 
 static void
index d9f9c99..52e9177 100644 (file)
@@ -44,8 +44,8 @@ CFLAGS+= -DSELECT_ARCHITECTURES='${ARCHITECTURES:S/^/\&/:S/$/,/} 0'
 CFLAGS+= -DDEFAULT_VECTOR=${DEFAULT_VECTOR}
 
 
-SRCS+=         bfd.h bfdver.h
-CLEANFILES+=   bfd.h bfdver.h
+SRCS+=         bfd.h
+CLEANFILES+=   bfd.h
 
 # Used to do keyword replacement in bfd-X.h
 #
@@ -67,13 +67,6 @@ bfd.h:       ${CONTRIBDIR}/bfd-in2.h
            < ${CONTRIBDIR}/bfd-in2.h > bfd.h.new
        mv -f bfd.h.new bfd.h
 
-bfdver.h: ${CONTRIBDIR}/version.h
-       sed -e "s/@bfd_version_string@/\"2.20.51\"/g" \
-           -e "s/@bfd_version_package@/\"(GNU Binutils, GDB packaged)\"/g" \
-           -e "s/@bfd_version@/220510000/g" \
-           < ${CONTRIBDIR}/version.h > bfdver.h.new
-       mv -f bfdver.h.new bfdver.h
-
 SRCS+=         bfd_stdint.h
 CLEANFILES+=   bfd_stdint.h
 
diff --git a/gnu/usr.bin/gdb/libbfd/bfdver.h b/gnu/usr.bin/gdb/libbfd/bfdver.h
new file mode 100644 (file)
index 0000000..ea5e7a0
--- /dev/null
@@ -0,0 +1,4 @@
+#define BFD_VERSION_DATE 20100707
+#define BFD_VERSION 220510000
+#define BFD_VERSION_STRING  "(GNU Binutils) " "2.20.51.20100707"
+#define REPORT_BUGS_TO "<http://www.sourceware.org/bugzilla/>"
index 145a3e8..9eb8811 100644 (file)
@@ -9,10 +9,4 @@ SRCS=  decNumber.c decContext.c decimal32.c decimal64.c decimal128.c
 
 CFLAGS+=       -I${.CURDIR} -I${.OBJDIR} -I${BASEDIR}/libdecnumber
 
-beforedepend: gstdint.h
-gstdint.h:
-       echo "#include <stdint.h>" > ${.TARGET}
-
-CLEANFILES+=   gstdint.h
-
 .include <bsd.lib.mk>
index 5286d3f..228c640 100644 (file)
 /* #undef SIZEOF_CHAR */
 
 /* The size of `int', as computed by sizeof. */
-/* #define SIZEOF_INT 4 */
+#define SIZEOF_INT 4
 
 /* The size of `long', as computed by sizeof. */
-/* #define SIZEOF_LONG 4 */
+#if defined(__i386__)
+#define SIZEOF_LONG 4
+#elif defined(__x86_64__)
+#define SIZEOF_LONG 8
+#else
+#error "Unknown architecture"
+#endif
+
 
 /* The size of `short', as computed by sizeof. */
 /* #undef SIZEOF_SHORT */
diff --git a/gnu/usr.bin/gdb/libdecnumber/gstdint.h b/gnu/usr.bin/gdb/libdecnumber/gstdint.h
new file mode 100644 (file)
index 0000000..4435ec1
--- /dev/null
@@ -0,0 +1,47 @@
+/* generated for  gcc (DragonFly) 4.4.5 */
+
+#ifndef GCC_GENERATED_STDINT_H
+#define GCC_GENERATED_STDINT_H 1
+
+#include <sys/types.h>
+#include <stdint.h>
+/* glibc uses these symbols as guards to prevent redefinitions.  */
+#ifdef __int8_t_defined
+#define _INT8_T
+#define _INT16_T
+#define _INT32_T
+#endif
+#ifdef __uint32_t_defined
+#define _UINT32_T
+#endif
+
+
+/* Some systems have guard macros to prevent redefinitions, define them.  */
+#ifndef _INT8_T
+#define _INT8_T
+#endif
+#ifndef _INT16_T
+#define _INT16_T
+#endif
+#ifndef _INT32_T
+#define _INT32_T
+#endif
+#ifndef _UINT8_T
+#define _UINT8_T
+#endif
+#ifndef _UINT16_T
+#define _UINT16_T
+#endif
+#ifndef _UINT32_T
+#define _UINT32_T
+#endif
+
+/* system headers have good uint64_t and int64_t */
+#ifndef _INT64_T
+#define _INT64_T
+#endif
+#ifndef _UINT64_T
+#define _UINT64_T
+#endif
+
+#endif /* GCC_GENERATED_STDINT_H */
index 7167e65..5b83da0 100644 (file)
@@ -2,8 +2,8 @@
 
 TARGET_ARCH?=  ${MACHINE_ARCH}
 
-LIB=   gdb
-INTERNALLIB=   yes
+LIB=           gdb
+INTERNALLIB=   yes
 
 CONTRIBDIR=    ${BASEDIR}/gdb
 .PATH: ${CONTRIBDIR} ${CONTRIBDIR}/cli ${CONTRIBDIR}/mi
@@ -23,7 +23,7 @@ CFLAGS+= -DMACHINE_ARCH='"${MACHINE_ARCH}"'
 CFLAGS+= -DTARGET_ARCH='"${TARGET_ARCH}"'
 CFLAGS+= -DVERSION_STRING='"${VERSION}"'
 
-SRCS+= observer.h gdb_stdint.h gstdint.h
+SRCS+= observer.h gdb_stdint.h
 
 # The order of these sources is important,
 # because init.c below needs to obey a certain ordering
@@ -39,15 +39,17 @@ SRCS+=      \
        blockframe.c breakpoint.c findvar.c regcache.c \
        charset.c disasm.c dummy-frame.c dfp.c \
        source.c value.c eval.c valops.c valarith.c valprint.c printcmd.c \
-       block.c symtab.c symfile.c symmisc.c linespec.c dictionary.c \
+       block.c symtab.c psymtab.c symfile.c symmisc.c linespec.c dictionary.c \
        infcall.c \
        infcmd.c infrun.c \
        expprint.c environ.c stack.c thread.c \
        exceptions.c \
+       filesystem.c \
        inf-child.c \
        interps.c \
        main.c \
        macrotab.c macrocmd.c macroexp.c macroscope.c \
+       mi-common.c \
        event-loop.c event-top.c inf-loop.c completer.c \
        gdbarch.c arch-utils.c gdbtypes.c osabi.c copying.c \
        memattr.c mem-break.c target.c parse.c language.c buildsym.c \
@@ -59,7 +61,7 @@ SRCS+=        \
        dbxread.c coffread.c coff-pe-read.c \
        dwarf2read.c mipsread.c stabsread.c corefile.c \
        dwarf2expr.c dwarf2loc.c dwarf2-frame.c \
-       ada-lang.c c-lang.c f-lang.c objc-lang.c \
+       ada-lang.c c-lang.c d-lang.c f-lang.c objc-lang.c \
        ada-tasks.c \
        ui-out.c cli-out.c \
        varobj.c vec.c wrapper.c \
@@ -69,7 +71,8 @@ SRCS+=        \
        sentinel-frame.c \
        complaints.c typeprint.c \
        ada-typeprint.c c-typeprint.c f-typeprint.c m2-typeprint.c \
-       ada-valprint.c c-valprint.c cp-valprint.c f-valprint.c m2-valprint.c \
+       ada-valprint.c c-valprint.c cp-valprint.c d-valprint.c f-valprint.c \
+       m2-valprint.c \
        serial.c mdebugread.c top.c utils.c \
        ui-file.c \
        user-regs.c \
@@ -81,11 +84,11 @@ SRCS+=      \
        reggroups.c regset.c \
        trad-frame.c \
        tramp-frame.c \
-       solib.c solib-null.c \
+       solib.c solib-target.c \
        prologue-value.c memory-map.c xml-support.c xml-syscall.c \
        target-descriptions.c target-memory.c xml-tdesc.c xml-builtin.c \
-       inferior.c osdata.c gdb_usleep.c record.c \
-       jit.c
+       inferior.c osdata.c gdb_usleep.c record.c gcore.c \
+       jit.c progspace.c
 
 # TSOBS
 SRCS+= inflow.c
@@ -109,14 +112,21 @@ SRCS+=    mi-out.c mi-console.c \
        mi-interp.c \
        mi-main.c mi-parse.c mi-getopt.c mi-common.c
 
+# PYTHON OBJS
+SRCS+= python.c \
+       py-auto-load.c \
+       py-value.c \
+       py-prettyprint.c 
+
 # CONFIG_OBS
-SRCS+= python.c py-value.c py-prettyprint.c elfread.c posix-hdep.c
+SRCS+= elfread.c posix-hdep.c
 
 # SUBDIR_TUI_OBS
 SRCS+= tui-command.c \
        tui-data.c \
        tui-disasm.c \
-       tui-file.c tui.c \
+       tui-file.c \
+       tui.c \
        tui-hooks.c \
        tui-interp.c \
        tui-io.c \
@@ -136,7 +146,9 @@ SRCS+=      c-exp.y \
        objc-exp.y \
        ada-exp.y \
        jv-exp.y \
-       f-exp.y m2-exp.y p-exp.y
+       f-exp.y \
+       m2-exp.y \
+       p-exp.y
 
 SRCS+= init.c
 
@@ -179,10 +191,7 @@ observer.inc: observer.sh doc/observer.texi
 gdb_stdint.h:
        touch ${.TARGET}
 
-gstdint.h:
-       echo '#include <stdint.h>' > ${.TARGET}
-
-CLEANFILES+=   observer.h observer.inc gdb_stdint.h gstdint.h
+CLEANFILES+=   observer.h observer.inc gdb_stdint.h
 
 
 .include <bsd.lib.mk>
index e478c56..2ee75d2 100644 (file)
@@ -1,6 +1,10 @@
 /* config.h.  Generated from config.in by configure.  */
 /* config.in.  Generated from configure.ac by autoheader.  */
 
+/* Define if the compiler is building for multiple architectures of Apple
+   platforms at once. */
+/* #undef AA_APPLE_UNIVERSAL_BUILD */
+
 /* Define if building universal (internal helper macro) */
 /* #undef AC_APPLE_UNIVERSAL_BUILD */
 
 #define DEBUGDIR_RELOCATABLE 1
 
 /* Define to BFD's default architecture. */
-/* This is set by Makefile.ARCH */
 /* #define DEFAULT_BFD_ARCH bfd_i386_arch */
 
 /* Define to BFD's default target vector. */
-/* This is set by Makefile.ARCH */
 /* #define DEFAULT_BFD_VEC bfd_elf32_i386_freebsd_vec */
 
 /* Define to 1 if translation of program messages to the user's native
 /* Define to the default OS ABI for this configuration. */
 #define GDB_OSABI_DEFAULT GDB_OSABI_DRAGONFLY
 
+/* Define to 1 when the gnulib module memchr should be tested. */
+#define GNULIB_TEST_MEMCHR 1
+
+/* Define to 1 when the gnulib module memmem should be tested. */
+#define GNULIB_TEST_MEMMEM 1
+
 /* Define to 1 if you have `alloca', as a function or macro. */
 #define HAVE_ALLOCA 1
 
    */
 #define HAVE_DECL_GETOPT 1
 
+/* Define to 1 if you have the declaration of `getthrds', and to 0 if you
+   don't. */
+/* #undef HAVE_DECL_GETTHRDS */
+
 /* Define to 1 if you have the declaration of `malloc', and to 0 if you don't.
    */
 #define HAVE_DECL_MALLOC 1
 /* Define to 1 if you have the `getpagesize' function. */
 #define HAVE_GETPAGESIZE 1
 
+/* Define to 1 if you have the `getrlimit' function. */
+#define HAVE_GETRLIMIT 1
+
 /* Define to 1 if you have the `getrusage' function. */
 #define HAVE_GETRUSAGE 1
 
 /* Define if <sys/procfs.h> has gregset_t. */
 #define HAVE_GREGSET_T 1
 
-/* Define if you have HPUX threads */
-/* #undef HAVE_HPUX_THREAD_SUPPORT */
-
 /* Define if you have the iconv() function. */
 #define HAVE_ICONV 1
 
 /* Define to 1 if you have the `iconvlist' function. */
 /* #undef HAVE_ICONVLIST */
 
-/* Define if your compiler supports the #include_next directive. */
-#define HAVE_INCLUDE_NEXT 1
-
 /* Define to 1 if you have the <inttypes.h> header file. */
 #define HAVE_INTTYPES_H 1
 
 /* Define if Python 2.6 is being used. */
 /* #undef HAVE_LIBPYTHON2_6 */
 
+/* Define if Python 2.7 is being used. */
+/* #undef HAVE_LIBPYTHON2_7 */
+
 /* Define if libunwind library is being used. */
 /* #undef HAVE_LIBUNWIND */
 
 /* Define to 1 if you have the <machine/reg.h> header file. */
 #define HAVE_MACHINE_REG_H 1
 
+/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+   config.h and <sys/mman.h>. */
+#define HAVE_MAP_ANONYMOUS 1
+
 /* Define to 1 if you have the `memchr' function. */
 #define HAVE_MEMCHR 1
 
 /* Define to 1 if you have the `monstartup' function. */
 #define HAVE_MONSTARTUP 1
 
+/* Define to 1 if you have the `mprotect' function. */
+#define HAVE_MPROTECT 1
+
 /* Define to 1 if you have the <ncurses.h> header file. */
 #define HAVE_NCURSES_H 1
 
 /* Define to 1 if you have the <poll.h> header file. */
 #define HAVE_POLL_H 1
 
+/* Define to 1 if you have the `posix_madvise' function. */
+#define HAVE_POSIX_MADVISE 1
+
 /* Define to 1 if you have the `pread64' function. */
 /* #undef HAVE_PREAD64 */
 
 /* Define if Python interpreter is being linked in. */
 /* #undef HAVE_PYTHON */
 
+/* Define to 1 if btowc is declared even after undefining macros. */
+#define HAVE_RAW_DECL_BTOWC 1
+
+/* Define to 1 if mbrlen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBRLEN 1
+
+/* Define to 1 if mbrtowc is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBRTOWC 1
+
+/* Define to 1 if mbsinit is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBSINIT 1
+
+/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_MBSNRTOWCS */
+
+/* Define to 1 if mbsrtowcs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MBSRTOWCS 1
+
+/* Define to 1 if memmem is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MEMMEM 1
+
+/* Define to 1 if mempcpy is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_MEMPCPY */
+
+/* Define to 1 if memrchr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_MEMRCHR 1
+
+/* Define to 1 if rawmemchr is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_RAWMEMCHR */
+
+/* Define to 1 if stpcpy is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STPCPY 1
+
+/* Define to 1 if stpncpy is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_STPNCPY */
+
+/* Define to 1 if strcasestr is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRCASESTR 1
+
+/* Define to 1 if strchrnul is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_STRCHRNUL */
+
+/* Define to 1 if strdup is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRDUP 1
+
+/* Define to 1 if strncat is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRNCAT 1
+
+/* Define to 1 if strndup is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRNDUP 1
+
+/* Define to 1 if strnlen is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRNLEN 1
+
+/* Define to 1 if strpbrk is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRPBRK 1
+
+/* Define to 1 if strsep is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRSEP 1
+
+/* Define to 1 if strsignal is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRSIGNAL 1
+
+/* Define to 1 if strtok_r is declared even after undefining macros. */
+#define HAVE_RAW_DECL_STRTOK_R 1
+
+/* Define to 1 if strverscmp is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_STRVERSCMP */
+
+/* Define to 1 if wcrtomb is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCRTOMB 1
+
+/* Define to 1 if wcsnrtombs is declared even after undefining macros. */
+/* #undef HAVE_RAW_DECL_WCSNRTOMBS */
+
+/* Define to 1 if wcsrtombs is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCSRTOMBS 1
+
+/* Define to 1 if wctob is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCTOB 1
+
+/* Define to 1 if wcwidth is declared even after undefining macros. */
+#define HAVE_RAW_DECL_WCWIDTH 1
+
 /* Define to 1 if you have the `realpath' function. */
 #define HAVE_REALPATH 1
 
+/* Define to 1 if you have the `resize_term' function. */
+#define HAVE_RESIZE_TERM 1
+
 /* Define to 1 if you have the `sbrk' function. */
 #define HAVE_SBRK 1
 
 /* Define to 1 if you have the `setpgrp' function. */
 #define HAVE_SETPGRP 1
 
+/* Define to 1 if you have the `setrlimit' function. */
+#define HAVE_SETRLIMIT 1
+
 /* Define to 1 if you have the `setsid' function. */
 #define HAVE_SETSID 1
 
 /* Define to 1 if you have the <sys/ioctl.h> header file. */
 #define HAVE_SYS_IOCTL_H 1
 
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#define HAVE_SYS_MMAN_H 1
+
 /* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
    */
 /* #undef HAVE_SYS_NDIR_H */
 /* Define to 1 if you have the <vfork.h> header file. */
 /* #undef HAVE_VFORK_H */
 
+/* Define to 1 if you have the `waitpid' function. */
+#define HAVE_WAITPID 1
+
 /* Define to 1 if you have the <wait.h> header file. */
 /* #undef HAVE_WAIT_H */
 
 /* Define to 1 if you have the <wchar.h> header file. */
 #define HAVE_WCHAR_H 1
 
+/* Define if you have the 'wchar_t' type. */
+#define HAVE_WCHAR_T 1
+
+/* Define if you have the 'wint_t' type. */
+#define HAVE_WINT_T 1
+
 /* Define to 1 if `fork' works. */
 #define HAVE_WORKING_FORK 1
 
 /* Define to 1 if `vfork' works. */
 #define HAVE_WORKING_VFORK 1
 
+/* Define to 1 if you have the `wresize' function. */
+#define HAVE_WRESIZE 1
+
 /* Define to 1 if you have the `XML_StopParser' function. */
 /* #undef HAVE_XML_STOPPARSER */
 
 /* Define as const if the declaration of iconv() needs const. */
 #define ICONV_CONST 
 
+/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */
+#define MAP_ANONYMOUS MAP_ANON
+
 /* Define if you want to use new multi-fd /proc interface (replaces
    HAVE_MULTIPLE_PROC_FDS as well as other macros). */
 /* #undef NEW_PROC_API */
    'ptrdiff_t'. */
 /* #undef PTRDIFF_T_SUFFIX */
 
+/* Define if the python directory should be relocated when GDB is moved. */
+/* #undef PYTHON_PATH_RELOCATABLE */
+
 /* Relocated directory for source files. */
 /* #undef RELOC_SRCDIR */
 
    'wint_t'. */
 /* #undef WINT_T_SUFFIX */
 
+/* Define if --with-python provides a path, either directly or via
+   python-config.py --exec-prefix. */
+/* #undef WITH_PYTHON_PATH */
+
 /* Define if the simulator is being linked in. */
 /* #undef WITH_SIM */
 
 # endif
 #endif
 
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
 /* Define to 1 so <sys/proc.h> gets a definition of anon_hdl. Works around a
    <sys/proc.h> problem on IRIX 5. */
 /* #undef _KMEMUSER */
 
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
 /* Define to 1 if on MINIX. */
 /* #undef _MINIX */
 
 /* Define if <sys/link.h> has link_map32 (solaris sparc-64 target) */
 /* #undef _SYSCALL32 */
 
+/* Define to 500 only on HP-UX. */
+/* #undef _XOPEN_SOURCE */
+
 /* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
 # define _ALL_SOURCE 1
 /* #undef inline */
 #endif
 
-/* Define to rpl_memcmp if the replacement function should be used. */
-/* #undef memcmp */
+/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for MacOS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif
 
 /* Define to `int' if <sys/types.h> does not define. */
 /* #undef pid_t */
 
+/* readline-6.0 started to use different name. */
+/* #undef readline_echoing_p */
+
 /* Define to the equivalent of the C99 'restrict' keyword, or to
    nothing if this is not supported.  Do not define if restrict is
    supported directly.  */
 #define restrict __restrict
-/* Work around a bug in Sun C++: it does not support _Restrict, even
-   though the corresponding Sun C compiler does, which causes
-   "#define restrict _Restrict" in the previous line.  Perhaps some future
-   version of Sun C++ will work with _Restrict; if so, it'll probably
-   define __RESTRICT, just as Sun C does.  */
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
 #if defined __SUNPRO_CC && !defined __RESTRICT
 # define _Restrict
+# define __restrict__
 #endif
 
+/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+
+
 /* Define as `fork' if `vfork' does not work. */
 /* #undef vfork */
diff --git a/gnu/usr.bin/gdb/libgdb/gstdint.h b/gnu/usr.bin/gdb/libgdb/gstdint.h
new file mode 100644 (file)
index 0000000..4435ec1
--- /dev/null
@@ -0,0 +1,47 @@
+/* generated for  gcc (DragonFly) 4.4.5 */
+
+#ifndef GCC_GENERATED_STDINT_H
+#define GCC_GENERATED_STDINT_H 1
+
+#include <sys/types.h>
+#include <stdint.h>
+/* glibc uses these symbols as guards to prevent redefinitions.  */
+#ifdef __int8_t_defined
+#define _INT8_T
+#define _INT16_T
+#define _INT32_T
+#endif
+#ifdef __uint32_t_defined
+#define _UINT32_T
+#endif
+
+
+/* Some systems have guard macros to prevent redefinitions, define them.  */
+#ifndef _INT8_T
+#define _INT8_T
+#endif
+#ifndef _INT16_T
+#define _INT16_T
+#endif
+#ifndef _INT32_T
+#define _INT32_T
+#endif
+#ifndef _UINT8_T
+#define _UINT8_T
+#endif
+#ifndef _UINT16_T
+#define _UINT16_T
+#endif
+#ifndef _UINT32_T
+#define _UINT32_T
+#endif
+
+/* system headers have good uint64_t and int64_t */
+#ifndef _INT64_T
+#define _INT64_T
+#endif
+#ifndef _UINT64_T
+#define _UINT64_T
+#endif
+
+#endif /* GCC_GENERATED_STDINT_H */
index a0b9968..40354d0 100644 (file)
@@ -13,7 +13,8 @@ SRCS+=        getopt1.c getruntime.c hashtab.c objalloc.c obstack.c
 SRCS+= regex.c safe-ctype.c splay-tree.c
 
 SRCS+= argv.c concat.c hex.c lbasename.c xexit.c xstrdup.c xstrerror.c
-SRCS+= lrealpath.c make-relative-prefix.c filename_cmp.c stpcpy.c unlink-if-ordinary.c
+SRCS+= lrealpath.c make-relative-prefix.c filename_cmp.c stpcpy.c
+SRCS+= unlink-if-ordinary.c
 SRCS+= pexecute.c pex-common.c pex-one.c pex-unix.c make-temp-file.c
 
 .include <bsd.lib.mk>