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 xxx (e.g.
`sun4'), and its full three-part configuration name is
xarch-xvend-xos
(e.g. `sparc-sun-sunos4'). In
particular:
In the top level directory, edit `config.sub' and add xarch,
xvend, and xos to the lists of supported architectures,
vendors, and operating systems near the bottom of the file. Also, add
xxx as an alias that maps to
xarch-xvend-xos
. You can test your changes by
running
./config.sub xxx
and
./config.sub xarch-xvend-xos
which should both respond with xarch-xvend-xos
and no error messages.
Now, go to the `bfd' directory and create a new file `bfd/hosts/h-xxx.h'. Examine the other `h-*.h' files as templates, and create one that brings in the right include files for your system, and defines any host-specific macros needed by BFD, the Binutils, GNU LD, or the Opcodes directories. (They all share the bfd `hosts' directory and the `configure.host' file.)
Then edit `bfd/configure.host'. Add a line to recognize your
xarch-xvend-xos
configuration, and set
my_host
to xxx when you recognize it. This will cause your
file `h-xxx.h' to be linked to `sysdep.h' at configuration
time. When creating the line that recognizes your configuration,
only match the fields that you really need to match; e.g. don't
match the architecture or manufacturer if the OS is sufficient
to distinguish the configuration that your `h-xxx.h' file supports.
Don't match the manufacturer name unless you really need to.
This should make future ports easier.
Also, if this host requires any changes to the Makefile, create a file `bfd/config/xxx.mh', which includes the required lines.
It's possible that the `libiberty' and `readline' directories won't need any changes for your configuration, but if they do, you can change the `configure.in' file there to recognize your system and map to an `mh-xxx' file. Then add `mh-xxx' to the `config/' subdirectory, to set any makefile variables you need. The only current options in there are things like `-DSYSV'. (This `mh-xxx' naming convention differs from elsewhere in GDB, by historical accident. It should be cleaned up so that all such files are called `xxx.mh'.)
Aha! Now to configure GDB itself! Edit
`gdb/configure.in' to recognize your system and set gdb_host
to xxx, and (unless your desired target is already available) also
set gdb_target
to something appropriate (for instance,
xxx). To handle new hosts, modify the segment after the comment
`# per-host'; to handle new targets, modify after `#
per-target'.
Finally, you'll need to specify and define GDB's host-, native-, and target-dependent `.h' and `.c' files used for your configuration; the next two chapters discuss those.