summaryrefslogtreecommitdiff
path: root/gdb/doc/gdbint.info-3
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/doc/gdbint.info-3')
-rw-r--r--gdb/doc/gdbint.info-3316
1 files changed, 316 insertions, 0 deletions
diff --git a/gdb/doc/gdbint.info-3 b/gdb/doc/gdbint.info-3
new file mode 100644
index 00000000000..aa1fd565f9d
--- /dev/null
+++ b/gdb/doc/gdbint.info-3
@@ -0,0 +1,316 @@
+This is Info file gdbint.info, produced by Makeinfo version 1.68 from
+the input file ./gdbint.texinfo.
+
+START-INFO-DIR-ENTRY
+* Gdb-Internals: (gdbint). The GNU debugger's internals.
+END-INFO-DIR-ENTRY
+
+ This file documents the internals of the GNU debugger GDB.
+
+ Copyright 1990-1999 Free Software Foundation, Inc. Contributed by
+Cygnus Solutions. Written by John Gilmore. Second Edition by Stan
+Shebs.
+
+ Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+ Permission is granted to copy or distribute modified versions of this
+manual under the terms of the GPL (for which purpose this text may be
+regarded as a program in the language TeX).
+
+
+File: gdbint.info, Node: Porting GDB, Next: Hints, Prev: Coding, Up: Top
+
+Porting GDB
+***********
+
+ Most of the work in making GDB compile on a new machine is in
+specifying the configuration of the machine. This is done in a
+dizzying variety of header files and configuration scripts, which we
+hope to make more sensible soon. Let's say your new host is called an
+XYZ (e.g. `sun4'), and its full three-part configuration name is
+`ARCH-XVEND-XOS' (e.g. `sparc-sun-sunos4'). In particular:
+
+ In the top level directory, edit `config.sub' and add ARCH, XVEND,
+and XOS to the lists of supported architectures, vendors, and operating
+systems near the bottom of the file. Also, add XYZ as an alias that
+maps to `ARCH-XVEND-XOS'. You can test your changes by running
+
+ ./config.sub XYZ
+
+and
+ ./config.sub `ARCH-XVEND-XOS'
+
+which should both respond with `ARCH-XVEND-XOS' and no error messages.
+
+ You need to port BFD, if that hasn't been done already. Porting BFD
+is beyond the scope of this manual.
+
+ To configure GDB itself, edit `gdb/configure.host' to recognize your
+system and set `gdb_host' to XYZ, and (unless your desired target is
+already available) also edit `gdb/configure.tgt', setting `gdb_target'
+to something appropriate (for instance, XYZ).
+
+ Finally, you'll need to specify and define GDB's host-, native-, and
+target-dependent `.h' and `.c' files used for your configuration.
+
+Configuring GDB for Release
+===========================
+
+ From the top level directory (containing `gdb', `bfd', `libiberty',
+and so on):
+ make -f Makefile.in gdb.tar.gz
+
+ This will properly configure, clean, rebuild any files that are
+distributed pre-built (e.g. `c-exp.tab.c' or `refcard.ps'), and will
+then make a tarfile. (If the top level directory has already been
+configured, you can just do `make gdb.tar.gz' instead.)
+
+ This procedure requires:
+ * symbolic links
+
+ * `makeinfo' (texinfo2 level)
+
+ * TeX
+
+ * `dvips'
+
+ * `yacc' or `bison'
+
+... and the usual slew of utilities (`sed', `tar', etc.).
+
+TEMPORARY RELEASE PROCEDURE FOR DOCUMENTATION
+---------------------------------------------
+
+ `gdb.texinfo' is currently marked up using the texinfo-2 macros,
+which are not yet a default for anything (but we have to start using
+them sometime).
+
+ For making paper, the only thing this implies is the right
+generation of `texinfo.tex' needs to be included in the distribution.
+
+ For making info files, however, rather than duplicating the texinfo2
+distribution, generate `gdb-all.texinfo' locally, and include the files
+`gdb.info*' in the distribution. Note the plural; `makeinfo' will
+split the document into one overall file and five or so included files.
+
+
+File: gdbint.info, Node: Hints, Prev: Porting GDB, Up: Top
+
+Hints
+*****
+
+ Check the `README' file, it often has useful information that does
+not appear anywhere else in the directory.
+
+* Menu:
+
+* Getting Started:: Getting started working on GDB
+* Debugging GDB:: Debugging GDB with itself
+
+
+File: gdbint.info, Node: Getting Started, Up: Hints
+
+Getting Started
+===============
+
+ GDB is a large and complicated program, and if you first starting to
+work on it, it can be hard to know where to start. Fortunately, if you
+know how to go about it, there are ways to figure out what is going on.
+
+ This manual, the GDB Internals manual, has information which applies
+generally to many parts of GDB.
+
+ Information about particular functions or data structures are
+located in comments with those functions or data structures. If you
+run across a function or a global variable which does not have a
+comment correctly explaining what is does, this can be thought of as a
+bug in GDB; feel free to submit a bug report, with a suggested comment
+if you can figure out what the comment should say. If you find a
+comment which is actually wrong, be especially sure to report that.
+
+ Comments explaining the function of macros defined in host, target,
+or native dependent files can be in several places. Sometimes they are
+repeated every place the macro is defined. Sometimes they are where the
+macro is used. Sometimes there is a header file which supplies a
+default definition of the macro, and the comment is there. This manual
+also documents all the available macros.
+
+ Start with the header files. Once you some idea of how GDB's
+internal symbol tables are stored (see `symtab.h', `gdbtypes.h'), you
+will find it much easier to understand the code which uses and creates
+those symbol tables.
+
+ You may wish to process the information you are getting somehow, to
+enhance your understanding of it. Summarize it, translate it to another
+language, add some (perhaps trivial or non-useful) feature to GDB, use
+the code to predict what a test case would do and write the test case
+and verify your prediction, etc. If you are reading code and your eyes
+are starting to glaze over, this is a sign you need to use a more active
+approach.
+
+ Once you have a part of GDB to start with, you can find more
+specifically the part you are looking for by stepping through each
+function with the `next' command. Do not use `step' or you will
+quickly get distracted; when the function you are stepping through
+calls another function try only to get a big-picture understanding
+(perhaps using the comment at the beginning of the function being
+called) of what it does. This way you can identify which of the
+functions being called by the function you are stepping through is the
+one which you are interested in. You may need to examine the data
+structures generated at each stage, with reference to the comments in
+the header files explaining what the data structures are supposed to
+look like.
+
+ Of course, this same technique can be used if you are just reading
+the code, rather than actually stepping through it. The same general
+principle applies--when the code you are looking at calls something
+else, just try to understand generally what the code being called does,
+rather than worrying about all its details.
+
+ A good place to start when tracking down some particular area is
+with a command which invokes that feature. Suppose you want to know how
+single-stepping works. As a GDB user, you know that the `step' command
+invokes single-stepping. The command is invoked via command tables
+(see `command.h'); by convention the function which actually performs
+the command is formed by taking the name of the command and adding
+`_command', or in the case of an `info' subcommand, `_info'. For
+example, the `step' command invokes the `step_command' function and the
+`info display' command invokes `display_info'. When this convention is
+not followed, you might have to use `grep' or `M-x tags-search' in
+emacs, or run GDB on itself and set a breakpoint in `execute_command'.
+
+ If all of the above fail, it may be appropriate to ask for
+information on `bug-gdb'. But *never* post a generic question like "I
+was wondering if anyone could give me some tips about understanding
+GDB"--if we had some magic secret we would put it in this manual.
+Suggestions for improving the manual are always welcome, of course.
+
+
+File: gdbint.info, Node: Debugging GDB, Up: Hints
+
+Debugging GDB with itself
+=========================
+
+ If GDB is limping on your machine, this is the preferred way to get
+it fully functional. Be warned that in some ancient Unix systems, like
+Ultrix 4.2, a program can't be running in one process while it is being
+debugged in another. Rather than typing the command `./gdb ./gdb',
+which works on Suns and such, you can copy `gdb' to `gdb2' and then
+type `./gdb ./gdb2'.
+
+ When you run GDB in the GDB source directory, it will read a
+`.gdbinit' file that sets up some simple things to make debugging gdb
+easier. The `info' command, when executed without a subcommand in a
+GDB being debugged by gdb, will pop you back up to the top level gdb.
+See `.gdbinit' for details.
+
+ If you use emacs, you will probably want to do a `make TAGS' after
+you configure your distribution; this will put the machine dependent
+routines for your local machine where they will be accessed first by
+`M-.'
+
+ Also, make sure that you've either compiled GDB with your local cc,
+or have run `fixincludes' if you are compiling with gcc.
+
+Submitting Patches
+==================
+
+ Thanks for thinking of offering your changes back to the community of
+GDB users. In general we like to get well designed enhancements.
+Thanks also for checking in advance about the best way to transfer the
+changes.
+
+ The GDB maintainers will only install "cleanly designed" patches.
+You may not always agree on what is clean design.
+
+ If the maintainers don't have time to put the patch in when it
+arrives, or if there is any question about a patch, it goes into a
+large queue with everyone else's patches and bug reports.
+
+ The legal issue is that to incorporate substantial changes requires a
+copyright assignment from you and/or your employer, granting ownership
+of the changes to the Free Software Foundation. You can get the
+standard document for doing this by sending mail to
+`gnu@prep.ai.mit.edu' and asking for it. I recommend that people write
+in "All programs owned by the Free Software Foundation" as "NAME OF
+PROGRAM", so that changes in many programs (not just GDB, but GAS,
+Emacs, GCC, etc) can be contributed with only one piece of legalese
+pushed through the bureacracy and filed with the FSF. I can't start
+merging changes until this paperwork is received by the FSF (their
+rules, which I follow since I maintain it for them).
+
+ Technically, the easiest way to receive changes is to receive each
+feature as a small context diff or unidiff, suitable for "patch". Each
+message sent to me should include the changes to C code and header
+files for a single feature, plus ChangeLog entries for each directory
+where files were modified, and diffs for any changes needed to the
+manuals (gdb/doc/gdb.texi or gdb/doc/gdbint.texi). If there are a lot
+of changes for a single feature, they can be split down into multiple
+messages.
+
+ In this way, if I read and like the feature, I can add it to the
+sources with a single patch command, do some testing, and check it in.
+If you leave out the ChangeLog, I have to write one. If you leave out
+the doc, I have to puzzle out what needs documenting. Etc.
+
+ The reason to send each change in a separate message is that I will
+not install some of the changes. They'll be returned to you with
+questions or comments. If I'm doing my job, my message back to you
+will say what you have to fix in order to make the change acceptable.
+The reason to have separate messages for separate features is so that
+other changes (which I *am* willing to accept) can be installed while
+one or more changes are being reworked. If multiple features are sent
+in a single message, I tend to not put in the effort to sort out the
+acceptable changes from the unacceptable, so none of the features get
+installed until all are acceptable.
+
+ If this sounds painful or authoritarian, well, it is. But I get a
+lot of bug reports and a lot of patches, and most of them don't get
+installed because I don't have the time to finish the job that the bug
+reporter or the contributor could have done. Patches that arrive
+complete, working, and well designed, tend to get installed on the day
+they arrive. The others go into a queue and get installed if and when
+I scan back over the queue - which can literally take months sometimes.
+It's in both our interests to make patch installation easy - you get
+your changes installed, and I make some forward progress on GDB in a
+normal 12-hour day (instead of them having to wait until I have a
+14-hour or 16-hour day to spend cleaning up patches before I can
+install them).
+
+ Please send patches directly to the GDB maintainers at
+`gdb-patches@cygnus.com'.
+
+Obsolete Conditionals
+=====================
+
+ Fragments of old code in GDB sometimes reference or set the following
+configuration macros. They should not be used by new code, and old uses
+should be removed as those parts of the debugger are otherwise touched.
+
+`STACK_END_ADDR'
+ This macro used to define where the end of the stack appeared, for
+ use in interpreting core file formats that don't record this
+ address in the core file itself. This information is now
+ configured in BFD, and GDB gets the info portably from there. The
+ values in GDB's configuration files should be moved into BFD
+ configuration files (if needed there), and deleted from all of
+ GDB's config files.
+
+ Any `FOO-xdep.c' file that references STACK_END_ADDR is so old
+ that it has never been converted to use BFD. Now that's old!
+
+`PYRAMID_CONTROL_FRAME_DEBUGGING'
+ pyr-xdep.c
+
+`PYRAMID_CORE'
+ pyr-xdep.c
+
+`PYRAMID_PTRACE'
+ pyr-xdep.c
+
+`REG_STACK_SEGMENT'
+ exec.c
+
+