mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-26 11:22:28 +08:00
Roll in information from README.
This commit is contained in:
@ -81,7 +81,7 @@ When building support for a new host and/or target, much of the work you
|
|||||||
need to do is handled by specifying configuration files;
|
need to do is handled by specifying configuration files;
|
||||||
@pxref{Config,,Adding a New Configuration}. Further work can be
|
@pxref{Config,,Adding a New Configuration}. Further work can be
|
||||||
divided into ``host-dependent'' (@pxref{Host,,Adding a New Host}) and
|
divided into ``host-dependent'' (@pxref{Host,,Adding a New Host}) and
|
||||||
``target=dependent'' (@pxref{Target,,Adding a New Target}). The
|
``target-dependent'' (@pxref{Target,,Adding a New Target}). The
|
||||||
following discussion is meant to explain the difference between hosts
|
following discussion is meant to explain the difference between hosts
|
||||||
and targets.
|
and targets.
|
||||||
|
|
||||||
@ -217,17 +217,31 @@ system that's already supported, you are done.
|
|||||||
|
|
||||||
If you want to use GDB to debug programs that run on the new machine,
|
If you want to use GDB to debug programs that run on the new machine,
|
||||||
you have to get it to understand the machine's object files, symbol
|
you have to get it to understand the machine's object files, symbol
|
||||||
files, and interfaces to processes. @pxref{Target}.
|
files, and interfaces to processes. @pxref{Target}
|
||||||
|
|
||||||
Add a file @file{gdb/xconfig/@var{xxx}} which specifies whatever object
|
Several files control GDB's configuration for host systems:
|
||||||
files are needed as the makefile macro @samp{XDEPFILES=@dots{}}. In the
|
|
||||||
same file, specify the header file to describe @var{xxx} as
|
@table @file
|
||||||
|
@item gdb/xconfig/@var{xxx}
|
||||||
|
Specifies what object files are needed when hosting on machine @var{xxx},
|
||||||
|
by defining the makefile macro @samp{XDEPFILES=@dots{}}. Also
|
||||||
|
specifies the header file which describes @var{xxx}, by defining
|
||||||
@samp{XM_FILE= xm-@var{xxx}.h}. You can also define @samp{CC},
|
@samp{XM_FILE= xm-@var{xxx}.h}. You can also define @samp{CC},
|
||||||
@samp{REGEX} and @samp{REGEX1}, @samp{SYSV_DEFINE}, @samp{XM_CFLAGS},
|
@samp{REGEX} and @samp{REGEX1}, @samp{SYSV_DEFINE}, @samp{XM_CFLAGS},
|
||||||
etc. in there; see @file{Makefile.in}.
|
@samp{XM_ADD_FILES}, @samp{XM_CLIBS}, @samp{XM_CDEPS},
|
||||||
|
etc.; see @file{Makefile.in}.
|
||||||
|
|
||||||
Create @file{gdb/xm-@var{xxx}.h} with the appropriate @code{#define}s
|
@item gdb/xm-@var{xxx}.h
|
||||||
for your system (crib from existing @file{xm-*.h} files).
|
(@file{xm.h} is a link to this file, created by configure).
|
||||||
|
Contains C macro definitions describing the host system environment,
|
||||||
|
such as byte order, host C compiler and library, ptrace support,
|
||||||
|
and core file structure. Crib from existing @file{xm-*.h} files
|
||||||
|
to create a new one.
|
||||||
|
|
||||||
|
@item gdb/@var{xxx}-xdep.c
|
||||||
|
Contains any miscellaneous C code required for this machine
|
||||||
|
as a host. On some machines it doesn't exist at all.
|
||||||
|
@end table
|
||||||
|
|
||||||
There are some ``generic'' versions of routines that can be used by
|
There are some ``generic'' versions of routines that can be used by
|
||||||
various host systems. These can be customized in various ways by macros
|
various host systems. These can be customized in various ways by macros
|
||||||
@ -242,16 +256,20 @@ into @code{XDEPFILES}.
|
|||||||
|
|
||||||
@subheading Generic Host Support Files
|
@subheading Generic Host Support Files
|
||||||
|
|
||||||
@table @code
|
@table @file
|
||||||
|
|
||||||
@item infptrace.c
|
@item infptrace.c
|
||||||
@code{ptrace} support.
|
This is the low level interface to inferior processes for systems
|
||||||
|
using the Unix @code{ptrace} call in a vanilla way.
|
||||||
|
|
||||||
@item coredep.c:fetch_core_registers()
|
@item coredep.c::fetch_core_registers()
|
||||||
Support for reading registers out of a core file. This routine calls
|
Support for reading registers out of a core file. This routine calls
|
||||||
@code{register_addr(}), see below.
|
@code{register_addr()}, see below.
|
||||||
|
Now that BFD is used to read core files, virtually all machines should
|
||||||
|
use @code{coredep.c}, and should just provide @code{fetch_core_registers} in
|
||||||
|
@code{@var{xxx}-xdep.c}.
|
||||||
|
|
||||||
@item coredep.c:register_addr()
|
@item coredep.c::register_addr()
|
||||||
If your @code{xm-@var{xxx}.h} file defines the macro
|
If your @code{xm-@var{xxx}.h} file defines the macro
|
||||||
@code{REGISTER_U_ADDR(reg)} to be the offset within the @samp{user}
|
@code{REGISTER_U_ADDR(reg)} to be the offset within the @samp{user}
|
||||||
struct of a register (represented as a GDB register number),
|
struct of a register (represented as a GDB register number),
|
||||||
@ -336,26 +354,66 @@ For a new target called @var{ttt}, first specify the configuration as
|
|||||||
described in @ref{Config,,Adding a New Configuration}. If your new
|
described in @ref{Config,,Adding a New Configuration}. If your new
|
||||||
target is the same as your new host, you've probably already done that.
|
target is the same as your new host, you've probably already done that.
|
||||||
|
|
||||||
Add a file @file{gdb/tconfig/@var{ttt}} which specifies whatever object
|
A variety of files specify attributes of the target environment:
|
||||||
files are needed as the makefile macro @samp{TDEPFILES=@dots{}}. In the
|
|
||||||
same file, specify the header file to describe @var{ttt} as
|
@table @file
|
||||||
|
@item gdb/tconfig/@var{ttt}
|
||||||
|
Specifies what object files are needed for target @var{ttt}, by
|
||||||
|
defining the makefile macro @samp{TDEPFILES=@dots{}}.
|
||||||
|
Also specifies the header file which describes @var{ttt}, by defining
|
||||||
@samp{TM_FILE= tm-@var{ttt}.h}. You can also define @samp{CC},
|
@samp{TM_FILE= tm-@var{ttt}.h}. You can also define @samp{CC},
|
||||||
@samp{REGEX} and @samp{REGEX1}, @samp{SYSV_DEFINE}, @samp{XM_CFLAGS},
|
@samp{REGEX} and @samp{REGEX1}, @samp{SYSV_DEFINE}, @samp{TM_CFLAGS},
|
||||||
etc. in there; see @file{Makefile.in}.
|
and other Makefile variables here; see @file{Makefile.in}.
|
||||||
|
|
||||||
Create @file{gdb/tm-@var{ttt}.h} with the appropriate @code{#define}s
|
@item gdb/tm-@var{ttt}.h
|
||||||
for your system (crib from existing @file{tm-*.h} files).
|
(@file{tm.h} is a link to this file, created by configure).
|
||||||
|
Contains macro definitions about the target machine's
|
||||||
|
registers, stack frame format and instructions.
|
||||||
|
Crib from existing @file{tm-*.h} files when building a new one.
|
||||||
|
|
||||||
When adding support for a new target machine, there are various areas
|
@item gdb/@var{ttt}-tdep.c
|
||||||
of support that might need change, or might be OK.
|
Contains any miscellaneous code required for this target machine.
|
||||||
|
On some machines it doesn't exist at all. Sometimes the macros
|
||||||
|
in @file{tm-@var{ttt}.h} become very complicated, so they are
|
||||||
|
implemented as functions here instead, and the macro is simply
|
||||||
|
defined to call the function.
|
||||||
|
|
||||||
The file @file{exec.c} defines functions for accessing files that are
|
@item gdb/exec.c
|
||||||
|
Defines functions for accessing files that are
|
||||||
executable on the target system. These functions open and examine an
|
executable on the target system. These functions open and examine an
|
||||||
exec file, extract data from one, write data to one, print information
|
exec file, extract data from one, write data to one, print information
|
||||||
about one, etc. Now that executable files are handled with BFD, every
|
about one, etc. Now that executable files are handled with BFD, every
|
||||||
target should be able to use the generic exec.c rather than its
|
target should be able to use the generic exec.c rather than its
|
||||||
own custom code.
|
own custom code.
|
||||||
|
|
||||||
|
@item gdb/@var{arch}-pinsn.c
|
||||||
|
Prints (disassembles) the target machine's instructions.
|
||||||
|
This file is usually shared with other target machines which use the
|
||||||
|
same processor, which is why it is @file{@var{arch}-pinsn.c} rather
|
||||||
|
than @file{@var{ttt}-pinsn.c}.
|
||||||
|
|
||||||
|
@item gdb/@var{arch}-opcode.h
|
||||||
|
Contains some large initialized
|
||||||
|
data structures describing the target machine's instructions.
|
||||||
|
This is a bit strange for a @file{.h} file, but it's OK since
|
||||||
|
it is only included in one place. @file{@var{arch}-opcode.h} is shared
|
||||||
|
between the debugger and the assembler, if the GNU assembler has been
|
||||||
|
ported to the target machine.
|
||||||
|
|
||||||
|
@item gdb/tm-@var{arch}.h
|
||||||
|
This often exists to describe the basic layout of the target machine's
|
||||||
|
processor chip (registers, stack, etc).
|
||||||
|
If used, it is included by @file{tm-@var{xxx}.h}. It can
|
||||||
|
be shared among many targets that use the same processor.
|
||||||
|
|
||||||
|
@item gdb/@var{arch}-tdep.c
|
||||||
|
Similarly, there are often common subroutines that are shared by all
|
||||||
|
target machines that use this particular architecture.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
When adding support for a new target machine, there are various areas
|
||||||
|
of support that might need change, or might be OK.
|
||||||
|
|
||||||
If you are using an existing object file format (a.out or COFF),
|
If you are using an existing object file format (a.out or COFF),
|
||||||
there is probably little to be done. See @file{bfd/doc/bfd.texinfo}
|
there is probably little to be done. See @file{bfd/doc/bfd.texinfo}
|
||||||
for more information on writing new a.out or COFF versions.
|
for more information on writing new a.out or COFF versions.
|
||||||
@ -363,15 +421,9 @@ for more information on writing new a.out or COFF versions.
|
|||||||
If you need to add a new object file format, you are beyond the scope
|
If you need to add a new object file format, you are beyond the scope
|
||||||
of this document right now. Look at the structure of the a.out
|
of this document right now. Look at the structure of the a.out
|
||||||
and COFF support, build a transfer vector (@code{xvec}) for your new format,
|
and COFF support, build a transfer vector (@code{xvec}) for your new format,
|
||||||
and start populating it with routines. Add it to the list in
|
and start populating it with routines. Add it to the list in
|
||||||
@file{bfd/targets.c}.
|
@file{bfd/targets.c}.
|
||||||
|
|
||||||
If you are adding a new existing CPU chip (e.g. m68k family), you'll
|
|
||||||
need to define an @file{@var{xarch}-opcode.h} file, a
|
|
||||||
@file{tm-@var{xarch}.h} file that gives the basic layout of the chip
|
|
||||||
(registers, stack, etc), probably an @file{@var{xarch}-tdep.c} file that
|
|
||||||
has support routines for @file{tm-@var{xarch}.h}, etc.
|
|
||||||
|
|
||||||
If you are adding a new operating system for an existing CPU chip, add a
|
If you are adding a new operating system for an existing CPU chip, add a
|
||||||
@file{tm-@var{xos}.h} file that describes the operating system
|
@file{tm-@var{xos}.h} file that describes the operating system
|
||||||
facilities that are unusual (extra symbol table info; the breakpoint
|
facilities that are unusual (extra symbol table info; the breakpoint
|
||||||
@ -394,12 +446,14 @@ To add other languages to GDB's expression parser, follow the following steps:
|
|||||||
This should reside in a file @file{@var{lang}-exp.y}. Routines for building
|
This should reside in a file @file{@var{lang}-exp.y}. Routines for building
|
||||||
parsed expressions into a @samp{union exp_element} list are in @file{parse.c}.
|
parsed expressions into a @samp{union exp_element} list are in @file{parse.c}.
|
||||||
|
|
||||||
Since we can't depend upon everyone having Bison, the following lines
|
Since we can't depend upon everyone having Bison, and YACC produces
|
||||||
@emph{must} be included at the top of the YACC parser:
|
parsers that define a bunch of global names, the following lines
|
||||||
|
@emph{must} be included at the top of the YACC parser, to prevent
|
||||||
|
the various parsers from defining the same global names:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
#define yyparse @var{lang}_parse
|
#define yyparse @var{lang}_parse
|
||||||
#define yylex @var{lang}_lex
|
#define yylex @var{lang}_lex
|
||||||
#define yyerror @var{lang}_error
|
#define yyerror @var{lang}_error
|
||||||
#define yylval @var{lang}_lval
|
#define yylval @var{lang}_lval
|
||||||
#define yychar @var{lang}_char
|
#define yychar @var{lang}_char
|
||||||
@ -412,10 +466,10 @@ Since we can't depend upon everyone having Bison, the following lines
|
|||||||
#define yypgo @var{lang}_pgo
|
#define yypgo @var{lang}_pgo
|
||||||
#define yyact @var{lang}_act
|
#define yyact @var{lang}_act
|
||||||
#define yyexca @var{lang}_exca
|
#define yyexca @var{lang}_exca
|
||||||
|
#define yyerrflag @var{lang}_errflag
|
||||||
|
#define yynerrs @var{lang}_nerrs
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
This will prevent name conflicts between the various parsers.
|
|
||||||
|
|
||||||
@item Add any evaluation routines, if necessary
|
@item Add any evaluation routines, if necessary
|
||||||
|
|
||||||
If you need new opcodes (that represent the operations of the language),
|
If you need new opcodes (that represent the operations of the language),
|
||||||
|
Reference in New Issue
Block a user