If you find inaccuracies in this list, please send mail to
gdb-patches@sources.redhat.com.  If you would like to work on any
of these, you should consider sending mail to the same address, to
find out whether anyone else is working on it.


			GDB 5.1 - Fixes
			===============

Below is a list of problems identified during the GDB 5.0 release
cycle.  People hope to have these problems fixed in 5.1.

--

Wow, three bug reports for the same problem in one day!  We should
probably make fixing this a real priority :-).

Anyway, thanks for reporting.

The following patch will fix the problems with setting breakpoints in
dynamically loaded objects:

   http://sources.redhat.com/ml/gdb-patches/2000-05/msg00230.html

This patch isn't checked in yet (ping Michael/JimB), but I hope this
will be in the next GDB release.

There should really be a test in the testsuite for this problem, since
it keeps coming up :-(.  Any volunteers?

Mark

--

		GDB 5.1 - New features
		======================

The following new features should be included in 5.1.

--

		GDB 5.1 - Cleanups
		==================

The following code cleanups will hopefully be applied to GDB 5.1.

--

		GDB 5.1 - Known Problems
		========================

--

z8k

The z8k has suffered bit rot and is known to not build.  The problem
was occuring in the opcodes directory.

--

The BFD directory requires bug-fixed AUTOMAKE et.al.

AUTOMAKE 1.4 incorrectly set the TEXINPUTS environment variable.  It
contained the full path to texinfo.tex when it should have only
contained the directory.  The bug has been fixed in the current
AUTOMAKE sources.  Automake snapshots can be found in:
	ftp://sources.redhat.com/pub/gdb/infrastructure
and	ftp://sources.redhat.com/pub/binutils

--

Solaris 8 x86 CURSES_H problem
http://sources.redhat.com/ml/gdb/2000-07/msg00038.html

The original problem was worked around with:

    2000-06-06  Michael Snyder  <msnyder@cygnus.com>

        * configure.in: Enable autoconf to find curses.h on Solaris 2.8.
        * configure: Regenerate.

When building both GDB and SID using the same source tree the problem
will still occure. sid/component/configure.in mis-configures
<curses.h> and leaves wrong information in the config cache.

--

		GDB 5.2 - Fixes
		===============

--

		GDB 5.2 - New features
		======================

--

GCC 3.0 ABI support (but hopefully sooner...).

--

Objective C/C++ support (but hopefully sooner...).

--

Import of readline 4.2

--

		GDB 5.2 - Cleanups
		==================

The following cleanups have been identified as part of GDB 5.2.

--

Remove old code that does not use ui_out functions and all the related
"ifdef"s.  This also allows the elimination of -DUI_OUT from
Makefile.in and configure.in.

--

Compiler warnings.

Eliminate warnings for all targets on at least one host for one of the
-W flags.  Flags up for debate include: -Wswitch -Wcomment -trigraphs
-Wtrigraphs -Wunused-function -Wunused-label -Wunused-variable
-Wunused-value -Wchar-subscripts -Wtraditional -Wshadow -Wcast-qual
-Wcast-align -Wwrite-strings -Wconversion -Wstrict-prototypes
-Wmissing-prototypes -Wmissing-declarations -Wredundant-decls
-Woverloaded-virtual -Winline

--

Deprecate, if not delete, the following:

        register[]
        register_valid[]
	REGISTER_BYTE()
                Replaced by, on the target side
                  supply_register()
                and on core-gdb side:
                  {read,write}_register_gen()
		Remote.c will need to use something
		other than REGISTER_BYTE() and
		REGISTER_RAW_SIZE() when unpacking
		[gG] packets.

        STORE_PSEUDO_REGISTER
        FETCH_PSEUDO_REGISTER
                Now handed by the methods
                  gdbarch_{read,write}_register()
                which sits between core GDB and
                the register cache.

        REGISTER_CONVERTIBLE
        REGISTER_CONVERT_TO_RAW
        REGISTER_CONVERT_TO_VIRTUAL
                I think these three are redundant.
                gdbarch_register_{read,write} can
                do any conversion it likes.

        REGISTER_VIRTUAL_SIZE
        MAX_REGISTER_VIRTUAL_SIZE
        REGISTER_VIRTUAL_TYPE
                I think these can be replaced by
		the pair:
                  FRAME_REGISTER_TYPE(frame, regnum)
                  REGISTER_TYPE(regnum)

	DO_REGISTERS_INFO
		Replace with
		 FRAME_REGISTER_INFO (frame, ...)

	REGISTER_SIM_REGNO()
		If nothing else rename this so that
		how it relates to rawreg and the
		regnum is clear.

	REGISTER_BYTES
		The size of the cache can be computed
		on the fly.

	IS_TRAPPED_INTERNALVAR
		The pseudo registers should eventually make
		this redundant.

--

Obsolete the targets:

arm*-wince-pe
mips*-*-pe
sh*-*-pe

--

Obsolete the protocols:

RDB?

``As of version 5.3, WindRiver has removed the RDB server (RDB
protocol support is built into gdb).''  -- Till.

--

Restructure gdb directory tree so that it avoids any 8.3 and 14
filename problems.

--

Convert GDB build process to AUTOMAKE.

See also sub-directory configure below.

The current convention is (kind of) to use $(<header>_h) in all
dependency lists.  It isn't done in a consistent way.

--

		GDB 5.2 - Known Problems
		========================

--

		Code Cleanups: General
		======================

The following are more general cleanups and fixes.  They are not tied
to any specific release.


			New Features and Fixes
			======================

These are harder than cleanups but easier than work involving
fundamental architectural change.

--

			Language Support
			================

New languages come onto the scene all the time.

--

Re: Various C++ things

value_headof/value_from_vtable_info are worthless, and should be
removed.  The one place in printcmd.c that uses it should use the RTTI
functions.

RTTI for g++ should be using the typeinfo functions rather than the
vtables.  The typeinfo functions are always at offset 4 from the
beginning of the vtable, and are always right. The vtables will have
weird names like E::VB sometimes.  The typeinfo function will always
be "E type_info function", or somesuch.

value_virtual_fn_field needs to be fixed so there are no failures for
virtual functions for C++ using g++.

Testsuite cases are the major priority right now for C++ support,
since i have to make a lot of changes that could potentially break
each other.

--


			Symbol Support
			==============

--

Investiagate ways of reducing memory.

--

Investigate ways of improving load time.

--

			Testsuite Support
			=================

There are never to many testcases.

--

Better thread testsuite.

--

Better C++ testsuite.

--

		Architectural Changes: General
		==============================

These are harder than simple cleanups / fixes and, consequently
involve more work.  Typically an Architectural Change will be broken
down into a more digestible set of cleanups and fixes.

--

		Architectural Change: Multi-arch et al.
		=======================================

The long term objective is to remove all assumptions that there is a
single target with a single address space with a single instruction
set architecture and single application binary interface.

This is an ongoing effort.  The first milestone is to enable
``multi-arch'' where by all architectural decisions are made at
runtime.

It should be noted that ``gdbarch'' is really ``gdbabi'' and
``gdbisa''.  Once things are multi-arched breaking that down correctly
will become much easier.

--

	Architectural Change: MI, LIBGDB and scripting languages
	========================================================

See also architectural changes related to the event loop.  LIBGDB
can't be finished until there is a generic event loop being used by
all targets.

The long term objective is it to be possible to integrate GDB into
scripting languages.

--

		Architectural Change: Async
		===========================

While GDB uses an event loop when prompting the user for input.  That
event loop is not exploited by targets when they allow the target
program to continue.  Typically targets still block in (target_wait())
until the program again halts.

The closest a target comes to supporting full asynchronous mode are
the remote targets ``async'' and ``extended-async''.

--

# Local Variables:
# mode: text
# End:
